diff --git a/.coveragerc b/.coveragerc index fdd2cad6..6347d80b 100644 --- a/.coveragerc +++ b/.coveragerc @@ -1,2 +1,4 @@ [report] -omit = pelican/tests/* +omit = + pelican/tests/* + pelican/signals.py diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index 0d92c9d9..df6e6f61 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -5,3 +5,17 @@ cabdb26cee66e1173cf16cb31d3fe5f9fa4392e7 ecd598f293161a52564aa6e8dfdcc8284dc93970 # Apply Ruff and pyupgrade to Jinja templates db241feaa445375dc05e189e69287000ffe5fa8e +# Change pre-commit to run ruff and ruff-format with fixes +6d8597addb17d5fa3027ead91427939e8e4e89ec +# Upgrade Ruff from 0.1.x to 0.4.x +0bd02c00c078fe041b65fbf4eab13601bb42676d +# Apply more Ruff checks to code +9d30c5608a58d202b1c02d55651e6ac746bfb173 +# Apply yet more Ruff checks to code +7577dd7603f7cb3a09922d1edb65b6eafb6e2ac7 +# Indent Jinja templates, HTML, CSS, and JS via DjHTML +4af40e80772a58eac8969360e5caeb99e3e26e78 +# Ruff UP031: Use F-string format specifiers instead of percent format +30bde3823f50b9ba8ac5996c1c46bb72031aa6b8 +# Upgrade Ruff to 0.12.x & comply with new rules +4dedf1795831db99d18941c707923ba48cc28ce7 diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 00000000..0fbd850c --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +.github/workflows/github_pages.yml @seanh diff --git a/.github/ISSUE_TEMPLATE/---bug-report.md b/.github/ISSUE_TEMPLATE/---bug-report.md index c0f9dec6..6825b61c 100644 --- a/.github/ISSUE_TEMPLATE/---bug-report.md +++ b/.github/ISSUE_TEMPLATE/---bug-report.md @@ -17,11 +17,15 @@ assignees: '' - [ ] I have read the [Filing Issues](https://docs.getpelican.com/en/latest/contribute.html#filing-issues) and subsequent “How to Get Help” sections of the documentation. +- [ ] I can reproduce this problem with stock/default settings file, theme, and sample content (as described in above “How to Get Help” sections of the documentation). - [ ] I have searched the [issues](https://github.com/getpelican/pelican/issues?q=is%3Aissue) (including closed ones) and believe that this is not a duplicate. - **OS version and name**: diff --git a/.github/ISSUE_TEMPLATE/---everything-else.md b/.github/ISSUE_TEMPLATE/---everything-else.md index fd2a58ae..23a3f7bd 100644 --- a/.github/ISSUE_TEMPLATE/---everything-else.md +++ b/.github/ISSUE_TEMPLATE/---everything-else.md @@ -8,7 +8,11 @@ assignees: '' --- - [ ] I have searched the [issues](https://github.com/getpelican/pelican/issues?q=is%3Aissue) (including closed ones) and believe that this is not a duplicate. - [ ] I have searched the [documentation](https://docs.getpelican.com/) and believe that my question is not covered. +- [ ] I have carefully read the [How to Get Help](https://docs.getpelican.com/en/latest/contribute.html#how-to-get-help) section of the documentation. ## Issue diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 9e240bd9..a07de4ab 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,6 +1,6 @@ --- # Ref: https://help.github.com/en/github/building-a-strong-community/configuring-issue-templates-for-your-repository#configuring-the-template-chooser -blank_issues_enabled: true +blank_issues_enabled: false contact_links: - name: '💬 Pelican IRC Channel' url: https://web.libera.chat/?#pelican diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..4fed5330 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,9 @@ +# See https://docs.github.com/en/free-pro-team@latest/ +# github/administering-a-repository/enabling-and-disabling-version-updates +--- +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "monthly" diff --git a/.github/workflows/github_pages.yml b/.github/workflows/github_pages.yml index ccf172b4..9c279ab1 100644 --- a/.github/workflows/github_pages.yml +++ b/.github/workflows/github_pages.yml @@ -1,3 +1,4 @@ +# Workflow for building the site and (optionally) publishing it to GitHub Pages. name: Deploy to GitHub Pages on: workflow_call: @@ -16,39 +17,83 @@ on: default: "output/" description: "Where to output the generated files (`pelican`'s `--output` option)" type: string + theme: + required: false + default: "" + description: "The GitHub repo URL of a custom theme to use, for example: 'https://github.com/seanh/sidecar.git'" + type: string + python: + required: false + default: "3.12" + description: "The version of Python to use, for example: '3.12' (to use the most recent version of Python 3.12, this is faster) or '3.12.1' (to use an exact version, slower)" + type: string + siteurl: + required: false + default: "" + description: "The base URL of your web site (Pelican's SITEURL setting). If not passed this will default to the URL of your GitHub Pages site, which is correct in most cases." + type: string + feed_domain: + required: false + default: "" + description: "The domain to be prepended to feed URLs (Pelican's FEED_DOMAIN setting). If not passed this will default to the URL of your GitHub Pages site, which is correct in most cases." + type: string + deploy: + required: false + default: true + description: "Whether to deploy the site. If true then build the site and deploy it. If false then just test that the site builds successfully but don't deploy anything." + type: boolean permissions: contents: read pages: write id-token: write -concurrency: - group: "pages" - cancel-in-progress: false jobs: build: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: - python-version: "3.11" + python-version: ${{ inputs.python }} + - name: Checkout theme + if: ${{ inputs.theme }} + run: git clone '${{ inputs.theme }}' .theme - name: Configure GitHub Pages id: pages - uses: actions/configure-pages@v3 + uses: actions/configure-pages@v5 - name: Install requirements run: pip install ${{ inputs.requirements }} - name: Build Pelican site + shell: python run: | - pelican \ - --settings "${{ inputs.settings }}" \ - --extra-settings SITEURL='"${{ steps.pages.outputs.base_url }}"' \ - --output "${{ inputs.output-path }}" + import subprocess + + cmd = "pelican" + cmd += " --settings ${{ inputs.settings }}" + cmd += " --extra-settings" + cmd += """ SITEURL='"${{ inputs.siteurl || steps.pages.outputs.base_url }}"'""" + cmd += """ FEED_DOMAIN='"${{ inputs.feed_domain || steps.pages.outputs.base_url }}"'""" + cmd += " --output ${{ inputs.output-path }}" + + if "${{ inputs.theme }}": + cmd += " --theme-path .theme" + + subprocess.run(cmd, shell=True, check=True) + - name: Fix permissions + run: | + chmod -c -R +rX "${{ inputs.output-path }}" | while read line; do + echo "::warning title=Invalid file permissions automatically fixed::$line" + done - name: Upload artifact - uses: actions/upload-pages-artifact@v2 + uses: actions/upload-pages-artifact@v3 with: path: ${{ inputs.output-path }} deploy: + concurrency: + group: "pages" + cancel-in-progress: false + if: ${{ inputs.deploy }} environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} @@ -57,4 +102,4 @@ jobs: steps: - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v2 + uses: actions/deploy-pages@v4 diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c29a08c2..9e5a877b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -15,17 +15,15 @@ jobs: strategy: matrix: os: [ubuntu, macos, windows] - python: ["3.10", "3.11", "3.12"] + python: ["3.10", "3.11", "3.12", "3.13"] include: - - os: ubuntu - python: "3.8" - os: ubuntu python: "3.9" steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python }} - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python }} cache: "pip" @@ -52,10 +50,10 @@ jobs: name: Lint runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: pdm-project/setup-pdm@v3 + - uses: actions/checkout@v4 + - uses: pdm-project/setup-pdm@v4 with: - python-version: 3.9 + python-version: "3.11" cache: true cache-dependency-path: ./pyproject.toml - name: Install dependencies @@ -64,16 +62,16 @@ jobs: - name: Run linters run: pdm lint --diff - name: Run pre-commit checks on all files - uses: pre-commit/action@v3.0.0 + uses: pre-commit/action@v3.0.1 build: name: Test build runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: pdm-project/setup-pdm@v3 + - uses: actions/checkout@v4 + - uses: pdm-project/setup-pdm@v4 with: - python-version: 3.9 + python-version: "3.11" cache: true cache-dependency-path: ./pyproject.toml - name: Install dependencies @@ -88,11 +86,11 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: - python-version: "3.9" + python-version: "3.11" cache: "pip" cache-dependency-path: "**/requirements/*" - name: Install tox @@ -100,7 +98,7 @@ jobs: - name: Check run: tox -e docs - name: cache the docs for inspection - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: docs path: docs/_build/html/ @@ -110,21 +108,21 @@ jobs: environment: Deployment needs: [test, lint, docs, build] runs-on: ubuntu-latest - if: github.ref=='refs/heads/master' && github.event_name!='pull_request' && github.repository == 'getpelican/pelican' + if: github.ref=='refs/heads/main' && github.event_name!='pull_request' && github.repository == 'getpelican/pelican' permissions: contents: write id-token: write steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: token: ${{ secrets.GH_TOKEN }} - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: - python-version: "3.9" + python-version: "3.11" - name: Check release id: check_release diff --git a/.gitignore b/.gitignore index 473efea2..6ea22c9c 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,7 @@ *.pyc .DS_Store docs/_build -docs/fr/_build +docs/*/_build build dist tags @@ -17,4 +17,13 @@ samples/output *.pem *.lock .pdm-python +.vale .venv +**/LC_MESSAGES/*.mo + +# direnv +.envrc + +# IDE cruft +.idea +.vscode diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 333bc3c0..38287df9 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -2,7 +2,7 @@ # See https://pre-commit.com/hooks.html for info on hooks repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.5.0 + rev: v5.0.0 hooks: - id: check-added-large-files - id: check-ast @@ -13,11 +13,18 @@ repos: - id: end-of-file-fixer - id: forbid-new-submodules - id: trailing-whitespace - - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.1.5 - hooks: - - id: ruff - - id: ruff-format - args: ["--check"] -exclude: ^pelican/tests/output/ + - repo: https://github.com/astral-sh/ruff-pre-commit + # ruff version should match the one in pyproject.toml + rev: v0.12.2 + hooks: + - id: ruff-check + args: [--fix, --exit-non-zero-on-fix] + - id: ruff-format + + - repo: https://github.com/rtts/djhtml + rev: '3.0.8' + hooks: + - id: djhtml + - id: djcss + - id: djjs diff --git a/.vale.ini b/.vale.ini new file mode 100644 index 00000000..aad18229 --- /dev/null +++ b/.vale.ini @@ -0,0 +1,10 @@ +StylesPath = .vale/styles + +Vocab = Pelican + +MinAlertLevel = suggestion + +Packages = proselint, alex + +[*] +BasedOnStyles = Vale, proselint, alex diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index 4faace91..5ac5f0ad 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -24,7 +24,7 @@ Before you ask for help, please make sure you do the following: 3. Try reproducing the issue in a clean environment, ensuring you are using: -* latest Pelican release (or an up-to-date Git clone of Pelican master) +* latest Pelican release (or an up-to-date Git clone of Pelican ``main`` branch) * latest releases of libraries used by Pelican * no plugins or only those related to the issue @@ -87,7 +87,7 @@ Using Git and GitHub -------------------- * `Create a new branch`_ specific to your change (as opposed to making - your commits in the master branch). + your commits in the ``main`` branch). * **Don't put multiple unrelated fixes/features in the same branch / pull request.** For example, if you're working on a new feature and find a bugfix that doesn't *require* your new feature, **make a new distinct branch and pull diff --git a/README.rst b/README.rst index 3f708242..0e3577ec 100644 --- a/README.rst +++ b/README.rst @@ -64,8 +64,8 @@ Why the name “Pelican”? .. _`Pelican's internals`: https://docs.getpelican.com/en/latest/internals.html .. _`hosted on GitHub`: https://github.com/getpelican/pelican -.. |build-status| image:: https://img.shields.io/github/actions/workflow/status/getpelican/pelican/main.yml?branch=master - :target: https://github.com/getpelican/pelican/actions/workflows/main.yml?query=branch%3Amaster +.. |build-status| image:: https://img.shields.io/github/actions/workflow/status/getpelican/pelican/main.yml?branch=main + :target: https://github.com/getpelican/pelican/actions/workflows/main.yml?query=branch%3Amain :alt: GitHub Actions CI: continuous integration status .. |pypi-version| image:: https://img.shields.io/pypi/v/pelican.svg :target: https://pypi.org/project/pelican/ diff --git a/docs/_templates/page.html b/docs/_templates/page.html index 233f43ad..0fbfdf7d 100644 --- a/docs/_templates/page.html +++ b/docs/_templates/page.html @@ -1,201 +1,201 @@ {% extends "base.html" %} {% block body -%} -{{ super() }} -{% include "partials/icons.html" %} + {{ super() }} + {% include "partials/icons.html" %} - - - - + + + + -{% if theme_announcement -%} -
- -
-{%- endif %} + {% if theme_announcement -%} +
+ +
+ {%- endif %} -
-
-
- -
- -
-
- +
+
+
+
- -
-
- -
-
-
- - - - - {% trans %}Back to top{% endtrans %} - -
- {% if theme_top_of_page_button == "edit" -%} - {%- include "components/edit-this-page.html" with context -%} - {%- elif theme_top_of_page_button != None -%} - {{ warning("Got an unsupported value for 'top_of_page_button'") }} - {%- endif -%} - {#- Theme toggle -#} -
- -
- +
+
+
-
- {% block content %}{{ body }}{% endblock %} -
+
-
- {% block footer %} - -
-
- {%- if show_copyright %} - - {%- endif %} - {%- if last_updated -%} -
- {% trans last_updated=last_updated|e -%} - Last updated on {{ last_updated }} - {%- endtrans -%} -
- {%- endif %} + +
-
- +
+
+
+ + + + + {% trans %}Back to top{% endtrans %} + +
+ {% if theme_top_of_page_button == "edit" -%} + {%- include "components/edit-this-page.html" with context -%} + {%- elif theme_top_of_page_button != None -%} + {{ warning("Got an unsupported value for 'top_of_page_button'") }} + {%- endif -%} + {#- Theme toggle -#} +
+ +
+ +
+
+ {% block content %}{{ body }}{% endblock %} +
+
+ +
+ +
-
{%- endblock %} diff --git a/docs/changelog.rst b/docs/changelog.rst index 98da5b20..b82faaa3 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -1,6 +1,47 @@ Release history ############### +4.11.0 - 2025-01-15 +=================== + +- Add setting to selectively omit Typogrify filters `(#3439) `_ +- Add more blocks to the Simple theme’s base template, making it easier to create new themes by inheriting from the Simple theme `(#3405) `_ +- Fix auto-reload behavior upon changes to the theme, content or settings. Make default ``IGNORE_FILES`` recursively ignore all hidden files as well as the `default filters `_ from ``watchfiles.DefaultFilter``. `(#3441) `_ +- Get current year from the ``SOURCE_DATE_EPOCH`` environment variable, if available `(#3430) `_ +- Add Python 3.13 to test matrix and remove Python 3.8 `(#3435) `_ +- Require Typogrify 2.1+ and Pygments <2.19 + +4.10.2 - 2024-11-27 +=================== + +- Change ``IGNORE_FILES`` setting default to ignore all hidden files +- Fix ``SUMMARY_MAX_PARAGRAPHS`` not being respected in some combinations with ``SUMMARY_MAX_LENGTH`` + +4.10.1 - 2024-09-28 +=================== + +- Fix error when running ``pelican -r -l`` +- Fix symlink handling in ``pelican-themes`` + +4.10.0 - 2024-09-16 +=================== + +- Add setting to specify summary via paragraph count +- Add new status to skip generation of a post +- Add setting to append ``ref`` parameter to links in feeds +- Configure logging handler via ``--log-handler`` CLI option +- Resolve intra-site links in summaries +- Warn when files are not processed due to disabled readers +- Add Medium post importer +- Improve GitHub Pages workflow +- Improve code test coverage +- Translate documentation into Simplified Chinese + +4.9.1 - 2023-11-15 +================== + +* Ensure ``tzdata`` dependency is installed on Windows + 4.9.0 - 2023-11-12 ================== diff --git a/docs/conf.py b/docs/conf.py index 8d8078a2..e335e73c 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -1,6 +1,7 @@ import datetime import os import sys +import time if sys.version_info >= (3, 11): import tomllib @@ -19,24 +20,28 @@ with open("../pyproject.toml", "rb") as f: # -- General configuration ---------------------------------------------------- templates_path = ["_templates"] +locale_dirs = ["locale/"] +gettext_compact = False +gettext_uuid = True extensions = [ "sphinx.ext.autodoc", - "sphinx.ext.ifconfig", "sphinx.ext.extlinks", "sphinxext.opengraph", ] source_suffix = ".rst" master_doc = "index" project = project_data.get("name").upper() -year = datetime.datetime.now().date().year -copyright = f"2010–{year}" +year = datetime.datetime.fromtimestamp( + int(os.environ.get("SOURCE_DATE_EPOCH", time.time())), datetime.timezone.utc +).year +project_copyright = f"2010–{year}" # noqa: RUF001 exclude_patterns = ["_build"] release = project_data.get("version") version = ".".join(release.split(".")[:1]) last_stable = project_data.get("version") rst_prolog = f""" .. |last_stable| replace:: :pelican-doc:`{last_stable}` -.. |min_python| replace:: {project_data.get('requires-python').split(",")[0]} +.. |min_python| replace:: {project_data.get("requires-python").split(",")[0]} """ extlinks = {"pelican-doc": ("https://docs.getpelican.com/en/latest/%s.html", "%s")} diff --git a/docs/content.rst b/docs/content.rst index cacacea9..6c58aa11 100644 --- a/docs/content.rst +++ b/docs/content.rst @@ -89,7 +89,7 @@ contains a list of reserved metadata keywords: ``summary`` Brief description of content for index pages ``lang`` Content language ID (``en``, ``fr``, etc.) ``translation`` If content is a translation of another (``true`` or ``false``) -``status`` Content status: ``draft``, ``hidden``, or ``published`` +``status`` Content status: ``draft``, ``hidden``, ``skip``, or ``published`` ``template`` Name of template to use to generate content (without extension) ``save_as`` Save content to this relative file path ``url`` URL to use for this article/page @@ -162,7 +162,10 @@ author you can use ``author`` field. If you do not explicitly specify summary metadata for a given post, the ``SUMMARY_MAX_LENGTH`` setting can be used to specify how many words from the -beginning of an article are used as the summary. +beginning of an article are used as the summary. You can also use an article's +first N paragraphs as its summary using the ``SUMMARY_MAX_PARAGRAPHS`` setting. +If both settings are in use, the specified number of paragraphs will +be used but may be truncated to respect the specified maximum length. You can also extract any metadata from the filename through a regular expression to be set in the ``FILENAME_METADATA`` setting. All named groups @@ -439,8 +442,8 @@ For **Markdown**, one must rely on an extension. For example, using the `mdx_inc Importing an existing site ========================== -It is possible to import your site from WordPress, Tumblr, Dotclear, and RSS -feeds using a simple script. See :ref:`import`. +It is possible to import your site from several other blogging sites +(like WordPress, Tumblr, ..) using a simple script. See :ref:`import`. Translations ============ @@ -630,8 +633,15 @@ attribute. Hidden posts will be output to ``ARTICLE_SAVE_AS`` as expected, but are not included by default in tag, category, and author indexes, nor in the main article feed. This has the effect of creating an "unlisted" post. +Skip Posts +========== + +Posts marked with ``skip`` status are ignored entirely. They are not processed +nor output to the ``ARTICLE_SAVE_AS`` path. Such posts will similarly not be +included in indexes or feeds. + .. _W3C ISO 8601: https://www.w3.org/TR/NOTE-datetime -.. _AsciiDoc: https://www.methods.co.nz/asciidoc/ +.. _AsciiDoc: https://asciidoc.org .. _Pelican Plugins: https://github.com/pelican-plugins .. _pelican-plugins: https://github.com/getpelican/pelican-plugins .. _Python-Markdown: https://github.com/Python-Markdown/markdown diff --git a/docs/contribute.rst b/docs/contribute.rst index 6a5a417e..37b90e92 100644 --- a/docs/contribute.rst +++ b/docs/contribute.rst @@ -64,6 +64,27 @@ your bug fix or feature:: Now you can make changes to Pelican, its documentation, and/or other aspects of the project. +Setting up ``git blame`` (optional) +----------------------------------- + +``git blame`` annotates lines in a file with information about the pull request +that last modified it. Sweeping shallow changes (like formatting) can make that +information less useful, so we keep a list of such changes to be ignored. Run the +following command to set this up in your repository, adding ``--global`` if you +want this setting to apply to all repositories:: + + git config blame.ignoreRevsFile .git-blame-ignore-revs + +As noted in a `useful article`_ about ``git blame``, there are other related +settings you may find to be beneficial:: + + # Add `?` to any lines that have had a commit skipped using --ignore-rev + git config --global blame.markIgnoredLines true + # Add `*` to any lines that were added in a skipped commit and can not be attributed + git config --global blame.markUnblamableLines true + +.. _useful article: https://www.michaelheap.com/git-ignore-rev/ + Running the test suite ---------------------- @@ -82,9 +103,14 @@ lines you changed conform to code style guidelines. You can check that via:: invoke lint +If style violations are found, many of them can be addressed automatically via:: + + invoke lint --fix + invoke format + If code style violations are found in lines you changed, correct those lines -and re-run the above lint command until they have all been fixed. You do not -need to address style violations, if any, for code lines you did not touch. +and re-run the ``invoke lint`` command until they have all been fixed. You do +not need to address style violations, if any, for code lines you did not touch. After making your changes and running the tests, you may see a test failure mentioning that "some generated files differ from the expected functional tests @@ -108,6 +134,21 @@ environments. .. _Tox: https://tox.readthedocs.io/en/latest/ +Running a code coverage report +------------------------------ + +Code is more likely to stay robust if it is tested. Coverage_ is a library that +measures how much of the code is tested. To run it:: + + invoke coverage + +This will show overall coverage, coverage per file, and even line-by-line coverage. +There is also an HTML report available:: + + open htmlcov/index.html + +.. _Coverage: https://github.com/nedbat/coveragepy + Building the docs ----------------- @@ -158,6 +199,7 @@ check for code style compliance via:: If style violations are found, many of them can be addressed automatically via:: + invoke lint --fix invoke format If style violations are found even after running the above auto-formatters, diff --git a/docs/faq.rst b/docs/faq.rst index cecc1157..dc6097c8 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -64,6 +64,19 @@ How do I create my own theme? Please refer to :ref:`theming-pelican`. +Can I override individual templates without forking the whole theme? +==================================================================== + +Yes, you can override existing templates of the theme that you are using, or +add new templates, via the ``THEME_TEMPLATES_OVERRIDES`` variable. For example, +to override the page template, you can define the location for your templates +like this:: + + THEME_TEMPLATES_OVERRIDES = ["templates"] + +You can then define a custom template in ``templates/page.html``. +See :ref:`settings/themes` for details. + I want to use Markdown, but I got an error. =========================================== @@ -99,6 +112,15 @@ If you want to include metadata in templates outside the article context (e.g., {% if article and article.modified %} +How do I make my output folder structure identical to my content hierarchy? +=========================================================================== + +Try these settings:: + + USE_FOLDER_AS_CATEGORY = False + PATH_METADATA = r"(?P.*)\..*" + ARTICLE_URL = ARTICLE_SAVE_AS = PAGE_URL = PAGE_SAVE_AS = "{path_no_ext}.html" + How do I assign custom templates on a per-page basis? ===================================================== @@ -113,7 +135,8 @@ For content in Markdown format:: Template: template_name Then just make sure your theme contains the relevant template file (e.g. -``template_name.html``). +``template_name.html``). If you just want to add a new custom template to an +existing theme, you can also provide it in a directory specified by ``THEME_TEMPLATES_OVERRIDES`` (see :ref:`settings/themes`). How can I override the generated URL of a specific page or article? =================================================================== diff --git a/docs/importer.rst b/docs/importer.rst index 997a4632..49d6db24 100644 --- a/docs/importer.rst +++ b/docs/importer.rst @@ -11,6 +11,7 @@ software to reStructuredText or Markdown. The supported import formats are: - Blogger XML export - Dotclear export +- Medium export - Tumblr API - WordPress XML export - RSS/Atom feed @@ -26,6 +27,12 @@ not be converted (as Pelican also supports Markdown). manually, or use a plugin such as `More Categories`_ that enables multiple categories per article. +.. note:: + + Imported pages may contain links to images that still point to the original site. + So you might want to download those images into your local content and manually + re-link them from the relevant pages of your site. + Dependencies ============ @@ -65,6 +72,7 @@ Optional arguments -h, --help Show this help message and exit --blogger Blogger XML export (default: False) --dotclear Dotclear export (default: False) + --medium Medium export (default: False) --tumblr Tumblr API (default: False) --wpfile WordPress XML export (default: False) --feed Feed to parse (default: False) @@ -80,8 +88,7 @@ Optional arguments (default: False) --filter-author Import only post from the specified author --strip-raw Strip raw HTML code that can't be converted to markup - such as flash embeds or iframes (wordpress import - only) (default: False) + such as flash embeds or iframes (default: False) --wp-custpost Put wordpress custom post types in directories. If used with --dir-cat option directories will be created as "/post_type/category/" (wordpress import only) @@ -113,6 +120,14 @@ For Dotclear:: $ pelican-import --dotclear -o ~/output ~/backup.txt +For Medium:: + + $ pelican-import --medium -o ~/output ~/medium-export/posts/ + +The Medium export is a zip file. Unzip it, and point this tool to the +"posts" subdirectory. For more information on how to export, see +https://help.medium.com/hc/en-us/articles/115004745787-Export-your-account-data. + For Tumblr:: $ pelican-import --tumblr -o ~/output --blogname= @@ -121,6 +136,15 @@ For WordPress:: $ pelican-import --wpfile -o ~/output ~/posts.xml +For Medium (an example of using an RSS feed): + + $ python -m pip install feedparser + $ pelican-import --feed https://medium.com/feed/@username + +.. note:: + + The RSS feed may only return the most recent posts — not all of them. + Tests ===== diff --git a/docs/index.rst b/docs/index.rst index 60591482..159ea3be 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,15 +1,6 @@ Pelican |release| ================= - -.. ifconfig:: release.endswith('.dev') - - .. warning:: - - This documentation is for the version of Pelican currently under - development. Were you looking for version |last_stable| documentation? - - Pelican is a static site generator, written in Python_. Highlights include: * Write your content directly with your editor of choice in reStructuredText_ diff --git a/docs/install.rst b/docs/install.rst index aa3c92d0..502148ed 100644 --- a/docs/install.rst +++ b/docs/install.rst @@ -25,10 +25,10 @@ session and create a new virtual environment for Pelican:: Once the virtual environment has been created and activated, Pelican can be installed via ``python -m pip install pelican`` as noted above. Alternatively, if you -have the project source, you can install Pelican using the distutils method:: +have the project source, you can install Pelican using the setuptools method:: cd path-to-Pelican-source - python setup.py install + python -m pip install . If you have Git installed and prefer to install the latest bleeding-edge version of Pelican rather than a stable release, use the following command:: diff --git a/docs/locale/zh_CN/LC_MESSAGES/changelog.po b/docs/locale/zh_CN/LC_MESSAGES/changelog.po new file mode 100644 index 00000000..94392a8d --- /dev/null +++ b/docs/locale/zh_CN/LC_MESSAGES/changelog.po @@ -0,0 +1,1789 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2010–2024 +# This file is distributed under the same license as the PELICAN package. +# FIRST AUTHOR , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: PELICAN 4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-07-13 11:46+0800\n" +"PO-Revision-Date: 2024-06-27 19:00+0800\n" +"Last-Translator: GeorgeHu \n" +"Language: zh_CN\n" +"Language-Team: \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.17.0\n" + +#: ../../changelog.rst:2 0742e96cabd04fc99355bbfa66fcb719 +msgid "Release history" +msgstr "更新日志" + +#: ../../changelog.rst:5 2a6b4d6833884393bf6eb0f664f07027 +msgid "4.11.0 - 2025-01-15" +msgstr "" + +#: ../../changelog.rst:7 eb554022ed4445b4886e5fb7b1ffda48 +msgid "" +"Add setting to selectively omit Typogrify filters `(#3439) " +"`_" +msgstr "" + +#: ../../changelog.rst:8 b4296b7abe7a411faedd991310af951f +msgid "" +"Add more blocks to the Simple theme’s base template, making it easier to " +"create new themes by inheriting from the Simple theme `(#3405) " +"`_" +msgstr "" + +#: ../../changelog.rst:9 da7911e453434d5fa2a24bb9bad85d5f +msgid "" +"Fix auto-reload behavior upon changes to the theme, content or settings. " +"Make default ``IGNORE_FILES`` recursively ignore all hidden files as well" +" as the `default filters " +"`_" +" from ``watchfiles.DefaultFilter``. `(#3441) " +"`_" +msgstr "" + +#: ../../changelog.rst:10 ad022a2dbbe74c28ab78757f64791daa +msgid "" +"Get current year from the ``SOURCE_DATE_EPOCH`` environment variable, if " +"available `(#3430) `_" +msgstr "" + +#: ../../changelog.rst:11 c7270f10045541f992ea76f9b8f938bc +msgid "" +"Add Python 3.13 to test matrix and remove Python 3.8 `(#3435) " +"`_" +msgstr "" + +#: ../../changelog.rst:12 c913ff7038e2445e831be08ce7a2d95f +msgid "Require Typogrify 2.1+ and Pygments <2.19" +msgstr "" + +#: ../../changelog.rst:15 47b916504e6c4a33a499718574212ed2 +msgid "4.10.2 - 2024-11-27" +msgstr "" + +#: ../../changelog.rst:17 6ccca5efc34c43fc9e6549ce27d07b1a +msgid "Change ``IGNORE_FILES`` setting default to ignore all hidden files" +msgstr "" + +#: ../../changelog.rst:18 b541de728f0d4480bf6a3cb93a331134 +msgid "" +"Fix ``SUMMARY_MAX_PARAGRAPHS`` not being respected in some combinations " +"with ``SUMMARY_MAX_LENGTH``" +msgstr "" + +#: ../../changelog.rst:21 47b916504e6c4a33a499718574212ed2 +msgid "4.10.1 - 2024-09-28" +msgstr "" + +#: ../../changelog.rst:23 33731d204a8f42d6972a5b41035bf6fa +msgid "Fix error when running ``pelican -r -l``" +msgstr "" + +#: ../../changelog.rst:24 0c82e22bd70f497880747a23445a279e +msgid "Fix symlink handling in ``pelican-themes``" +msgstr "" + +#: ../../changelog.rst:27 2a6b4d6833884393bf6eb0f664f07027 +msgid "4.10.0 - 2024-09-16" +msgstr "" + +#: ../../changelog.rst:29 c5b7388ced0246df9383968b896cee1d +msgid "Add setting to specify summary via paragraph count" +msgstr "" + +#: ../../changelog.rst:30 55bef71482124d7ba15dcc13def666b4 +msgid "Add new status to skip generation of a post" +msgstr "" + +#: ../../changelog.rst:31 74aa099718c64ec3864fb4b54e8c7e7b +msgid "Add setting to append ``ref`` parameter to links in feeds" +msgstr "" + +#: ../../changelog.rst:32 be0d21b2ffd648f9aad935e95fa2e9b2 +msgid "Configure logging handler via ``--log-handler`` CLI option" +msgstr "" + +#: ../../changelog.rst:33 f582b79f9b19462988607337626e92e8 +msgid "Resolve intra-site links in summaries" +msgstr "" + +#: ../../changelog.rst:34 00e8752d88364591a1e7844b3605963c +msgid "Warn when files are not processed due to disabled readers" +msgstr "" + +#: ../../changelog.rst:35 0de52c3ba40b44f0816cc8dabf7913ab +msgid "Add Medium post importer" +msgstr "" + +#: ../../changelog.rst:36 051bf922a7304dd798e894ddcfb64635 +msgid "Improve GitHub Pages workflow" +msgstr "" + +#: ../../changelog.rst:37 7db880406e9540de9b2d5b023cc10147 +msgid "Improve code test coverage" +msgstr "" + +#: ../../changelog.rst:38 c4327d2df9e34af384a4b0c96031e7e1 +msgid "Translate documentation into Simplified Chinese" +msgstr "" + +#: ../../changelog.rst:41 75bd952da32744868b68714fa89d62ec +msgid "4.9.1 - 2023-11-15" +msgstr "" + +#: ../../changelog.rst:43 f896a982ada348e3bf763a9cf620d432 +msgid "Ensure ``tzdata`` dependency is installed on Windows" +msgstr "" + +#: ../../changelog.rst:46 f7893a294e2c4c44bd82d68283421096 +msgid "4.9.0 - 2023-11-12" +msgstr "" + +#: ../../changelog.rst:48 3fc89471c16044349176c6bf58daef61 +msgid "Upgrade code to new minimum supported Python version: 3.8" +msgstr "" + +#: ../../changelog.rst:49 361eb8523ae54e6c965c4957d5af9a0b +msgid "" +"Settings support for ``pathlib.Path`` `(#2758) " +"`_" +msgstr "" + +#: ../../changelog.rst:50 7ea2147f8b6c4bc1af0e926b897fbbc7 +msgid "" +"Various improvements to Simple theme (`#2976 " +"`_ & `#3234 " +"`_)" +msgstr "" + +#: ../../changelog.rst:51 fc0e0bb6fd8a49bca130f352208d4e65 +msgid "" +"Use Furo as Sphinx documentation theme `(#3023) " +"`_" +msgstr "" + +#: ../../changelog.rst:52 1767e84116304b62bff9c66576c8b530 +msgid "" +"Default to 100 articles maximum in feeds `(#3127) " +"`_" +msgstr "" + +#: ../../changelog.rst:53 1f42290cb97f4c22b71b49bfd4e1d763 +msgid "" +"Add ``period_archives common context`` variable `(#3148) " +"`_" +msgstr "" + +#: ../../changelog.rst:54 8e70999f32d743d8be9d7a09a7b8440e +msgid "" +"Use ``watchfiles`` as the file-watching backend `(#3151) " +"`_" +msgstr "" + +#: ../../changelog.rst:55 eb554022ed4445b4886e5fb7b1ffda48 +msgid "" +"Add GitHub Actions workflow for GitHub Pages `(#3189) " +"`_" +msgstr "" + +#: ../../changelog.rst:56 aee78c33fc074a5aa2a3e7b6b074a2d1 +msgid "" +"Allow dataclasses in settings `(#3204) " +"`_" +msgstr "" + +#: ../../changelog.rst:57 b302dcfa9ab347c7a4190e35a2fec468 +msgid "" +"Switch build tool to PDM instead of Setuptools/Poetry `(#3220) " +"`_" +msgstr "" + +#: ../../changelog.rst:58 39c35ce577d6418ebe1bdb8bd83855da +msgid "" +"Provide a ``plugin_enabled`` Jinja test for themes `(#3235) " +"`_" +msgstr "" + +#: ../../changelog.rst:59 10520c5ebec34d02996410cc1d611162 +msgid "" +"Preserve connection order in Blinker `(#3238) " +"`_" +msgstr "" + +#: ../../changelog.rst:60 e3e01fbe72ff48578ee636044d930861 +msgid "" +"Remove social icons from default ``notmyidea`` theme `(#3240) " +"`_" +msgstr "" + +#: ../../changelog.rst:61 0e0d4fc6f77947a79bc3864dbcfd3025 +msgid "" +"Remove unreliable ``WRITE_SELECTED`` feature `(#3243) " +"`_" +msgstr "" + +#: ../../changelog.rst:62 3945b50f56c849e8b756418a049e8bd5 +msgid "" +"Importer: Report broken embedded video links when importing from Tumblr " +"`(#3177) `_" +msgstr "" + +#: ../../changelog.rst:63 91a65ac386d64de293807b14a1ee66c1 +msgid "" +"Importer: Remove newline addition when iterating Photo post types " +"`(#3178) `_" +msgstr "" + +#: ../../changelog.rst:64 5965fc057a0a4c94a2507956a2227789 +msgid "" +"Importer: Force timestamp conversion in Tumblr importer to be UTC with " +"offset `(#3221) `_" +msgstr "" + +#: ../../changelog.rst:65 f4a79028bfa946debc9a6924670e5456 +msgid "" +"Importer: Use tempfile for intermediate HTML file for Pandoc `(#3221) " +"`_" +msgstr "" + +#: ../../changelog.rst:66 ac3ff1ef109f49898c54eb75bb9d4bf3 +msgid "" +"Switch linters to Ruff `(#3223) " +"`_" +msgstr "" + +#: ../../changelog.rst:69 87b5ee37dea84dce9c75361f533e8057 +msgid "4.8.0 - 2022-07-11" +msgstr "" + +#: ../../changelog.rst:71 858d9945de86466eb1507d7859efc304 +msgid "" +"Use JSON values for extra settings in Invoke tasks template `(#2994) " +"`_" +msgstr "" + +#: ../../changelog.rst:72 ad022a2dbbe74c28ab78757f64791daa +msgid "" +"Add content tag for links, which can help with things like Twitter social" +" cards `(#3001) `_" +msgstr "" + +#: ../../changelog.rst:73 889f590d0fda46dbb6a14336644f265e +msgid "" +"Improve word count behavior when generating summary `(#3002) " +"`_" +msgstr "" + +#: ../../changelog.rst:76 c6c9bfd44396439c8e3a04b083dfc9b3 +msgid "4.7.2 - 2022-02-09" +msgstr "" + +#: ../../changelog.rst:78 21432dcec96e438c8f21de585540e9b9 +msgid "" +"Fix incorrect parsing of parameters specified via `-e` / `--extra-" +"settings` option flags `(#2938) " +"`_" +msgstr "" + +#: ../../changelog.rst:79 250cb0b205ea4bc091bcbfa18a688398 +msgid "" +"Add ``categories.html`` template to default theme `(#2973) " +"`_" +msgstr "" + +#: ../../changelog.rst:80 f404aaef8abe40d89a8394f71043767b +msgid "" +"Document how to use plugins to inject content `(#2922) " +"`_" +msgstr "" + +#: ../../changelog.rst:83 ea47463991054e678639e2d5afee8733 +msgid "4.7.1 - 2021-10-12" +msgstr "" + +#: ../../changelog.rst:85 52f38102dca542dcaa5e901ba9cff484 +msgid "" +"Extend rich logging to server component `(#2927) " +"`_" +msgstr "" + +#: ../../changelog.rst:86 e2f47cedaac946b6b3877063c1531849 +msgid "" +"Fix an issue where metadata flagged to be discarded was being cached " +"`(#2926) `_" +msgstr "" + +#: ../../changelog.rst:87 c7270f10045541f992ea76f9b8f938bc +msgid "" +"Adjust suffix in server to allow redirection when needed `(#2931) " +"`_" +msgstr "" + +#: ../../changelog.rst:88 25eecc81230442e8be149c26afebcba8 +msgid "" +"Add MIME types for web fonts `(#2929) " +"`_" +msgstr "" + +#: ../../changelog.rst:89 28bdcfa53bcf4bf5908acd39b88b1264 +msgid "" +"Distribute sample data used to run tests `(#2935) " +"`_" +msgstr "" + +#: ../../changelog.rst:90 90855b72a6744760a57195ca0566401c +msgid "Add Python 3.10 to test matrix" +msgstr "" + +#: ../../changelog.rst:93 a5d1ee359c9a472bac01a3c953358994 +msgid "4.7.0 - 2021-10-01" +msgstr "" + +#: ../../changelog.rst:95 1b28838f5000456aa396f8768c307102 +msgid "" +"Improve default theme rendering on mobile and other small screen devices " +"`(#2914) `_" +msgstr "" + +#: ../../changelog.rst:96 e080e2f741464f92b7d988da7e3dba5d +msgid "" +"Add support for hidden articles `(#2866) " +"`_" +msgstr "" + +#: ../../changelog.rst:97 71036c834cc4480ba38566d039d9b50a +msgid "" +"Improve word count behavior when generating summary CJK & other locales " +"`(#2864) `_" +msgstr "" + +#: ../../changelog.rst:98 dad2c8c0f0d84a4db5b0139e8dc4bec8 +msgid "" +"Add progress spinner during generation `(#2869) " +"`_ and richer logging " +"`(#2897) `_, both via " +"`Rich `_" +msgstr "" + +#: ../../changelog.rst:100 ad420f41f0fb44809f0f88d2638ed6b9 +msgid "" +"Invoke tasks ``serve`` and ``livereload`` now auto-open a web browser " +"pointing to the locally-served web site `(#2764) " +"`_" +msgstr "" + +#: ../../changelog.rst:101 34794ceaec054ec4b47706297e65a498 +msgid "" +"Support some date format codes used by ISO dates `(#2902) " +"`_" +msgstr "" + +#: ../../changelog.rst:102 cd9520f44e004be6a7d7fb27032d37a6 +msgid "" +"Document how to add a new writer `(#2901) " +"`_" +msgstr "" + +#: ../../changelog.rst:105 278990583126431793bd184ef69e4315 +msgid "4.6.0 - 2021-03-23" +msgstr "" + +#: ../../changelog.rst:107 a7a02445adbd4dd58d066f6f8fa5810b +msgid "" +"Add new URL pattern to ``PAGINATION_PATTERNS`` for the last page in the " +"list `(#1401) `_" +msgstr "" + +#: ../../changelog.rst:108 e5e2fd04bc8a40edb8a0d1c088a95708 +msgid "" +"Speed up ``livereload`` Invoke task via caching `(#2847) " +"`_" +msgstr "" + +#: ../../changelog.rst:109 e37a383072324f98a8f5698edab71384 +msgid "" +"Ignore ``None`` return value from ``get_generators`` signal `(#2850) " +"`_" +msgstr "" + +#: ../../changelog.rst:110 ea446fad671d4e1e8b3220a35ffe170b +msgid "Relax dependency minimum versions and remove upper bounds" +msgstr "" + +#: ../../changelog.rst:113 3e38341f147e414ba7b10c339d28a0d4 +msgid "4.5.4 - 2021-01-04" +msgstr "" + +#: ../../changelog.rst:115 b4296b7abe7a411faedd991310af951f +msgid "" +"Replace plugin definitions in settings with string representations after " +"registering, so they can be cached correctly `(#2828) " +"`_." +msgstr "" + +#: ../../changelog.rst:118 7fc32eaefef846d28cd834cabfa8dee9 +msgid "4.5.3 - 2020-12-01" +msgstr "" + +#: ../../changelog.rst:120 5e0db3263ddd42bca058026426cf06e6 +msgid "Fix a mistake made in PR #2821" +msgstr "" + +#: ../../changelog.rst:123 1ef29d1cc4de42d1aa3c0c163df3514a +msgid "4.5.2 - 2020-11-22" +msgstr "" + +#: ../../changelog.rst:125 c7c77959e6d04be4a6a6c7ace8d64c0d +msgid "Improve logging of generators and writer loaders" +msgstr "" + +#: ../../changelog.rst:128 00572ddf9ed24457aedc3f744b684404 +msgid "4.5.1 - 2020-11-02" +msgstr "" + +#: ../../changelog.rst:130 85d67c71b8664cf3900c982deba934b5 +msgid "" +"Refactor intra-site link discovery in order to match more permissively " +"`(#2646) `_" +msgstr "" + +#: ../../changelog.rst:131 0ae962176dac4745a0929eac1cb0a671 +msgid "" +"Fix plugins running twice in auto-reload mode `(#2817) " +"`_" +msgstr "" + +#: ../../changelog.rst:132 6c9d2b7c8f5c40d9830f38cc39807326 +msgid "" +"Add notice to use ``from pelican import signals`` instead of ``import " +"pelican.signals`` `(#2805) " +"`_" +msgstr "" + +#: ../../changelog.rst:135 cc543240f72d4e15bafa37e8cbe86c54 +msgid "4.5.0 - 2020-08-20" +msgstr "" + +#: ../../changelog.rst:137 3b3db764e63f49c0b00d2b1cc71755f2 +msgid "Add namespace plugin support; list plugins via ``pelican-plugins`` command" +msgstr "" + +#: ../../changelog.rst:138 ad62f8bcd989447e97326c5845ec146b +msgid "Override settings via ``-e`` / ``--extra-settings`` CLI option flags" +msgstr "" + +#: ../../changelog.rst:139 f12bccb1dc904d0bbffb0d9e5291ad3d +msgid "Add settings for custom Jinja globals and tests" +msgstr "" + +#: ../../changelog.rst:140 c569ff52ef904228971c38b1a958847f +msgid "Customize article summary ellipsis via ``SUMMARY_END_SUFFIX`` setting" +msgstr "" + +#: ../../changelog.rst:141 733087bf4e14447095fb364a1d5b606f +msgid "Customize Typogrify dash handling via new ``TYPOGRIFY_DASHES`` setting" +msgstr "" + +#: ../../changelog.rst:142 9e0de47310964a99bf1ec0a87f810036 +msgid "Support Unicode when generating slugs" +msgstr "" + +#: ../../changelog.rst:143 c496a287d95b47759425578bc29d4cf3 +msgid "Support Asciidoc ``.adoc`` file generation in Pelican importer" +msgstr "" + +#: ../../changelog.rst:144 1f8597af3f9946129cfb150e9728c25c +msgid "Improve user experience when ``pelican --listen`` web server is quit" +msgstr "" + +#: ../../changelog.rst:145 418a06eb1d9d4332945b5b1729734579 +msgid "Improve Invoke tasks template" +msgstr "" + +#: ../../changelog.rst:146 8b63e2e5d29a4cde830ea8c1df058ab1 +msgid "Include tests in source distributions" +msgstr "" + +#: ../../changelog.rst:147 68105e5e919a43518ac6af8b88957e44 +msgid "Switch CI from Travis to GitHub Actions" +msgstr "" + +#: ../../changelog.rst:148 053f40c3741c4d54bc840f2ad32f34eb +msgid "Remove support for Python 2.7" +msgstr "" + +#: ../../changelog.rst:151 6190d59940dd4c57a603140e0813f9b5 +msgid "4.2.0 - 2019-10-17" +msgstr "" + +#: ../../changelog.rst:153 5f11442743c841ff91d46b643698dfa9 +msgid "Support inline SVGs; don't treat titles in SVGs as HTML titles" +msgstr "" + +#: ../../changelog.rst:154 a68bbd4f2a024c7a84c259aee8fcb621 +msgid "Add category to feeds (in addition to tags)" +msgstr "" + +#: ../../changelog.rst:155 dd3937b7cb38480a84e6a5daed48e113 +msgid "Improve content metadata field docs" +msgstr "" + +#: ../../changelog.rst:156 87030fc248dc46e5902d3e7681702351 +msgid "Add docs for including other Markdown/reST files in content" +msgstr "" + +#: ../../changelog.rst:159 85163f7808a64f7cac3dd54f98c2a2fd +msgid "4.1.3 - 2019-10-09" +msgstr "" + +#: ../../changelog.rst:161 486947a4cc584437aff9364d721eeb41 +msgid "Fix quick-start docs regarding ``pelican --listen``" +msgstr "" + +#: ../../changelog.rst:162 cf68238f21bd40b081eb670527e5ad88 +msgid "Set default listen address to 127.0.0.1" +msgstr "" + +#: ../../changelog.rst:163 21aed223e69549038ee7b840fe0e45a5 +msgid "Add extra/optional Markdown dependency to setup.py" +msgstr "" + +#: ../../changelog.rst:164 5c5c50a24bf945babe1fea501be5b672 +msgid "Use correct SSH port syntax for rsync in tasks.py" +msgstr "" + +#: ../../changelog.rst:165 cafa64aa81c94212a964ece5f6d00ea6 +msgid "Place all deprecated settings handling together" +msgstr "" + +#: ../../changelog.rst:166 92ad7248e4d848f5b9955653a132ba1d +msgid "Add related project URLs for display on PyPI" +msgstr "" + +#: ../../changelog.rst:167 f97dcb0a8c6f41ca8e6a249f975688ab +msgid "Skip some tests on Windows that can't pass due to filesystem differences" +msgstr "" + +#: ../../changelog.rst:170 cb1b18c4628a48f3a7b59e4447057291 +msgid "4.1.2 - 2019-09-23" +msgstr "" + +#: ../../changelog.rst:172 1cc7ba6aab5a43e9a3fbb04a8cf4c954 +msgid "Fix pelican.settings.load_source to avoid caching issues - PR #2621" +msgstr "" + +#: ../../changelog.rst:175 808b70fac79147a7a30cb263bfc091d5 +msgid "4.1.1 - 2019-08-23" +msgstr "" + +#: ../../changelog.rst:177 3515525c09794e3eb685696916e9b4a8 +msgid "Add AutoPub to auto-publish releases on PR merge" +msgstr "" + +#: ../../changelog.rst:178 e3958153de2543ab8af7b27e424a5199 +msgid "Add CSS classes for reStructuredText figures" +msgstr "" + +#: ../../changelog.rst:179 469aba039b0e4bb5b08bd7bc9fd455f9 +msgid "Pass ``argv`` to Pelican ``main`` entrypoint" +msgstr "" + +#: ../../changelog.rst:180 08494f27a31149a8a4e662d7160d334a +msgid "Set default content status to a blank string rather than ``None``" +msgstr "" + +#: ../../changelog.rst:183 4e7e6da9e1a94e5886de5c7bb90da964 +msgid "4.1.0 - 2019-07-14" +msgstr "" + +#: ../../changelog.rst:185 de8697dee456433f8fd5592c79dc1235 +msgid "Live browser reload upon changed files (provided via Invoke task)" +msgstr "" + +#: ../../changelog.rst:186 67db4943813d410386e77969e6aea98f +msgid "Add ``pyproject.toml``, managed by Poetry" +msgstr "" + +#: ../../changelog.rst:187 a6388203f3c44a31b2458bd0961c9e91 +msgid "Support for invoking ``python -m pelican``" +msgstr "" + +#: ../../changelog.rst:188 b526c18ddea74343b14a62d3933c31db +msgid "Add relative source path attribute to content" +msgstr "" + +#: ../../changelog.rst:189 98e5827380d24bb2b640c709ee1fa5bf +msgid "Allow directories in ``EXTRA_PATH_METADATA``" +msgstr "" + +#: ../../changelog.rst:190 7372879d036e4c19967f008fed50bcfb +msgid "" +"Add ``all_articles`` variable to period pages (for recent posts " +"functionality)" +msgstr "" + +#: ../../changelog.rst:191 8b41c0640e9a4c4ca9458eea777c6c72 +msgid "Improve debug mode output" +msgstr "" + +#: ../../changelog.rst:192 00af35668b044b6da9e934104b73eac9 +msgid "Remove blank or duplicate summaries from Atom feed" +msgstr "" + +#: ../../changelog.rst:193 97c5594b58d94c45ada8a9efdb2216c8 +msgid "" +"Fix bugs in pagination, pelican-import, pelican-quickstart, and feed " +"importer" +msgstr "" + +#: ../../changelog.rst:196 496531289a9c446c97d5e1842e5761f9 +msgid "4.0.1 (2018-11-30)" +msgstr "" + +#: ../../changelog.rst:198 48f43697fb824914a518283bab0ab39d +msgid "Refactor ``pelican.server`` logging" +msgstr "" + +#: ../../changelog.rst:199 7f431162613848738f2267518e0f435e +msgid "Fix bug in which all static files were processed as \"draft\"" +msgstr "" + +#: ../../changelog.rst:200 7c9866081cc0478aab4bcbb65f241b2b +msgid "Bug fixes for Invoke/Makefile automation, Importer, and other miscellanea" +msgstr "" + +#: ../../changelog.rst:202 b4f0a6a574f54e8baec02108e3cdf121 +#, python-brace-format, python-format +msgid "" +"If upgrading from 3.7.x or earlier, please note that slug-related " +"settings in 4.0+ use ``{slug}`` and/or ``{lang}`` rather than ``%s``. If " +"``%s``-style settings are encountered, Pelican will emit a warning and " +"fall back to the default setting. Some user-submitted themes might try to" +" format setting values but fail upon site build with a ``TypeError``. In " +"such cases, the theme needs to be updated. For example, instead of " +"``TAG_FEED_ATOM|format(tag.slug)``, use " +"``TAG_FEED_ATOM.format(slug=tag.slug)``" +msgstr "" + +#: ../../changelog.rst:211 963535bf97cb4048b11dd47fa7fe5cb1 +msgid "4.0.0 (2018-11-13)" +msgstr "" + +#: ../../changelog.rst:213 be207dbf17cc4c38ab4c8617ece18d43 +msgid "Replace ``develop_server.sh`` script with ``pelican --listen``" +msgstr "" + +#: ../../changelog.rst:214 bfeb93e653cc44b4a6e65c1b5978e0d2 +msgid "Improved copy/link behavior for large static files (e.g., videos)" +msgstr "" + +#: ../../changelog.rst:215 0f6be38dbd8942c8a8692c377624a26a +#, python-brace-format +msgid "" +"New ``{static}`` syntax to link to static content; content linked to by " +"``{static}`` and ``{attach}`` is automatically copied over even if not in" +" ``STATIC_PATHS``" +msgstr "" + +#: ../../changelog.rst:218 6d42f604ef724c72b0d691d52cced384 +msgid "Pages can now have ``draft`` status" +msgstr "" + +#: ../../changelog.rst:219 c6513f293ae04b9fb1cee4ef355de4bd +msgid "Show current settings via new ``--print-settings`` flag" +msgstr "" + +#: ../../changelog.rst:220 63636f2fc7184030bc83647b4f81d63a +#, python-brace-format, python-format +msgid "" +"All settings for slugs now use ``{slug}`` and/or ``{lang}`` rather than " +"``%s``. If ``%s``-style settings are encountered, Pelican will emit a " +"warning and fallback to the default setting." +msgstr "" + +#: ../../changelog.rst:223 594a958f9f9c495c86c4eb15ee1d353e +msgid "New signals: ``feed_generated`` and ``page_generated_write_page``" +msgstr "" + +#: ../../changelog.rst:224 4c1a13c890d04aea9bdb43ba3a85f98e +msgid "Replace Fabric with Invoke and ``fabfile.py`` template with ``tasks.py``" +msgstr "" + +#: ../../changelog.rst:225 05c5bacea3de4d159dc464bb80d3b70d +msgid "" +"Replace ``PAGINATED_DIRECT_TEMPLATES`` by ``PAGINATED_TEMPLATES``, " +"extending control over pagination to all templates and making page size " +"variable" +msgstr "" + +#: ../../changelog.rst:227 d4c57ccd147b409bafd324580546ce89 +msgid "" +"Replace ``SLUG_SUBSTITUTIONS`` (and friends) by " +"``SLUG_REGEX_SUBSTITUTIONS`` for more finegrained control" +msgstr "" + +#: ../../changelog.rst:229 5fcdd3851c4348ffb6f9f30e21d01cca +#, python-brace-format +msgid "" +"``'{base_name}'`` value in ``PAGINATION_PATTERNS`` setting no longer " +"strips ``'bar'`` from ``'foo/bar.html'`` (unless ``'bar' == 'index'``)." +msgstr "" + +#: ../../changelog.rst:231 f21a405be2434ee78cac35d1f653b6ba +msgid "" +"``ARTICLE_ORDER_BY`` and ``PAGE_ORDER_BY`` now also affect 1) category, " +"tag and author pages 2) feeds 3) draft and hidden articles and pages" +msgstr "" + +#: ../../changelog.rst:233 781dd286cb154c46a9e2036e697bcf7f +msgid "" +"New ``ARTICLE_TRANSLATION_ID`` and ``PAGE_TRANSLATION_ID`` settings to " +"specify metadata attributes used to identify/disable translations" +msgstr "" + +#: ../../changelog.rst:235 ae7fd53c1d6047eb8027016c4a00bd65 +msgid "Make the HTML reader parse multiple occurrences of metadata tags as a list" +msgstr "" + +#: ../../changelog.rst:236 dca4b981c67c42a080e5724d65ddf825 +msgid "New Blogger XML backup importer" +msgstr "" + +#: ../../changelog.rst:237 f92482bf76ec447186de98f4a471dd55 +msgid "" +"Wordpress importer now updates file links to point to local copies if the" +" files were downloaded with ``--wp-attach``." +msgstr "" + +#: ../../changelog.rst:239 0778a52f39704e629fed5df26deeaeb6 +msgid "" +"Importer no longer inserts extra newlines, to prevent breaking of HTML " +"attributes." +msgstr "" + +#: ../../changelog.rst:241 6b21bcb847014ebcb4e658aaf54fd591 +msgid "" +"Pelican server now prioritises ``foo.html`` and ``foo/index.html`` over " +"``foo/`` when resolving ``foo``." +msgstr "" + +#: ../../changelog.rst:245 d9c7906de4814a988e96a0f836121773 +msgid "3.7.1 (2017-01-10)" +msgstr "" + +#: ../../changelog.rst:247 dee875ace0cf4cf4a84e968613c64f1e +msgid "Fix locale issues in Quickstart script" +msgstr "" + +#: ../../changelog.rst:248 0735e4ab311648fba920ba433eb5c81b +msgid "Specify encoding for README and CHANGELOG in setup.py" +msgstr "" + +#: ../../changelog.rst:251 713d99ebaa1f446a857751b754b63677 +msgid "3.7.0 (2016-12-12)" +msgstr "" + +#: ../../changelog.rst:253 0330d842ba514f58965a9b625db18791 +msgid "Atom feeds output ```` in addition to ````" +msgstr "" + +#: ../../changelog.rst:254 7e5d0a914d214dbfb969b4e270f148c5 +msgid "" +"Atom feeds use ```` for the original publication date and " +"```` for modifications" +msgstr "" + +#: ../../changelog.rst:256 4f0ed4869e00418b8b16a7e692516126 +msgid "Simplify Atom feed ID generation and support URL fragments" +msgstr "" + +#: ../../changelog.rst:257 cdc742c1ed2c44a1b76a5cf7374c1374 +msgid "Produce category feeds with category-specific titles" +msgstr "" + +#: ../../changelog.rst:258 6a89fde3d1084e0d91e8b89b293a851c +msgid "" +"RSS feeds now default to summary instead of full content; set " +"``RSS_FEED_SUMMARY_ONLY = False`` to revert to previous behavior" +msgstr "" + +#: ../../changelog.rst:260 dbe1f00b9a114bf6a5e7728eb15cbfd2 +msgid "Replace ``MD_EXTENSIONS`` with ``MARKDOWN`` setting" +msgstr "" + +#: ../../changelog.rst:261 e8d183ddfb3a4b2bbb4ccc523ff1ce4d +msgid "" +"Replace ``JINJA_EXTENSIONS`` with more-robust ``JINJA_ENVIRONMENT`` " +"setting" +msgstr "" + +#: ../../changelog.rst:262 c4044fb542ce4772bc469c06f3606f88 +msgid "" +"Improve summary truncation logic to handle special characters and tags " +"that span multiple lines, using HTML parser instead of regular " +"expressions" +msgstr "" + +#: ../../changelog.rst:264 6f6a8c2b60324ad6b00feb9f492c4d45 +msgid "Include summary when looking for intra-site link substitutions" +msgstr "" + +#: ../../changelog.rst:265 e121d156b37b4f59a8846b700e1769ea +#, python-brace-format +msgid "Link to authors and index via ``{author}name`` and ``{index}`` syntax" +msgstr "" + +#: ../../changelog.rst:266 1d210456ced542c1babb622b06b2c4f4 +msgid "Override widget names via ``LINKS_WIDGET_NAME`` and ``SOCIAL_WIDGET_NAME``" +msgstr "" + +#: ../../changelog.rst:267 6104e9c05e844436b12e538008947f47 +msgid "Add ``INDEX_SAVE_AS`` option to override default ``index.html`` value" +msgstr "" + +#: ../../changelog.rst:268 0f875978cade45889a49f818c6664093 +msgid "Remove ``PAGES`` context variable for themes in favor of ``pages``" +msgstr "" + +#: ../../changelog.rst:269 bd6d148038524dbd8889ef4479115f15 +msgid "" +"``SLUG_SUBSTITUTIONS`` now accepts 3-tuple elements, allowing URL slugs " +"to contain non-alphanumeric characters" +msgstr "" + +#: ../../changelog.rst:271 84e180ffd01640e39c8a02616d665f92 +msgid "" +"Tag and category slugs can be controlled with greater precision using the" +" ``TAG_SUBSTITUTIONS`` and ``CATEGORY_SUBSTITUTIONS`` settings" +msgstr "" + +#: ../../changelog.rst:273 c42874e842584772a9c6abda4cf1d2b2 +msgid "" +"Author slugs can be controlled with greater precision using the " +"``AUTHOR_SUBSTITUTIONS`` setting" +msgstr "" + +#: ../../changelog.rst:275 c3ad7f1d581d4a848a0d80425732faaa +msgid "``DEFAULT_DATE`` can be defined as a string" +msgstr "" + +#: ../../changelog.rst:276 28824188813542f08ef3546d48faeb4d +msgid "Use ``mtime`` instead of ``ctime`` when ``DEFAULT_DATE = 'fs'``" +msgstr "" + +#: ../../changelog.rst:277 4cbfd98d99134eaba723b0a98dd38fdd +msgid "Add ``--fatal=errors|warnings`` option for use with continuous integration" +msgstr "" + +#: ../../changelog.rst:278 e0346ee13c104f26a360952f415db7ca +msgid "" +"When using generator-level caching, ensure previously-cached files are " +"processed instead of just new files." +msgstr "" + +#: ../../changelog.rst:280 3faa472e3d4440dfacb1e40b20cdbb36 +msgid "Add Python and Pelican version information to debug output" +msgstr "" + +#: ../../changelog.rst:281 7ca51c4375d641d18777b07bedb86f2c +msgid "Improve compatibility with Python 3.5" +msgstr "" + +#: ../../changelog.rst:282 cf9b150420fa47369ff0c95e8edc002b +msgid "Comply with and enforce PEP8 guidelines" +msgstr "" + +#: ../../changelog.rst:283 889cf4339a4b4d8daf520a7fb9985d8b +msgid "Replace tables in settings documentation with ``data::`` directives" +msgstr "" + +#: ../../changelog.rst:286 586aeb301e8941fcb2171458f12ad198 +msgid "3.6.3 (2015-08-14)" +msgstr "" + +#: ../../changelog.rst:288 5499ed424969406c924c504f6f62f63e +msgid "Fix permissions issue in release tarball" +msgstr "" + +#: ../../changelog.rst:291 da9c552726b940a3b07c45b4233657ce +msgid "3.6.2 (2015-08-01)" +msgstr "" + +#: ../../changelog.rst:293 d29fcc033a634d8aac8f656c5eb9674f +msgid "Fix installation errors related to Unicode in tests" +msgstr "" + +#: ../../changelog.rst:294 1276e0c3d1a9447d84e25c3ad9e7abe7 +msgid "Don't show pagination in ``notmyidea`` theme if there's only one page" +msgstr "" + +#: ../../changelog.rst:295 c12da2ed75d64539af457cd49216fd7b +msgid "Make hidden pages available in context" +msgstr "" + +#: ../../changelog.rst:296 22195be7d66d49b5a2536d4125dbb247 +msgid "Improve URLWrapper comparison" +msgstr "" + +#: ../../changelog.rst:299 3fa9c04278aa4a6daaaacf03bcbc86c4 +msgid "3.6.0 (2015-06-15)" +msgstr "" + +#: ../../changelog.rst:301 743e2686d8584c64bba2ff52de34b282 +msgid "Disable caching by default in order to prevent potential confusion" +msgstr "" + +#: ../../changelog.rst:302 5b7083ceed2642178328e7faf6c2e3d7 +msgid "Improve caching behavior, replacing ``pickle`` with ``cpickle``" +msgstr "" + +#: ../../changelog.rst:303 de23594147fd4549af0d010d938b04b1 +msgid "Allow Markdown or reST content in metadata fields other than ``summary``" +msgstr "" + +#: ../../changelog.rst:304 7d11607580c449709f22c3a7f1dd8cf1 +msgid "Support semicolon-separated author/tag lists" +msgstr "" + +#: ../../changelog.rst:305 1b78213ac5644a09b8d58bac7c132b30 +msgid "Improve flexibility of article sorting" +msgstr "" + +#: ../../changelog.rst:306 24fc473a1dcc409fbceb231cc61bf0db +msgid "Add ``--relative-urls`` argument" +msgstr "" + +#: ../../changelog.rst:307 a56f975051ca406b8ba80ed2b688316e +msgid "Support devserver listening on addresses other than localhost" +msgstr "" + +#: ../../changelog.rst:308 e1c6f89208aa43768200ae0b5cb667e4 +msgid "Unify HTTP server handlers to ``pelican.server`` throughout" +msgstr "" + +#: ../../changelog.rst:309 c2543badc27243f1aadd684351852866 +msgid "Handle intra-site links to draft posts" +msgstr "" + +#: ../../changelog.rst:310 3c111a7e2c7b43c683c7bef6a78058a7 +msgid "Move ``tag_cloud`` from core to plugin" +msgstr "" + +#: ../../changelog.rst:311 5e8d38af8ae647ba80edfb065967c18a +msgid "Load default theme's external resources via HTTPS" +msgstr "" + +#: ../../changelog.rst:312 8577b7a1315f4c0caa8a68379c7b9da6 +msgid "Import drafts from WordPress XML" +msgstr "" + +#: ../../changelog.rst:313 e2debaa9a5224d09af847e937c1446a6 +msgid "Improve support for Windows users" +msgstr "" + +#: ../../changelog.rst:314 b2042bbb92e74fe5ae51df03addf61da +msgid "Enhance logging and test suite" +msgstr "" + +#: ../../changelog.rst:315 373b2ce42e7b4b10b4302660f177b137 +msgid "Clean up and refactor codebase" +msgstr "" + +#: ../../changelog.rst:316 ad174f831fc7487c9efec8f1b1ebc937 +msgid "New signals: ``all_generators_finalized`` and ``page_writer_finalized``" +msgstr "" + +#: ../../changelog.rst:319 a0e616e94c144183bb7cd8f0d0f9f253 +msgid "3.5.0 (2014-11-04)" +msgstr "" + +#: ../../changelog.rst:321 d4c1d004789b4cfa9187a2994e2f3613 +msgid "" +"Introduce ``ARTICLE_ORDER_BY`` and ``PAGE_ORDER_BY`` settings to control " +"the order of articles and pages." +msgstr "" + +#: ../../changelog.rst:323 8532ec7e6c884d6d886c75690a860810 +msgid "Include time zone information in dates rendered in templates." +msgstr "" + +#: ../../changelog.rst:324 399b4302a06c4d71853eb69309edaec9 +msgid "Expose the reader name in the metadata for articles and pages." +msgstr "" + +#: ../../changelog.rst:325 03f44d912342475d981539bfc28e893b +#, python-brace-format +msgid "" +"Add the ability to store static files along with content in the same " +"directory as articles and pages using ``{attach}`` in the path." +msgstr "" + +#: ../../changelog.rst:327 aad755538ae5458bb0266537ce3a3488 +msgid "" +"Prevent Pelican from raising an exception when there are duplicate pieces" +" of metadata in a Markdown file." +msgstr "" + +#: ../../changelog.rst:329 6ccca5efc34c43fc9e6549ce27d07b1a +msgid "" +"Introduce the ``TYPOGRIFY_IGNORE_TAGS`` setting to add HTML tags to be " +"ignored by Typogrify." +msgstr "" + +#: ../../changelog.rst:331 3a07ce5e47fb446f935a8aef182feda9 +#, python-format +msgid "" +"Add the ability to use ``-`` in date formats to strip leading zeros. For " +"example, ``%-d/%-m/%y`` will now result in the date ``9/8/12``." +msgstr "" + +#: ../../changelog.rst:333 2b9865f51d2c431cad79bb1ad85dcf13 +msgid "" +"Ensure feed generation is correctly disabled during quickstart " +"configuration." +msgstr "" + +#: ../../changelog.rst:334 900fd70063554c06b56e0c13084c5e56 +msgid "" +"Fix ``PAGE_EXCLUDES`` and ``ARTICLE_EXCLUDES`` from incorrectly matching " +"sub-directories." +msgstr "" + +#: ../../changelog.rst:336 bef97ccdcc354bf68f7a738fefee44d0 +msgid "Introduce ``STATIC_EXCLUDE`` setting to add static file excludes." +msgstr "" + +#: ../../changelog.rst:337 96218c06cbc84b9884f17d4b3c2782d4 +msgid "" +"Fix an issue when using ``PAGINATION_PATTERNS`` while ``RELATIVE_URLS`` " +"is enabled." +msgstr "" + +#: ../../changelog.rst:339 0c2ccbc6e9e74f69912fecf3a9812535 +msgid "" +"Fix feed generation causing links to use the wrong language for month " +"names when using other locales." +msgstr "" + +#: ../../changelog.rst:341 ddc6d5315bfa4dd1888de8ff606e1efe +msgid "" +"Fix an issue where the authors list in the simple template wasn't " +"correctly formatted." +msgstr "" + +#: ../../changelog.rst:343 28013aa7b4734809bd162e47c5bded8f +msgid "Fix an issue when parsing non-string URLs from settings." +msgstr "" + +#: ../../changelog.rst:344 4fe13830f2ed4449820e4a126e29db74 +msgid "Improve consistency of debug and warning messages." +msgstr "" + +#: ../../changelog.rst:347 e412e8ca8ce94736a1bd9b64260a17c7 +msgid "3.4.0 (2014-07-01)" +msgstr "" + +#: ../../changelog.rst:349 1153f4eed1394ce3a12d65af79337222 +msgid "Speed up content generation via new caching mechanism" +msgstr "" + +#: ../../changelog.rst:350 78911d6e2e8f43ce879ae634815c16a4 +msgid "Add selective post generation (instead of always building entire site)" +msgstr "" + +#: ../../changelog.rst:351 4fe3d9df73aa40f986e1a6f7602c3b09 +msgid "Many documentation improvements, including switching to prettier RtD theme" +msgstr "" + +#: ../../changelog.rst:352 517fbe1c874c48c2ab429e1ea5633fe3 +msgid "Add support for multiple content and plugin paths" +msgstr "" + +#: ../../changelog.rst:353 ebcfb3cf3a3a4841a4e144fa186ab023 +msgid "" +"Add ``:modified:`` metadata field to complement ``:date:``. Used to " +"specify the last date and time an article was updated independently from " +"the date and time it was published." +msgstr "" + +#: ../../changelog.rst:356 350a9e23a1e24e8d927ea35835b92ca0 +msgid "Add support for multiple authors via new ``:authors:`` metadata field" +msgstr "" + +#: ../../changelog.rst:357 0b0f1d5303444f29990c75b5e071be14 +msgid "Watch for changes in static directories when in auto-regeneration mode" +msgstr "" + +#: ../../changelog.rst:358 29aafd6e485d45188d102fdb72feaafe +msgid "Add filters to limit log output when desired" +msgstr "" + +#: ../../changelog.rst:359 a77cea47df51490595f9ee1b8e05fdd1 +msgid "Add language support to drafts" +msgstr "" + +#: ../../changelog.rst:360 4bd686906beb45ddab847c0cdac33be8 +msgid "Add ``SLUGIFY_SOURCE`` setting to control how post slugs are generated" +msgstr "" + +#: ../../changelog.rst:361 6ce9976300e64d7dadb2048080424994 +msgid "Fix many issues relating to locale and encoding" +msgstr "" + +#: ../../changelog.rst:362 da577863fe4844d9b74218625a26f6ad +msgid "Apply Typogrify filter to post summary" +msgstr "" + +#: ../../changelog.rst:363 faa72319441d4e8698e29c1bf829189f +msgid "" +"Preserve file metadata (e.g. time stamps) when copying static files to " +"output" +msgstr "" + +#: ../../changelog.rst:364 d2b92229d5494bea903ad60e6a5c8335 +msgid "Move AsciiDoc support from Pelican core into separate plugin" +msgstr "" + +#: ../../changelog.rst:365 61a9b4aa9cb44033b2f4229d2b167c64 +msgid "" +"Produce inline links instead of reference-style links when importing " +"content" +msgstr "" + +#: ../../changelog.rst:366 d94f8c5cce634cc8ba784a3b59fb4819 +msgid "Improve handling of ``IGNORE_FILES`` setting behavior" +msgstr "" + +#: ../../changelog.rst:367 e3d657b677384a4588da385c9b21080a +msgid "Properly escape symbol characters in tag names (e.g., ``C++``)" +msgstr "" + +#: ../../changelog.rst:368 d519c9f50e564647987ec969d7ec0ccf +msgid "Minor tweaks for Python 3.4 compatibility" +msgstr "" + +#: ../../changelog.rst:369 5ce6f5c727f447c9a432d1fd363e2c29 +msgid "Add several new signals" +msgstr "" + +#: ../../changelog.rst:372 dae29c0187c44c27972be55b01c69ef8 +msgid "3.3.0 (2013-09-24)" +msgstr "" + +#: ../../changelog.rst:374 17fad8c0afd94ba5a3b660e70b74a282 +msgid "Drop Python 3.2 support in favor of Python 3.3" +msgstr "" + +#: ../../changelog.rst:375 ad9c00a4712845a9a13423e6b9b02a92 +msgid "" +"Add ``Fabfile`` so Fabric can be used for workflow automation instead of " +"Make" +msgstr "" + +#: ../../changelog.rst:376 cd23162f223245a685ff1a9881b8b195 +msgid "" +"``OUTPUT_RETENTION`` setting can be used to preserve metadata (e.g., VCS " +"data such as ``.hg`` and ``.git``) from being removed from output " +"directory" +msgstr "" + +#: ../../changelog.rst:378 2d4af689970445558506be64942cda4d +msgid "Tumblr import" +msgstr "" + +#: ../../changelog.rst:379 94cb151962db4a4186070048cf9a52d1 +msgid "Improve logic and consistency when cleaning output folder" +msgstr "" + +#: ../../changelog.rst:380 4f24e4305c8f49baba762604f81a009b +msgid "Improve documentation versioning and release automation" +msgstr "" + +#: ../../changelog.rst:381 fd8868d0c4ee4ec5b998c117e60fe784 +msgid "Improve pagination flexibility" +msgstr "" + +#: ../../changelog.rst:382 eb2be9edbc6e470f952a97cac0a8c012 +msgid "" +"Rename signals for better consistency (some plugins may need to be " +"updated)" +msgstr "" + +#: ../../changelog.rst:383 89f9707a3d1e443389b024a5bc34f87e +msgid "" +"Move metadata extraction from generators to readers; metadata extraction " +"no longer article-specific" +msgstr "" + +#: ../../changelog.rst:385 41bb6f6c43cd493ab89c900de7aa6628 +msgid "" +"Deprecate ``FILES_TO_COPY`` in favor of ``STATIC_PATHS`` and " +"``EXTRA_PATH_METADATA``" +msgstr "" + +#: ../../changelog.rst:387 86a7dff5bc8645c3be130a8ae4add149 +msgid "Summaries in Markdown posts no longer include footnotes" +msgstr "" + +#: ../../changelog.rst:388 009790743d7f42ba8278f18c392db041 +msgid "" +"Remove unnecessary whitespace in output via ``lstrip_blocks`` Jinja " +"parameter" +msgstr "" + +#: ../../changelog.rst:389 38b06c9a766c4c93b6d8e2869a5b3711 +msgid "Move PDF generation from core to plugin" +msgstr "" + +#: ../../changelog.rst:390 bb68b5bb0de84b9abfcd65987be9c368 +msgid "Replace ``MARKUP`` setting with ``READERS``" +msgstr "" + +#: ../../changelog.rst:391 4a0c9f70f0f24261a597ce1b155e0800 +msgid "Add warning if img tag is missing ``alt`` attribute" +msgstr "" + +#: ../../changelog.rst:392 dcabdeff1f5e4ee69292730bb31c9131 +#, python-brace-format +msgid "Add support for ``{}`` in relative links syntax, besides ``||``" +msgstr "" + +#: ../../changelog.rst:393 9fde536f5fca40e6a620b5f07049a0c3 +#, python-brace-format +msgid "Add support for ``{tag}`` and ``{category}`` relative links" +msgstr "" + +#: ../../changelog.rst:394 b241cd3f2847484bb7a56631c58d5ba4 +msgid "Add a ``content_written`` signal" +msgstr "" + +#: ../../changelog.rst:397 b6077687c2a64ddeafa187b1448c048f +msgid "3.2.1 and 3.2.2" +msgstr "" + +#: ../../changelog.rst:399 bf6c37fc7c2e47f0aee3ee9cb0cb5306 +msgid "Facilitate inclusion in FreeBSD Ports Collection" +msgstr "" + +#: ../../changelog.rst:402 3e800dbf3fe24766b77a043bc8da3c09 +msgid "3.2 (2013-04-24)" +msgstr "" + +#: ../../changelog.rst:404 17cb561f2e184679831d2e3ac7eda3de +msgid "Support for Python 3!" +msgstr "" + +#: ../../changelog.rst:405 faee303362bb40ad952cc4581036f070 +msgid "" +"Override page save-to location from meta-data (enables using a static " +"page as the site's home page, for example)" +msgstr "" + +#: ../../changelog.rst:407 3fc6523eaace489494b61380def294d1 +msgid "Time period archives (per-year, per-month, and per-day archives of posts)" +msgstr "" + +#: ../../changelog.rst:408 3eafb73945bf414cbcb903a9695ff8de +msgid "Posterous blog import" +msgstr "" + +#: ../../changelog.rst:409 cc3982d7a21146319745d929a38b43d9 +msgid "Improve WordPress blog import" +msgstr "" + +#: ../../changelog.rst:410 165fdfe5bfe1415c8b6cd56af637f3d4 +msgid "Migrate plugins to separate repository" +msgstr "" + +#: ../../changelog.rst:411 2f62212ada534de6ade55404aae98383 +msgid "Improve HTML parser" +msgstr "" + +#: ../../changelog.rst:412 66b0bf3a2b4a47c78a5a936c80c0e4fb +msgid "" +"Provide ability to show or hide categories from menu using " +"``DISPLAY_CATEGORIES_ON_MENU`` option" +msgstr "" + +#: ../../changelog.rst:414 d316333413c3459f803d9ec694450dab +msgid "Auto-regeneration can be told to ignore files via ``IGNORE_FILES`` setting" +msgstr "" + +#: ../../changelog.rst:415 7a199ee7396d485aaa55496b32e8a5c0 +msgid "Improve post-generation feedback to user" +msgstr "" + +#: ../../changelog.rst:416 6deb9ccecfab4fcba7157680ce6a35b9 +msgid "" +"For multilingual posts, use meta-data to designate which is the original " +"and which is the translation" +msgstr "" + +#: ../../changelog.rst:418 be2051f4c2304904b3264bd61da6bb3b +msgid "Add ``.mdown`` to list of supported Markdown file extensions" +msgstr "" + +#: ../../changelog.rst:419 be4c498c73604b7289bd908490b820fe +msgid "Document-relative URL generation (``RELATIVE_URLS``) is now off by default" +msgstr "" + +#: ../../changelog.rst:422 26c902ee59b54f5199b53dbd841981ce +msgid "3.1 (2012-12-04)" +msgstr "" + +#: ../../changelog.rst:424 1dce4c50db964039b0d0b4a27e19ce96 +msgid "" +"Importer now stores slugs within files by default. This can be disabled " +"with the ``--disable-slugs`` option." +msgstr "" + +#: ../../changelog.rst:426 247f3c4937844361a98a9bbc557774cb +msgid "Improve handling of links to intra-site resources" +msgstr "" + +#: ../../changelog.rst:427 baf6646be1424810853be748d7a15129 +msgid "" +"Ensure WordPress import adds paragraphs for all types of line endings in " +"post content" +msgstr "" + +#: ../../changelog.rst:429 4cefab609bb64186a2f597cedad65b61 +msgid "Decode HTML entities within WordPress post titles on import" +msgstr "" + +#: ../../changelog.rst:430 8b1e222311f749a5b50858f0dc34466d +msgid "Improve appearance of LinkedIn icon in default theme" +msgstr "" + +#: ../../changelog.rst:431 bd4f42ac16a040d6b0e5cb1e9f5d5977 +msgid "Add GitHub and Google+ social icons support in default theme" +msgstr "" + +#: ../../changelog.rst:432 d65513f7ff4d4294a5a4b755f6aa65c4 +msgid "Optimize social icons" +msgstr "" + +#: ../../changelog.rst:433 9c930d0296f9464490df06094597739f +msgid "" +"Add ``FEED_ALL_ATOM`` and ``FEED_ALL_RSS`` to generate feeds containing " +"all posts regardless of their language" +msgstr "" + +#: ../../changelog.rst:435 c3c18b3ea6ce4a24abb55abd44b7164f +msgid "" +"Split ``TRANSLATION_FEED`` into ``TRANSLATION_FEED_ATOM`` and " +"``TRANSLATION_FEED_RSS``" +msgstr "" + +#: ../../changelog.rst:437 9994413cfc6347fd8b9879e117b2b889 +msgid "Different feeds can now be enabled/disabled individually" +msgstr "" + +#: ../../changelog.rst:438 ca5c45416f784c87bed555ace354af21 +#, python-brace-format +msgid "" +"Allow for blank author: if ``AUTHOR`` setting is not set, author won't " +"default to ``${USER}`` anymore, and a post won't contain any author " +"information if the post author is empty" +msgstr "" + +#: ../../changelog.rst:441 5270ac00aa8f4f2d98f2a3a57a6bf03c +msgid "Move LESS and Webassets support from Pelican core to plugin" +msgstr "" + +#: ../../changelog.rst:442 a8e64d393d0a4e3195dbdc1215302f9c +msgid "" +"The ``DEFAULT_DATE`` setting now defaults to ``None``, which means that " +"articles won't be generated unless date metadata is specified" +msgstr "" + +#: ../../changelog.rst:444 e9d682bcd1de45f3a1a98ae17193aced +msgid "" +"Add ``FILENAME_METADATA`` setting to support metadata extraction from " +"filename" +msgstr "" + +#: ../../changelog.rst:446 fe3a4d2bc15d4b4fba48fc8af3569336 +msgid "" +"Add ``gzip_cache`` plugin to compress common text files into a ``.gz`` " +"file within the same directory as the original file, preventing the " +"server (e.g. Nginx) from having to compress files during an HTTP call" +msgstr "" + +#: ../../changelog.rst:449 c44353005d5d4e1293cc9a1878517726 +msgid "Add support for AsciiDoc-formatted content" +msgstr "" + +#: ../../changelog.rst:450 dcdc1aff409544f1b60d7c22a7a41b6b +msgid "" +"Add ``USE_FOLDER_AS_CATEGORY`` setting so that feature can be toggled " +"on/off" +msgstr "" + +#: ../../changelog.rst:451 f6675e347a114c75a3952ef5ef5f1e29 +msgid "Support arbitrary Jinja template files" +msgstr "" + +#: ../../changelog.rst:452 87ba44c075b144ee8c4734e4f6f4e4c9 +msgid "Restore basic functional tests" +msgstr "" + +#: ../../changelog.rst:453 0354818a87df49e59ac35a7d738c8e83 +msgid "" +"New signals: ``generator_init``, ``get_generators``, and " +"``article_generate_preread``" +msgstr "" + +#: ../../changelog.rst:457 1256b71b526e43dbb94823c0604f0bc6 +msgid "3.0 (2012-08-08)" +msgstr "" + +#: ../../changelog.rst:459 e79ee10015eb41fea71877bff6453a0b +msgid "Refactored the way URLs are handled" +msgstr "" + +#: ../../changelog.rst:460 f41008aff59344b0a964a38304c8f27d +msgid "Improved the English documentation" +msgstr "" + +#: ../../changelog.rst:461 9cfcf344ed0d41c0aa20d2e4178de487 +msgid "Fixed packaging using ``setuptools`` entrypoints" +msgstr "" + +#: ../../changelog.rst:462 75d4a7f700424bb69bd8fbba899fe5f2 +msgid "Added ``typogrify`` support" +msgstr "" + +#: ../../changelog.rst:463 e9e8e0933822437381e4a099118d17a8 +msgid "Added a way to disable feed generation" +msgstr "" + +#: ../../changelog.rst:464 c9746121791347a18725b210eb69fca6 +msgid "Added support for ``DIRECT_TEMPLATES``" +msgstr "" + +#: ../../changelog.rst:465 84b68057366c4c1eb56502f64a42bb73 +msgid "Allow multiple extensions for content files" +msgstr "" + +#: ../../changelog.rst:466 36450fadc3a1446898365333ebd9a369 +msgid "Added LESS support" +msgstr "" + +#: ../../changelog.rst:467 1e1d7cc4e8b647c1b9c5be55374c43f0 +msgid "Improved the import script" +msgstr "" + +#: ../../changelog.rst:468 bbb3522bded542c9af30ade57961b005 +msgid "Added functional tests" +msgstr "" + +#: ../../changelog.rst:469 06d82b81708d4234911c4552adb21aa3 +msgid "Rsync support in the generated Makefile" +msgstr "" + +#: ../../changelog.rst:470 9e0ef37470e4457d91f43b9a7ceb77aa +msgid "Improved feed support (easily pluggable with Feedburner for instance)" +msgstr "" + +#: ../../changelog.rst:471 5a84812ef2d440b5953327383ac064ed +msgid "Added support for ``abbr`` in reST" +msgstr "" + +#: ../../changelog.rst:472 3e899ccc01a94cca8886244190cf5944 +msgid "Fixed a bunch of bugs :-)" +msgstr "" + +#: ../../changelog.rst:475 73ed385ee1c143dcb9d1f5a2aa21a101 +msgid "2.8 (2012-02-28)" +msgstr "" + +#: ../../changelog.rst:477 e037cd34f3af4d2c826ccc7a949f2df8 +msgid "Dotclear importer" +msgstr "" + +#: ../../changelog.rst:478 994601f5041a465086869af70ae072dc +msgid "Allow the usage of Markdown extensions" +msgstr "" + +#: ../../changelog.rst:479 0830c593481e4e5ea1526f4d1a8848fa +msgid "Themes are now easily extensible" +msgstr "" + +#: ../../changelog.rst:480 3ff0b224c93e442684a1b686d8666ced +msgid "Don't output pagination information if there is only one page" +msgstr "" + +#: ../../changelog.rst:481 ec4ec66862df420caf61a32c472f972b +msgid "Add a page per author, with all their articles" +msgstr "" + +#: ../../changelog.rst:482 864df61f6eef43e4980bf957b14ac26e +msgid "Improved the test suite" +msgstr "" + +#: ../../changelog.rst:483 285e4cb5a43241558e3d2bf1876c0ee5 +msgid "Made the themes easier to extend" +msgstr "" + +#: ../../changelog.rst:484 7597e818692d42039cffc1fb67513c52 +msgid "Removed Skribit support" +msgstr "" + +#: ../../changelog.rst:485 867bceffc3cf431a919f92d33691870a +msgid "Added a ``pelican-quickstart`` script" +msgstr "" + +#: ../../changelog.rst:486 bdbf4396e57242af8f2be7c4c20ea455 +msgid "Fixed timezone-related issues" +msgstr "" + +#: ../../changelog.rst:487 2a8752a2c1d14916aa78eaf4878db4f9 +msgid "Added some scripts for Windows support" +msgstr "" + +#: ../../changelog.rst:488 67d470d30d8d41d38022c6a7024f3c62 +msgid "Date can be specified in seconds" +msgstr "" + +#: ../../changelog.rst:489 fcdf6b71286b4951ac69786e590c7649 +msgid "Never fail when generating posts (skip and continue)" +msgstr "" + +#: ../../changelog.rst:490 9cba8ad7120b4ea0bdd385d5facb119f +msgid "Allow the use of future dates" +msgstr "" + +#: ../../changelog.rst:491 4ded329080034fac931b6be8f801ce2d +msgid "Support having different timezones per language" +msgstr "" + +#: ../../changelog.rst:492 5a5f49be18c449fba6a8aeaa2b36b14e +msgid "Enhanced the documentation" +msgstr "" + +#: ../../changelog.rst:495 d49c481caef348f59c74d194bcca6579 +msgid "2.7 (2011-06-11)" +msgstr "" + +#: ../../changelog.rst:497 7d8c241cc73642d8a5214b44dcfe30ca +msgid "Use ``logging`` rather than echoing to stdout" +msgstr "" + +#: ../../changelog.rst:498 670a6095a13c4970aac3016915813b9c +msgid "Support custom Jinja filters" +msgstr "" + +#: ../../changelog.rst:499 be2c4c82052b4cb48e02ca0dca49eeb6 +msgid "Compatibility with Python 2.5" +msgstr "" + +#: ../../changelog.rst:500 773398476e4d45df89d7d958d2e496e6 +msgid "Added a theme manager" +msgstr "" + +#: ../../changelog.rst:501 963c80928b8e4d92a9c549a4daa58cb9 +msgid "Packaged for Debian" +msgstr "" + +#: ../../changelog.rst:502 c37c96fad3ad438395e73f2b2fdd5678 +msgid "Added draft support" +msgstr "" + +#: ../../changelog.rst:505 7c215208f8a34f53ae0d22361f9305af +msgid "2.6 (2011-03-08)" +msgstr "" + +#: ../../changelog.rst:507 deeb4eb9a00547bea54a8f4486cea948 +msgid "Changes in the output directory structure" +msgstr "" + +#: ../../changelog.rst:508 5719cd5592b442549b860851c95ace8a +msgid "Makes templates easier to work with / create" +msgstr "" + +#: ../../changelog.rst:509 a14ed59f0b7d43b7b64033cbda6fa1b3 +msgid "Added RSS support (was Atom-only)" +msgstr "" + +#: ../../changelog.rst:510 2b78e48ee5c04ee88a19e82dd5736b08 +msgid "Added tag support for the feeds" +msgstr "" + +#: ../../changelog.rst:511 129c8684dfe34773943a63f7294422dc +msgid "Enhance the documentation" +msgstr "" + +#: ../../changelog.rst:512 865503839227447ca15dae5cccbbd7f8 +msgid "Added another theme (brownstone)" +msgstr "" + +#: ../../changelog.rst:513 ecbde1d7724c445283ca769b43684207 +msgid "Added translations" +msgstr "" + +#: ../../changelog.rst:514 6877cc6c1e92490fab2840698dadba59 +msgid "Added a way to use cleaner URLs with a rewrite url module (or equivalent)" +msgstr "" + +#: ../../changelog.rst:515 4b937b4f363b4bfd86d3447d61ac79e0 +msgid "Added a tag cloud" +msgstr "" + +#: ../../changelog.rst:516 61ebc53121c34b96bb6edf9bd95b385e +msgid "" +"Added an autoreloading feature: the blog is automatically regenerated " +"each time a modification is detected" +msgstr "" + +#: ../../changelog.rst:518 79b3ebc425c64a60a5e9914da9e43752 +msgid "Translate the documentation into French" +msgstr "" + +#: ../../changelog.rst:519 a1446ce9b3e147ac9926754b1db32746 +msgid "Import a blog from an RSS feed" +msgstr "" + +#: ../../changelog.rst:520 0d427fc4738a447fbdae05b78559171e +msgid "Pagination support" +msgstr "" + +#: ../../changelog.rst:521 d70488ef9cea45db8389a99209fe9d9a +msgid "Added Skribit support" +msgstr "" + +#: ../../changelog.rst:524 ee9730d28c0a4e378618499401e1e399 +msgid "2.5 (2010-11-20)" +msgstr "" + +#: ../../changelog.rst:526 41764632aa2a46a9864a41bfa73b3d58 +msgid "Import from WordPress" +msgstr "" + +#: ../../changelog.rst:527 b3ee93bdd46e4699adea39b8e99ba3c4 +msgid "Added some new themes (martyalchin / wide-notmyidea)" +msgstr "" + +#: ../../changelog.rst:528 1a023f24ad50438c947a0c980213819a +msgid "First bug report!" +msgstr "" + +#: ../../changelog.rst:529 573a4f64b2d2486f80416c4f98e5a3e4 +msgid "Linkedin support" +msgstr "" + +#: ../../changelog.rst:530 c3c6ab49cad54f60a2f167abc9888764 +msgid "Added a FAQ" +msgstr "" + +#: ../../changelog.rst:531 7cf0a7d9c46545dd81397ed03bcd542e +msgid "Google Analytics support" +msgstr "" + +#: ../../changelog.rst:532 de467a7c0a654db0a31ec42908c83b39 +msgid "Twitter support" +msgstr "" + +#: ../../changelog.rst:533 455af156688d454f8dea6b8dcca0cb48 +msgid "Use relative URLs, not static ones" +msgstr "" + +#: ../../changelog.rst:536 12dceabc363e493599eb83725eb0d891 +msgid "2.4 (2010-11-06)" +msgstr "" + +#: ../../changelog.rst:538 0d24870c616a4d02a6e23758a1022a0c +msgid "Minor themes changes" +msgstr "" + +#: ../../changelog.rst:539 4d8d6c48d9824e258c6789afe95ffb4e +msgid "Add Disqus support (so we have comments)" +msgstr "" + +#: ../../changelog.rst:540 74cd4df65f8b41a1967033aedead1c87 +msgid "Another code refactoring" +msgstr "" + +#: ../../changelog.rst:541 a44c01fa1c1242ab86a6ab32851e0284 +msgid "Added config settings about pages" +msgstr "" + +#: ../../changelog.rst:542 c4519c5267eb4606b7f5de643028429e +msgid "Blog entries can also be generated in PDF" +msgstr "" + +#: ../../changelog.rst:545 7164d3eacbd946c8a317dc16929ba48d +msgid "2.3 (2010-10-31)" +msgstr "" + +#: ../../changelog.rst:547 ca062e8a7c1a43f2a678bbfe22484d6a +msgid "Markdown support" +msgstr "" + +#: ../../changelog.rst:550 fc9a53b1a9034f809688d3c4114b412c +msgid "2.2 (2010-10-30)" +msgstr "" + +#: ../../changelog.rst:552 121f2a61adc043a79c029fb4acc3ea0d +msgid "Prettify output" +msgstr "" + +#: ../../changelog.rst:553 f6a56a02617e458089148229dd92bd08 +msgid "Manages static pages as well" +msgstr "" + +#: ../../changelog.rst:556 c4d2a7150f2a46f7a87e1d810777b5be +msgid "2.1 (2010-10-30)" +msgstr "" + +#: ../../changelog.rst:558 739f08f2d6a746199390e3809f4a27f1 +msgid "Make notmyidea the default theme" +msgstr "" + +#: ../../changelog.rst:561 2596c0b20ea947a5845cd92f3190f32e +msgid "2.0 (2010-10-30)" +msgstr "" + +#: ../../changelog.rst:563 a023ea05a0864c2085b91526bfa23554 +msgid "Refactoring to be more extensible" +msgstr "" + +#: ../../changelog.rst:564 a411e0742c7a4751b1b5d8f7848cbf2b +msgid "Change into the setting variables" +msgstr "" + +#: ../../changelog.rst:567 d8933a28653242fc942087162ac6a4c9 +msgid "1.2 (2010-09-28)" +msgstr "" + +#: ../../changelog.rst:569 66415309e0d64d06a490ecaef4efb36d +msgid "Added a debug option" +msgstr "" + +#: ../../changelog.rst:570 ceaef7c8b0fe4df79600738d71b8d094 +msgid "Added per-category feeds" +msgstr "" + +#: ../../changelog.rst:571 6bac9fd70e104b28bfd06a936d71e32a +msgid "Use filesystem to get dates if no metadata is provided" +msgstr "" + +#: ../../changelog.rst:572 1f663ceee61b4c0595834cc72a9e3e7d +msgid "Add Pygments support" +msgstr "" + +#: ../../changelog.rst:575 1df408a7787943e68de9384710331200 +msgid "1.1 (2010-08-19)" +msgstr "" + +#: ../../changelog.rst:577 7e611ea96d6c4b4db5751229abbfec38 +msgid "First working version" +msgstr "" diff --git a/docs/locale/zh_CN/LC_MESSAGES/content.po b/docs/locale/zh_CN/LC_MESSAGES/content.po new file mode 100644 index 00000000..e180a866 --- /dev/null +++ b/docs/locale/zh_CN/LC_MESSAGES/content.po @@ -0,0 +1,1074 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2010–2024 +# This file is distributed under the same license as the PELICAN package. +# FIRST AUTHOR , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: PELICAN 4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-09-15 09:23+0800\n" +"PO-Revision-Date: 2024-06-25 19:00+0800\n" +"Last-Translator: GeorgeHu \n" +"Language: zh_CN\n" +"Language-Team: \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.15.0\n" + +#: ../../content.rst:2 0e0d4e5751154cd4a5002b3f93cce14a +msgid "Writing content" +msgstr "创作内容" + +#: ../../content.rst:5 4316c31e97f740239cb3daaa533c0b64 +msgid "Articles and pages" +msgstr "文章和页面" + +#: ../../content.rst:7 66e59f17488f4914a6d5c4538214dd91 +msgid "" +"Pelican considers \"articles\" to be chronological content, such as posts" +" on a blog, and thus associated with a date." +msgstr "Pelican将“文章”(article)视为有时间顺序的内容,例如博客上的博文就是文章。" + +#: ../../content.rst:10 ed244e3e671f450daf0617a80274878b +msgid "" +"The idea behind \"pages\" is that they are usually not temporal in nature" +" and are used for content that does not change very often (e.g., " +"\"About\" or \"Contact\" pages)." +msgstr "“页面”(page)指的是不经常改变的内容,例如“关于”“联系我们”这样的。" + +#: ../../content.rst:14 f30d12684e0043438418655ba9f5cf25 +msgid "You can find sample content in the repository at ``samples/content/``." +msgstr "" +"在代码仓库的 ``samples/content/`` " +"文件夹下有一些内容示例供您查看。(译者注:原文档中还有post与content的说法,一般既指代文章又指代页面,后文统一将其翻译为推文)" + +#: ../../content.rst:19 370562db18eb42f19935009d087595b4 +msgid "File metadata" +msgstr "文件元数据" + +#: ../../content.rst:21 e9e758d40aeb42a78a5e25ddbca35a3b +msgid "" +"Pelican tries to be smart enough to get the information it needs from the" +" file system (for instance, about the category of your articles), but " +"some information you need to provide in the form of metadata inside your " +"files." +msgstr "Pelican可以从文件系统中自动地获取一些信息(例如文章的分类),但是有些信息需要您以元数据的形式在文件中提供。" + +#: ../../content.rst:25 276a3d27de8c41a784b3c4fa6b0b9f1b +msgid "" +"If you are writing your content in reStructuredText format, you can " +"provide this metadata in text files via the following syntax (give your " +"file the ``.rst`` extension)::" +msgstr "如果您用reStructuredText的格式进行内容创作,您可以按照下面的语法在文本文件中提供元数据(请给文本文件加上 ``.rst`` 后缀):" + +#: ../../content.rst:40 b5d99eedf95a4b6bbf760eccb4add31b +msgid "" +"Author and tag lists may be semicolon-separated instead, which allows you" +" to write authors and tags containing commas::" +msgstr "如果有多个作者或多个文章标签,需要将他们以分号分隔,这样就可以在作者或标签中使用逗号了:" + +#: ../../content.rst:46 18ae0e8b1cae406381a546bf2462c1e6 +msgid "" +"Pelican implements an extension to reStructuredText to enable support for" +" the ``abbr`` HTML tag. To use it, write something like this in your " +"post::" +msgstr "Pelican在reStructuredText上实现了 ``abbr`` HTML标签的使用支持。在正文部分按照下面的形式书写即可。" + +#: ../../content.rst:51 62c068f033f0498d888dd72f23f9d231 +msgid "" +"You can also use Markdown syntax (with a file ending in ``.md``, " +"``.markdown``, ``.mkd``, or ``.mdown``). Markdown generation requires " +"that you first explicitly install the Python-Markdown_ package, which can" +" be done via ``pip install Markdown``." +msgstr "" +"Pelican同时也支持Markdown语法(文件的扩展名需要为 ``.md`` 、 ``.markdown``、 ``.mkd`` 或 " +"``.mdown`` )要让Pelican进行Markdown的生成,需要先通过 ``pip install Markdown`` 安装 " +"Python-Markdown_ 。" + +#: ../../content.rst:56 f39e1de0f9ea4533942c5bf0bff7866f +msgid "" +"Pelican also supports `Markdown Extensions`_, which might have to be " +"installed separately if they are not included in the default ``Markdown``" +" package and can be configured and loaded via the ``MARKDOWN`` setting." +msgstr "" +"Pelican同样支持 `Markdown扩展`_ ,可以是 ``Markdown`` 包自带的扩展,也可以是另外安装的,可以通过 " +"``MARKDOWN`` 配置项管理这些扩展。" + +#: ../../content.rst:60 c9f3ab98c3d54b53bf647ba9202b5386 +msgid "Metadata syntax for Markdown posts should follow this pattern::" +msgstr "Markdown中的元数据语法需要按照下面的格式书写:" + +#: ../../content.rst:73 ba840c208e4b4198ac0a2bd672a94f36 +msgid "" +"You can also have your own metadata keys (so long as they don't conflict " +"with reserved metadata keywords) for use in your templates. The following" +" table contains a list of reserved metadata keywords:" +msgstr "您也可以定义自己的元数据类型(只要和保留的元数据关键字不冲突),这些自定义的元数据关键字可以用在自定义的模板中。下面的列出了所有保留的元数据关键字。" + +#: ../../content.rst:78 a9537c5593d9458d9193dacc82c27f2f +msgid "Metadata" +msgstr "元数据类型" + +#: ../../content.rst:78 ../../content.rst:548 827ac866a3914692ac5fc9eaa1921aac +#: a55315aa4aee4e30a7768bc54d7063da +msgid "Description" +msgstr "描述" + +#: ../../content.rst:80 d5e5b3902b9f46e3a827c551e26d84bd +msgid "``title``" +msgstr "``title``" + +#: ../../content.rst:80 07eb7d1b1a5f458084564729052749e7 +msgid "Title of the article or page" +msgstr "文章或页面的标题" + +#: ../../content.rst:81 37abd449ffca4436a505f0dc35343cea +msgid "``date``" +msgstr "``date``" + +#: ../../content.rst:81 a13a424e96f643068af63b0d0d2dbb27 +msgid "Publication date (e.g., ``YYYY-MM-DD HH:SS``)" +msgstr "发布日期(需要以 ``YYYY-MM-DD HH:SS`` 的格式)" + +#: ../../content.rst:82 7534c5908891457797988ef7a67b17db +msgid "``modified``" +msgstr "``modified``" + +#: ../../content.rst:82 6cc7d4c20ee44e31bb54173b24aa9afe +msgid "Modification date (e.g., ``YYYY-MM-DD HH:SS``)" +msgstr "最后修改日期(需要以 ``YYYY-MM-DD HH:SS`` 的格式)" + +#: ../../content.rst:83 0f7d30bb91bf46f7a0e2dd5ab186955d +msgid "``tags``" +msgstr "``tags``" + +#: ../../content.rst:83 e07fee37f1de414f82b38e7ff5e9051b +msgid "Content tags, separated by commas" +msgstr "推文标签,以逗号分隔" + +#: ../../content.rst:84 cc730907be1c4bb6a4d1f4e551f1bb13 +msgid "``keywords``" +msgstr "``keywords``" + +#: ../../content.rst:84 b4185fda72084329b551f26b6eff5bd5 +msgid "Content keywords, separated by commas (HTML content only)" +msgstr "推文关键字,以逗号分隔(只能在HTML内容中使用)" + +#: ../../content.rst:85 98438d6e0fbf4783a580516079fa5f3b +msgid "``category``" +msgstr "``category``" + +#: ../../content.rst:85 48e04733764e4962bfe4d16828b34d79 +msgid "Content category (one only — not multiple)" +msgstr "推文分类(只能归属到一个分类中,不支持多个)" + +#: ../../content.rst:86 275265cdeaaf4515b8f84dd79d29e181 +msgid "``slug``" +msgstr "``slug``" + +#: ../../content.rst:86 d910b7a82ea540179d561f639e531b9d +msgid "Identifier used in URLs and translations" +msgstr "URL和翻译的唯一标识符" + +#: ../../content.rst:87 ac2a927028d647a0b4f5edb14e5b1851 +msgid "``author``" +msgstr "``author``" + +#: ../../content.rst:87 bd27267c861f470db23499a67a631854 +msgid "Content author, when there is only one" +msgstr "当只有一个作者时可以使用这个元数据" + +#: ../../content.rst:88 9616ecb488914e4eaa192ecb4e437ba0 +msgid "``authors``" +msgstr "``authors``" + +#: ../../content.rst:88 762660408c274f5690dba81dcc88c662 +msgid "Content authors, when there are multiple" +msgstr "当有多个作者时需要使用这个元数据" + +#: ../../content.rst:89 40d65df77e0f4e75a26615d60775a382 +msgid "``summary``" +msgstr "``summary``" + +#: ../../content.rst:89 f072a97cf1c54b7fbd383f205732f1c2 +msgid "Brief description of content for index pages" +msgstr "简短的推文概要,会显示在首页上" + +#: ../../content.rst:90 69018dfa7f9b4e74b518fc1940af8908 +msgid "``lang``" +msgstr "``lang``" + +#: ../../content.rst:90 f139c5b2a2774ee3bb83d4bd3b523a93 +msgid "Content language ID (``en``, ``fr``, etc.)" +msgstr "推文所用语言的ID(例如 ``en`` 、 ``fr`` 、 ``zh-cn`` 等)" + +#: ../../content.rst:91 13757ce4c6a84096b4d131232eaeb8b4 +msgid "``translation``" +msgstr "``translation``" + +#: ../../content.rst:91 9b3f475397bc4d60a1eb911f6763285f +msgid "If content is a translation of another (``true`` or ``false``)" +msgstr "手动指定当前内容是否是某个翻译版本(该元数据的值只能是 ``true`` 或 ``false``)" + +#: ../../content.rst:92 3f294461641949eead16c79e7bffdb22 +msgid "``status``" +msgstr "``status``" + +#: ../../content.rst:92 f6ab65a6adf64379a14fb89d300d9eaa +msgid "Content status: ``draft``, ``hidden``, ``skip``, or ``published``" +msgstr "推文的状态: ``draft``、 ``hidden`` 、 ``skip`` 或 ``published`` " + +#: ../../content.rst:93 d9aefdcc77aa462d9934eb49f2b39095 +msgid "``template``" +msgstr "``template``" + +#: ../../content.rst:93 41ecae4039714f31b0220f0d0f45a0c7 +msgid "Name of template to use to generate content (without extension)" +msgstr "用于指定要使用的生成模板,只需要写模板的名字,不需要模板文件的后缀名" + +#: ../../content.rst:94 892e239c7a9145beb61b2f583284f448 +msgid "``save_as``" +msgstr "``save_as``" + +#: ../../content.rst:94 3bc3792a6a5c4e79bcf8f77fc48f313b +msgid "Save content to this relative file path" +msgstr "将内容保存到指定的相对文件路径" + +#: ../../content.rst:95 8c3ed87a54734ca1bba051448d8169f9 +msgid "``url``" +msgstr "``url``" + +#: ../../content.rst:95 2b55b515c7ce40e48eae20fbc67107bb +msgid "URL to use for this article/page" +msgstr "指定本篇文章或页面要使用的URL" + +#: ../../content.rst:98 81c7cc35f7b74566b7dd9083c2fc17f1 +msgid "" +"Readers for additional formats (such as AsciiDoc_) are available via " +"plugins, which you can find via the `Pelican Plugins`_ collection as well" +" as the legacy `pelican-plugins`_ repository." +msgstr "" +"对其他格式的支持(例如 AsciiDoc_ )可以通过插件实现,在 `Pelican插件`_ 集中可以查看所有插件。当然,在老的 " +"`pelican-plugins`_ 仓库中也可以查看。" + +#: ../../content.rst:102 b808c2914ee14c1380fe53e5e1f378f7 +msgid "" +"Pelican can also process HTML files ending in ``.html`` and ``.htm``. " +"Pelican interprets the HTML in a very straightforward manner, reading " +"metadata from ``meta`` tags, the title from the ``title`` tag, and the " +"body out from the ``body`` tag::" +msgstr "" +"Pelican还能处理后缀名为 ``.html`` 和 ``.htm`` " +"的HTML文件Pelican在解释转换HTML文件时用的方法非常直接,会从 ``meta`` HTML标签中获取元数据信息,从 ``title``" +" HTML标签中获取标题,从 ``body`` 标签中获取文章的正文内容:" + +#: ../../content.rst:122 289c3761b4b94691bee5ef07e8ab25ff +msgid "" +"With HTML, there is one simple exception to the standard metadata: tags " +"can be specified either via the ``tags`` metadata, as is standard in " +"Pelican, or via the ``keywords`` metadata, as is standard in HTML. The " +"two can be used interchangeably." +msgstr "" +"当使用HTML文件时,上述的众多元数据中有一个比较特殊的存在——tags。这个元数据在HTML文档中有两种方式可以指定,一种是Pelican中定义的" +" ``tags`` (上面的例子中用的就是这种);另一种是使用HTML中定义的 ``keywords`` " +"(即将name属性的“tags”换成“keywords”)。" + +#: ../../content.rst:127 9af1403c5c624860bd73aba6f6ad642f +msgid "" +"Note that, aside from the title, none of this content metadata is " +"mandatory: if the date is not specified and ``DEFAULT_DATE`` is set to " +"``'fs'``, Pelican will rely on the file's \"mtime\" timestamp, and the " +"category can be determined by the directory in which the file resides. " +"For example, a file located at ``python/foobar/myfoobar.rst`` will have a" +" category of ``foobar``. If you would like to organize your files in " +"other ways where the name of the subfolder would not be a good category " +"name, you can set the setting ``USE_FOLDER_AS_CATEGORY`` to ``False``. " +"When parsing dates given in the page metadata, Pelican supports the W3C's" +" `suggested subset ISO 8601`__." +msgstr "" +"需要注意的是,除了title外,其他所有元数据都是可以缺省的。若未指定日期元数据并且将 ``DEFAULT_DATE`` 设为了 " +"``'fs'``,Pelican就会从文件的 “mtime” 时间戳中获取日期信息;文件所在目录的名称会被作为category。例如 " +"``python/foobar/myfoobar.rst`` 的category元数据值就会被设为 ``foobar`` " +"。如果您不希望子目录的名称成为category的值,则需要在设置中将 ``USE_FOLDER_AS_CATEGORY`` 设为 " +"``False`` 。进行日期元数据的解析时,Pelican支持W3C的 `suggested subset ISO 8601`__ 标准。" + +#: ../../content.rst:137 0f142fac1e9e41eeb0cf4cc70a42f72b +msgid "" +"So the title is the only required metadata. If that bothers you, worry " +"not. Instead of manually specifying a title in your metadata each time, " +"you can use the source content file name as the title. For example, a " +"Markdown source file named ``Publishing via Pelican.md`` would " +"automatically be assigned a title of *Publishing via Pelican*. If you " +"would prefer this behavior, add the following line to your settings " +"file::" +msgstr "" +"总而言之,标题是唯一必须指定的元数据。如果您甚至懒得写标题,也不用担心,Pelican会自动将文件名作为内容的标题。例如,Markdown源文件 " +"``Publishing via Pelican.md`` 的标题会自动设为 *Publishing via " +"Pelican*。如果您希望启用这个特性,请在设置文件中添加下面这么一行:" + +#: ../../content.rst:148 481919b7e3974c8293d420886105941f +msgid "" +"When experimenting with different settings (especially the metadata ones)" +" caching may interfere and the changes may not be visible. In such cases " +"disable caching with ``LOAD_CONTENT_CACHE = False`` or use the " +"``--ignore-cache`` command-line switch." +msgstr "" +"在您尝试不同的设置时(特别是在设置元数据时),缓存可能会对您造成干扰,导致设置更改不起作用。若您遇到了这种问题,可以在配置文件中加上 " +"``LOAD_CONTENT_CACHE = False`` ,或是在使用命令行生成站点时加上 ``--ignore-cache`` 参数。" + +#: ../../content.rst:155 466fa8d713b343d1a8ae8266c3031479 +msgid "" +"``modified`` should be last time you updated the article, and defaults to" +" ``date`` if not specified. Besides you can show ``modified`` in the " +"templates, feed entries in feed readers will be updated automatically " +"when you set ``modified`` to the current date after you modified your " +"article." +msgstr "" +"``modified`` 元数据中应该为文章最后一次的修改时间,若没有指定,会自动与 ``date`` 保持一致。在您修改文章并将 " +"``modified`` 设为当前日期后,除了在模板中显示 ``modified`` 之外,feed阅读器中的feed条目也会自动更新。" + +#: ../../content.rst:160 e7c9358cd2a74e64863af04736d10775 +msgid "" +"``authors`` is a comma-separated list of article authors. If there's only" +" one author you can use ``author`` field." +msgstr "``authors`` 元数据中是文章作者的列表,各个作者之间用逗号分隔。若只有一个作者,可以使用 ``author`` 。" + +#: ../../content.rst:163 15bdeea8538244948ca509ee57ef8f63 +msgid "" +"If you do not explicitly specify summary metadata for a given post, the " +"``SUMMARY_MAX_LENGTH`` setting can be used to specify how many words from" +" the beginning of an article are used as the summary. You can also use an" +" article's first N paragraphs as its summary using the " +"``SUMMARY_MAX_PARAGRAPHS`` setting. If both settings are in use, the " +"specified number of paragraphs will be used but may be truncated to " +"respect the specified maximum length." +msgstr "" +"若您没有显式地指定summary元数据,Pelican会自动从推文开头截取 ``SUMMARY_MAX_LENGTH`` " +"指定长度的内容作为summary。另外,您也可以使用配置项 ``SUMMARY_MAX_PARAGRAPHS`` " +"指定推文开头前N段内容作为summary。若同时指定了这两个配置项,首先会考虑 ``SUMMARY_MAX_PARAGRAPHS`` " +",若前N段的总长度超过 ``SUMMARY_MAX_LENGTH`` ,还是会按照 ``SUMMARY_MAX_LENGTH`` 进行截断。" + +#: ../../content.rst:170 64a7dcd4911447338ac1871083242a83 +msgid "" +"You can also extract any metadata from the filename through a regular " +"expression to be set in the ``FILENAME_METADATA`` setting. All named " +"groups that are matched will be set in the metadata object. The default " +"value for the ``FILENAME_METADATA`` setting will only extract the date " +"from the filename. For example, if you would like to extract both the " +"date and the slug, you could set something like: " +"``'(?P\\d{4}-\\d{2}-\\d{2})_(?P.*)'``" +msgstr "" +"您可以通过 ``FILENAME_METADATA`` " +"设置来使用正则表达式从文件名中提取元数据。正则匹配到的每个命名分组都被看成一个元数据。预设的 ``FILENAME_METADATA`` " +"只会从文件名中提取date和slug。例如,可以使用 " +"``'(?P\\d{4}-\\d{2}-\\d{2})_(?P.*)'`` 提取date和slug。" + +#: ../../content.rst:177 0b6aaca5fc60494fafd2bdf345f25ab3 +msgid "" +"Please note that the metadata available inside your files takes " +"precedence over the metadata extracted from the filename." +msgstr "请注意,您在推文中直接指定的元数据的优先级是大于从文件名中提取的。" + +#: ../../content.rst:181 463df99e715d44c09a48770ddda1e139 +msgid "Pages" +msgstr "页面" + +#: ../../content.rst:183 d2dd51b7abe14dc4921adcf50b8218fb +msgid "" +"If you create a folder named ``pages`` inside the content folder, all the" +" files in it will be used to generate static pages, such as **About** or " +"**Contact** pages. (See example filesystem layout below.)" +msgstr "" +"如果您在content文件夹下创建了一个 ``pages`` 文件夹,那么Pelican会为其中的每个文件生成一个例如 **关于** " +"、**联系我们** 这样的静态页面。(具体可以看下面项目文件组织的例子)" + +#: ../../content.rst:187 3ac83019ba9c44e781a7b67c837c99d6 +msgid "" +"You can use the ``DISPLAY_PAGES_ON_MENU`` setting to control whether all " +"those pages are displayed in the primary navigation menu. (Default is " +"``True``.)" +msgstr "您可以通过 ``DISPLAY_PAGES_ON_MENU`` 设置来决定页面是否被列在主导航菜单中(默认值为 ``True`` )。" + +#: ../../content.rst:190 56486e599f334e0fbc976bcf2d22bd5e +msgid "" +"If you want to exclude any pages from being linked to or listed in the " +"menu, then add a ``status: hidden`` attribute to its metadata. This is " +"useful for things like making error pages that fit the generated theme of" +" your site." +msgstr "" +"如果您希望让某些页面不会被链接并且也不列在任何菜单中,可以为它加上元数据属性 ``status: hidden`` " +"。这在将错误页面适配到所用主题时很有用。" + +#: ../../content.rst:195 0205a4cab1a040a4aef74a3c375855a4 +msgid "Static content" +msgstr "静态内容" + +#: ../../content.rst:197 2a86301465bd4f41944964cb0edf1572 +msgid "" +"Static files are files other than articles and pages that are copied to " +"the output folder as-is, without processing. You can control which static" +" files are copied over with the ``STATIC_PATHS`` setting of the project's" +" ``pelicanconf.py`` file. Pelican's default configuration includes the " +"``images`` directory for this, but others must be added manually. In " +"addition, static files that are explicitly linked to are included (see " +"below)." +msgstr "" +"静态文件与文章、页面不同,会原模原样地复制到输出文件夹中。当然,您也通过设置 ``STATIC_PATHS`` " +"更改复制时的目标文件夹。Pelican的默认配置中只包含了 ``images`` " +"一个文件夹,其他的需要手动添加。另外静态文件也包含那些被显式链接的(详见后文)。" + +#: ../../content.rst:206 3b74472b747e4cd494aae142ec4deecc +msgid "" +"In the default configuration, all files with a valid content file suffix " +"(``.html``, ``.rst``, ``.md``, ...) get processed by the article and page" +" generators *before* the static generator. This is avoided by altering " +"the ``*_EXCLUDE`` settings appropriately." +msgstr "" +"在默认配置下,所有后缀名有效的文件( ``.html`` 、 ``.rst`` 、 ``.md`` , " +"...)都会由文章/页面生成器处理,这是在静态文件处理之前完成的。若这些文件中的某一些是静态文件,可以合理使用 ``*_EXCLUDE`` " +"配置项将他们排除(例如 ``ARTICLE_EXCLUDES`` 、 ``PAGE_EXCLUDES``)。" + +#: ../../content.rst:212 ab263a1d5b5a4fb0a705257701b8b6c3 +msgid "Mixed content in the same directory" +msgstr "在同一个目录下存放不同类型的内容" + +#: ../../content.rst:214 dfec139d8f98465ea117dcd02f3e7870 +msgid "" +"Starting with Pelican 3.5, static files can safely share a source " +"directory with page source files, without exposing the page sources in " +"the generated site. Any such directory must be added to both " +"``STATIC_PATHS`` and ``PAGE_PATHS`` (or ``STATIC_PATHS`` and " +"``ARTICLE_PATHS``). Pelican will identify and process the page source " +"files normally, and copy the remaining files as if they lived in a " +"separate directory reserved for static files." +msgstr "" +"从Pelican 3.5开始,静态文件就可以和页面源文件安全地放在同一目录下了。这些包含了不同类型内容文件的目录需要添加到 " +"``STATIC_PATHS`` 和 ``PAGE_PATHS`` 中(或者 ``STATIC_PATHS`` 和 " +"``ARTICLE_PATHS`` " +"中)。Pelican会正常地识别和处理文章和页面源文件,然后再把静态文件复制,和处理处于单独一个文件夹的静态文件行为一致。" + +#: ../../content.rst:221 de484f74c05a48e4ac84631e56309bf6 +msgid "" +"Note: Placing static and content source files together in the same source" +" directory does not guarantee that they will end up in the same place in " +"the generated site. The easiest way to do this is by using the " +"``{attach}`` link syntax (described below). Alternatively, the " +"``STATIC_SAVE_AS``, ``PAGE_SAVE_AS``, and ``ARTICLE_SAVE_AS`` settings " +"(and the corresponding ``*_URL`` settings) can be configured to place " +"files of different types together, just as they could in earlier versions" +" of Pelican." +msgstr "" +"请注意:Pelican不保证放在同一个源目录下的静态文件和内容文件在站点生成完后最终出现在同一个地方。要让他们出现在一个地方,可以使用 " +"``{attach}`` 链接语法(下面会提到)。此外,还可以通过设置 ``STATIC_SAVE_AS`` 、 ``PAGE_SAVE_AS``" +" 和 ``ARTICLE_SAVE_AS`` (还有相应的 ``*_URL`` 设置)让不同类型的文件最终放在一起。" + +#: ../../content.rst:232 6733f6cc9bbb4ee0995d7f818c24b850 +msgid "Linking to internal content" +msgstr "内部链接" + +#: ../../content.rst:234 e0f9e61fef924c82aa7950ad20c0b686 +msgid "" +"From Pelican 3.1 onwards, it is now possible to specify intra-site links " +"to files in the *source content* hierarchy instead of files in the " +"*generated* hierarchy. This makes it easier to link from the current post" +" to other content that may be sitting alongside that post (instead of " +"having to determine where the other content will be placed after site " +"generation)." +msgstr "" +"从Pelican 3.1开始,站内链接可以在 *源文件* 层次下指定,而不是只能在 *生成后的站点* " +"层次下指定。当需要在当前推文链接到邻近位置的内容时,可以直接从源内容文件的位置开始链接(而不需要考虑在站点生成后文件会被放在哪儿)。" + +#: ../../content.rst:240 8de8953b665841818066d12cec9631d4 +msgid "" +"To link to internal content (files in the ``content`` directory), use the" +" following syntax for the link target: ``{filename}path/to/file``. Note: " +"forward slashes, ``/``, are the required path separator in the " +"``{filename}`` directive on all operating systems, including Windows." +msgstr "" +"要链接到站内(即在 ``content`` 目录下的文件),使用下述的目标链接语法: ``{filename}path/to/file`` " +"。注意,在所有操作系统(当然也包括Windows)上,路径的分隔符都要使用正斜杠 ``/`` 。" + +#: ../../content.rst:246 dbd1404fa9fe47b7ba2594d1cc5d84f5 +msgid "For example, a Pelican project might be structured like this::" +msgstr "例如,某Pelican项目的文件结构组织如下:" + +#: ../../content.rst:257 04b1728643124b6e903acb6c32d6c970 +msgid "In this example, ``article1.rst`` could look like this::" +msgstr "在这个例子中, ``article1.rst`` 的内容如下:" + +#: ../../content.rst:269 9197b32aca1c4af6ac2f2b56e7498206 +msgid "and ``article2.md``::" +msgstr "``article2.md`` 的内容如下:" + +#: ../../content.rst:280 baccc8dc58cd482cb42bd44d78d16d42 +msgid "Linking to static files" +msgstr "链接到静态文件" + +#: ../../content.rst:282 33067c5bbb554baea7306b0c2f0b5356 +msgid "" +"You can link to static content using ``{static}path/to/file``. Files " +"linked to with this syntax will automatically be copied to the output " +"directory, even if the source directories containing them are not " +"included in the ``STATIC_PATHS`` setting of the project's " +"``pelicanconf.py`` file." +msgstr "" +"您可以通过 ``{static}path/to/file`` 链接到静态内容。使用这个指令链接的文件都会被自动复制到输出目录中,即使它没有包含在 " +"``STATIC_PATHS`` 中。" + +#: ../../content.rst:287 ../../content.rst:322 533a9aee68e5452db609cc5e1e569381 +#: 7c9993b8f8c44863975e5db9d5ce1cb8 +msgid "For example, a project's content directory might be structured like this::" +msgstr "例如,某Pelican项目的文件结构组织如下:" + +#: ../../content.rst:297 7c70d916da684551b499f25fd9567e11 +msgid "``test.md`` would include::" +msgstr "``test.md`` 的文件内容如下:" + +#: ../../content.rst:302 8921fb6dfbba4e6ea4c0220650617dc6 +msgid "" +"Site generation would then copy ``han.jpg`` to ``output/images/han.jpg``," +" ``menu.pdf`` to ``output/pdfs/menu.pdf``, and write the appropriate " +"links in ``test.md``." +msgstr "" +"站点生成时会将 ``han.jpg`` 拷贝到 ``output/images/han.jpg`` 、将 ``menu.pdf`` 拷贝到 " +"``output/pdfs/menu.pdf`` ,同时也会自动把 ``test.md`` 中的相关链接都替换为正确的。" + +#: ../../content.rst:306 244c1bb923ec4b7ab33c039f2deefe94 +msgid "" +"If you use ``{static}`` to link to an article or a page, this will be " +"turned into a link to its source code." +msgstr "如果您使用 ``{static}`` 链接到文章或页面,会链接到他们的源文件而不是渲染后的文章或页面。" + +#: ../../content.rst:310 50d69d50e26d4b48b4b1fb2643efa0e6 +msgid "Attaching static files" +msgstr "将静态文件作为附件" + +#: ../../content.rst:312 f28e37fba55b49a99f03bbafc669ef87 +msgid "" +"Starting with Pelican 3.5, static files can be \"attached\" to a page or " +"article using this syntax for the link target: ``{attach}path/to/file``. " +"This works like the ``{static}`` syntax, but also relocates the static " +"file into the linking document's output directory. If the static file " +"originates from a subdirectory beneath the linking document's source, " +"that relationship will be preserved on output. Otherwise, it will become " +"a sibling of the linking document." +msgstr "" +"从Pelican 3.5开始,静态文件可以使用下述语法 “附” 在页面或文章上: ``{attach}path/to/file`` 。这和 " +"``{static}`` " +"语法很像,也会将静态文件重定位到文章或页面的对应输出目录中。当推文所链接的静态文件处于其源文件所在位置的子目录下时,这种父子关系在输出目录中会得以保留。否则,默认情况下,静态文件会和对应的文档输出到同一目录层级下。" + +#: ../../content.rst:320 dba2dfdd8ef14b41b37f9db53ebb9704 +msgid "This only works for linking to static files." +msgstr "这只在链接到静态文件时起作用。" + +#: ../../content.rst:333 a523bb1926b54025908733f0aca757c5 +msgid "``pelicanconf.py`` would include::" +msgstr "例如对于某设置文件 ``pelicanconf.py`` " + +#: ../../content.rst:340 d12e170143234a51862ac73d04acb16b +msgid "``testpost.md`` would include::" +msgstr "``testpost.md`` 的内容如下:" + +#: ../../content.rst:350 8628f5e27e51444fad84dc68aa8a74bb +msgid "" +"Site generation would then produce an output directory structured like " +"this::" +msgstr "对应生成输出的站点目录结构如下:" + +#: ../../content.rst:360 8f74e3a043b84a088708bc046118b327 +msgid "" +"Notice that all the files linked using ``{attach}`` ended up in or " +"beneath the article's output directory." +msgstr "可以注意到,使用 ``{attach}`` 链接的文件要么和文章输出处于同级目录,要么就是在文章所在位置的子目录下。" + +#: ../../content.rst:363 cdaf8ffc246645da8614e76072a6704d +msgid "" +"If a static file is linked multiple times, the relocating feature of " +"``{attach}`` will only work in the first of those links to be processed. " +"After the first link, Pelican will treat ``{attach}`` like ``{static}``. " +"This avoids breaking the already-processed links." +msgstr "" +"若一个静态文件被多次链接, ``{attach}`` 只会在该静态文件第一次被链接时进行重定位处理(即按照上面的规则复制到对应目录)。之后使用 " +"``{attach}`` 进行的链接的效果就和 ``{static}`` 一模一样了。这样子就可以避免破坏已经生成好的链接。" + +#: ../../content.rst:368 0783ef45de914a48af081fbf5978ae93 +msgid "" +"**Be careful when linking to a file from multiple documents:** Since the " +"first link to a file finalizes its location and Pelican does not define " +"the order in which documents are processed, using ``{attach}`` on a file " +"linked by multiple documents can cause its location to change from one " +"site build to the next. (Whether this happens in practice will depend on " +"the operating system, file system, version of Pelican, and documents " +"being added, modified, or removed from the project.) Any external sites " +"linking to the file's old location might then find their links broken. " +"**It is therefore advisable to use {attach} only if you use it in all " +"links to a file, and only if the linking documents share a single " +"directory.** Under these conditions, the file's output location will not " +"change in future builds. In cases where these precautions are not " +"possible, consider using ``{static}`` links instead of ``{attach}``, and " +"letting the file's location be determined by the project's " +"``STATIC_SAVE_AS`` and ``STATIC_URL`` settings. (Per-file ``save_as`` and" +" ``url`` overrides can still be set in ``EXTRA_PATH_METADATA``.)" +msgstr "" +"**当同一文件被多个推文链接时需要尤其小心:** " +"第一次链接到文件时,Pelican就会确定其最终位置,而Pelican处理推文的顺序是不能确定的,因此多个推文使用 ``{attach}`` " +"链接到同一文件时,每一次站点生成后该文件的最终位置是无法确定的(这种情况发生与否取决于操作系统、文件系统、Pelican的版本、推文从项目中的添加修改移除)。当这种情况发生时,其他站点到本站点文件旧位置的链接就会损坏。**因此,只有当静态文件只被一篇推文链接,或链接到某静态文件的推文都在同一目录下时才使用" +" {attach}**。在这种情况下,该文件的输出位置在站点构建中不会变化。如果无法保证上述条件来预防链接损坏,可以考虑使用 " +"``{static}`` 来替换 ``{attach}`` 。如此,文件的最终位置就由 ``STATIC_SAVE_AS`` 和 " +"``STATIC_URL`` 来决定。(每个文件的 ``save_as`` 和 ``url`` 仍然可以通过更改 " +"``EXTRA_PATH_METADATA`` 设置来覆盖)" + +#: ../../content.rst:385 85347094a7f741ac96f2489969660181 +msgid "" +"When using ``{attach}``, any parent directory in ``*_URL`` / " +"``*_SAVE_AS`` settings should match each other. See also: :ref:`url-" +"settings`" +msgstr "" +"当使用{attach}时, ``*_URL`` / ``*_SAVE_AS`` 设置中的所有父目录都应该互相对应。具体请参见 " +":ref:`URL配置` 。" + +#: ../../content.rst:389 eaefe7d009be4a5797cabee8bf1230a4 +msgid "Linking to authors, categories, index and tags" +msgstr "链接到作者、分类、索引、标签" + +#: ../../content.rst:391 2c5b13a80a6b49acadeed0ff3d71236f +msgid "" +"You can link to authors, categories, index and tags using the " +"``{author}name``, ``{category}foobar``, ``{index}`` and ``{tag}tagname`` " +"syntax." +msgstr "" +"您可以通过 ``{author}name`` 、 ``{category}foobar`` 、 ``{index}`` 和 " +"``{tag}tagname`` 这样的语法链接到作者、分类、索引和标签。" + +#: ../../content.rst:395 ec56f8d188bf4e41a961f00535b16dfb +msgid "Deprecated internal link syntax" +msgstr "已弃用的内部链接语法" + +#: ../../content.rst:397 01e39bc18c964baaaf43779b37fbaa01 +msgid "" +"To remain compatible with earlier versions, Pelican still supports " +"vertical bars (``||``) in addition to curly braces (``{}``) for internal " +"links. For example: ``|filename|an_article.rst``, ``|tag|tagname``, " +"``|category|foobar``. The syntax was changed from ``||`` to ``{}`` to " +"avoid collision with Markdown extensions or reST directives. Similarly, " +"Pelican also still supports linking to static content with " +"``{filename}``. The syntax was changed to ``{static}`` to allow linking " +"to both generated articles and pages and their static sources." +msgstr "" +"为了保持和早期版本的兼容,在内部链接中除了使用花括号( ``{}`` )外,还支持在内部链接中使用竖线( ``||`` )。例如, " +"``|filename|an_article.rst`` 、 ``|tag|tagname`` 、 ``|category|foobar`` " +"。将语法中的 ``||`` 改到 ``{}`` 是为了避免和Markdown或reST的语法和指令相冲突。类似地, ``{filename}`` " +"虽然仍能使用,但是其语法已经改为了 ``{static}`` 。 ``{static}`` 既可以链接到文章或页面,也可以链接到静态资源。" + +#: ../../content.rst:405 375eca8f0c324943a3d5ba60f46e8aa7 +msgid "Support for the old syntax may eventually be removed." +msgstr "对旧语法地支持最终会被移除。" + +#: ../../content.rst:408 d1e5719616d5454a810ed1562d0610fa +msgid "Including other files" +msgstr "引入其他文件" + +#: ../../content.rst:409 b429cad5b7904db5b16053bd9dbc7bb6 +msgid "Both Markdown and reStructuredText syntaxes provide mechanisms for this." +msgstr "Markdown和reStructuredText的语法中都提供了这种机制" + +#: ../../content.rst:411 fa6e783b42c84147a18f2a23136a8212 +msgid "" +"Following below are some examples for **reStructuredText** using `the " +"include directive`_:" +msgstr "下面是 **reStructuredText** 使用 `include指令`_ 的一些例子:" + +#: ../../content.rst:417 ecbaa72c1df64857b2e720ab7055e258 +msgid "" +"Include a fragment of a file delimited by two identifiers, highlighted as" +" C++ (slicing based on line numbers is also possible):" +msgstr "下面的例子,引入了一段用一对标识符分隔的文件片段,并指定以C++语法进行高亮显示。(同样支持通过行号指定片段)" + +#: ../../content.rst:426 04bf027b52124b669b3b56ea50ac240d +msgid "" +"Include a raw HTML file (or an inline SVG) and put it directly into the " +"output without any processing:" +msgstr "将一HTML文件(或者一个行内SVG)直接引入,并且不进行任何处理直接将其作为输出:" + +#: ../../content.rst:433 612365f02c5a471295f2f3601f0d95e9 +msgid "" +"For **Markdown**, one must rely on an extension. For example, using the " +"`mdx_include plugin`_:" +msgstr "对于 **Markdown** ,若要进行文件引入,就必须使用扩展插件。例如可以使用 `mdx_include plugin`_ :" + +#: ../../content.rst:443 30c87f2b5e594c24ac8ab719614c71fd +msgid "Importing an existing site" +msgstr "导入已有站点" + +#: ../../content.rst:445 f0f0ccd87dcc4afebe9b7d954481eeb2 +msgid "" +"It is possible to import your site from several other blogging sites " +"(like WordPress, Tumblr, ..) using a simple script. See :ref:`import`." +msgstr "您可以使用一个简单的脚本导入已有的站点(例如WordPress、Tumblr)。详见 :ref:`导入已有站点` 。" + +#: ../../content.rst:449 48de7111f6ec49ec8637c06e7d774f26 +msgid "Translations" +msgstr "翻译" + +#: ../../content.rst:451 0d1f7e6d14b746e2bb40f200c23f89a5 +msgid "" +"It is possible to translate articles. To do so, you need to add a " +"``lang`` meta attribute to your articles/pages and set a ``DEFAULT_LANG``" +" setting (which is English [en] by default). With those settings in " +"place, only articles with the default language will be listed, and each " +"article will be accompanied by a list of available translations for that " +"article." +msgstr "" +"一篇文章可以有多个翻译版本。对于这类文章,您需要加上元数据属性 ``lang`` ,并且配置 ``DEFAULT_LANG`` " +"(默认为[en])。完成上述配置后,文章列表中列出的是默认语言版本的文章,文章内容页中会列出所有可用的翻译版本供读者选择。" + +#: ../../content.rst:459 61df3a34ac194a2eb037c1b4e868265c +msgid "" +"This core Pelican functionality does not create sub-sites (e.g. " +"``example.com/de``) with translated templates for each language. For such" +" advanced functionality the `i18n_subsites plugin`_ can be used." +msgstr "" +"Pelican的这个核心功能并不会给同一文章的不同语言版本创建子站点(例如 ``example.com/de`` " +")。但是如果需要创建子站点的话,可以使用扩展插件 `i18n_subsites plugin`_ 。" + +#: ../../content.rst:464 c05ed4b06cec45248f976be0580b257c +msgid "" +"By default, Pelican uses the article's URL \"slug\" to determine if two " +"or more articles are translations of one another. (This can be changed " +"with the ``ARTICLE_TRANSLATION_ID`` setting.) The slug can be set " +"manually in the file's metadata; if not set explicitly, Pelican will " +"auto-generate the slug from the title of the article." +msgstr "" +"默认情况下,Pelican会使用文章的URL “slug” 来判断当前文档是否是同一篇文章的不同翻译版本。(这一点可以通过配置 " +"``ARTICLE_TRANSLATION_ID`` " +"来改变)slug可以通过元数据手动指定,若没有,Pelican会根据文章的标题(title)来自动生成slug。" + +#: ../../content.rst:470 e448fdfd15c046fb8c641fcead12b26d +msgid "" +"Here is an example of two articles, one in English and the other in " +"French." +msgstr "以下的例子是一篇文章有英语和法语两个翻译版本的情况。" + +#: ../../content.rst:472 62a186c5d6194a37b884343a858f2200 +msgid "The English article::" +msgstr "英语文章如下:" + +#: ../../content.rst:482 b32c5433696e4a09adb804cef323b3f1 +msgid "And the French version::" +msgstr "法语版本为:" + +#: ../../content.rst:492 b4d1d69ebe22462d985ebe2cfc8cd1e8 +msgid "" +"Post content quality notwithstanding, you can see that only item in " +"common between the two articles is the slug, which is functioning here as" +" an identifier. If you'd rather not explicitly define the slug this way, " +"you must then instead ensure that the translated article titles are " +"identical, since the slug will be auto-generated from the article title." +msgstr "值得注意的是,以上两篇文章的slug是相同的,即slug作为唯一标识符存在。若您没有手动指定slug,那么请保证同一篇文章的不同翻译版本的标题是相同的。如此,由于slug会根据文章标题自动生成,它们隐含的slug会是相同的。" + +#: ../../content.rst:498 2e50d70746634009a070dc41068fbc89 +msgid "" +"If you do not want the original version of one specific article to be " +"detected by the ``DEFAULT_LANG`` setting, use the ``translation`` " +"metadata to specify which posts are translations::" +msgstr "" +"如果您不希望某篇文章的原始版本以 ``DEFAULT_LANG`` 翻译版本出现,可以使用 ``translation`` " +"元数据来指出本推文是一个非默认语言的翻译版本。(译者注:例如,设置的默认语言为zh_CN,如果某篇推文的原始版本是英文而不是中文,那么对于中文翻译版本的就可以指定其translations元数据为true,即对于该推文来说,中文版本是翻译后的版本)" + +#: ../../content.rst:515 01ecf34fd1e440ea908fd181001b38b6 +msgid "Syntax highlighting" +msgstr "语法高亮" + +#: ../../content.rst:517 4d7eebd1886347b383ea3b1c517b821d +msgid "" +"Pelican can provide colorized syntax highlighting for your code blocks. " +"To do so, you must use the following conventions inside your content " +"files." +msgstr "您可以按照下面的约定在文件内容中添加代码块,Pelican可以完成五彩缤纷的语法高亮。" + +#: ../../content.rst:520 5896f772fcd04f309e2188040f0bea60 +msgid "" +"For reStructuredText, use the ``code-block`` directive to specify the " +"type of code to be highlighted (in these examples, we'll use " +"``python``)::" +msgstr "对于reStructuredText,使用 ``code-block`` 指令指定代码所使用的语言(此处以``python``为例):" + +#: ../../content.rst:527 ec6ec4c325c6406ba3b00437116b84b8 +msgid "" +"For Markdown, which utilizes the `CodeHilite extension`_ to provide " +"syntax highlighting, include the language identifier just above the code " +"block, indenting both the identifier and the code::" +msgstr "Markdown则使用 `CodeHilite extension`_ 扩展插件来完成语法高亮。在代码上方标记所用语言,同时将其与代码都进行缩进:" + +#: ../../content.rst:541 58220db84e4d4ab7950dad7ad36ea1b5 +msgid "" +"The specified identifier (e.g. ``python``, ``ruby``) should be one that " +"appears on the `list of available lexers " +"`_." +msgstr "" +"指定语言的标识符(例如 ``python``、``ruby``)必须是在 `可用列表 " +"`_ 中列出的。" + +#: ../../content.rst:544 cb10d4bc6f4c44008ce8324df993c2ed +msgid "" +"When using reStructuredText the following options are available in the " +"`code-block` directive:" +msgstr "对于reStructuredText,下面列出的选项可以在 `code-block` 命令中使用:" + +#: ../../content.rst:548 3598816f6ab54705aa545de3eb95a22c +msgid "Option" +msgstr "选项" + +#: ../../content.rst:548 2861fb4a308a443c971110b5757e9d13 +msgid "Valid values" +msgstr "有效值" + +#: ../../content.rst:550 638a4299a7d346659254d7aa6e2485e7 +msgid "anchorlinenos" +msgstr "anchorlinenos" + +#: ../../content.rst:550 ../../content.rst:574 ../../content.rst:576 +#: 0e32384143484934af18e224e414a45b 217edf5016f74e23a906623d077191ff +#: c6b0e9c5aa4340329b2fe203222055df +msgid "N/A" +msgstr "N/A" + +#: ../../content.rst:550 e219ff4135fb45e8b27fdd71a874ffee +msgid "If present, wrap line numbers in ```` tags." +msgstr "指定行号是否显示在 标签中" + +#: ../../content.rst:551 8e95919e90e14208a8150c2c52cb20b9 +msgid "classprefix" +msgstr "classprefix" + +#: ../../content.rst:551 ../../content.rst:559 ../../content.rst:561 +#: ../../content.rst:570 ../../content.rst:572 ../../content.rst:577 +#: ../../content.rst:578 96789c1cd92545b1a9153e9be1c5726d +#: 9e591c65044b4ca4aa876e0dd5ba94bc a1920b40389d4b25a66cb0e755389960 +#: bee284b2086a40a4aa28bc87c916d9df cb11442c371b48349bba579e7dfce72b +#: e330b50a8cea43a5b55771f04fc4e688 f28e8d5bd9544ccbbcb99037c02f08cf +msgid "string" +msgstr "string" + +#: ../../content.rst:551 f6d85a8a8ec74c46a313bcfb72f5283a +msgid "String to prepend to token class names" +msgstr "要添加到用于语法高亮的css类名前面的字符串" + +#: ../../content.rst:552 4fd6cd04ea444c389c6f77030eb0a123 +msgid "hl_lines" +msgstr "hl_lines" + +#: ../../content.rst:552 aa5112c2c73e40d9940b5a21eaa1d650 +msgid "numbers" +msgstr "numbers" + +#: ../../content.rst:552 1b03b3add35c44eeaef4d3c31dd51fb4 +msgid "" +"List of lines to be highlighted, where line numbers to highlight are " +"separated by a space. This is similar to ``emphasize-lines`` in Sphinx, " +"but it does not support a range of line numbers separated by a hyphen, or" +" comma-separated line numbers." +msgstr "需要高亮的行号列表,行号之间以空格隔开。这与Sphinx中的 ``emphasize-lines`` 类似,但是不支持使用连字符和逗号指定行号范围。" + +#: ../../content.rst:559 abe7266edc704a0b857856e92fd2022b +msgid "lineanchors" +msgstr "lineanchors" + +#: ../../content.rst:559 baa7634eb7e646e39698c24bc3ee82af +msgid "Wrap each line in an anchor using this string and -linenumber." +msgstr "用此处指定的字符串和 “-行号”给每一行都加上锚点。" + +#: ../../content.rst:561 21ccf81937cf4fe38f556f2852524269 +msgid "linenos" +msgstr "linenos" + +#: ../../content.rst:561 2b1b4a9f23e448d4baaf5d36b896a5ba +msgid "" +"If present or set to \"table\", output line numbers in a table; if set to" +" \"inline\", output them inline. \"none\" means do not output the line " +"numbers for this table." +msgstr "开启此选项或将此选项设为“table”时,输出表格时会带上行号;如果设为“inline”,则内联输出行号;如果设为“none”,则不输出行号。" + +#: ../../content.rst:566 d9813ccee6d24eae8c539fd9cc0ddd54 +msgid "linenospecial" +msgstr "linenospecial" + +#: ../../content.rst:566 ../../content.rst:568 ../../content.rst:569 +#: 1eeb1f08e07e4f95a03cbeca48b422a6 bac61cf96bc3466985c9f4d5b934055b +#: eadc4e3c92094e589c3b931d20cd97ab +msgid "number" +msgstr "number" + +#: ../../content.rst:566 ff3b3aa5e45e4a3a837400e8333f7c5a +msgid "If set, every nth line will be given the 'special' CSS class." +msgstr "是否每隔几行就设置一行特殊的css样式类。" + +#: ../../content.rst:568 e32730e901bb460e975410fe26a9432f +msgid "linenostart" +msgstr "linenostart" + +#: ../../content.rst:568 48d2621a74174b82a71d52a921e2f60f +msgid "Line number for the first line." +msgstr "起始行的行号。" + +#: ../../content.rst:569 fcb4c1088bb04cd9ba6e4273e3013369 +msgid "linenostep" +msgstr "linenostep" + +#: ../../content.rst:569 1ce5e05481f84c7f84964bb1d2e3e9ae +msgid "Print every nth line number." +msgstr "每隔几行输出一次" + +#: ../../content.rst:570 110dc8da76774b3ca517ad93c53fbd3f +msgid "lineseparator" +msgstr "lineseparator" + +#: ../../content.rst:570 b9ba8609393c4ec8b964481ae2c66614 +msgid "String to print between lines of code, '\\n' by default." +msgstr "每行输出代码之间的输出字符串,默认为 '\\n'。" + +#: ../../content.rst:572 8b336c4c8e65427ebb1a89e94232199a +msgid "linespans" +msgstr "linespans" + +#: ../../content.rst:572 07c2d6ca97084859b47b09237633a4ab +msgid "Wrap each line in a span using this and -linenumber." +msgstr "使用指定的字符串和“-行号”将每一行包装在一个span中。" + +#: ../../content.rst:574 bd0c5e4ba73d458aa14fce20c1347910 +msgid "nobackground" +msgstr "nobackground" + +#: ../../content.rst:574 07672d498e2f4b6e8d4da4b5382a34f0 +msgid "If set, do not output background color for the wrapping element" +msgstr "若设置,则不为元素输出背景颜色" + +#: ../../content.rst:576 a054798a57814cfd9b363d7048dd9e1e +msgid "nowrap" +msgstr "nowrap" + +#: ../../content.rst:576 de085518cf324de4b6d917c616e2b7dd +msgid "If set, do not wrap the tokens at all." +msgstr "若设置,则不对token进行换行处理。" + +#: ../../content.rst:577 5989452c45bd4cc187e1cd1cfb88b440 +msgid "tagsfile" +msgstr "tagsfile" + +#: ../../content.rst:577 74b9388dcbe048ff824108bafc0bf72b +msgid "ctags file to use for name definitions." +msgstr "用于命名定义的ctags文件" + +#: ../../content.rst:578 0b355baf272c4e87a18b1594b311258f +msgid "tagurlformat" +msgstr "tagurlformat" + +#: ../../content.rst:578 dde5f2fd922b4b45b5eca083527dd93a +msgid "format for the ctag links." +msgstr "用于ctag链接的格式" + +#: ../../content.rst:581 e034ff3a3ee44ef185f8c3aed60fc692 +msgid "" +"Note that, depending on the version, your Pygments module might not have " +"all of these options available. Refer to the *HtmlFormatter* section of " +"the `Pygments documentation `_ for" +" more details on each of the options." +msgstr "" +"请注意,由于版本的不同,Pygments模块可能不完全支持上述选项。请参考 `Pygments文档 " +"`_ 中 *HtmlFormatter* " +"一节获取每个选项的详细信息。" + +#: ../../content.rst:586 e7df88ffb2d4475ca19259b222d1ab3e +msgid "" +"For example, the following code block enables line numbers, starting at " +"153, and prefixes the Pygments CSS classes with *pgcss* to make the names" +" more unique and avoid possible CSS conflicts::" +msgstr "" +"举个例子,下面的代码块开启了行号显示,从153行开始输出,并且指定Pygments的CSS类以 *pgcss* " +"为前缀,使得类名更为独特并避免可能的CSS冲突:" + +#: ../../content.rst:597 fc9b8b1fa7364ce1a274281a8e2e7237 +msgid "" +"It is also possible to specify the ``PYGMENTS_RST_OPTIONS`` variable in " +"your Pelican settings file to include options that will be automatically " +"applied to every code block." +msgstr "" +"您也可以在Pelican的配置文件中指定 ``PYGMENTS_RST_OPTIONS`` " +",如此就可以让Pelican自动在每个代码块上使用指定的选项。" + +#: ../../content.rst:601 b51dfbadd3bc42a483611d7013a87241 +msgid "" +"For example, if you want to have line numbers displayed for every code " +"block and a CSS prefix, you would set this variable to::" +msgstr "" +"举个例子,若您希望每个代码块都显示行号,并且在CSS类名前都加上前缀pgcss,就可以像这样设置 ``PYGMENTS_RST_OPTIONS``" +" :" + +#: ../../content.rst:606 82a9f33cc7c9493e8d8772f6c6fb63da +msgid "" +"If specified, settings for individual code blocks will override the " +"defaults in your settings file." +msgstr "" +"若指定了 ``PYGMENTS_RST_OPTIONS`` ,同时也为代码块单独指定了一些选项,单独指定的会将 " +"``PYGMENTS_RST_OPTIONS`` 覆盖。" + +#: ../../content.rst:610 d2baf0b12ba148f0af9ccab86542e35f +msgid "Publishing drafts" +msgstr "发布草稿" + +#: ../../content.rst:612 2ba53426b76742e6980e6700c94d3d96 +msgid "" +"If you want to publish an article or a page as a draft (for friends to " +"review before publishing, for example), you can add a ``Status: draft`` " +"attribute to its metadata. That article will then be output to the " +"``drafts`` folder and not listed on the index page nor on any category or" +" tag page." +msgstr "" +"如果您想要以草稿的形式发布文章或页面(例如在正式发布前给朋友预览),可以添加元数据属性 ``Status: draft`` 。如此,文章就会输出到" +" ``drafts`` 文件夹中,并且不会被列在首页、分类或是标签页面中。" + +#: ../../content.rst:617 e3a756e1580d48378a16946caeb79c8a +msgid "" +"If your articles should be automatically published as a draft (to not " +"accidentally publish an article before it is finished), include the " +"status in the ``DEFAULT_METADATA``::" +msgstr "" +"若您希望文章默认以草稿形式发布(可以防止在完成文章前不小心将其正式发布),可以将此status属性加在 ``DEFAULT_METADATA`` " +"中:" + +#: ../../content.rst:625 c4b74b80b8714eb2a69d81f42f6e3e27 +msgid "" +"To publish a post when the default status is ``draft``, update the post's" +" metadata to include ``Status: published``." +msgstr "要发布当前处于 ``draft`` 状态的推文,更新推文的元数据,使其中包括 ``Status: published``。" + +#: ../../content.rst:629 f8baadb48b12467aaa1025f018ab6621 +msgid "Hidden Posts" +msgstr "隐藏推文" + +#: ../../content.rst:631 eb5efca86b2d4432a49703306334591a +msgid "" +"Like pages, posts can also be marked as ``hidden`` with the ``Status: " +"hidden`` attribute. Hidden posts will be output to ``ARTICLE_SAVE_AS`` as" +" expected, but are not included by default in tag, category, and author " +"indexes, nor in the main article feed. This has the effect of creating an" +" \"unlisted\" post." +msgstr "" +"和页面一样,推文也能通过 ``Status: hidden`` 标记为隐藏状态。隐藏的推文会输出到 ``ARTICLE_SAVE_AS`` " +"指定的目录中,这些推文“不会被列出”,即不会在标签、分类、作者主页、feed中出现。" + +#: ../../content.rst:637 2d67772b24bb40748d56dc3938195ce6 +msgid "Skip Posts" +msgstr "忽略推文" + +#: ../../content.rst:639 0c97c429a7a74ba4830851491829d63e +msgid "" +"Posts marked with ``skip`` status are ignored entirely. They are not " +"processed nor output to the ``ARTICLE_SAVE_AS`` path. Such posts will " +"similarly not be included in indexes or feeds." +msgstr "" +"状态设为了 ``skip`` 的推文将会被完全忽略。也就是说,他们不会被处理,也不会输出到 ``ARTICLE_SAVE_AS`` " +"指定的目录中。同样,被忽略的推文不会出现在索引或者订阅源中。" diff --git a/docs/locale/zh_CN/LC_MESSAGES/contribute.po b/docs/locale/zh_CN/LC_MESSAGES/contribute.po new file mode 100644 index 00000000..5199f51a --- /dev/null +++ b/docs/locale/zh_CN/LC_MESSAGES/contribute.po @@ -0,0 +1,669 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2010–2024 +# This file is distributed under the same license as the PELICAN package. +# FIRST AUTHOR , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: PELICAN 4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-07-13 11:46+0800\n" +"PO-Revision-Date: 2024-06-27 19:00+0800\n" +"Last-Translator: GeorgeHu \n" +"Language: zh_CN\n" +"Language-Team: \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.17.0\n" + +#: ../../contribute.rst:2 848b6c0ec944440791d56b25e314a8ab +msgid "Contributing and feedback guidelines" +msgstr "项目贡献与意见反馈" + +#: ../../contribute.rst:4 e8b8762778fd461db0934f07e4fc1fc5 +msgid "" +"There are many ways to contribute to Pelican. You can improve the " +"documentation, add missing features, and fix bugs (or just report them). " +"You can also help out by reviewing and commenting on `existing issues " +"`_." +msgstr "" +"有很多渠道可以参与到贡献项目中来,例如帮助改进文档、添加缺失的特性、修复与报告bug。可以从查看 `已有 issues " +"`_ 开始。" + +#: ../../contribute.rst:9 103b2f2862c4469695e4c6aff2321a8d +msgid "" +"Don't hesitate to fork Pelican and submit an issue or pull request on " +"GitHub. When doing so, please consider the following guidelines." +msgstr "随时随地都可以fork Pelican或是在GitHub上提交issue或PR。" + +#: ../../../CONTRIBUTING.rst:2 5ad44a6fdf0b45eaaa800023139694f8 +msgid "Filing issues" +msgstr "提出issue" + +#: ../../../CONTRIBUTING.rst:4 c7e2bb966f49419aba7ed7027a977043 +msgid "Before you submit a new issue, try `asking for help`_ first." +msgstr "在你提交一个新的issue之前,可以先尝试 `请求他人帮助`_ 。" + +#: ../../../CONTRIBUTING.rst:5 a287bb06699b4db79d6dd7491bbe031b +msgid "" +"If determined to create a new issue, first search `Pelican Discussions`_ " +"and `existing issues`_ (open and closed) to see if your question has " +"already been answered previously." +msgstr "" +"当你决定要提出新的issue时,先在 `Pelican的讨论版`_ 和 `已有issues`_ " +"中搜索一下,(开放关闭的issue都搜一下),来看看你的问题是不是有人之前已经提出过。" + +#: ../../../CONTRIBUTING.rst:14 d4a600f2338b458e822aba90e54d4cfd +msgid "How to get help" +msgstr "如何获取帮助" + +#: ../../../CONTRIBUTING.rst:16 db3264afde384c2891d9be7205578556 +msgid "Before you ask for help, please make sure you do the following:" +msgstr "在寻求帮助之前,请先尝试如下步骤:" + +#: ../../../CONTRIBUTING.rst:18 3581147764244a548cd2898faaa7799a +msgid "" +"Read the documentation_ thoroughly. If in a hurry, at least use the " +"search field that is provided at top-left on the documentation_ pages. " +"Make sure you read the docs for the Pelican version you are using." +msgstr "" +"完整阅读 documentation_ 。如果你很急,至少先在 documentation_ " +"左上角的搜索栏中尝试搜索。确保你阅读的文档和使用的Pelican版本相匹配。" + +#: ../../../CONTRIBUTING.rst:21 d8e467909ec64ba7900da93b3765bfa6 +msgid "" +"Use a search engine (e.g., DuckDuckGo, Google) to search for a solution " +"to your problem. Someone may have already found a solution, perhaps in " +"the form of a ':pelican-doc:`plugins` or a specific combination of " +"settings." +msgstr "" +"使用搜索引擎(例如 DuckDuckGo、Google)搜索遇到问题的解决方案。互联网上可能已经有人遇到过相同的问题,解决方法可能包括使用某些 " +":pelican-doc:`plugins` 或配置一系列的设置选项。" + +#: ../../../CONTRIBUTING.rst:25 2011839b36504c41b307cc9f817c4a46 +msgid "Try reproducing the issue in a clean environment, ensuring you are using:" +msgstr "尝试在一个尽可能简单的环境中重现问题,并确保以下几点:" + +#: ../../../CONTRIBUTING.rst:27 2d64217ea3e54dc58a371fc11a6ece8e +msgid "" +"latest Pelican release (or an up-to-date Git clone of Pelican ``main`` " +"branch)" +msgstr "使用最新版本的Pelican(或是用Git克隆Pelican的main分支)" + +#: ../../../CONTRIBUTING.rst:28 721ca09c5a9a495b9fbb6aa86df8be28 +msgid "latest releases of libraries used by Pelican" +msgstr "将Pelican使用的库升级到最新版本" + +#: ../../../CONTRIBUTING.rst:29 bbe722bd2be748219d38c134f29569dd +msgid "no plugins or only those related to the issue" +msgstr "此环境中没有使用插件或是只使用和问题相关的插件" + +#: ../../../CONTRIBUTING.rst:31 e9f337f01ca546be93bd1d18884a1685 +msgid "" +"**NOTE:** The most common sources of problems are anomalies in (1) " +"themes, (2) plugins, (3) settings files, and (4) ``make``/``invoke`` " +"automation wrappers. If you can't reproduce your problem when using the " +"following steps to generate your site, then the problem is almost " +"certainly with one of the above-listed elements (and not Pelican " +"itself)::" +msgstr "" +"**注意:** 最常见的问题基本上都产生于主题、插件、设置文件和自动化工具 ``make``/``invoke`` " +"中。如果按照下述步骤生成站点后无法复现之前的问题,那么几乎可以肯定问题出在这四个地方,而不在Pelican本身:" + +#: ../../../CONTRIBUTING.rst:41 1420bb3dd096480289b3da1534d7bf64 +msgid "" +"If you can generate your site without problems using the steps above, " +"then your problem is unlikely to be caused by Pelican itself, and " +"therefore please consider reaching out to the maintainers of the " +"plugins/theme you are using instead of raising the topic with the Pelican" +" core community." +msgstr "如果按照上述步骤能够正常生成站点,那么你的问题不太可能是由Pelican本身导致的,请考虑联系对应插件/主题的维护者,而不是在Pelican内核的社区中提出问题。" + +#: ../../../CONTRIBUTING.rst:46 bdb7575fa4c74c0891fd686794cc84fd +msgid "" +"If despite the above efforts you still cannot resolve your problem, be " +"sure to include in your inquiry the following information, preferably in " +"the form of links to content uploaded to a `paste service`_, GitHub " +"repository, or other publicly-accessible location:" +msgstr "" +"经过上面这些努力,若您仍无法解决问题,确保你的提问中包括如下信息,可以以 `paste service`_ " +"链接、GitHub仓库,或者其他可公开获取的形式提供:" + +#: ../../../CONTRIBUTING.rst:51 b559dc6ca72649baa754cb14d1ac77ca +msgid "" +"Describe what version of Pelican you are running (output of ``pelican " +"--version`` or the HEAD commit hash if you cloned the repo) and how " +"exactly you installed it (the full command you used, e.g. ``python -m pip" +" install pelican``)." +msgstr "" +"描述正在运行的Pelican版本信息(可以通过 ``pelican --version`` 命令得到,如果clone的源仓库则可以查看HEAD " +"commit的哈希值),以及你是如何安装Pelican的(要包括使用到的命令,例如 ``python -m pip install " +"pelican``)" + +#: ../../../CONTRIBUTING.rst:54 d09a0393a4c1462b878c1adf31a7537d +msgid "" +"If you are looking for a way to get some end result, prepare a detailed " +"description of what the end result should look like (preferably in the " +"form of an image or a mock-up page) and explain in detail what you have " +"done so far to achieve it." +msgstr "如果你希望产生某种特定的最终结果,请详细描述此最终结果是什么样的(最好以图片或者伪页面的形式),,并且细致讲述你做了哪些尝试。" + +#: ../../../CONTRIBUTING.rst:58 720ee9dbccc74dccbabb994a2d36638d +msgid "" +"If you are trying to solve some issue, prepare a detailed description of " +"how to reproduce the problem. If the issue cannot be easily reproduced, " +"it cannot be debugged by developers or volunteers. Describe only the " +"**minimum steps** necessary to reproduce it (no extra plugins, etc.)." +msgstr "" +"如果你在尝试解决某些问题,请详细描述如何复现此问题。如果问题很难被复现,其他开发者和志愿者就很难进行调试。尽量只写出复现该问题的 **最少步骤**" +" (无额外插件)。" + +#: ../../../CONTRIBUTING.rst:62 34bdc49c617643d8ae7adb6a433a88fe +msgid "" +"Upload your settings file or any other custom code that would enable " +"people to reproduce the problem or to see what you have already tried to " +"achieve the desired end result." +msgstr "上传你的配置文件以及所有自定义过的代码,这可以使得大家能够重现问题或者看到你已经做出的尝试。" + +#: ../../../CONTRIBUTING.rst:65 03c88e23c7b54117aa69e003c8bbef6e +msgid "" +"Upload detailed and **complete** output logs and backtraces (remember to " +"add the ``--debug`` flag: ``pelican --debug content [...]``)" +msgstr "" +"上传详细 **完整** 的输出日志以及backtraces信息(记得在执行pelican命令时加上 ``--debug`` 标记: " +"``pelican --debug content [...]`` )" + +#: ../../../CONTRIBUTING.rst:71 953240a12cd64be7b9375a4571193314 +msgid "" +"Once the above preparation is ready, you can post your query as a new " +"thread in `Pelican Discussions`_. Remember to include all the information" +" you prepared." +msgstr "一旦做好了上述准备,就可以在 `Pelican Discussions`_ 中发起你的问题了。记得在请求中附上收集好的信息。" + +#: ../../../CONTRIBUTING.rst:75 e9f48bdfc6c744f282c70da3ac581052 +msgid "Contributing code" +msgstr "贡献代码" + +#: ../../../CONTRIBUTING.rst:77 888be6bde2de42a49705f29443a519c1 +msgid "" +"Before you submit a contribution, please ask whether it is desired so " +"that you don't spend a lot of time working on something that would be " +"rejected for a known reason. Consider also whether your new feature might" +" be better suited as a ':pelican-doc:`plugins` — you can `ask for help`_" +" to make that determination." +msgstr "" +"在提交代码修改前,请先询问是否需要此修改,以免你做的工作因为已知原因而被拒绝。想想要添加的新特性是否更适合以 :pelican-doc:`插件` " +"形式完成。可以通过 `如何获取帮助`_ 来帮助你作出决定。" + +#: ../../../CONTRIBUTING.rst:82 6e1329bbd8354c30b8ffa07f18894d3f +msgid "" +"Also, if you intend to submit a pull request to address something for " +"which there is no existing issue, there is no need to create a new issue " +"and then immediately submit a pull request that closes it. You can submit" +" the pull request by itself." +msgstr "另外,如果你的PR是为了解决一个目前没有在issue中出现过的问题,那么就没有必要先创建一个新的issue,而是可以直接提起PR。" + +#: ../../../CONTRIBUTING.rst:87 bca476812a33487c98d6aa840820671b +msgid "Using Git and GitHub" +msgstr "使用Git与GitHub" + +#: ../../../CONTRIBUTING.rst:89 51f8df6063a544baabf35ef3bae28e83 +msgid "" +"`Create a new branch`_ specific to your change (as opposed to making your" +" commits in the ``main`` branch)." +msgstr "`创建一个新的分支`_ 来标记你做的修改(而不是直接在主分支中提交)。" + +#: ../../../CONTRIBUTING.rst:91 6c419972402444d5976574902311e2d7 +msgid "" +"**Don't put multiple unrelated fixes/features in the same branch / pull " +"request.** For example, if you're working on a new feature and find a " +"bugfix that doesn't *require* your new feature, **make a new distinct " +"branch and pull request** for the bugfix. Similarly, any proposed changes" +" to code style formatting should be in a completely separate pull " +"request." +msgstr "" +"**不要把多个无关联的修复/特性修改放在同一个分支/拉去请求中。** 如果当你在做新特性的时候发现了一个bug可以修复,但修复这个bug " +"*不需要用到* 这个新特性, **那么请另外创建一个分支并拉取请求。** 类似的,任何对代码风格的格式化都应该在单独的请求中拉取。" + +#: ../../../CONTRIBUTING.rst:96 ced35621749d426a8e39fdeb9b0f7c90 +msgid "" +"Add a ``RELEASE.md`` file in the root of the project that contains the " +"release type (major, minor, patch) and a summary of the changes that will" +" be used as the release changelog entry. For example::" +msgstr "" +"在项目根目录下添加 ``RELEASE.md`` " +"文件,在其中包含release的类型(主要、次要、补丁),以及对项目改变的概述,这些内容会作为该release发布日志的一部分。下面是一个例子:" + +#: ../../../CONTRIBUTING.rst:104 ca6b2bf54f5248cbb7d90edb678478fc +msgid "" +"Check for unnecessary whitespace via ``git diff --check`` before " +"committing." +msgstr "在提交前使用 ``git diff --check`` 来检查是否有无意义的空白字符。" + +#: ../../../CONTRIBUTING.rst:105 48776b48e4924398b7632b8f05141e78 +msgid "" +"First line of your commit message should start with present-tense verb, " +"be 50 characters or less, and include the relevant issue number(s) if " +"applicable. *Example:* ``Ensure proper PLUGIN_PATH behavior. Refs #428.``" +" If the commit *completely fixes* an existing bug report, please use " +"``Fixes #585`` or ``Fix #585`` syntax (so the relevant issue is " +"automatically closed upon PR merge)." +msgstr "" +"commit信息的第一行应该以现在时动词开头,并且第一行尽量保持在50字以下,并且包含相关联issue的编号(如果有的话)。 例如: " +"``Ensure proper PLUGIN_PATH behavior. Refs #428.`` 如果此项提交 *完全修复* " +"了某项已报告的bug,请使用例如 ``Fixes #585`` 或 ``Fix #585`` " +"的语法(这样的话相关的issue会在PR合并后自动关闭)。" + +#: ../../../CONTRIBUTING.rst:110 75acb68d9eaa4230ae230f016bf77b6c +msgid "" +"After the first line of the commit message, add a blank line and then a " +"more detailed explanation (when relevant)." +msgstr "在第一行commit信息后添加一行空白行,再进行更多相关的细节描述。" + +#: ../../../CONTRIBUTING.rst:112 51e3a16f76364d91a9abf219c731ff80 +msgid "" +"`Squash your commits`_ to eliminate merge commits and ensure a clean and " +"readable commit history." +msgstr "`压缩commit`_ 来消除合并commits,确保你的commit历史记录是干净可读的。" + +#: ../../../CONTRIBUTING.rst:114 01ddd9df01024d38a8de79122a91cc07 +msgid "" +"After you have issued a pull request, the continuous integration (CI) " +"system will run the test suite on all supported Python versions and check" +" for code style compliance. If any of these checks fail, you should fix " +"them. (If tests fail on the CI system but seem to pass locally, ensure " +"that local test runs aren't skipping any tests.)" +msgstr "在你发出PR后,持续集成(CI)系统会在所有支持的Python版本上运行测试套件,并且检查代码风格的合规性。如果出现了错误,你应该将其修复。(如果没有通过CI系统上的测试但是本地测试通过了,请再检查一下,确保在本地进行了所有CI系统中的检查)" + +#: ../../../CONTRIBUTING.rst:121 bc27587df397410a9bb272f0851756a3 +msgid "Contribution quality standards" +msgstr "贡献的质量标准" + +#: ../../../CONTRIBUTING.rst:123 2cf100b3e98b43e5b841493887a1d8be +msgid "" +"Adhere to the project's code style standards. See: `Development " +"Environment`_" +msgstr "遵循项目的代码风格标准。详见 `开发环境`_" + +#: ../../../CONTRIBUTING.rst:124 fffad000d6ca490291bd09cb18fcc75a +msgid "" +"Ensure your code is compatible with the `officially-supported Python " +"releases`_." +msgstr "确保你的代码可以兼容 `python的官方发布版本`_" + +#: ../../../CONTRIBUTING.rst:125 907e4426cbc643fb9075e32be169ba42 +msgid "" +"Add docs and tests for your changes. Undocumented and untested features " +"will not be accepted." +msgstr "请为你修改的内容添加文档与测试。未注有文档或没有对应测试的特性会被拒绝。" + +#: ../../../CONTRIBUTING.rst:127 d2bcbeeb9c0541c2a5ac5ec589a16ca4 +msgid "" +":pelican-doc:`Run all the tests ` **on all versions of Python" +" supported by Pelican** to ensure nothing was accidentally broken." +msgstr "" +"**在Pelican支持的所有Python版本上** :pelican-doc:`执行所有测试 ` " +",以确保没有意料之外的问题。" + +#: ../../../CONTRIBUTING.rst:130 26daa76aea674039be278882a95422f5 +msgid "" +"Check out our `Git Tips`_ page or `ask for help`_ if you need assistance " +"or have any questions about these guidelines." +msgstr "若需要帮助或对以上指南有任何疑惑,还可以查看我们的 `Git提示`_ 页面和 `请求帮助`_ 部分。" + +#: ../../contribute.rst:15 b4a94275e9c14d8795fa54473ee2f05b +msgid "Setting up the development environment" +msgstr "配置开发环境" + +#: ../../contribute.rst:17 a0eb6948883742d2a00665a576ef6aba +msgid "" +"While there are many ways to set up one's development environment, the " +"following instructions will utilize Pip_ and PDM_. These tools facilitate" +" managing virtual environments for separate Python projects that are " +"isolated from one another, so you can use different packages (and package" +" versions) for each." +msgstr "" +"在配置开发环境时往往有很多种方式,但下面的指南会使用 Pip_ 和 PDM_ " +"完成配置。这两个工具都可以用于管理虚拟环境,使得不同的Python项目相互隔离,这样就可以很方便的在不同的项目中使用不同的库(以及不同的库版本)。" + +#: ../../contribute.rst:22 4c5c4d91e6964d709d01102e32310642 +msgid "Please note that Python |min_python| is required for Pelican development." +msgstr "请注意,要进行Pelican的开发,至少需要Python |min_python|" + +#: ../../contribute.rst:24 5419157e28984a618fc1f0df81deb620 +msgid "" +"*(Optional)* If you prefer to `install PDM " +"`_ once for use with multiple" +" projects, you can install it via::" +msgstr "" +"*(可选)* 若您想要 `安装PDM `_ " +",可以使用下面这条命令:" + +#: ../../contribute.rst:29 a9d08dc294cb4857a58d2c63eae98a15 +msgid "" +"Point your web browser to the `Pelican repository`_ and tap the **Fork** " +"button at top-right. Then clone the source for your fork and add the " +"upstream project as a Git remote::" +msgstr "" +"在Web浏览器中进入 `Pelican的代码仓库`_ ,点击右上角的 **Fork** " +"按钮。然后克隆你自己的这份fork,最后添加项目的原仓库为远程仓库upstream:" + +#: ../../contribute.rst:38 4c8ebbf9839441ca9364eeb1d25b180f +msgid "" +"While PDM can dynamically create and manage virtual environments, we're " +"going to manually create and activate a virtual environment::" +msgstr "通过下面的命令可以手动创建并激活一个虚拟环境:" + +#: ../../contribute.rst:45 ../../contribute.rst:186 +#: 2afe046c20814fe5b3de9a65606505f1 6ec60e6a37b642edb68af7ed1bc82c0b +msgid "Install the needed dependencies and set up the project::" +msgstr "安装必需的依赖并配置项目:" + +#: ../../contribute.rst:50 59d5dabaab1d409c8873187e5664fe67 +msgid "Your local environment should now be ready to go!" +msgstr "现在,你的本地开发环境就配置完成了!" + +#: ../../contribute.rst:57 6fdce76f8ec64275b24366ff03cc6340 +msgid "Development" +msgstr "开发" + +#: ../../contribute.rst:59 1d1a814a5dba40bcb84ce824d6312805 +msgid "" +"Once Pelican has been set up for local development, create a topic branch" +" for your bug fix or feature::" +msgstr "在配置好Pelican的本地开发环境后,请先为你的bug修复或特性增加创建一个分支:" + +#: ../../contribute.rst:64 773cdd3a48894e11a62cb24b25ef4829 +msgid "" +"Now you can make changes to Pelican, its documentation, and/or other " +"aspects of the project." +msgstr "在切换到新建的分支后,就可以开始对Pelican的文档或其他内容做更改了。" + +#: ../../contribute.rst:68 bb120553218b4d0699998fbaf00d32c0 +msgid "Setting up ``git blame`` (optional)" +msgstr "配置 ``git blame`` (可选)" + +#: ../../contribute.rst:70 644fae63e5ea4e66a24e35a7ada3524c +msgid "" +"``git blame`` annotates lines in a file with information about the pull " +"request that last modified it. Sweeping shallow changes (like formatting)" +" can make that information less useful, so we keep a list of such changes" +" to be ignored. Run the following command to set this up in your " +"repository, adding ``--global`` if you want this setting to apply to all " +"repositories::" +msgstr "" +"``git blame`` " +"会在文件中的行上标注有关最后一次修改该行的PR信息。对浅层变化(如格式化)进行批量更改可能会使这些信息变得不那么有用,因此我们维护一个包含此类更改的列表,以便忽略它们。运行以下命令在您的存储库中设置此配置,如果希望此设置适用于所有存储库,请添加" +" ``--global`` :" + +#: ../../contribute.rst:78 68b7031047e94e03b0e1b0ea39d0355e +msgid "" +"As noted in a `useful article`_ about ``git blame``, there are other " +"related settings you may find to be beneficial::" +msgstr "就像在 `这篇文章`_ 中提到的,还可以进行一些可能有用的额外设置:" + +#: ../../contribute.rst:89 c33fd6178fb044dda7073f1fc2cce979 +msgid "Running the test suite" +msgstr "运行测试套件" + +#: ../../contribute.rst:91 5b51e49bc1ca42c6916c4dceed476057 +msgid "" +"Each time you make changes to Pelican, there are two things to do " +"regarding tests: check that the existing tests pass, and add tests for " +"any new features or bug fixes. The tests are located in " +"``pelican/tests``, and you can run them via::" +msgstr "" +"每次对Pelican做出修改后,在测试方面需要做两个工作:检查是否能通过已有的测试、为新增特性或bug修复创建测试。请将自动化测试文件放在 " +"``pelican/tests`` 中,接着执行以下命令:" + +#: ../../contribute.rst:98 0e03b29d89cc408e9374cb51f7147611 +msgid "" +"(For more on Invoke, see ``invoke -l`` to list tasks, or " +"https://pyinvoke.org for documentation.)" +msgstr "(执行 ``invoke -l`` 会列出可以调用的测试任务,关于此的更多文档请参阅 https://pyinvoke.org )" + +#: ../../contribute.rst:101 70aad8c721c64d2b8d32488dd9da851e +msgid "" +"In addition to running the test suite, it is important to also ensure " +"that any lines you changed conform to code style guidelines. You can " +"check that via::" +msgstr "除了运行测试套件外,还要确保修改了的部分遵循代码风格指南。可以通过下面的命令检查代码风格:" + +#: ../../contribute.rst:106 ../../contribute.rst:200 +#: b0ff008dde5e4e0b892e0fc2fa959b6a +msgid "" +"If style violations are found, many of them can be addressed " +"automatically via::" +msgstr "若存在不合规范风格的代码,大多数情况下可以通过下述命令自动纠正:" + +#: ../../contribute.rst:111 ebad1e2cb63a45d999d2d3e510711972 +msgid "" +"If code style violations are found in lines you changed, correct those " +"lines and re-run the ``invoke lint`` command until they have all been " +"fixed. You do not need to address style violations, if any, for code " +"lines you did not touch." +msgstr "如果在修改过的代码中有地方违反了代码风格规范,请纠正并再次运行上述命令,直到全部纠正。但是若是发现违反代码风格的地方并不是你修改的,请忽略之,不要进行纠正。" + +#: ../../contribute.rst:115 e208ada16ab8425e9fbbcd5f135f6574 +msgid "" +"After making your changes and running the tests, you may see a test " +"failure mentioning that \"some generated files differ from the expected " +"functional tests output.\" If you have made changes that affect the HTML " +"output generated by Pelican, and the changes to that output are expected " +"and deemed correct given the nature of your changes, then you should " +"update the output used by the functional tests. To do so, **make sure you" +" have both** ``en_EN.utf8`` **and** ``fr_FR.utf8`` **locales installed**," +" and then run the following command::" +msgstr "" +"在修改完代码,运行测试的过程中,你可能会看到测试失败中有提到“some generated files differ from the " +"expected functional tests output” " +"。这可能是由于你对代码的修改影响到了Pelican的HTML输出,若输出的结果确实是你想要的,请更新功能测试所用的输出用例。请确保你安装了 " +"``en_EN.utf8`` 和 ``fr_FR.utf8`` ,然后执行下述命令:" + +#: ../../contribute.rst:125 a4a3e16c3e0345c99cb2d8b674627afa +msgid "" +"You may also find that some tests are skipped because some dependency " +"(e.g., Pandoc) is not installed. This does not automatically mean that " +"these tests have passed; you should at least verify that any skipped " +"tests are not affected by your changes." +msgstr "你还可能会发现有一些测试由于缺少依赖(例如 Pandoc)而被跳过。这并不意味着通过了这些测试,请至少确保对代码的修改不会影响到这些被跳过的测试。" + +#: ../../contribute.rst:130 dd6db784c2534b0ea0842cb736dca7c3 +msgid "" +"You should run the test suite under each of the supported versions of " +"Python. This is best done by creating a separate Python environment for " +"each version. Tox_ is a useful tool to automate running tests inside " +"``virtualenv`` environments." +msgstr "" +"你应该在Pelican支持的所有Python版本下运行测试套件。一般会通过为每一个Python版本创建一个虚拟环境来实现这一点。Tox_ " +"是一个用于在 ``virtualenv`` 环境中自动运行测试的工具。" + +#: ../../contribute.rst:138 58fd644b4b7248ebb9c8ff899a2f90b1 +msgid "Running a code coverage report" +msgstr "运行代码测试覆盖报告" + +#: ../../contribute.rst:140 abe50ab68fef48dea42aa269743fc172 +msgid "" +"Code is more likely to stay robust if it is tested. Coverage_ is a " +"library that measures how much of the code is tested. To run it::" +msgstr "经过测试的代码往往具有更好的健壮性。 Coverage_ 是一个用于衡量代码测试覆盖率的库执行下面的命令以调取之:" + +#: ../../contribute.rst:145 9d5ba28c240f464c92db9869c01e3917 +msgid "" +"This will show overall coverage, coverage per file, and even line-by-line" +" coverage. There is also an HTML report available::" +msgstr "该命令会展示总体覆盖率以及在每个文件上的覆盖率,甚至还会展示每一行的覆盖情况。同样也会有一份HTML格式的报告供您查看:" + +#: ../../contribute.rst:153 45e095f0c0fd4a5b9f75027d12dd891f +msgid "Building the docs" +msgstr "构建文档" + +#: ../../contribute.rst:155 e1e8bb56a9c8449a8da8e10fcf45da2a +msgid "" +"If you make changes to the documentation, you should build and inspect " +"your changes before committing them::" +msgstr "若你对文档进行过修改,请在commit前完成构建和检查:" + +#: ../../contribute.rst:160 9482dc5bee484f0c9f05af197b49ed70 +msgid "" +"Open http://localhost:8000 in your browser to review the documentation. " +"While the above task is running, any changes you make and save to the " +"documentation should automatically appear in the browser, as it live-" +"reloads when it detects changes to the documentation source files." +msgstr "" +"执行上述命令后,请在Web浏览器中打开 http://localhost:8000 " +"来查看文档。在上述命令执行时,对文档做的任何修改应该会自动反映在浏览器中。" + +#: ../../contribute.rst:166 82343c9684bb440eb260110d98bb0e59 +msgid "Plugin development" +msgstr "插件开发" + +#: ../../contribute.rst:168 8697f547344e4973ad34f9c619ddf22e +msgid "" +"To create a *new* Pelican plugin, please refer to the `plugin template`_ " +"repository for detailed instructions." +msgstr "要创建一个 *新的* Pelican插件,请参阅 `插件模板`_ 仓库以获得更为详细的指导。" + +#: ../../contribute.rst:171 3c505e3035c143c89efd3e648fe00e8e +msgid "" +"If you want to contribute to an *existing* Pelican plugin, follow the " +"steps above to set up Pelican for local development, and then create a " +"directory to store cloned plugin repositories::" +msgstr "若你想在 *已有* Pelican插件中做贡献,请先按前文所述步骤配置Pelican的本地开发环境,然后创建一个文件夹来存放克隆下来的插件仓库:" + +#: ../../contribute.rst:177 5523421ea2664b1ab0859216a1c8a463 +msgid "" +"Assuming you wanted to contribute to the Simple Footnotes plugin, you " +"would first browse to the `Simple Footnotes`_ repository on GitHub and " +"tap the **Fork** button at top-right. Then clone the source for your fork" +" and add the upstream project as a Git remote::" +msgstr "" +"假设想要为Simple Footnotes插件做贡献,你应该先查看并fork `Simple Footnotes`_ " +"的Github仓库,然后克隆你自己fork的那一份,再添加原仓库作为Git远程仓库upstream:" + +#: ../../contribute.rst:190 e5178eb4654a44919c743d37f00ff4c3 +msgid "Create a topic branch for your plugin bug fix or feature::" +msgstr "同样地,为你想要进行的bug修复或特性添加创建一个分支:" + +#: ../../contribute.rst:194 af04dad9f528473caa4c4c0f4c33042a +msgid "" +"After writing new tests for your plugin changes, run the plugin test " +"suite and check for code style compliance via::" +msgstr "完成修改并添加测试后,运行测试套件,并检查代码风格:" + +#: ../../contribute.rst:205 06d00f61d5c344d587baa85116b3c1e0 +msgid "" +"If style violations are found even after running the above auto-" +"formatters, you will need to make additional manual changes until " +"``invoke lint`` no longer reports any code style violations." +msgstr "如果在自动格式化后仍存在代码风格上的问题,请手动修正这些问题,直到执行 ``invoke lint`` 时不再报告问题。" + +#: ../../contribute.rst:213 9a0831b06abd494fad469b7df71c489f +msgid "Submitting your changes" +msgstr "提交更改" + +#: ../../contribute.rst:215 23b5d147059b4cea99a213f50d63097a +msgid "" +"Assuming linting validation and tests pass, add a ``RELEASE.md`` file in " +"the root of the project that contains the release type (major, minor, " +"patch) and a summary of the changes that will be used as the release " +"changelog entry. For example::" +msgstr "" +"通过了风格检查和所有测试后,请在项目的根目录下添加一个 ``RELEASE.md`` " +"文件,其中应包含发布的类型(major、minor、patch)以及代码变更的摘要,这份摘要会被用作更新日志的条目。下面是一个例子:" + +#: ../../contribute.rst:224 6794c41ebe2c4937ba4f3f8e16e7a9d9 +msgid "Commit your changes and push your topic branch::" +msgstr "commit你的更改,并push对应分支:" + +#: ../../contribute.rst:230 daa69b097fc14739be924714f8070cf6 +msgid "" +"Finally, browse to your repository fork on GitHub and submit a pull " +"request." +msgstr "最后,前往Github,从你fork的仓库向原仓库提出PR。" + +#: ../../contribute.rst:234 b71524be74c84517a12fcdecb51bc55e +msgid "Logging tips" +msgstr "日志技巧" + +#: ../../contribute.rst:236 a0b70f864ce144eabe0f89d78844c395 +msgid "Try to use logging with appropriate levels." +msgstr "请仔细斟酌合适的日志等级。" + +#: ../../contribute.rst:238 3b44fa3ec9b3493e97c310207e5dce91 +msgid "For logging messages that are not repeated, use the usual Python way::" +msgstr "对于不重复的日志消息,使用一般的方式即可:" + +#: ../../contribute.rst:247 49d4e407310348838660e8c74c6e3fb6 +#, python-format +msgid "" +"Do not format log messages yourself. Use ``%s`` formatting in messages " +"and pass arguments to logger. This is important, because the Pelican " +"logger will preprocess some arguments, such as exceptions." +msgstr "" +"请不要自己格式化日志消息,而是使用在日志消息中使用 ``%s`` " +"并向logger传入参数。请务必遵循这一规则,因为Pelican的logger会自动预处理一些特殊的参数,例如exception。" + +#: ../../contribute.rst:252 4ac501dff8bc4554998d3f03486cce0e +msgid "Limiting extraneous log messages" +msgstr "限制低关联日志消息" + +#: ../../contribute.rst:254 c4dfb487945341cda6c0858954a2ed40 +msgid "" +"If the log message can occur several times, you may want to limit the log" +" to prevent flooding. In order to do that, use the ``extra`` keyword " +"argument for the logging message in the following format::" +msgstr "如果同一日志消息会重复多次,你会希望限制这些多余的内容。使用 ``extra`` 命名参数来实现这一点:" + +#: ../../contribute.rst:261 4090a3bc71e3441e8a7efd639d36ec1e +msgid "" +"Optionally, you can also set ``'limit_args'`` as a tuple of arguments in " +"``extra`` dict if your generic message needs formatting." +msgstr "可选的,如果通用日志消息需要格式化,可以添加 ``'limit_args'`` 参数并将其对应值设为一个元组。" + +#: ../../contribute.rst:264 dd6530ceb29d4a91902046a3d4e63af6 +msgid "" +"Limit is set to ``5``, i.e, first four logs with the same ``'limit_msg'``" +" are outputted normally but the fifth one will be logged using " +"``'limit_msg'`` (and ``'limit_args'`` if present). After the fifth, " +"corresponding log messages will be ignored." +msgstr "" +"限制数默认设为了 ``5`` ,即前四个有相同 ``'limit_msg'`` 参数的日志消息会正常输出,但第五条这样的日志消息会呈现为 " +"``'limit_msg'`` 参数值本身( ``'limit_args'`` 同理)。第六条及之后的日志消息会被直接忽略。" + +#: ../../contribute.rst:269 50bdb3405a964740aeb91a7d559ba9b5 +msgid "" +"For example, if you want to log missing resources, use the following " +"code::" +msgstr "例如,如果你想要用日志记录资源缺失的信息,可以使用下面的代码:" + +#: ../../contribute.rst:277 0303387eccd842f9aa57eb3192252dba +msgid "The log messages will be displayed as follows::" +msgstr "最终的日志消息看起来会像这样:" + +#: ../../contribute.rst:287 281637c4520d4755993e8bfa46b0326b +msgid "Outputting traceback in the logs" +msgstr "在日志中输出traceback信息" + +#: ../../contribute.rst:289 8bd9319a7a6c4f77bd651057d1cc7c75 +msgid "" +"If you're logging inside an ``except`` block, you may want to provide the" +" traceback information as well. You can do that by setting ``exc_info`` " +"keyword argument to ``True`` during logging. However, doing so by default" +" can be undesired because tracebacks are long and can be confusing to " +"regular users. Try to limit them to ``--debug`` mode like the following::" +msgstr "" +"当在 ``except`` 块中进行日志记录时,你可能会希望同时输出traceback信息。可以简单地将 ``exc_info`` 参数设为 " +"``True`` 来实现这一功能。但是通过此方法输出的traceback信息会非常长,不便于理解。可以像下述代码一样将这些信息限制在 " +"``--debug`` 模式中:" + +#~ msgid "latest Pelican release (or an up-to-date Git clone of Pelican master)" +#~ msgstr "" + +#~ msgid "" +#~ "`Create a new branch`_ specific to " +#~ "your change (as opposed to making " +#~ "your commits in the master branch)." +#~ msgstr "" diff --git a/docs/locale/zh_CN/LC_MESSAGES/faq.po b/docs/locale/zh_CN/LC_MESSAGES/faq.po new file mode 100644 index 00000000..f63513ea --- /dev/null +++ b/docs/locale/zh_CN/LC_MESSAGES/faq.po @@ -0,0 +1,484 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2010–2024 +# This file is distributed under the same license as the PELICAN package. +# FIRST AUTHOR , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: PELICAN 4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-11-07 16:25+0800\n" +"PO-Revision-Date: 2024-06-27 19:00+0800\n" +"Last-Translator: GeorgeHu \n" +"Language: zh_CN\n" +"Language-Team: \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.16.0\n" + +#: ../../faq.rst:2 84467b3ab4b8411589855b3130e14406 +msgid "Frequently Asked Questions (FAQ)" +msgstr "常见问题解答" + +#: ../../faq.rst:4 54c28b1640fd4939b5f196fa377292eb +msgid "Here are some frequently asked questions about Pelican." +msgstr "以下是一些Pelican的常见问题解答。" + +#: ../../faq.rst:7 a95f8f3dcb6741949ba9d4761199dd0a +msgid "What's the best way to communicate a problem, question, or suggestion?" +msgstr "交流问题、疑问或提建议的最佳方式是什么?" + +#: ../../faq.rst:9 d93f8424407d42b2b3ce37b39baecd8a +msgid "Please read our :doc:`feedback guidelines `." +msgstr "请参阅文档 :doc:`项目贡献与意见反馈 ` 。" + +#: ../../faq.rst:12 9fea72b4670c4fe6a3d67e1ddb158f47 +msgid "How can I help?" +msgstr "我可以帮上什么忙?" + +#: ../../faq.rst:14 3f4b88cf5b814e678a552c821ae4b450 +msgid "" +"There are several ways to help out. First, you can communicate any " +"Pelican suggestions or problems you might have via `Pelican Discussions " +"`_. Please first check" +" the existing list of discussions and issues (both open and closed) in " +"order to avoid submitting topics that have already been covered before." +msgstr "" +"有好多种方法可以提供帮助。首先,可以在 `Pelican讨论板块 " +"`_ " +"中提出任何关于Pelican的建议或是问题。在提问或建议之前,请先查看已关闭或开放的issues中是否已有相关内容,以避免内容上的重复。" + +#: ../../faq.rst:20 ca9e66682caf43a481ca91ecace43ed0 +msgid "" +"If you want to contribute, please fork `the Git repository " +"`_, create a new feature branch, " +"make your changes, and issue a pull request. Someone will review your " +"changes as soon as possible. Please refer to the :doc:`How to Contribute " +"` section for more details." +msgstr "" +"如果你想要对项目进行贡献,请fork `Git仓库 `_ " +",创建一个新的功能分支,并在其中进行修改,在修改完成后提出一个PR。项目组会尽快审核你的PR。关于此的更多内容,请参见 " +":doc:`项目贡献与意见反馈 ` 一节。" + +#: ../../faq.rst:26 f05e9b722b084a439cd6d99b3155910d +msgid "" +"You can also contribute by creating themes and improving the " +"documentation." +msgstr "你可以发起的贡献当然也包括创建主题和改进文档。" + +#: ../../faq.rst:29 d40c58aeafe54bdaa389c3c05a0fd721 +msgid "Is the Pelican settings file mandatory?" +msgstr "Pelican配置文件是必要的吗?" + +#: ../../faq.rst:31 96ef0c57471d4a669bd7f2a7f493c23b +msgid "" +"Configuration files are optional and are just an easy way to configure " +"Pelican. For basic operations, it's possible to specify options while " +"invoking Pelican via the command line. See ``pelican --help`` for more " +"information." +msgstr "" +"配置文件是可选的,其本质是使您可以更方便地配置Pelican。对于一些基本的配置操作,完全可以在命令行中指定,调用 ``pelican " +"--help`` 可以查看pelican命令的更多信息。" + +#: ../../faq.rst:36 e3752aec18514ce292ee4ebd0d95db37 +msgid "Changes to the settings file take no effect" +msgstr "修改后的配置文件没有生效" + +#: ../../faq.rst:38 3f5c632fd20446cf8dd70a5eb88dbbcf +msgid "" +"When experimenting with different settings (especially the metadata ones)" +" caching may interfere and the changes may not be visible. In such cases," +" ensure that caching is disabled via ``LOAD_CONTENT_CACHE = False`` or " +"use the ``--ignore-cache`` command-line switch." +msgstr "" +"在尝试不同的配置时(尤其是尝试不同元数据时),缓存很可能会产生干扰,使得修改不可见。此时,确保配置了 ``LOAD_CONTENT_CACHE =" +" False`` 或在命令行中加上 ``--ignore-cache`` 以禁用缓存。" + +#: ../../faq.rst:44 067892211d0d4f4bae85d65a0132eb1d +msgid "I'm creating my own theme. How do I use Pygments for syntax highlighting?" +msgstr "在自己创建主题时,如何使用Pygments来调整语法高亮?" + +#: ../../faq.rst:46 b1e6ed1bea2e4b3cb3798131f30a828c +msgid "" +"Pygments adds some classes to the generated content. These classes are " +"used by themes to style code syntax highlighting via CSS. Specifically, " +"you can customize the appearance of your syntax highlighting via the " +"``.highlight pre`` class in your theme's CSS file. To see how various " +"styles can be used to render Django code, for example, use the style " +"selector drop-down at top-right on the `Pygments project demo site " +"`_." +msgstr "" +"Pygments会为生成的内容添加一些CSS类。这些类会为主题所用,主题会通过CSS来为代码添加语法高亮。具体来说,你可以通过主题CSS文件中的 " +"``.highlight pre`` 类来自定义语法高亮的外观。在 `Pygments 项目的demo网站 " +"`_ 上可以预览能够渲染的代码类型。" + +#: ../../faq.rst:53 5dccc8ae367545b08bdce61e008e0a20 +msgid "" +"You can use the following example commands to generate a starting CSS " +"file from a Pygments built-in style (in this case, \"monokai\") and then " +"copy the generated CSS file to your new theme::" +msgstr "你可以使用下面的命令来让Pygments使用内置风格(此处为“monokai”)生成一个初始CSS文件,然后将此文件拷贝到新主题中:" + +#: ../../faq.rst:60 027edae1ebdf4d52b59171a26915c1ac +msgid "Don't forget to import your ``pygment.css`` file from your main CSS file." +msgstr "不要忘了在你的CSS主文件中引入 ``pygment.css`` 文件。" + +#: ../../faq.rst:63 164af3be4dce45879963c5d3ee0cd264 +msgid "How do I create my own theme?" +msgstr "如何创建我自己的主题?" + +#: ../../faq.rst:65 7b1db6528b0a4735894868a229a5969d +msgid "Please refer to :ref:`theming-pelican`." +msgstr "请参阅 :ref:`theming-pelican` 。" + +#: ../../faq.rst:68 b8e21f837e0744c49cfe8f0cb3a1d5ee +msgid "Can I override individual templates without forking the whole theme?" +msgstr "我只需要覆盖主题中单独的几个模板文件,可不可以不fork整个主题?" + +#: ../../faq.rst:70 70fd7b5c55c246a6a25b20304bfdb616 +msgid "" +"Yes, you can override existing templates of the theme that you are using," +" or add new templates, via the ``THEME_TEMPLATES_OVERRIDES`` variable. " +"For example, to override the page template, you can define the location " +"for your templates like this::" +msgstr "当然可以,覆盖部分模板文件或是添加一些模板文件都是可以的,使用 ``THEME_TEMPLATES_OVERRIDES`` 变量即可。" +"例如,若需要覆盖page的模板,可以向这样定义你自己的模板文件位置:" + +#: ../../faq.rst:77 a96870f0cad74996bec2469ea0c2e9e1 +msgid "" +"You can then define a custom template in ``templates/page.html``. See " +":ref:`settings/themes` for details." +msgstr "自定义的模板可以为 ``templates/page.html`` 。详情请参看 :ref:`settings/themes` 。" + +#: ../../faq.rst:81 b832cd952cf44a0097f383825f0f295f +msgid "I want to use Markdown, but I got an error." +msgstr "我想要使用Markdown,但是出错了。" + +#: ../../faq.rst:83 32d9dbde7029412d852ab8e710112573 +msgid "" +"If you try to generate Markdown content without first installing the " +"Markdown library, you may see a message that says ``No valid files found " +"in content``. Markdown is not a hard dependency for Pelican, so if you " +"have content in Markdown format, you will need to explicitly install the " +"Markdown library. You can do so by typing the following command, " +"prepending ``sudo`` if permissions require it::" +msgstr "" +"如果没有事先安装Markdown库,在生成Markdown内容时会看到一条提示 ``No valid files found in " +"content`` " +"。虽然Markdown并不是必需依赖,但如果你写的内容中含有Markdown格式,就需要安装Markdown库了。输入下面的命令以安装Markdown库,如果需要权限,请在前面添加" +" ``sudo`` :" + +#: ../../faq.rst:93 46728a367ffe47d9afeb7608e9c0db5f +msgid "Can I use arbitrary metadata in my templates?" +msgstr "在模板中可以使用任意元数据吗?" + +#: ../../faq.rst:95 9b7fbafc6d29429a88a079bfb74e3af5 +msgid "" +"Yes. For example, to include a modified date in a Markdown post, one " +"could include the following at the top of the article::" +msgstr "当然可以。例如,可以在Markdown帖子中包含一个“修改日期”,加在文章开头即可:" + +#: ../../faq.rst:100 ce62442a4c9d4347bd6ae8a59476fcee +msgid "" +"For reStructuredText, this metadata should of course be prefixed with a " +"colon::" +msgstr "对于reStructuredText,此元数据也应当以冒号为前缀:" + +#: ../../faq.rst:104 bf869a6da43e448a9cc512843aa4a183 +msgid "" +"This metadata can then be accessed in templates such as ``article.html`` " +"via::" +msgstr "此元数据可以在模板中获取到,例如在 ``article.html`` 中,可以像这样获取:" + +#: ../../faq.rst:110 b9c9a648b30942b996b124af9fd5a84c +msgid "" +"If you want to include metadata in templates outside the article context " +"(e.g., ``base.html``), the ``if`` statement should instead be::" +msgstr "如果您想在其他模板(例如 ``base.html`` )中获取此元数据,则 ``if`` 语句应改为:" + +#: ../../faq.rst:116 b78a678a165d40f4823fac2b19bcafc1 +msgid "" +"How do I make my output folder structure identical to my content " +"hierarchy?" +msgstr "如何使得输出目录的结构和content目录的结构保持一致?" + +#: ../../faq.rst:118 851d1019c070482991667cc024063d29 +msgid "Try these settings::" +msgstr "可以尝试如下配置:" + +#: ../../faq.rst:125 5195876e3f364a838d72b16c568263bc +msgid "How do I assign custom templates on a per-page basis?" +msgstr "如何为某个页面指定某个模板?" + +#: ../../faq.rst:127 2ddd3cf1fbf048b1819bcfc9b3691a12 +msgid "" +"It's as simple as adding an extra line of metadata to any page or article" +" that you want to have its own template. For example, this is how it " +"would be handled for content in reST format::" +msgstr "这非常简单,在任何页面或者文章中,都可以通过多添加一行元数据来指定特定模板。例如,在reST中,使用:" + +#: ../../faq.rst:133 6f5eb40b4a5e4f83ab9d1cb48fefad57 +msgid "For content in Markdown format::" +msgstr "对于Markdown,则使用:" + +#: ../../faq.rst:137 2e28d1bf074c437eb5017bf6f345bf71 +msgid "" +"Then just make sure your theme contains the relevant template file (e.g. " +"``template_name.html``). If you just want to add a new custom template to" +" an existing theme, you can also provide it in a directory specified by " +"``THEME_TEMPLATES_OVERRIDES`` (see :ref:`settings/themes`)." +msgstr "" + +#: ../../faq.rst:142 675e77f99f3c42bb8715c84a97c7a064 +msgid "How can I override the generated URL of a specific page or article?" +msgstr "如何重写某一个页面或文章生成的URL?" + +#: ../../faq.rst:144 7e518b99b29d4787addc732d57e94ed1 +msgid "" +"Include ``url`` and ``save_as`` metadata in any pages or articles that " +"you want to override the generated URL. Here is an example page in reST " +"format::" +msgstr "在任意页面或文章中都可以添加 ``url`` 和 ``save_as`` 元数据,这样就可以重写URL了。下面以reST格式为例:" + +#: ../../faq.rst:153 903306ecaed3483591b4ed2dcba3d183 +msgid "" +"With this metadata, the page will be written to " +"``override/url/index.html`` and Pelican will use the URL " +"``override/url/`` to link to this page." +msgstr "" +"有了这样的元数据,此页面会保存为 ``override/url/index.html`` ,Pelican会将 ``override/url/``" +" 作为链接到此页面的URL。" + +#: ../../faq.rst:157 d80d84fcb6844e25a8452e29c4113181 +msgid "How can I use a static page as my home page?" +msgstr "如何使用一个静态页面作为主页?" + +#: ../../faq.rst:159 e17a2e2dd9014109888bab9286ee607c +msgid "" +"The override feature mentioned above can be used to specify a static page" +" as your home page. The following Markdown example could be stored in " +"``content/pages/home.md``::" +msgstr "上一个问题中提到的特性可以用于实现此需求。下面例子中的Markdown文件保存为 ``content/pages/home.md`` :" + +#: ../../faq.rst:169 b99ba0ca8656416cbdc38f3fa263b7eb +msgid "" +"If the original blog index is still wanted, it can then be saved in a " +"different location by setting ``INDEX_SAVE_AS = 'blog_index.html'`` for " +"the ``'index'`` direct template." +msgstr "" +"如果仍需要原来的博客主页(即 ``'index'`` 直接模板),可以通过设置 ``INDEX_SAVE_AS = " +"'blog_index.html'`` 将其存储在其他位置。" + +#: ../../faq.rst:174 fca4725a57dd451fb3b0fb9df78f69b5 +msgid "What if I want to disable feed generation?" +msgstr "可以禁用订阅源生成吗?" + +#: ../../faq.rst:176 e9c08140e2ed44f189a7a156db027a3e +msgid "" +"To disable feed generation, all feed settings should be set to ``None``. " +"All but three feed settings already default to ``None``, so if you want " +"to disable all feed generation, you only need to specify the following " +"settings::" +msgstr "" +"要禁用订阅源,所有订阅源相关的配置都应被设为 ``None`` 。其中有三项设置默认为 ``None`` " +",因此如果要彻底不生成订阅源,你只需要指定下面这些设置:" + +#: ../../faq.rst:186 7820a481af4c4f44a40fb3ae80768a1d +msgid "" +"The word ``None`` should not be surrounded by quotes. Please note that " +"``None`` and ``''`` are not the same thing." +msgstr "``None`` 两侧不需要加引号。请注意 ``None`` 和 ``''`` 不是同一个东西。" + +#: ../../faq.rst:190 4fa2ffbf1c274ec396a0d756762c260d +msgid "" +"I'm getting a warning about feeds generated without SITEURL being set " +"properly" +msgstr "Pelican警告说由于SITEURL设置不正确,无法正常生成订阅源" + +#: ../../faq.rst:192 8d52f14f6b03476897dfb15c188a961a +msgid "" +"`RSS and Atom feeds require all URL links to be absolute " +"`_. In order to " +"properly generate links in Pelican you will need to set ``SITEURL`` to " +"the full path of your site." +msgstr "" +"`RSS和Atom订阅源要求所有URL都要链接到绝对地址 " +"`_ " +"。为了使得Pelican能正确生成链接,你需要将站点的 ``SITEURL`` 设置为完整路径。" + +#: ../../faq.rst:197 1412ceb735d44a30b58db3241248e7ec +msgid "" +"Feeds are still generated when this warning is displayed, but links " +"within may be malformed and thus the feed may not validate." +msgstr "虽然Pelican提出了警告,但是仍会生成订阅源,但其中的链接可能是无效的,这会导致订阅源不可用。" + +#: ../../faq.rst:201 20cadccc527e4ebda08eac9ed34f5055 +msgid "Can I force Atom feeds to show only summaries instead of article content?" +msgstr "可以让Atom订阅源只显示摘要,不显示文章内容吗?" + +#: ../../faq.rst:203 9c45ba2ec5c6402e86e89661b943d1ad +msgid "" +"Instead of having to open a separate browser window to read articles, the" +" overwhelming majority of folks who use feed readers prefer to read " +"content within the feed reader itself. Mainly for that reason, Pelican " +"does not support restricting Atom feeds to only contain summaries. Unlike" +" Atom feeds, the RSS feed specification does not include a separate " +"``content`` field, so by default Pelican publishes RSS feeds that only " +"contain summaries (but can optionally be set to instead publish full " +"content RSS feeds). So the default feed generation behavior provides " +"users with a choice: subscribe to Atom feeds for full content or to RSS " +"feeds for just the summaries." +msgstr "" +"绝大多数使用订阅源阅读器的人都更喜欢直接在阅读器中阅读文章内容,而不是另外再打开窗口来阅读。因此,Pelican不支持使Atom只包含摘要。但是由于RSS不包含单独的" +" ``content`` " +"字段,因此Pelican在发布RSS时默认只包含摘要(当然也可以设置为包含文章内容)。Pelican在订阅源生成上的如此行为就可以让用户自行选择订阅类型:包含了完整内容的Atom或是只包含摘要的RSS。" + +#: ../../faq.rst:214 bf0d4ca837f74d9ab6618db6306c6a70 +msgid "Is Pelican only suitable for blogs?" +msgstr "Pelican只适合用于博客吗?" + +#: ../../faq.rst:216 49697f375cfc49b08f5d0c2297d15028 +msgid "" +"No. Pelican can be easily configured to create and maintain any type of " +"static site. This may require a little customization of your theme and " +"Pelican configuration. For example, if you are building a launch site for" +" your product and do not need tags on your site, you could remove the " +"relevant HTML code from your theme. You can also disable generation of " +"tag-related pages via::" +msgstr "不是的。Pelican可以方便地用于创建维护任何静态站点,为此你需要对主题和配置做一些定制。例如,如果要为你的产品构建一个宣传网站,即不需要使用标签特性,从主题中移除与标签相关的HTML代码即可。另外,还可以通过下面的设置来禁用标签相关页面的生成:" + +#: ../../faq.rst:226 0a59dd7209554237912579b362d07788 +msgid "" +"Why does Pelican always write all HTML files even with content caching " +"enabled?" +msgstr "启用内容缓存后,为什么Pelican仍会每次都写入所有HTML文件?" + +#: ../../faq.rst:228 6291b82d02fc4450a79d1200b5d04f62 +msgid "" +"In order to reliably determine whether the HTML output is different " +"before writing it, a large part of the generation environment including " +"the template contexts, imported plugins, etc. would have to be saved and " +"compared, at least in the form of a hash (which would require special " +"handling of unhashable types), because of all the possible combinations " +"of plugins, pagination, etc. which may change in many different ways. " +"This would require a lot more processing time and memory and storage " +"space. Simply writing the files each time is a lot faster and a lot more " +"reliable." +msgstr "为了确定HTML输出确实和之前的不同,模板上下文、插件等很多生成环境都需要保存并比较某种哈希值(对于不可哈希的内容类型还需要进行一些额外处理)。另外,由于插件、分页等内容的存在,输出的HTML很可能会与之前不同。因此,考虑到处理时间和存储空间,每次都重新写入全部HTML会更快更可靠。" + +#: ../../faq.rst:237 5cc5e1361f914c92b0670030f0c83f5d +msgid "" +"However, this means that the modification time of the files changes every" +" time, so a ``rsync`` based upload will transfer them even if their " +"content hasn't changed. A simple solution is to make ``rsync`` use the " +"``--checksum`` option, which will make it compare the file checksums in a" +" much faster way than Pelican would." +msgstr "" +"然而,这样的机制会使得在每次生成站点后,文件的修改时间都会变化,因此基于 ``rsync`` " +"上传时会把没有变化的内容也进行上传。一个简便的解决方法就是给 ``rsync`` 加上 ``--checksum`` " +"选项,这会比Pelican在生成时进行校验更快。" + +#: ../../faq.rst:244 b24c40be89b94f3b980cbbda38d46115 +msgid "How to process only a subset of all articles?" +msgstr "如何只处理一部分文章?" + +#: ../../faq.rst:246 fa34a90481f44ace83ee16401543ce09 +msgid "" +"It is often useful to process only e.g. 10 articles for debugging " +"purposes. This can be achieved by explicitly specifying only the " +"filenames of those articles in ``ARTICLE_PATHS``. A list of such " +"filenames could be found using a command similar to ``cd content; find " +"-name '*.md' | head -n 10``." +msgstr "" +"简便起见,在调试时可能只需要处理几篇文章。可以直接在配置项 ``ARTICLE_PATHS`` 中添加需要处理文章的文件名。可以通过像 ``cd " +"content; find -name '*.md' | head -n 10`` 这样的命令获取文章文件名的列表。" + +#: ../../faq.rst:252 0fa566e3aa084cb9b04e0cee32684222 +msgid "My tag cloud is missing/broken since I upgraded Pelican" +msgstr "在升级Pelican后,标签云消失或不可用了" + +#: ../../faq.rst:254 0bd1304a12c24f048b227c68391b148c +msgid "" +"In an ongoing effort to streamline Pelican, tag cloud generation has been" +" moved out of Pelican core and into a separate `plugin " +"`_. See the :ref:`plugins` " +"documentation for further information about the Pelican plugin system." +msgstr "" +"我们一直致力于精简Pelican,标签云生成的功能已经从Pelican核心中移除,转而放到了一个单独的 `tag-cloud插件 " +"`_ 中。查看 :ref:`plugins` " +"文档获取更多关于Pelican插件系统的信息。" + +#: ../../faq.rst:260 1833dfba94c74f4bb9e9f0a112ed3e0f +msgid "Since I upgraded Pelican my pages are no longer rendered" +msgstr "升级Pelican后,一些页面没有被渲染" + +#: ../../faq.rst:262 576e5c2338ba4c43a51bb562301ad0c2 +msgid "" +"Pages were available to themes as lowercase ``pages`` and uppercase " +"``PAGES``. To bring this inline with the :ref:`templates-variables` " +"section, ``PAGES`` has been removed. This is quickly resolved by updating" +" your theme to iterate over ``pages`` instead of ``PAGES``. Just " +"replace::" +msgstr "" +"在以前的版本中,主题通过小写的 ``pages`` 和大写的 ``PAGES`` 都能获取到页面。为了使之与 :ref:`templates-" +"variables` 一节中的内容保持一致,大写的 ``PAGES`` 被删除了。只要将主题中的 ``PAGES`` 替换为 ``pages`` " +",问题即可解决。例如将原先的:" + +#: ../../faq.rst:269 355512b9f6b34ece9b6baed128b2ca4d +msgid "with something like::" +msgstr "替换为:" + +#: ../../faq.rst:274 99ef769943fe41c4a37ca951e905b2ba +msgid "How can I stop Pelican from trying to parse my static files as content?" +msgstr "如何避免让Pelican将我的静态文件解析为内容文件?(译者注:例如要将一个HTML文件作为静态文件)?" + +#: ../../faq.rst:276 4efb20c5b82d41afb07151599fa189dd +msgid "" +"Pelican's article and page generators run before it's static generator. " +"That means if you use a setup similar to the default configuration, where" +" a static source directory is defined inside a ``*_PATHS`` setting, all " +"files that have a valid content file ending (``.html``, ``.rst``, " +"``.md``, ...) will be treated as articles or pages before they get " +"treated as static files." +msgstr "" +"Pelican的文章与页面生成器会先于静态文件生成器运行。这意味着若使用默认配置,即静态资源文件夹定义在某个 ``*_PATHS`` " +"配置项中,所有以有效内容文件后缀结尾的文件( ``.html`` 、 ``.rst`` 、 ``.md`` " +"等)都会被视为文章或者页面,而不是静态文件。" + +#: ../../faq.rst:282 d959eb6a67fe440caa70105e1692bf93 +msgid "" +"To circumvent this issue either use the appropriate ``*_EXCLUDES`` " +"setting or disable the offending reader via ``READERS`` if you don't need" +" it." +msgstr "" +"为了避免这个问题,使用合适的 ``*_EXCLUDES`` 配置,在必要时还可以通过 ``READERS`` " +"配置项来直接禁用产生问题的reader。" + +#: ../../faq.rst:286 5e64dc4b6fad4e7ea07278f5a2529e89 +msgid "Why is [arbitrary Markdown syntax] not supported?" +msgstr "为什么不是所有的Markdown语法都支持?" + +#: ../../faq.rst:288 6872a70ec1434c41a78d465271761c69 +msgid "" +"Pelican does not directly handle Markdown processing and instead " +"delegates that task to the Python-Markdown_ project, the core of which " +"purposefully follows the original Markdown syntax rules and not the " +"myriad Markdown \"flavors\" that have subsequently propagated. That said," +" Python-Markdown_ is quite modular, and the syntax you are looking for " +"may be provided by one of the many available `Markdown Extensions`_. " +"Alternatively, some folks have created Pelican plugins that support " +"Markdown variants, so that may be your best choice if there is a " +"particular variant you want to use when writing your content." +msgstr "" +"Pelican并不直接对Markdown进行处理,而是将此任务交给 Python-Markdown_ " +"项目,此项目的核心有意只遵循原始的Markdown语法规则,而不服从之后传播开的大量Markdown风格。另外, Python-Markdown_" +" 是相当模块化的,你想要使用的语法可能已经有现成的 `Markdown扩展`_ " +"进行了实现。或者,也有人创建了支持Markdown变体的Pelican插件,如果你想要用某种Markdown变体,可以在这些地方寻找支持。" + +#~ msgid "" +#~ "Then just make sure your theme " +#~ "contains the relevant template file " +#~ "(e.g. ``template_name.html``)." +#~ msgstr "确保对应的模板文件在主题中存在即可(例如 ``template_name.html`` )。" diff --git a/docs/locale/zh_CN/LC_MESSAGES/importer.po b/docs/locale/zh_CN/LC_MESSAGES/importer.po new file mode 100644 index 00000000..9e015c1a --- /dev/null +++ b/docs/locale/zh_CN/LC_MESSAGES/importer.po @@ -0,0 +1,321 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2010–2024 +# This file is distributed under the same license as the PELICAN package. +# FIRST AUTHOR , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: PELICAN 4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-06-24 19:06+0800\n" +"PO-Revision-Date: 2024-06-27 19:00+0800\n" +"Last-Translator: GeorgeHu \n" +"Language: zh_CN\n" +"Language-Team: \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.15.0\n" + +#: ../../importer.rst:4 2e58a5582f664ba0af49aac4480bc799 +msgid "Importing an existing site" +msgstr "导入已有站点" + +#: ../../importer.rst:7 5182de0b717543c7a4813491755b720a +msgid "Description" +msgstr "简介" + +#: ../../importer.rst:9 29a8bae0ba78486894ed4c286cd2f3b4 +msgid "" +"``pelican-import`` is a command-line tool for converting articles from " +"other software to reStructuredText or Markdown. The supported import " +"formats are:" +msgstr "" +"命令行工具 ``pelican-import`` 用于将其他软件生成的文章转换成reStructuredText" +"或Markdown格式。支持导入下面这些格式:" + +#: ../../importer.rst:12 c670f6055ad24d818132d74951c9928c +msgid "Blogger XML export" +msgstr "Blogger XML export" + +#: ../../importer.rst:13 d31ddaa8c7d54a268b379f706164de39 +msgid "Dotclear export" +msgstr "Dotclear export" + +#: ../../importer.rst:14 5102eb70c58240b2ad4d508a196b176e +msgid "Medium export" +msgstr "Medium export" + +#: ../../importer.rst:15 2cfcdf575387417bae3a9938aa55b0e6 +msgid "Tumblr API" +msgstr "Tumblr API" + +#: ../../importer.rst:16 42233d68a4bc46339b284681bdbdd19c +msgid "WordPress XML export" +msgstr "WordPress XML export" + +#: ../../importer.rst:17 0170dad08a80435b99a39ccaf887c5bb +msgid "RSS/Atom feed" +msgstr "RSS/Atom feed" + +#: ../../importer.rst:19 077a8220f4a84dd297ec5aa7cff15a24 +msgid "" +"The conversion from HTML to reStructuredText or Markdown relies on " +"`Pandoc`_. For Dotclear, if the source posts are written with Markdown " +"syntax, they will not be converted (as Pelican also supports Markdown)." +msgstr "" +"从HTML转换到reStructuredText或Markdown是依赖 `Pandoc`_ " +"完成的。对于Dotclear,若原帖子是由Markdown语法写的,则无需转换" +"(因为Pelican本就支持Markdown)。" + +#: ../../importer.rst:25 e9b94b6029204b82b009d3ef23c19814 +msgid "" +"Unlike Pelican, Wordpress supports multiple categories per article. These" +" are imported as a comma-separated string. You have to resolve these " +"manually, or use a plugin such as `More Categories`_ that enables " +"multiple categories per article." +msgstr "" +"和Pelican不同,在Wordpress中可以将一篇文章同时放在多个分类中。在导入时,各个分类" +"会以逗号分隔,你必须自己手动进行处理。或者也可以使用例如 `More Categories`_ " +"这样的插件,使得文章可以同时存在于多个分类中。" + +#: ../../importer.rst:32 f7add19b68754b6e8a617a1d50dee759 +msgid "" +"Imported pages may contain links to images that still point to the " +"original site. So you might want to download those images into your local" +" content and manually re-link them from the relevant pages of your site." +msgstr "" +"要导入的内容中可能会包含指向原站点的图片链接,你可能希望将他们全部下载下来,然后再" +"重新手动调整这些链接。" + +#: ../../importer.rst:37 22cc1a514c4f42efbcf9afc3d987c42e +msgid "Dependencies" +msgstr "依赖" + +#: ../../importer.rst:39 6139199770a24fc7af7ca7e556d18d5f +msgid "" +"``pelican-import`` has some dependencies not required by the rest of " +"Pelican:" +msgstr "" +"``pelican-import`` 需要用到一些其他依赖,这些依赖只会被 ``pelican-import`` 用到:" + +#: ../../importer.rst:41 0e8eb04bb07f4752880b873e73e7f7e5 +msgid "" +"*BeautifulSoup4* and *lxml*, for WordPress and Dotclear import. Can be " +"installed like any other Python package (``pip install BeautifulSoup4 " +"lxml``)." +msgstr "" +"为了能够导入WordPress和Dotclear的内容,需要 *BeautifulSoup4* 与 *lxml* 。" +"安装方法与其他Python包相同( ``pip install BeautifulSoup4 lxml`` )" + +#: ../../importer.rst:44 7d31c1ad4ecb4014a3ef240436b9b3e1 +msgid "*Feedparser*, for feed import (``pip install feedparser``)." +msgstr "为了能够导入订阅源,需要 *Feedparser* ( ``pip install feedparser`` )" + +#: ../../importer.rst:45 db7a18b1a4534a17956c9d030dddff56 +msgid "" +"*Pandoc*, see the `Pandoc site`_ for installation instructions on your " +"operating system." +msgstr "" +"还需要 *Pandoc* ,参照 `Pandoc官方网站`_ 进行安装。" + +#: ../../importer.rst:53 9952881aed104ef0ac82af5339e6b149 +msgid "Usage" +msgstr "用法" + +#: ../../importer.rst:63 83dbe43e4d2e4d8eaf3e37724ac119e3 +msgid "Positional arguments" +msgstr "位置参数" + +#: ../../importer.rst:65 4a12692744024752be75d82ed74d369d +msgid "``input``" +msgstr "``input``" + +#: ../../importer.rst:65 52f62f22221f4c3d964df5aced3d2a2b +msgid "The input file to read" +msgstr "需要读取的输入文件" + +#: ../../importer.rst:66 acc46432d5c14ea8a5e27e6ec2b84d18 +msgid "``api_key``" +msgstr "``api_key``" + +#: ../../importer.rst:66 29dd358bf2fe49d8a218c56ca376f6a6 +msgid "" +"(Tumblr only) api_key can be obtained from " +"https://www.tumblr.com/oauth/apps" +msgstr "" +"(只会在Tumblr中用到)从 https://www.tumblr.com/oauth/apps 中获取到的api_key" + +#: ../../importer.rst:70 a81b90d51a9f4c28adc09038715cf5c2 +msgid "Optional arguments" +msgstr "可选参数" + +#: ../../importer.rst:72 d4d5211b75aa4103b06ad7685368af06 +msgid "Show this help message and exit" +msgstr "显示此帮助信息并退出 ``pelican-import`` " + +#: ../../importer.rst:73 a7bae87fe16644f4b5da7d32fdc05f95 +msgid "Blogger XML export (default: False)" +msgstr "输入是否为Blogger XML格式(默认:False)" + +#: ../../importer.rst:74 e8c133125ed04120bcc3737fa2a0ba60 +msgid "Dotclear export (default: False)" +msgstr "输入是否为Dotclear格式(默认:False)" + +#: ../../importer.rst:75 caffd159f92a4f36aadedec398823ac3 +msgid "Medium export (default: False)" +msgstr "输入是否为Medium格式(默认:False)" + +#: ../../importer.rst:76 f1bcaccf8e2f43f6894f2f0540c9d7ba +msgid "Tumblr API (default: False)" +msgstr "输入是否为Tumblr API格式(默认:False)" + +#: ../../importer.rst:77 6131f8fa00294515a028f4bb1a3a3053 +msgid "WordPress XML export (default: False)" +msgstr "输入是否为WordPress XML格式(默认:False)" + +#: ../../importer.rst:78 dad00ee0aebb4550acae995ecdbb622f +msgid "Feed to parse (default: False)" +msgstr "输入是否为订阅源格式(默认:False)" + +#: ../../importer.rst:80 0ca3cbbc57c64b5b88444ccde94f94ce +msgid "Output path (default: content)" +msgstr "输出路径(默认:content)" + +#: ../../importer.rst:82 baa2762a4ee745028e29865720ca299d +msgid "" +"Output markup format: ``rst``, ``markdown``, or ``asciidoc`` (default: " +"``rst``)" +msgstr "" +"输出格式,可选值为: ``rst`` 、 ``markdown`` 、 ``asciidoc`` (默认: ``rst`` )" + +#: ../../importer.rst:84 53232a317a58422d8f070c245d3b7409 +msgid "Put files in directories with categories name (default: False)" +msgstr "是否要将输出文件按分类名放到各文件夹中(默认:False)" + +#: ../../importer.rst:86 f72e1895d9fc4facb90ddffb53b31a0a +msgid "" +"Put files recognised as pages in \"pages/\" sub- directory (blogger and " +"wordpress import only) (default: False)" +msgstr "" +"将识别为页面的文件放入“pages/” 子文件夹中(仅在blogger和wordpress中有用)(默认:False)" + +#: ../../importer.rst:89 3f9315af4f1e4ced8ece96fca71cb1e7 +msgid "Import only post from the specified author" +msgstr "仅导入某个作者的帖子" + +#: ../../importer.rst:90 0b34125f0bb744b089fe77b86b3e50f7 +msgid "" +"Strip raw HTML code that can't be converted to markup such as flash " +"embeds or iframes (default: False)" +msgstr "" +"删除无法转换的HTML代码,例如嵌入的flash或iframe(默认:False)" + +#: ../../importer.rst:92 f899a119b708450bbd38913f813255c2 +msgid "" +"Put wordpress custom post types in directories. If used with --dir-cat " +"option directories will be created as \"/post_type/category/\" (wordpress" +" import only)" +msgstr "" +"将wordpress中的自定义类型博文放到对应文件夹中。如果同时还使用了 --dir-cat 选项," +"输出转换后文件时会创建诸如“/post_type/category/” 的文件夹(只在wordpress中有效)" + +#: ../../importer.rst:95 627c041fab81460eafd4f5fe361bcd1a +msgid "" +"Download files uploaded to wordpress as attachments. Files will be added " +"to posts as a list in the post header and links to the files within the " +"post will be updated. All files will be downloaded, even if they aren't " +"associated with a post. Files will be downloaded with their original path" +" inside the output directory, e.g. \"output/wp-" +"uploads/date/postname/file.jpg\". (wordpress import only) (requires an " +"internet connection)" +msgstr "" +"下载作为附件上传到WordPress的文件。文件会以列表形式添加到帖子的开头,并且到这些" +"文件的链接都会进行更新。另外,即使某些文件没有在任何帖子中用到,也同样会被下载。" +"文件会被下载到输出文件夹下,并保持原始路径,例如" +"“output/wp-uploads/date/postname/file.jpg” 。(仅在wordpress中有效," +"且需要互联网连接)" + +#: ../../importer.rst:104 11162d8c497b4108a38c2a60af4a4215 +msgid "" +"Disable storing slugs from imported posts within output. With this " +"disabled, your Pelican URLs may not be consistent with your original " +"posts. (default: False)" +msgstr "" +"不保存导入推文的slug,会导致Pelican的URL和原推文不一致。(默认:False)" + +#: ../../importer.rst:109 f4f4b6e918d3498e927b59c5d0bae05a +msgid "Blog name used in Tumblr API" +msgstr "Tumblr API中使用的博客名" + +#: ../../importer.rst:113 16e0f9bd1c6e4b338673f1800e6a4995 +msgid "Examples" +msgstr "例子" + +#: ../../importer.rst:115 0cf17b9fd72940c391a1bb8bf7de534b +msgid "For Blogger::" +msgstr "导入Blogger:" + +#: ../../importer.rst:119 3fc79daf9e9e4f5ba1a121faaabd0c9e +msgid "For Dotclear::" +msgstr "导入Dotclear:" + +#: ../../importer.rst:123 328ff8145b464fa2ab59505a8bc3236a +msgid "For Medium::" +msgstr "导入Medium:" + +#: ../../importer.rst:127 8ca5f721833142249b6d798efcb77458 +msgid "" +"The Medium export is a zip file. Unzip it, and point this tool to the " +"\"posts\" subdirectory. For more information on how to export, see " +"https://help.medium.com/hc/en-us/articles/115004745787-Export-your-" +"account-data." +msgstr "" +"Medium中导出的是一个zip文件。请先解压之,然后再将其中的“posts”子目录传给此工具。 " +"https://help.medium.com/hc/en-us/articles/115004745787-Export-your-account-data " +"中有更详细的导出指导。" + +#: ../../importer.rst:131 516a83a4d8cf4570a9a6fff416e5cf5a +msgid "For Tumblr::" +msgstr "导入Tumblr:" + +#: ../../importer.rst:135 8fcab620c0d44bb29a120d8d781f4daa +msgid "For WordPress::" +msgstr "导入WordPress:" + +#: ../../importer.rst:139 a929213eb21f4118b9adbb6199bd78ea +msgid "For Medium (an example of using an RSS feed):" +msgstr "导入Medium(例子中使用了RSS订阅源):" + +#: ../../importer.rst:141 5e23c5d167ef4db1994f4323ac3d120e +msgid "" +"$ python -m pip install feedparser $ pelican-import --feed " +"https://medium.com/feed/@username" +msgstr "" +"$ python -m pip install feedparser $ pelican-import --feed " +"https://medium.com/feed/@username" + +#: ../../importer.rst:146 b44dfe0f807049899c0560c6bf62c386 +msgid "The RSS feed may only return the most recent posts — not all of them." +msgstr "RSS订阅源可能只会返回最新的帖子,而不是所有帖子。" + +#: ../../importer.rst:149 575426ff787d4647b3aa2469b8b52412 +msgid "Tests" +msgstr "测试" + +#: ../../importer.rst:151 036d2119412b41f3a3cb69cec74ecc81 +msgid "To test the module, one can use sample files:" +msgstr "可以使用下面的文件作为样例进行测试:" + +#: ../../importer.rst:153 482b30f9aab54717bb14218ae5fa8ea6 +msgid "" +"for WordPress: https://www.wpbeginner.com/wp-themes/how-to-add-dummy-" +"content-for-theme-development-in-wordpress/" +msgstr "" +"WordPress: https://www.wpbeginner.com/wp-themes/how-to-add-dummy-content-" +"for-theme-development-in-wordpress/" + +#: ../../importer.rst:154 6cb1bd10d37e4993aabece8aaed20171 +msgid "for Dotclear: http://media.dotaddict.org/tda/downloads/lorem-backup.txt" +msgstr "Dotclear: http://media.dotaddict.org/tda/downloads/lorem-backup.txt" diff --git a/docs/locale/zh_CN/LC_MESSAGES/index.po b/docs/locale/zh_CN/LC_MESSAGES/index.po new file mode 100644 index 00000000..47773c0b --- /dev/null +++ b/docs/locale/zh_CN/LC_MESSAGES/index.po @@ -0,0 +1,134 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2010–2024 +# This file is distributed under the same license as the PELICAN package. +# FIRST AUTHOR , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: PELICAN 4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-06-24 19:06+0800\n" +"PO-Revision-Date: 2024-06-27 19:00+0800\n" +"Last-Translator: GeorgeHu \n" +"Language: zh_CN\n" +"Language-Team: \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.15.0\n" + +#: ../../index.rst:2 160b5c32c524404ba295da4e89124739 +msgid "Pelican |release|" +msgstr "Pelican |release|" + +#: ../../index.rst:4 19170a80b4274f71b77062c7a6b90726 +msgid "" +"Pelican is a static site generator, written in Python_. Highlights " +"include:" +msgstr "" +"Pelican是一个用 Python_ 写的静态站点生成器,它有诸多亮点:" + +#: ../../index.rst:6 6ab42a346f2c46d789cd46655195f2d3 +msgid "" +"Write your content directly with your editor of choice in " +"reStructuredText_ or Markdown_ formats" +msgstr "" +"你可以直接在自己的编辑器中用 reStructuredText_ 或 Markdown_ 完成内容创作" + +#: ../../index.rst:8 dbd17888530e43ce8bdfc1594947032c +msgid "Includes a simple CLI tool to (re)generate your site" +msgstr "自带了一个简单的命令行工具,你可以用它来生成你的站点" + +#: ../../index.rst:9 2bbe72bda8db457a88f3d3a94d16cc0c +msgid "Easy to interface with distributed version control systems and web hooks" +msgstr "易于与分布式版本控制系统和webhook交互" + +#: ../../index.rst:10 24af69b083024f2a9c4f162d54fa57c6 +msgid "Completely static output is easy to host anywhere" +msgstr "生成的站点是完全静态的,可以在任何主机上轻松地部署" + +#: ../../index.rst:12 1e2090f3f19d49a19a6c50524e4cd0b7 +msgid "Ready to get started? Check out the :doc:`Quickstart` guide." +msgstr "准备好开始体验了吗?请查看 :doc:`快速入门` 指南。" + +#: ../../index.rst:15 481a352565e84c848e018de507fbe9af +msgid "Features" +msgstr "特性" + +#: ../../index.rst:17 6c7b5d9b43ca42f1b1df139e7f884d26 +msgid "Pelican’s feature highlights include:" +msgstr "Pelican在特性上也有很多亮点:" + +#: ../../index.rst:19 464e5e8ea8324fab9c5496b317a6db97 +msgid "" +"Articles (e.g., blog posts) and pages (e.g., \"About\", \"Projects\", " +"\"Contact\")" +msgstr "" +"可以生成文章(例如博客推文)和页面(例如“关于”、“联系我们”、“项目”)" + +#: ../../index.rst:20 c7cc4fe6ea8145feb0ace7d0965e2634 +msgid "Integration with external services" +msgstr "可以和外部服务集成" + +#: ../../index.rst:21 ceb2c8a629024157946eba53638d7eb1 +msgid "Site themes (created using Jinja2_ templates)" +msgstr "可以使用主题(主题使用 Jinja2_ 模板引擎创建)" + +#: ../../index.rst:22 51c3defcba6c4d31a77c3aade6826f1a +msgid "Publication of articles in multiple languages" +msgstr "可以为同一篇文章发布多种语言版本" + +#: ../../index.rst:23 6f7cbfae94c54318a904e9725ce73677 +msgid "Generation of Atom and RSS feeds" +msgstr "可以生成Atom和Rss订阅源" + +#: ../../index.rst:24 3d667d2ed98a489788f6c38a4e4a6752 +msgid "Code syntax highlighting" +msgstr "可以渲染代码高亮" + +#: ../../index.rst:25 bf1a1f91b821464182471a3760a59d4f +msgid "Import existing content from WordPress, Dotclear, or RSS feeds" +msgstr "可以从WordPress、Dotclear或Rss订阅源导入已有的内容" + +#: ../../index.rst:26 bd82641c549645cb8b4cd3187800397c +msgid "Fast rebuild times thanks to content caching and selective output writing" +msgstr "得益于内容缓存和选择性生成设计,可以快速重新生成站点" + +#: ../../index.rst:27 8dec47d1ab13410c9b99db0709c860a3 +msgid "Extensible via a rich plugin ecosystem: `Pelican Plugins`_" +msgstr "可扩展性强,有丰富的插件生态: `Pelican Plugins`_" + +#: ../../index.rst:30 c7e090d7d2e04ff1ac1844e56209d75b +msgid "Why the name \"Pelican\"?" +msgstr "为什么叫做“Pelican”?" + +#: ../../index.rst:32 8c31222af5e24ba69acb5dd07a5b5d56 +msgid "" +"\"Pelican\" is an anagram for *calepin*, which means \"notebook\" in " +"French. ;)" +msgstr "" +"“Pelican”是法语词笔记本 *calepin* 读音的回文。;)" + +#: ../../index.rst:35 188f72b2bb644f978180eba22009ebc6 +msgid "Source code" +msgstr "源码" + +#: ../../index.rst:37 2c8804f173fb4aa8973fb4d2413c263b +msgid "You can access the source code at: https://github.com/getpelican/pelican" +msgstr "在这里可以获取Pelican的源码: https://github.com/getpelican/pelican" + +#: ../../index.rst:40 06ab21b7cde94cee92193199ddc69775 +msgid "How to get help, contribute, or provide feedback" +msgstr "如何获取帮助、贡献内容或是提供反馈" + +#: ../../index.rst:42 7fdcc2bcaac04317a6f4114f1d9c327f +msgid "" +"See our :doc:`feedback and contribution submission guidelines " +"`." +msgstr "" +"请查看文档 :doc:`反馈意见和贡献的提交指南 `。" + +#: ../../index.rst:45 3d15499d76e1489d8e8782c65f73bb29 +msgid "Documentation" +msgstr "文档" diff --git a/docs/locale/zh_CN/LC_MESSAGES/install.po b/docs/locale/zh_CN/LC_MESSAGES/install.po new file mode 100644 index 00000000..f77ccab5 --- /dev/null +++ b/docs/locale/zh_CN/LC_MESSAGES/install.po @@ -0,0 +1,220 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2010–2024 +# This file is distributed under the same license as the PELICAN package. +# FIRST AUTHOR , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: PELICAN 4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-07-13 11:46+0800\n" +"PO-Revision-Date: 2024-06-25 19:00+0800\n" +"Last-Translator: GeorgeHu \n" +"Language: zh_CN\n" +"Language-Team: \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.17.0\n" + +#: ../../install.rst:2 e735e1393d63466092c9fc0a5ee4117d +msgid "Installing Pelican" +msgstr "安装Pelican" + +#: ../../install.rst:4 e34bdf7c1bbb4c75a47f8bd16e626c67 +msgid "" +"Pelican currently runs best on |min_python|; earlier versions of Python " +"are not supported." +msgstr "Pelican需要 |min_python| 以上版本的Python,不支持更低版本。" + +#: ../../install.rst:6 ff98ade47da6403e84dd1b2209896d9c +msgid "" +"You can install Pelican via several different methods. The simplest is " +"via Pip_::" +msgstr "有多种方法可以安装Pelican,最简单的就是通过 Pip_:" + +#: ../../install.rst:10 ae2fcb82534e4a3f81980f69ed94c9ad +msgid "Or, if you plan on using Markdown::" +msgstr "如果您需要使用Markdown,请使用下面的命令安装:" + +#: ../../install.rst:14 ed597b1eb47949efba0f1781ef7bbd1f +msgid "" +"(Keep in mind that some operating systems will require you to prefix the " +"above command with ``sudo`` in order to install Pelican system-wide.)" +msgstr "(在某些操作系统中,需要在命令前加 ``sudo`` 才能在整个系统上安装Pelican)" + +#: ../../install.rst:17 04d6784f06dd40e7bff76bf6476aaba1 +msgid "" +"While the above is the simplest method, the recommended approach is to " +"create a virtual environment for Pelican via virtualenv_ before " +"installing Pelican. Assuming you have virtualenv_ installed, you can then" +" open a new terminal session and create a new virtual environment for " +"Pelican::" +msgstr "" +"尽管上面是最简单的安装方法,但我们推荐使用虚拟环境 virtualenv_ 完成Pelican的安装。当您安装好 virtualenv_ " +"后,打开一个新的命令行并为Pelican创建一个虚拟环境:" + +#: ../../install.rst:26 08aae819315e48a194a065a3fc3dddad +msgid "" +"Once the virtual environment has been created and activated, Pelican can " +"be installed via ``python -m pip install pelican`` as noted above. " +"Alternatively, if you have the project source, you can install Pelican " +"using the setuptools method::" +msgstr "" +"当创建并激活虚拟环境后,使用之前提到过的命令 ``python -m pip install pelican`` " +"就可以安装Pelican了。或者,如果您想要从源码安装,可以使用setuptools:" + +#: ../../install.rst:33 368febf14ca740e19fa470b0f832dea1 +msgid "" +"If you have Git installed and prefer to install the latest bleeding-edge " +"version of Pelican rather than a stable release, use the following " +"command::" +msgstr "如果安装过Git,并且您希望安装Pelican的最最新版本(而不是稳定版),请使用下面的命令:" + +#: ../../install.rst:38 2498d09099194317a62e67b907bdd5d3 +msgid "" +"Once Pelican is installed, you can run ``pelican --help`` to see basic " +"usage options. For more detail, refer to the :doc:`Publish` " +"section." +msgstr "" +"当您安装好Pelican,可以执行 ``pelican --help`` 命令来查看一些基本用法。在 :doc:`发布站点` " +"章节中可以了解更多信息。" + +#: ../../install.rst:42 4ef93669753e4bb89252a8c9852e7a71 +msgid "Optional packages" +msgstr "可选包" + +#: ../../install.rst:44 190eabcd8f3a437cbf895ecee25aff4d +msgid "" +"If you plan on using `Markdown `_ as " +"a markup format, you can install Pelican with Markdown support::" +msgstr "" +"如您希望使用 `Markdown `_ " +"来写作,执行下面的命令来安装Markdown支持:" + +#: ../../install.rst:49 fa8fc8ff397a412f839bc2805696aa45 +msgid "" +"Typographical enhancements can be enabled in your settings file, but " +"first the requisite `Typogrify `_ " +"library must be installed::" +msgstr "" +"Pelican还支持排版增强,若您需要使用,请先安装 `Typogrify " +"`_ 库,稍后您可以在设置文件中启用它。" + +#: ../../install.rst:56 74911273a6934154bad4fadbc0d1f28b +msgid "Dependencies" +msgstr "依赖" + +#: ../../install.rst:58 77d44b11ae7e4945b119fd473bb53e67 +msgid "" +"When Pelican is installed, the following dependent Python packages should" +" be automatically installed without any action on your part:" +msgstr "当Pelican安装完成后,下面的所有Python依赖应该都会自动安装,无需另外做任何操作:" + +#: ../../install.rst:61 22bdf13ed0a3482fb66f10486518261c +msgid "" +"`feedgenerator `_, to generate " +"the Atom feeds" +msgstr "`feedgenerator `_,用于生成Atom feeds" + +#: ../../install.rst:63 21ddc5ce3bed4f9cab2a454e8319a8c4 +msgid "`jinja2 `_, for templating support" +msgstr "`jinja2 `_,用于模板系统" + +#: ../../install.rst:64 9302b2919a4f4de0927060911f69f5ed +msgid "`pygments `_, for syntax highlighting" +msgstr "`pygments `_,用于语法高亮" + +#: ../../install.rst:65 c6e45ac0f3ea4f91953fb2dfc66d29d9 +msgid "" +"`docutils `_, for supporting " +"reStructuredText as an input format" +msgstr "`docutils `_,用于reStructuredText格式" + +#: ../../install.rst:67 aea17a424f3c4e8eab50172b6653fe16 +msgid "" +"`blinker `_, an object-to-object and " +"broadcast signaling system" +msgstr "`blinker `_,对象-对象的信号广播系统" + +#: ../../install.rst:69 5da4c8d1fdf349c2afe23ffc9d832816 +msgid "" +"`unidecode `_, for ASCII " +"transliterations of Unicode text utilities" +msgstr "" +"`unidecode " +"`_,用于将Unicode文本转为ASCII字符的音译" + +#: ../../install.rst:72 ff81051def5544e1b5d66532453aed25 +msgid "" +"`MarkupSafe `_, for a markup-safe " +"string implementation" +msgstr "`MarkupSafe `_,用于转义字符的安全处理" + +#: ../../install.rst:74 0222b4cdfdcb48839f5f6b092071db99 +msgid "" +"`python-dateutil `_, to read " +"the date metadata" +msgstr "" +"`python-dateutil `_,用于读取日期相关的元数据" + +#: ../../install.rst:78 49117127302b49b39bd5b86abae18709 +msgid "Upgrading" +msgstr "更新升级" + +#: ../../install.rst:80 93962c7d303f4c9fa5ad9d43f86ea50a +msgid "" +"If you installed a stable Pelican release via Pip_ and wish to upgrade to" +" the latest stable release, you can do so by adding ``--upgrade``::" +msgstr "若是通过 Pip_ 安装了稳定版本的Pelican,可以通过在安装命令中添加 ``--upgrade`` 来升级到最新版:" + +#: ../../install.rst:85 1ac1fa009f9e4245ae7f975bda7d5a22 +msgid "" +"If you installed Pelican via distutils or the bleeding-edge method, " +"simply perform the same step to install the most recent version." +msgstr "若是通过distutils安装或是通过Git安装了测试版的Pelican重新进行一遍和安装时同样的步骤即可。" + +#: ../../install.rst:89 7845fa285f0b4dcd8e881c9edd61f80c +msgid "Kickstart your site" +msgstr "启动网站" + +#: ../../install.rst:91 488ad84175cb45f6a6bb26cec24c1f10 +msgid "" +"Once Pelican has been installed, you can create a skeleton project via " +"the ``pelican-quickstart`` command, which begins by asking some questions" +" about your site::" +msgstr "" +"Pelican安装完成后,通过 ``pelican-quickstart`` " +"命令创建项目的整体框架,在运行这个命令时,您需要输入一些与站点相关的信息:" + +#: ../../install.rst:97 63a773d35b91455b944206337e527a3a +msgid "" +"If run inside an activated virtual environment, ``pelican-quickstart`` " +"will look for an associated project path inside " +"``$VIRTUAL_ENV/.project``. If that file exists and contains a valid " +"directory path, the new Pelican project will be saved at that location. " +"Otherwise, the default is the current working directory. To set the new " +"project path on initial invocation, use: ``pelican-quickstart --path " +"/your/desired/directory``" +msgstr "" +"如果是在虚拟环境中执行 ``pelican-quickstart`` ,系统会自动在 ``$VIRTUAL_ENV/.project`` " +"目录中查找这个命令。若这个这个命令存在并且路径是正确的,一个新的Pelican项目就会在目标位置创建。否则,会默认在当前的工作目录下创建这个项目。若要在初始化时指定项目路径,请使用" +" ``pelican-quickstart --path /your/desired/directory``。" + +#: ../../install.rst:104 b7cdf15328074880bb4fc69dcb7bd26f +msgid "" +"Once you finish answering all the questions, your project will consist of" +" the following hierarchy (except for *pages* — shown in parentheses below" +" — which you can optionally add yourself if you plan to create non-" +"chronological content)::" +msgstr "" +"当您回答完所有问题后,项目就会成功创建。项目中会包含下述的一些层级结构(除了用括号括起来的 " +"*pages*)。如果有一些内容不需要按时间排序,您可以将它们放在(pages)所在的位置:" + +#: ../../install.rst:118 05e4fe3b0d0a4c998fba451692a68725 +msgid "" +"The next step is to begin to adding content to the *content* folder that " +"has been created for you." +msgstr "接下来就可以开始往 *content* 目录中添加自己创作的内容了。" diff --git a/docs/locale/zh_CN/LC_MESSAGES/internals.po b/docs/locale/zh_CN/LC_MESSAGES/internals.po new file mode 100644 index 00000000..5fea5c46 --- /dev/null +++ b/docs/locale/zh_CN/LC_MESSAGES/internals.po @@ -0,0 +1,172 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2010–2024 +# This file is distributed under the same license as the PELICAN package. +# FIRST AUTHOR , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: PELICAN 4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-06-24 19:06+0800\n" +"PO-Revision-Date: 2024-06-27 19:00+0800\n" +"Last-Translator: GeorgeHu \n" +"Language: zh_CN\n" +"Language-Team: n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.15.0\n" + +#: ../../internals.rst:2 5d90a7c7f9dd42b5ba1fdfc05c5e9c3c +msgid "Pelican internals" +msgstr "Pelican内部机制" + +#: ../../internals.rst:4 fa53597118244e8585b3b0a9fb4336c0 +msgid "" +"This section describe how Pelican works internally. As you'll see, it's " +"quite simple, but a bit of documentation doesn't hurt. :)" +msgstr "" +"这一节描述了Pelican的内部运行机制。你会发现,Pelican的内部其实并不复杂。 :)" + +#: ../../internals.rst:7 c9a34db098f34796b80ee62896702be2 +msgid "" +"You can also find in the :doc:`report` section an excerpt of a report the" +" original author wrote with some software design information." +msgstr "你可以在 :doc:`report` 一节中找到原作者用软件设计相关内容报告的节选。" + +#: ../../internals.rst:13 ac2af84842574bef9a791b416e21834e +msgid "Overall structure" +msgstr "总体结构" + +#: ../../internals.rst:15 fb7aea45b8f74c9c877bf2640d47aaac +msgid "" +"What Pelican does is take a list of files and process them into some sort" +" of output. Usually, the input files are reStructuredText and Markdown " +"files, and the output is a blog, but both input and output can be " +"anything you want." +msgstr "" +"Pelican做的事情其实很简单:获取一个文件列表,并将它们处理为某种输出。通常,输入文件是" +"reStructuredText和Markdown文件,输出是一个博客,但事实上输入和输出都可以是你想要的" +"任何内容。" + +#: ../../internals.rst:19 599649d1e9da4355ab02b50ea4fbdb19 +msgid "The logic is separated into different classes and concepts:" +msgstr "系统的整体逻辑可以分为几个不同的类和概念:" + +#: ../../internals.rst:21 8ec0821a726e4ade8046921cc09b3ea3 +msgid "" +"**Writers** are responsible for writing files: .html files, RSS feeds, " +"and so on. Since those operations are commonly used, the object is " +"created once and then passed to the generators." +msgstr "" +"**Writers** 负责完成 html、RSS订阅源等等内容的文件写入。因为这些操作都是比较常用的," +"这个类只会被创建一次,然后再传给Generators。" + +#: ../../internals.rst:25 63c9a61869884147a8752e9be188e0e9 +msgid "" +"**Readers** are used to read from various formats (HTML, Markdown and " +"reStructuredText for now, but the system is extensible). Given a file, " +"they return metadata (author, tags, category, etc.) and content (HTML-" +"formatted)." +msgstr "" +"**Readers** 用于读取不同格式的文件(目前支持HTML、Markdown、reStructuredText," +"但可以继续扩展)。向**Readers**输入一个文件,它会返回文档的元数据(作者、标签、" +"分类等等)与HTML格式的文档正文内容。" + +#: ../../internals.rst:29 d9bc146ae213415b804cd93ebf43e340 +msgid "" +"**Generators** generate the different outputs. For instance, Pelican " +"comes with ``ArticlesGenerator`` and ``PageGenerator``. Given a " +"configuration, they can do whatever they want. Most of the time, it's " +"generating files from inputs." +msgstr "" +"**Generators** 用以生成不同的输出,Pelican自带了 ``ArticlesGenerator`` 和 " +"``PageGenerator`` 。给定一套配置信息, **Generators** 可以做几乎任何事。" +"但大多数情况下,它的工作就是从输入生成文件。" + +#: ../../internals.rst:34 49ef39e8677a4529a3ee226faae1526b +msgid "" +"Pelican also uses templates, so it's easy to write your own theme. The " +"syntax is `Jinja2 `_ and is very " +"easy to learn, so don't hesitate to jump in and build your own theme." +msgstr "" +"Pelican使用了模板引擎,因此可以较为简单地编写自定义主题。模板语法使用的是易于学习的 " +"`Jinja2 `_ ,因此快去构建你自己的主题吧。" + +#: ../../internals.rst:39 1aef766f93d549afa332fad4278c4063 +msgid "How to implement a new reader?" +msgstr "如何实现一个新的reader?" + +#: ../../internals.rst:41 abbbfc19ccea4e3ea3716179981e3c1d +msgid "" +"Is there an awesome markup language you want to add to Pelican? Well, the" +" only thing you have to do is to create a class with a ``read`` method " +"that returns HTML content and some metadata." +msgstr "" +"若是希望为Pelican添加一个标记语言,只需要创建一个类,实现 ``read`` 方法,并在其中" +"返回元数据和以HTML表示的正文内容。" + +#: ../../internals.rst:45 1e9fc1bcc9444db4b751f1c621280a32 +msgid "Take a look at the Markdown reader::" +msgstr "可以看一看Markdown的reader:" + +#: ../../internals.rst:71 cbc4f49384964be3a0a68b1083100839 +msgid "Simple, isn't it?" +msgstr "是不是很简单呢?" + +#: ../../internals.rst:73 02643c7e485d49e39344570ba5639a60 +msgid "" +"If your new reader requires additional Python dependencies, then you " +"should wrap their ``import`` statements in a ``try...except`` block. " +"Then inside the reader's class, set the ``enabled`` class attribute to " +"mark import success or failure. This makes it possible for users to " +"continue using their favourite markup method without needing to install " +"modules for formats they don't use." +msgstr "" +"如果新创建的reader需要额外的Python依赖,应该把 ``import`` 放在 ``try...except`` " +"块中。在reader类中,设置类属性 ``enabled`` 来标记import是否成功。这使得用户能" +"继续使用他们喜欢的标记语言而无需安装用不到的模块。" + +#: ../../internals.rst:80 02deeeac368b4dbc8c7b1025275d5bd5 +msgid "How to implement a new generator?" +msgstr "如何实现一个新的generator?" + +#: ../../internals.rst:82 f7e5c28efbdb40c0bac7b985e8264310 +msgid "" +"Generators have two important methods. You're not forced to create both; " +"only the existing ones will be called." +msgstr "" +"generator有两个重要方法。不一定两个都要创建,若只创建了一个,就会自动调用存在的方法。" + +#: ../../internals.rst:85 01f2801461e043e7882167907e337d2c +msgid "" +"``generate_context``, that is called first, for all the generators. Do " +"whatever you have to do, and update the global context if needed. This " +"context is shared between all generators, and will be passed to the " +"templates. For instance, the ``PageGenerator`` ``generate_context`` " +"method finds all the pages, transforms them into objects, and populates " +"the context with them. Be careful *not* to output anything using this " +"context at this stage, as it is likely to change by the effect of other " +"generators." +msgstr "" +"``generate_context`` 会优先被调用,其中可以完成任何你想要做的事,如果需要的话,还要" +"更新全局上下文。全局上下文会在所有generator间共享,并在之后传给模板。例如 " +"``PageGenerator`` 的 ``generate_context`` 方法会找寻所有页面,并将他们转换为对象," +"再将上下文传入其中。注意,请 *不要* 在此阶段使用该上下文输出任何内容,因为其他" +"generator还会继续影响上下文。" + +#: ../../internals.rst:93 3241d04af8944c48bf162963a774000c +msgid "" +"``generate_output`` is then called. And guess what is it made for? Oh, " +"generating the output. :) It's here that you may want to look at the " +"context and call the methods of the ``writer`` object that is passed as " +"the first argument of this function. In the ``PageGenerator`` example, " +"this method will look at all the pages recorded in the global context and" +" output a file on the disk (using the writer method ``write_file``) for " +"each page encountered." +msgstr "" +"``generate_output`` 会在 ``generate_context`` 之后被调用,用于生成要输出的内容。" +"此时就需要使用上下文并调用 ``writer`` 对象的方法,此 ``writer`` 就是传入 " +"``generate_output`` 方法的第一个参数。``PageGenerator`` 的 ``generate_output`` " +"方法中,会使用writer的 ``write_file`` 方法为全局上下文中的每一个页面输出一个文件。" diff --git a/docs/locale/zh_CN/LC_MESSAGES/pelican-themes.po b/docs/locale/zh_CN/LC_MESSAGES/pelican-themes.po new file mode 100644 index 00000000..bceef808 --- /dev/null +++ b/docs/locale/zh_CN/LC_MESSAGES/pelican-themes.po @@ -0,0 +1,206 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2010–2024 +# This file is distributed under the same license as the PELICAN package. +# FIRST AUTHOR , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: PELICAN 4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-06-24 19:06+0800\n" +"PO-Revision-Date: 2024-06-27 19:00+0800\n" +"Last-Translator: GeorgeHu \n" +"Language: zh_CN\n" +"Language-Team: \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.15.0\n" + +#: ../../pelican-themes.rst:2 1fce54d5389b41f4a588e9b23b646aee +msgid "pelican-themes" +msgstr "pelican-themes" + +#: ../../pelican-themes.rst:7 6158b329ed7b469286405115e2ed7fa0 +msgid "Description" +msgstr "简介" + +#: ../../pelican-themes.rst:9 3df74d6d079945f7a4e0062ed5ea3eed +msgid "" +"``pelican-themes`` is a command line tool for managing themes for " +"Pelican. See :ref:`settings/themes` for settings related to themes." +msgstr "" +"``pelican-themes`` 是一个命令行工具,用于管理Pelican主题。有关主题的配置," +"请参考 :ref:`设置章节中的主题 ` 。" + +#: ../../pelican-themes.rst:14 03eb76faf4544c8dbf478752096c7d7c +msgid "Usage" +msgstr "用法" + +#: ../../pelican-themes.rst:16 d5dcdc6c26094f5695061f9c53633589 +msgid "pelican-themes [-h] [-l] [-i theme path [theme path ...]]" +msgstr "pelican-themes [-h] [-l] [-i theme path [theme path ...]]" + +#: ../../pelican-themes.rst:17 99b7a21ca612425da217b72b8c0c9b64 +msgid "[-r theme name [theme name ...]]" +msgstr "[-r theme name [theme name ...]]" + +#: ../../pelican-themes.rst:18 1f64db909173426dabee822aea3b269b +msgid "[-s theme path [theme path ...]] [-v] [--version]" +msgstr "[-s theme path [theme path ...]] [-v] [--version]" + +#: ../../pelican-themes.rst:21 63ef4d44a1db4176b4c3866671a93603 +msgid "Optional arguments:" +msgstr "可选参数:" + +#: ../../pelican-themes.rst:24 348360945a0943ffa8122aad16bf0ec1 +msgid "Show the help and exit" +msgstr "显示帮助信息并退出" + +#: ../../pelican-themes.rst:26 aaec8d28264b45b7aac617b7140b5b13 +msgid "Show the themes already installed" +msgstr "显示已安装的主题" + +#: ../../pelican-themes.rst:28 c8d44b6ac6754f4e8e10a39848f042d0 +msgid "One or more themes to install" +msgstr "安装一个或多个主题" + +#: ../../pelican-themes.rst:30 18077fbf428e476aa218464fb0f18d8d +msgid "One or more themes to remove" +msgstr "移除一个或多个主题" + +#: ../../pelican-themes.rst:32 e328d59886be45a6ae9530a0f2bea3ca +msgid "" +"Same as ``--install``, but create a symbolic link instead of copying the " +"theme. Useful for theme development" +msgstr "" +"和 ``--install`` 相同,区别在于此选项仅会创建一个符号链接到给定的目录," +"而不会将主题完整拷贝。一般用于主题的开发" + +#: ../../pelican-themes.rst:35 481c7a32a5e6400d83c9e2e56e6b94a4 +msgid "Verbose output" +msgstr "开启详细输出" + +#: ../../pelican-themes.rst:37 d7889dd20ac643ecad73e464ec4cfa55 +msgid "Print the version of this script" +msgstr "显示此工具的版本信息" + +#: ../../pelican-themes.rst:42 5c3d3aabd5304e8f9a6f0593824f1da6 +msgid "Examples" +msgstr "例子" + +#: ../../pelican-themes.rst:46 4d6ff63aae06482dbf22f41d4111b001 +msgid "Listing the installed themes" +msgstr "列出已安装主题" + +#: ../../pelican-themes.rst:48 91a9e942ea36479999586426afead753 +msgid "" +"With ``pelican-themes``, you can see the available themes by using the " +"``-l`` or ``--list`` option:" +msgstr "" +"在 ``pelican-themes`` 中使用 ``-l`` 或 ``--list`` 选项,查看可用主题:" + +#: ../../pelican-themes.rst:62 7a2f7dc98fcc45cabc4639576d503c28 +msgid "" +"In this example, we can see there are three themes available: " +"``notmyidea``, ``simple``, and ``two-column``." +msgstr "" +"在上面的例子中,可以看到有三个主题可供使用: ``notmyidea`` 、 " +"``simple`` 、和 ``two-column`` 。" + +#: ../../pelican-themes.rst:65 8c03dfa908114d92b8a9aeb6673555ce +msgid "" +"``two-column`` is followed by an ``@`` because this theme is not copied " +"to the Pelican theme path, but is instead just linked to it (see " +"`Creating symbolic links`_ for details about creating symbolic links)." +msgstr "" +"主题 ``two-column`` 后有一个 ``@`` ,这是因为该主题没有被拷贝到Pelican的主题" +"路径下,而只是为其创建了一个符号链接 (详见 `创建符号链接`_ )。" + +#: ../../pelican-themes.rst:69 bc91e8c3ff4a44dd9234d0ab186d8515 +msgid "" +"Note that you can combine the ``--list`` option with the ``-v`` or " +"``--verbose`` option to get more verbose output, like this:" +msgstr "" +"当然,你可以将 ``--list`` 选项和 ``-v`` 或 ``--verbose`` 结合起来,从而" +"得到更详细的输出:" + +#: ../../pelican-themes.rst:81 0b407ed71e6a4b428f5a582b58a47f3c +msgid "Installing themes" +msgstr "安装主题" + +#: ../../pelican-themes.rst:83 e95f78a5c3b844b9a6fd2924f455748f +msgid "" +"You can install one or more themes using the ``-i`` or ``--install`` " +"option. This option takes as argument the path(s) of the theme(s) you " +"want to install, and can be combined with the ``--verbose`` option:" +msgstr "" +"使用 ``-i`` 或 ``--install`` 选项可以安装一个或多个主题。此选项将一个" +"或多个到达主题的路径作为参数,同样可以结合 ``--verbose`` 选项:" + +#: ../../pelican-themes.rst:103 5b20e90396564e08860b2b3a569e7166 +msgid "Removing themes" +msgstr "移除主题" + +#: ../../pelican-themes.rst:105 2415bf89e3804c9dbdc34814b0132b8c +msgid "" +"The ``pelican-themes`` command can also remove themes from the Pelican " +"themes path. The ``-r`` or ``--remove`` option takes as argument the " +"name(s) of the theme(s) you want to remove, and can be combined with the " +"``--verbose`` option." +msgstr "" +"``pelican-themes`` 命令同样可用于移除Pelican主题文件夹下的主题。 ``-r`` 或 " +"``--remove`` 选项以一个或多个主题的名称为参数,同样也可以结合 ``--verbose`` " +"选项使用。" + +#: ../../pelican-themes.rst:122 9ea5149543a648049444220a4041da69 +msgid "Creating symbolic links" +msgstr "创建符号链接" + +#: ../../pelican-themes.rst:124 17cdf3146683485ea72db5fbd9c1f60a +msgid "" +"``pelican-themes`` can also install themes by creating symbolic links " +"instead of copying entire themes into the Pelican themes path." +msgstr "" +"``pelican-themes`` 也可以通过创建符号链接来安装主题,如此便无需完整拷贝主题。" + +#: ../../pelican-themes.rst:127 1d2c60b41c374936a9986a852d50e898 +msgid "" +"To symbolically link a theme, you can use the ``-s`` or ``--symlink``, " +"which works exactly as the ``--install`` option:" +msgstr "" +"使用 ``-s`` 或 ``--symlink`` 选项来为主题创建符号链接,用法和 ``--install`` 选项相同:" + +#: ../../pelican-themes.rst:134 66707a8607f549199dca6f93586d2d87 +msgid "" +"In this example, the ``two-column`` theme is now symbolically linked to " +"the Pelican themes path, so we can use it, but we can also modify it " +"without having to reinstall it after each modification." +msgstr "" +"在上面的例子中, ``two-column`` 主题就已经在Pelican主题目录下创建了符号链接," +"也可以正常使用。如此,当我们修改主题后就无需重新进行安装。" + +#: ../../pelican-themes.rst:138 93ec27a473b04bca9d2930a7cb6b609c +msgid "This is useful for theme development:" +msgstr "这对主题的开发是很有用的:" + +#: ../../pelican-themes.rst:155 66d808308aa64fc9afcef8bdf03bca8b +msgid "Doing several things at once" +msgstr "同时执行多个操作" + +#: ../../pelican-themes.rst:157 ace10a2c2f4d4adab9ade60631e82c38 +msgid "" +"The ``--install``, ``--remove`` and ``--symlink`` options are not " +"mutually exclusive, so you can combine them in the same command line to " +"do more than one operation at time, like this:" +msgstr "" +"``--install`` 、 ``--remove`` 和 ``--symlink`` 可以同时使用,不会冲突," +"因此可以在同一行命令中同时做多个操作:" + +#: ../../pelican-themes.rst:169 e7adbac04b6a40fd986c02e834cc1756 +msgid "" +"In this example, the theme ``notmyidea-cms`` is replaced by the theme " +"``notmyidea-cms-fr``" +msgstr "" +"在上面的例子中,用 ``notmyidea-cms-fr`` 替换了 ``notmyidea-cms`` 主题。" diff --git a/docs/locale/zh_CN/LC_MESSAGES/plugins.po b/docs/locale/zh_CN/LC_MESSAGES/plugins.po new file mode 100644 index 00000000..123117b8 --- /dev/null +++ b/docs/locale/zh_CN/LC_MESSAGES/plugins.po @@ -0,0 +1,669 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2010–2024 +# This file is distributed under the same license as the PELICAN package. +# FIRST AUTHOR , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: PELICAN 4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-07-13 11:46+0800\n" +"PO-Revision-Date: 2024-06-26 19:00+0800\n" +"Last-Translator: GeorgeHu \n" +"Language: zh_CN\n" +"Language-Team: \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.17.0\n" + +#: ../../plugins.rst:4 3df58bcad1a64350a8e763d87d7470e3 +msgid "Plugins" +msgstr "插件" + +#: ../../plugins.rst:6 5e0f2aa517254778a71d1e742b051645 +msgid "" +"Beginning with version 3.0, Pelican supports plugins. Plugins are a way " +"to add features to Pelican without having to directly modify the Pelican " +"core." +msgstr "Pelican从3.0版本开始支持插件。通过插件,不必直接修改Pelican的核心代码就可以给Pelican添加新功能。" + +#: ../../plugins.rst:10 40ad4aad1dc54b929f6059031edae0d9 +msgid "How to use plugins" +msgstr "如何使用插件" + +#: ../../plugins.rst:12 8fc9f8cba76b4bb9930d80b5b985885a +msgid "" +"Starting with version 4.5, Pelican moved to a new plugin structure " +"utilizing namespace packages that can be easily installed via Pip_. " +"Plugins supporting this structure will install under the namespace " +"package ``pelican.plugins`` and can be automatically discovered by " +"Pelican. To see a list of Pip-installed namespace plugins that are active" +" in your environment, run::" +msgstr "" +"Pelican从4.5版本开始使用了一种全新的插件结构,利用了命名空间包,并且可以轻松地通过 Pip_ " +"进行安装。支持此结构地插件都会被安装在命名空间包 ``pelican.plugins`` " +"下,因此Pelican可以自动发现他们。下面的命令可以用于查看环境中用Pip安装的所有插件:" + +#: ../../plugins.rst:20 de052285e7f645a9ab551433f3c07d46 +msgid "" +"If you leave the ``PLUGINS`` setting as default (``None``), Pelican will " +"automatically discover namespace plugins and register them. If, on the " +"other hand, you specify a ``PLUGINS`` setting as a list of plugins, this " +"auto-discovery will be disabled. At that point, only the plugins you " +"specify will be registered, and you must explicitly list any namespace " +"plugins as well." +msgstr "" +"若将 ``PLUGINS`` 配置项设为默认的 ``None`` ,Pelican会自动发现命名空间中的插件并且将他们全部加载;若你在 " +"``PLUGINS`` 设置项中指定了一系列的插件,Pelican就不会去自动发现插件,也就是说,你需要显式地指定所有要使用的插件。" + +#: ../../plugins.rst:26 a9675be841b84df584e67087cd23ab34 +msgid "" +"If you are using the ``PLUGINS`` setting, you can specify plugins in two " +"ways. The first method specifies plugins as a list of strings. Namespace " +"plugins can be specified either by their full names " +"(``pelican.plugins.myplugin``) or by their short names (``myplugin``)::" +msgstr "" +"在配置 ``PLUGINS`` 时,有两种方式。一是用字符串列表指定插件的名称,可以是包含命名空间的完整名称(例如 " +"``pelican.plugins.myplugin`` ),也可以是简短名称( ``myplugin``):" + +#: ../../plugins.rst:35 188bf617180b4a7b9bc09f3fb1c201ae +msgid "" +"Alternatively, you can import them in your settings file and pass the " +"modules::" +msgstr "二是在设置文件中先import进来,再将import进的模块放在 ``PLUGINS`` 设置项中:" + +#: ../../plugins.rst:43 2d5db874810245a98b59ab080a0df1a5 +msgid "" +"When experimenting with different plugins (especially the ones that deal " +"with metadata and content) caching may interfere and the changes may not " +"be visible. In such cases disable caching with ``LOAD_CONTENT_CACHE = " +"False`` or use the ``--ignore-cache`` command-line switch." +msgstr "" +"在尝试不同的插件时(尤其是那些处理元数据和内容的插件),缓存可能会相互干扰,一些更改不会生效。发生这种情况时,就需要通过设置 " +"``LOAD_CONTENT_CACHE = False`` 或使用 ``--ignore-cache`` 命令行选项禁用缓存。" + +#: ../../plugins.rst:48 7421f93c1d714c9c853fc9311681515a +msgid "" +"If your plugins are not in an importable path, you can specify a list of " +"paths via the ``PLUGIN_PATHS`` setting. As shown in the following " +"example, paths in the ``PLUGIN_PATHS`` list can be absolute or relative " +"to the settings file::" +msgstr "" +"如果插件处于无法直接进行import的路径,可以在 ``PLUGIN_PATHS`` 配置项中指定这些路径。如下例所示, " +"``PLUGIN_PATHS`` 中的路径可以是绝对的,也可以是相对于设置文件的:" + +#: ../../plugins.rst:56 b8406038d0284d3fbef9d3de1fa7fd9f +msgid "Where to find plugins" +msgstr "在哪儿下载插件" + +#: ../../plugins.rst:57 b07653ce77194a998630a55ae9511de5 +msgid "" +"Namespace plugins can be found in the `pelican-plugins organization`_ as " +"individual repositories. Legacy plugins are located in the `pelican-" +"plugins repository`_ and will be gradually phased out in favor of the " +"namespace versions." +msgstr "" +"新的命名空间插件可以在GitHub的 `pelican-plugins 组织`_ " +"中找到,每个插件都是一个独立的仓库。而老的插件则可以在GitHub的 `pelican-plugins 仓库`_ " +"中找到。这些老的插件会逐步淘汰并转移到新的命名空间版本。" + +#: ../../plugins.rst:65 5c55fa6f3d664be2a49b8256dc2f6a2e +msgid "" +"Please note that while we do our best to review and maintain these " +"plugins, they are submitted by the Pelican community and thus may have " +"varying levels of support and interoperability." +msgstr "请注意,尽管我们尽全力审查和维护这些插件,但这些插件是Pelican社区提交的,因此支持性和互操作性程度各不相同。" + +#: ../../plugins.rst:70 25339a713a97492c88b0e60024ac34b8 +msgid "How to create plugins" +msgstr "如何创建插件" + +#: ../../plugins.rst:72 62b6b4a1a5f0486e8b3a39d6a7050f0a +msgid "" +"Plugins are based on the concept of signals. Pelican sends signals, and " +"plugins subscribe to those signals. The list of available signals is " +"documented in a subsequent section." +msgstr "插件是基于信号这一概念的。Pelican会发送信号,插件则订阅这些信号。可用的信号在下一节会贴出来。" + +#: ../../plugins.rst:76 f8f74b0257be46a1878e72e126166bd0 +msgid "" +"The only rule to follow for plugins is to define a ``register`` callable," +" in which you map the signals to your plugin logic. Let's take a simple " +"example::" +msgstr "" +"对于插件来说,唯一需要遵循的规则就是一定要定义一个可调用的 ``register`` ,在 ``register`` " +"中需要将信号映射到插件逻辑上。下面是一个简单的例子:" + +#: ../../plugins.rst:93 163eebc74421416da2ad497830c42771 +msgid "" +"Signal receivers are weakly-referenced and thus must not be defined " +"within your ``register`` callable or they will be garbage-collected " +"before the signal is emitted." +msgstr "信号接收器在Pelican中是弱引用的,因此不能将它定义在可调用的 ``register`` 中,否则接收器在信号发送之前就会被回收。" + +#: ../../plugins.rst:97 bb63bd2d24e341a1a4f7dfa118648d9a +msgid "" +"If multiple plugins connect to the same signal, plugins will be invoked " +"in the order they are registered. When the ``PLUGINS`` setting is " +"defined, plugin invocation order will be the order in which the plugins " +"are listed in the ``PLUGINS`` setting. If you rely on auto-discovered " +"namespace plugins and have no ``PLUGINS`` setting defined, plugins will " +"be invoked in the same order that they are discovered (the same order as " +"listed in the output of the ``pelican-plugins`` command). If you want to " +"specify the order explicitly, disable auto-discovery by defining " +"``PLUGINS`` in the desired order." +msgstr "" +"对于关联到同一个信号的多个插件,将按照它们注册的前后顺序执行。但若设置了 ``PLUGINS`` " +"配置项,则会以此配置项中的顺序为准。如果您使用了无需PLUGINS设置的新版命名空间插件,它们将按照被探测到的顺序进行连接(与 pelican-" +"plugins 输出的顺序相同)。若您此时仍想要显式指定顺序,设置 ``PLUGINS`` 配置项即可。" + +#: ../../plugins.rst:107 062aa3a3402141cfbd376d4fee1b5b34 +msgid "Namespace plugin structure" +msgstr "命名空间插件的结构" + +#: ../../plugins.rst:109 e6968290620d4de3b71ff62d5abba91f +msgid "" +"Namespace plugins must adhere to a certain structure in order to function" +" properly. They need to be installable (i.e. contain ``setup.py`` or " +"equivalent) and have a folder structure as follows::" +msgstr "命名空间插件必须遵循特定的结构才能正常工作。这些插件需要是可安装的(即包含 ``setup.py`` 或其他等效文件),并且遵循下述文件夹结构:" + +#: ../../plugins.rst:122 b9782f71fae14bce9854b8b5056407d8 +msgid "" +"It is crucial that ``pelican`` or ``pelican/plugins`` folder **not** " +"contain an ``__init__.py`` file. In fact, it is best to have those " +"folders empty besides the listed folders in the above structure and keep " +"your plugin related files contained solely in the " +"``pelican/plugins/myplugin`` folder to avoid any issues." +msgstr "" +"非常关键的一点就是, ``pelican`` 和 ``pelican/plugins`` 文件夹下都 **不能** 包含 " +"``__init__.py`` 文件。事实上,这两个文件夹下最好是只有上面列出的文件夹,并且保证与插件相关的文件都仅包含在 " +"``pelican/plugins/myplugin`` 文件夹中,以避免奇奇怪怪的问题。" + +#: ../../plugins.rst:128 8440bc91329c498c90fadab556391a84 +msgid "" +"To easily set up the proper structure, a `cookiecutter template for " +"plugins`_ is provided. Refer to that project's README for instructions on" +" how to use it." +msgstr "为了让大家更容易就能建立正确的结构,我们为插件提供了一个 `cookiecutter模板`_ ,使用方法参考此项目README文件中的指示即可。" + +#: ../../plugins.rst:134 bb029c6c9ea14a2dac684d516fb9a1eb +msgid "List of signals" +msgstr "信号列表" + +#: ../../plugins.rst:136 968d92d9b3bb4491ad9c0e4a015e73f9 +msgid "Here is the list of currently implemented signals:" +msgstr "下面是目前已经实现了的信号:" + +#: ../../plugins.rst:139 f2db011f146d40bf9f07ec6b09c7c6d0 +msgid "Signal" +msgstr "信号" + +#: ../../plugins.rst:139 32f683cb25c74315ac803c62868bd7b2 +msgid "Arguments" +msgstr "参数" + +#: ../../plugins.rst:139 d02ae4c30dec40ae8bd894fda051562d +msgid "Description" +msgstr "描述" + +#: ../../plugins.rst:141 d526b9cb6c3c409f9b2d243082dfbdc3 +msgid "initialized" +msgstr "initialized" + +#: ../../plugins.rst:141 ../../plugins.rst:142 ../../plugins.rst:160 +#: ../../plugins.rst:163 0ab3e30cf009477980c4c619e0a7dc5e +#: 8cf4a2d70a234250a4d9f63e4e8cb49f a600f769faef42d99333442745c7b498 +#: a69e7ba2df7a47658b2f0e4ade60d455 +msgid "pelican object" +msgstr "pelican object" + +#: ../../plugins.rst:142 3aff44965eec41269a45fd0b84b8b5d7 +msgid "finalized" +msgstr "finalized" + +#: ../../plugins.rst:142 6a3bd6c773b245af9151ff5669ef7f84 +msgid "" +"invoked after all the generators are executed and just before pelican " +"exits useful for custom post processing actions, such as: - minifying " +"js/css assets. - notify/ping search engines with an updated sitemap." +msgstr "所有generator执行完成后调用,即pelican退出之前。这对于自定义后处理操作是非常有用的,例如可以简化js/css资源、向搜索引擎告知更新后的sitemap。" + +#: ../../plugins.rst:146 eecb5a5dc1b84f94a830db617122f365 +msgid "generator_init" +msgstr "generator_init" + +#: ../../plugins.rst:146 b01311f8da704b55b38e23149c60bc22 +msgid "generator" +msgstr "generator" + +#: ../../plugins.rst:146 a3c477e7a8d04e94af4ee7a82c873ef2 +msgid "invoked in the Generator.__init__" +msgstr "在Generator.__init__中调用" + +#: ../../plugins.rst:147 246a49eb99d34589ac409e5613f27069 +msgid "all_generators_finalized" +msgstr "all_generators_finalized" + +#: ../../plugins.rst:147 0dafe1a8f7224b1bbe1af3ebeeac0b31 +msgid "generators" +msgstr "generators" + +#: ../../plugins.rst:147 9d5130f91ac748e58d96cfba7711e8f6 +msgid "invoked after all the generators are executed and before writing output" +msgstr "在所有generator执行完后,写入输出内容前调用," + +#: ../../plugins.rst:148 3a7f543549164bb684f47daa5b1b9bd1 +msgid "readers_init" +msgstr "readers_init" + +#: ../../plugins.rst:148 0946829014734c53a0b1e389df853daf +msgid "readers" +msgstr "readers" + +#: ../../plugins.rst:148 380ba486fff24555b3c312bee4645d23 +msgid "invoked in the Readers.__init__" +msgstr "在Readers.__init__中调用" + +#: ../../plugins.rst:149 ../../plugins.rst:203 04aa2b44a0b84da9b62b952b627a2b5c +#: e725d629327b48e3a7dffad1d07d81d2 +msgid "article_generator_context" +msgstr "article_generator_context" + +#: ../../plugins.rst:149 f0c440ead7fc46e2a90685c3fdffb5d4 +msgid "article_generator, metadata" +msgstr "article_generator, metadata" + +#: ../../plugins.rst:150 ../../plugins.rst:205 2ed41de1aaed481195aeacbc841459be +#: e9e159b6d49d4cd29ebbe6eb6e0bb3b1 +msgid "article_generator_preread" +msgstr "article_generator_preread" + +#: ../../plugins.rst:150 ../../plugins.rst:152 ../../plugins.rst:153 +#: ../../plugins.rst:156 37277bd83e254f47b6df91ba6790f79e +#: 9d3b745b96114ff7931cbcc372901c3e b89f87d254984ec59e25045227c708bf +#: d38f0e2931b84b82adcc5aca5a4c2233 +msgid "article_generator" +msgstr "article_generator" + +#: ../../plugins.rst:150 7a45243569e84c1e9d5d49b5c1a7b86a +msgid "" +"invoked before a article is read in ArticlesGenerator.generate_context; " +"use if code needs to do something before every article is parsed" +msgstr "在ArticlesGenerator.generate_context读取文章之前调用;若代码需要在解析每篇文章前执行某些操作,就可以使用此信号。" + +#: ../../plugins.rst:152 87c8e4ad4a104cb889172025f1b0229b +msgid "article_generator_init" +msgstr "article_generator_init" + +#: ../../plugins.rst:152 46c1e5fbb90a4668afda3d66e4520689 +msgid "invoked in the ArticlesGenerator.__init__" +msgstr "在ArticlesGenerator.__init__中调用" + +#: ../../plugins.rst:153 de4b631d41e946c485ebb813e3dd6b62 +msgid "article_generator_pretaxonomy" +msgstr "article_generator_pretaxonomy" + +#: ../../plugins.rst:153 697a45a251fe4188b1f32cec631427b9 +msgid "" +"invoked before categories and tags lists are created useful when e.g. " +"modifying the list of articles to be generated so that removed articles " +"are not leaked in categories or tags" +msgstr "在创建类别和标签列表之前调用。例如,当需要变更要生成的文章列表时可以使用,如此可以避免一些已移除文章在分类或标签列表中泄露。" + +#: ../../plugins.rst:156 ../../plugins.rst:204 051dcac75cbf4f5ea3a665e6da642324 +#: 2360e283fdd142ab8d65792581522e72 +msgid "article_generator_finalized" +msgstr "article_generator_finalized" + +#: ../../plugins.rst:156 0c3c808d5b7044018f8566ccc6dd3010 +msgid "invoked at the end of ArticlesGenerator.generate_context" +msgstr "在ArticlesGenerator.generate_context的最后调用" + +#: ../../plugins.rst:157 60d78048da4843a7a0307218c078d151 +msgid "article_generator_write_article" +msgstr "article_generator_write_article" + +#: ../../plugins.rst:157 2ac0d0e7306a4d5086bb2e8b7b17ffb1 +msgid "article_generator, content" +msgstr "article_generator, content" + +#: ../../plugins.rst:157 565551e010964925b10a3b5734913119 +msgid "invoked before writing each article, the article is passed as content" +msgstr "在写入每篇文章前调用,文章以内容的形式作为参数传入。" + +#: ../../plugins.rst:158 fd7918c3200f4714b028c8d0a200df98 +msgid "article_writer_finalized" +msgstr "article_writer_finalized" + +#: ../../plugins.rst:158 e54633543dbf4e5fb2dd4c1bfc09b1c1 +msgid "article_generator, writer" +msgstr "article_generator, writer" + +#: ../../plugins.rst:158 965e61a0fd6347faa2d7224a50a98b76 +msgid "" +"invoked after all articles and related pages have been written, but " +"before the article generator is closed." +msgstr "在所有文章及相关联页面写入完成后,在文章generator关闭前调用。" + +#: ../../plugins.rst:160 30df01c5c11a4ed58b006d78b007c68d +msgid "get_generators" +msgstr "get_generators" + +#: ../../plugins.rst:160 758447f5e55a4738a14486b0e962034d +msgid "" +"invoked in Pelican.get_generator_classes, can return a Generator, or " +"several generators in a tuple or in a list." +msgstr "在Pelican.get_generator_classes中调用,可以返回一个Generator,也可以以一个元组或列表的形式返回多个generator。" + +#: ../../plugins.rst:163 730e948388a24435be216830e0af5be6 +msgid "get_writer" +msgstr "get_writer" + +#: ../../plugins.rst:163 df9f9fef24984c4bad07b8834e79352f +msgid "invoked in Pelican.get_writer, can return a custom Writer." +msgstr "在Pelican.get_writer前调用,可以返回一个自定义Writer。" + +#: ../../plugins.rst:165 ../../plugins.rst:206 1c172b26e92543d2be488a88cceaf576 +#: 252231854c504621b28243dfba9d88ab +msgid "page_generator_context" +msgstr "page_generator_context" + +#: ../../plugins.rst:165 a830e240c6564552ba4952bc657120a9 +msgid "page_generator, metadata" +msgstr "page_generator, metadata" + +#: ../../plugins.rst:166 ../../plugins.rst:207 09add2ea39344ad8936296a07cfd8e82 +#: 0fc3cf365d9d418b8225e8f1f5da76d0 +msgid "page_generator_preread" +msgstr "page_generator_preread" + +#: ../../plugins.rst:166 ../../plugins.rst:168 ../../plugins.rst:169 +#: 3c31cfe2f4744cd987f1638a4b82e5de a80ec8c388cb477abbcfc4f558d34df7 +#: d485c4f9c2c443748234827727cc887e +msgid "page_generator" +msgstr "page_generator" + +#: ../../plugins.rst:166 4d8b96aa6ebf47d885cd978c336679ff +msgid "" +"invoked before a page is read in PageGenerator.generate_context; use if " +"code needs to do something before every page is parsed." +msgstr "在PageGenerator.generate_context读取页面前调用,若代码需要在解析每个页面前执行某些操作,就可以使用此信号。" + +#: ../../plugins.rst:168 ../../plugins.rst:209 06adf06d2b204100b9f80850b84bdff0 +#: c0988434a401410e8cf6b4528e6d2870 +msgid "page_generator_init" +msgstr "page_generator_init" + +#: ../../plugins.rst:168 d359da10912949fa999dc3ad5215be66 +msgid "invoked in the PagesGenerator.__init__" +msgstr "在PagesGenerator.__init__中调用" + +#: ../../plugins.rst:169 ../../plugins.rst:208 0994b38b87704caea04ef0671a7b1c67 +#: a97cf5f236a64959aa09838dbe03dfdc +msgid "page_generator_finalized" +msgstr "page_generator_finalized" + +#: ../../plugins.rst:169 4cfdfe952daf4e3ea5ea1c8b2cf7a664 +msgid "invoked at the end of PagesGenerator.generate_context" +msgstr "在PagesGenerator.generate_context的最后调用" + +#: ../../plugins.rst:170 7e2504584a1b4fa4ae88c5002bcbb26f +msgid "page_generator_write_page" +msgstr "page_generator_write_page" + +#: ../../plugins.rst:170 ea204a5fe703472ea5afea283135b94d +msgid "page_generator, content" +msgstr "page_generator, content" + +#: ../../plugins.rst:170 22dd198fe6dc498f944e2c0e2c595c6c +msgid "invoked before writing each page, the page is passed as content" +msgstr "在写入每个页面前调用,页面以内容形式作为参数传入" + +#: ../../plugins.rst:171 84d5def2c4fc4a2489d2b4fc1fa445df +msgid "page_writer_finalized" +msgstr "page_writer_finalized" + +#: ../../plugins.rst:171 c55d65276a4e49c58c34d12cc062c90d +msgid "page_generator, writer" +msgstr "page_generator, writer" + +#: ../../plugins.rst:171 b2a3d1c7c2864a08829833bc16b3223e +msgid "" +"invoked after all pages have been written, but before the page generator " +"is closed." +msgstr "调用于所有页面写入完成后,在页面generator关闭前。" + +#: ../../plugins.rst:173 ../../plugins.rst:210 097c5b3dc1d34a5eb7c1b4ae67179b3e +#: a420152f887e4977bdd26a5fa7230915 +msgid "static_generator_context" +msgstr "static_generator_context" + +#: ../../plugins.rst:173 1bbacfe960644e4a902b9c866e3fffce +msgid "static_generator, metadata" +msgstr "static_generator, metadata" + +#: ../../plugins.rst:174 ../../plugins.rst:211 c1242bcf76fc40568f67a2ce4e70c0bb +#: f407aa94870645c891bb349edc3ae9a4 +msgid "static_generator_preread" +msgstr "static_generator_preread" + +#: ../../plugins.rst:174 ../../plugins.rst:177 ../../plugins.rst:178 +#: 36f5be5c982b42d097c0465f542e490f cf0ebefd743246dd9db1b37a8c6a43a8 +#: d5cd54887d904bcca02b0df4f22580e9 +msgid "static_generator" +msgstr "static_generator" + +#: ../../plugins.rst:174 1b2fbadf156644429e66ad2e64d26658 +msgid "" +"invoked before a static file is read in StaticGenerator.generate_context;" +" use if code needs to do something before every static file is added to " +"the staticfiles list." +msgstr "在StaticGenerator.generate_context读取静态文件前调用,若代码需要在每个静态文件加入静态文件列表前进行一些修改,就可以使用此信号。" + +#: ../../plugins.rst:177 654377fe53434f77b3ba294b5689d1d4 +msgid "static_generator_init" +msgstr "static_generator_init" + +#: ../../plugins.rst:177 e9b3cbbde7a6443a81d025d1a4fe6145 +msgid "invoked in the StaticGenerator.__init__" +msgstr "在StaticGenerator.__init__中调用" + +#: ../../plugins.rst:178 202be739e43444f48f122d3e5f657a45 +msgid "static_generator_finalized" +msgstr "static_generator_finalized" + +#: ../../plugins.rst:178 06080672fd614d39a79aa6d3a783087f +msgid "invoked at the end of StaticGenerator.generate_context" +msgstr "在StaticGenerator.generate_context的最后调用" + +#: ../../plugins.rst:179 ce174fb4533143518c13b16ab6dbe4c8 +msgid "content_object_init" +msgstr "content_object_init" + +#: ../../plugins.rst:179 5089a38bad1447cab62f350df8e76f31 +msgid "content_object" +msgstr "content_object" + +#: ../../plugins.rst:179 d105f652be424f5cad8bfaf7be69ec4b +msgid "invoked at the end of Content.__init__" +msgstr "在Content.__init__的最后调用" + +#: ../../plugins.rst:180 dbda8a11bca744a4ba5fc51d044f1d6e +msgid "content_written" +msgstr "content_written" + +#: ../../plugins.rst:180 c8ba95ebcc2e4c79ae79717a730fe504 +msgid "path, context" +msgstr "path, context" + +#: ../../plugins.rst:180 6d9caed8fa24400a86f8ede1c3ecb260 +msgid "invoked each time a content file is written." +msgstr "每一次内容文件写入后调用。" + +#: ../../plugins.rst:181 73a4265b050c4b32be186bb2cec59f30 +msgid "feed_generated" +msgstr "feed_generated" + +#: ../../plugins.rst:181 78fa3603986f417286f2e7440f5aff57 +msgid "context, feed" +msgstr "context, feed" + +#: ../../plugins.rst:181 13dcd9e5fb2f408db72b87b88877596b +msgid "" +"invoked each time a feed gets generated. Can be used to modify a feed " +"object before it gets written." +msgstr "每个feed生成前调用。可以用于在feed写入前修改之。" + +#: ../../plugins.rst:183 3a959768d5704e459940cbfcf8e1459c +msgid "feed_written" +msgstr "feed_written" + +#: ../../plugins.rst:183 86844bee049a445e87db283bdf325338 +msgid "path, context, feed" +msgstr "path, context, feed" + +#: ../../plugins.rst:183 e79185da7cb54bf5aa59a46846222391 +msgid "invoked each time a feed file is written." +msgstr "每一个feed文件写入后调用。" + +#: ../../plugins.rst:188 0fe0539bad1c4fcbbebbdaa98d328ee9 +msgid "" +"Avoid ``content_object_init`` signal if you intend to read ``summary`` or" +" ``content`` properties of the content object. That combination can " +"result in unresolved links when :ref:`ref-linking-to-internal-content` " +"(see `pelican-plugins bug #314`_). Use ``_summary`` and ``_content`` " +"properties instead, or, alternatively, run your plugin at a later stage " +"(e.g. ``all_generators_finalized``)." +msgstr "" +"请避免使用 ``content_object_init`` 信号读取content对象的 ``summary`` 或 ``content`` " +"属性,这可能导致在 :ref:`ref-linking-to-internal-content` 时无法解析链接(请参阅 `pelican-" +"plugins bug #314`_ )。请改用 ``_summary`` 和 ``_content`` 属性,或者就在后续阶段再运行插件(例如 " +"``all_generators_finalized`` 时)。" + +#: ../../plugins.rst:197 77ca681d0d7a4a9ea42f7eebf683f024 +msgid "" +"After Pelican 3.2, signal names were standardized. Older plugins may " +"need to be updated to use the new names:" +msgstr "Pelican3.2之后,信号名都进行了标准化,较老的插件可能需要进行更新:" + +#: ../../plugins.rst:201 c83f9215c5964ba49cb5ed849c777495 +msgid "Old name" +msgstr "旧名称" + +#: ../../plugins.rst:201 167435de345b443fa51c27b355121e14 +msgid "New name" +msgstr "新名称" + +#: ../../plugins.rst:203 bcdf136cbb2c4dedbd90f6e56f584c6b +msgid "article_generate_context" +msgstr "article_generate_context" + +#: ../../plugins.rst:204 60fe5b91f4a54f0997f93d927b0d81c4 +msgid "article_generate_finalized" +msgstr "article_generate_finalized" + +#: ../../plugins.rst:205 31252537627f4042b7f7b4e0a4a33aeb +msgid "article_generate_preread" +msgstr "article_generate_preread" + +#: ../../plugins.rst:206 719da4844a0a4b6fbb2cf2d9b7e51deb +msgid "pages_generate_context" +msgstr "pages_generate_context" + +#: ../../plugins.rst:207 f7c865fd6824473aad024fc606235b48 +msgid "pages_generate_preread" +msgstr "pages_generate_preread" + +#: ../../plugins.rst:208 74c47460bacf4fd68f2536580efb1480 +msgid "pages_generator_finalized" +msgstr "pages_generator_finalized" + +#: ../../plugins.rst:209 b403e7f978c24d989d99587579f31d3c +msgid "pages_generator_init" +msgstr "pages_generator_init" + +#: ../../plugins.rst:210 94e5184530c94cc48d00fd819fffd649 +msgid "static_generate_context" +msgstr "static_generate_context" + +#: ../../plugins.rst:211 00ca2c730ad840f584d3f9dd30daf0cd +msgid "static_generate_preread" +msgstr "static_generate_preread" + +#: ../../plugins.rst:215 f8044e028ccd4d64954e24375a739cd2 +msgid "Recipes" +msgstr "具体使用方法举例" + +#: ../../plugins.rst:217 0c441d12047240199025f2d3ac954167 +msgid "" +"We eventually realised some of the recipes to create plugins would be " +"best shared in the documentation somewhere, so here they are!" +msgstr "下面分享了一些创建插件的具体方法,请享用!" + +#: ../../plugins.rst:221 bb96f2da7b3340cb9ed56ee1ad59796b +msgid "How to create a new reader" +msgstr "如何创建一个新的reader" + +#: ../../plugins.rst:223 49dbbbd2c5ca4798a1b9d67b48630d36 +msgid "" +"One thing you might want is to add support for your very own input " +"format. While it might make sense to add this feature in Pelican core, we" +" wisely chose to avoid this situation and instead have the different " +"readers defined via plugins." +msgstr "你可能需要添加对输入文件格式的特殊支持。这似乎可以作为Pelican核心的一个功能,但我们选择避免将此功能放在核心中,而是通过插件实现不同的reader。" + +#: ../../plugins.rst:228 af8936c711204a0aa7c85835124065c5 +msgid "" +"The rationale behind this choice is mainly that plugins are really easy " +"to write and don't slow down Pelican itself when they're not active." +msgstr "做出这个决定主要是因为实现这样的格式支持插件非常容易,而且这样在不需要此功能时也不会影响Pelican自身的速度。" + +#: ../../plugins.rst:231 11dac8bd71994c18a289086ec95a0273 +msgid "No more talking — here is an example::" +msgstr "多说无益,下面是一个具体例子:" + +#: ../../plugins.rst:267 f6bf903ae8de4ac183ecea699de568dc +msgid "Adding a new generator" +msgstr "添加新的generator" + +#: ../../plugins.rst:269 50d39b45550446a493a6d5d6eb971103 +msgid "" +"Adding a new generator is also really easy. You might want to have a look" +" at :doc:`internals` for more information on how to create your own " +"generator." +msgstr "添加一个generator也非常简单,你可能会想要看一看 :doc:`internals` ,其中有关于如何创建generator的内容。" + +#: ../../plugins.rst:283 1b4bc8c2b02645dd81b06ffdbd759c36 +msgid "Adding a new writer" +msgstr "添加新的writer" + +#: ../../plugins.rst:285 ac526121b895429d8412605bca594684 +msgid "" +"Adding a writer will allow you to output additional file formats to disk," +" or change how the existing formats are written to disk. Note that only " +"one writer will be active at a time, so be sure to either subclass the " +"built-in Writer, or completely re-implement it." +msgstr "添加writer可以让你将其他文件格式输出到磁盘,或者可以改变现有格式写入磁盘的方式。请注意,一次只能启用一个writer,因此请确保继承了内置的Writer,并且完全重新实现之。" + +#: ../../plugins.rst:290 4335016710cd417ca9b8068cb7a45d51 +msgid "Here is a basic example of how to set up your own writer::" +msgstr "下面是启用你的自定义writer的一个基本例子:" + +#: ../../plugins.rst:310 c65b371d4bf740c49dfe190407c9af69 +msgid "Using Plugins to Inject Content" +msgstr "使用插件添加内容" + +#: ../../plugins.rst:312 9f180f86d09f43d7aff4607bb7deb6f1 +msgid "" +"You can programmatically inject articles or pages using plugins. This can" +" be useful if you plan to fetch articles from an API, for example." +msgstr "可以通过插件以可编程的方式添加文章或页面。如果你打算从某些API获取文章,这就会很有用。" + +#: ../../plugins.rst:315 a65dd6bb4d0e48438dcf6d545bfaa053 +msgid "" +"Following is a simple example of how one can build a plugin that injects " +"a custom article, using the ``article_generator_pretaxonomy`` signal::" +msgstr "下面是一个简单的示例,说明了如何使用 ``article_generator_pretaxonomy`` 信号构建一个添加自定义文章的插件:" diff --git a/docs/locale/zh_CN/LC_MESSAGES/publish.po b/docs/locale/zh_CN/LC_MESSAGES/publish.po new file mode 100644 index 00000000..afb626f6 --- /dev/null +++ b/docs/locale/zh_CN/LC_MESSAGES/publish.po @@ -0,0 +1,329 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2010–2024 +# This file is distributed under the same license as the PELICAN package. +# FIRST AUTHOR , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: PELICAN 4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-06-24 19:06+0800\n" +"PO-Revision-Date: 2024-06-25 19:00+0800\n" +"Last-Translator: GeorgeHu \n" +"Language: zh_CN\n" +"Language-Team: \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.15.0\n" + +#: ../../publish.rst:2 65617cfb871b492589d55186b708a1ce +msgid "Publish your site" +msgstr "发布站点" + +#: ../../publish.rst:7 dc4c9b1c1afd477d906b892dc592bdcd +msgid "Site generation" +msgstr "站点生成" + +#: ../../publish.rst:9 610c37360e2b49ec8ea630ddc224d2b7 +msgid "" +"Once Pelican is installed and you have some content (e.g., in Markdown or" +" reST format), you can convert your content into HTML via the ``pelican``" +" command, specifying the path to your content and (optionally) the path " +"to your :doc:`settings` file::" +msgstr "" +"您应该已经安装好Pelican并且已经创作了一些内容了吧(以Markdown或是reST格式)," +"现在就可以将这些内容通过 ``pelican`` 命令转换为HTML了,在转换时需要指定" +"创作内容存放的路径;如果有需要, :doc:`配置` 文件的路径也可单独指定:" + +#: ../../publish.rst:16 6f353c84f5204d2b84c49d1557010b19 +msgid "" +"The above command will generate your site and save it in the ``output/`` " +"folder, using the default theme to produce a simple site. The default " +"theme consists of very simple HTML without styling and is provided so " +"folks may use it as a basis for creating their own themes." +msgstr "" +"上面的指令会在 ``output/`` 目录下生成站点,使用的是默认的主题。默认主题只使用" +"一些简单的HTML并且不包含样式,大家往往以这个简单主题为基础来创作自己的主题。" + +#: ../../publish.rst:21 bb5064d57ed144e6b85d7d3d0938f91c +msgid "" +"You can also tell Pelican to watch for your modifications, instead of " +"manually re-running it every time you want to see your changes. To enable" +" this, run the ``pelican`` command with the ``-r`` or ``--autoreload`` " +"option. On non-Windows environments, this option can also be combined " +"with the ``-l`` or ``--listen`` option to simultaneously both auto-" +"regenerate *and* serve the output at http://localhost:8000::" +msgstr "" +"你也可以让Pelican来监听对源内容文件的修改,而不是在每次修改内容后重新手动执行命令" +"来生成站点。在执行 ``pelican`` 命令时,加上 ``-r`` 或者 ``--autoreload`` 选项" +"就可以做到这一点。在非Windows环境下,这个选项还可以和 ``-l`` 或 ``--listen`` " +"搭配使用,这样就可以在自动重生成站点的基础上,同时提供在 http://localhost:8000 " +"上的访问:" + +#: ../../publish.rst:30 40089a6762204e27bd16afaa038a8277 +msgid "" +"Pelican has other command-line switches available. Have a look at the " +"help to see all the options you can use::" +msgstr "" +"Pelican还有一些其他的命令行选项。可以在帮助中看到所有可用选项:" + +#: ../../publish.rst:36 4484bb6f6e2b4bd49027c98be4fa2cd8 +msgid "Viewing the generated files" +msgstr "浏览生成的文件" + +#: ../../publish.rst:38 4dc83b844c964bcab17af21fabd5e6b2 +msgid "" +"The files generated by Pelican are static files, so you don't actually " +"need anything special to view them. You can use your browser to open the " +"generated HTML files directly::" +msgstr "" +"Pelican生成的文件都是静态的,也就是说不需要使用什么特殊的手段就可以浏览。" +"您可以直接使用浏览器打开生成的HTML文件:" + +#: ../../publish.rst:44 c5774634f7da4f64bb7c7d0adbcdb65b +msgid "" +"Because the above method may have trouble locating your CSS and other " +"linked assets, running Pelican's simple built-in web server will often " +"provide a more reliable previewing experience::" +msgstr "" +"事实上,上面所说的直接打开的方式可能会使CSS或其他链接上出现问题," +"可以运行Pelican自带的简易web服务器,如此便可以获得可靠的预览体验:" + +#: ../../publish.rst:50 b2eab6914b854b40bd769433fbad21b7 +msgid "" +"Once the web server has been started, you can preview your site at: " +"http://localhost:8000/" +msgstr "" +"当web服务器启动后,可以访问 http://localhost:8000/ 来预览您的站点。" + +#: ../../publish.rst:54 3b7344cad46a4dfaa01c067dd1f4009b +msgid "Deployment" +msgstr "部署" + +#: ../../publish.rst:56 de2815c211b84291a985a1d808ffbfe7 +msgid "" +"After you have generated your site, previewed it in your local " +"development environment, and are ready to deploy it to production, you " +"might first re-generate your site with any production-specific settings " +"(e.g., analytics, feeds, etc.) that you may have defined::" +msgstr "" +"当您生成好站点后,可以在本地先进行预览,确认无误后,在部署前可能还需使用" +"生产环境特定的配置文件重新生成站点:" + +#: ../../publish.rst:63 56e568114b72443ebcf1f741f07504dc +msgid "" +"To base your publish configuration on top of your ``pelicanconf.py``, you" +" can import your ``pelicanconf`` settings by including the following line" +" in your ``publishconf.py``::" +msgstr "" +"您可以基于 ``pelicanconf.py`` 进行设置文件的配置, 在 ``publishconf.py`` " +"中import ``pelicanconf`` 就可实现(译者注:配置文件其实本质上就是一些" +"Python变量,因此import后就可以全部引入):" + +#: ../../publish.rst:69 b9e1243ed9ba409890d86ef8ff85499d +msgid "" +"If you have generated a ``publishconf.py`` using ``pelican-quickstart``, " +"this line is included by default." +msgstr "" +"如果 ``publishconf.py`` 是通过 ``pelican-quickstart`` 生成的,上面这行默认就有。" + +#: ../../publish.rst:72 39671d42b0bb4c828fc51c63c351402c +msgid "" +"The steps for deploying your site will depend on where it will be hosted." +" If you have SSH access to a server running Nginx or Apache, you might " +"use the ``rsync`` tool to transmit your site files::" +msgstr "" +"部署站点的方法步骤取决于网站托管的位置。对于使用SSH访问的运行着Nginx或" +"Apache的服务器,您可能需要使用 ``rsync`` 工具来传输站点文件:" + +#: ../../publish.rst:78 523ed256e0164a968d8580310e4a9304 +msgid "" +"There are many other deployment options, some of which can be configured " +"when first setting up your site via the ``pelican-quickstart`` command. " +"See the :doc:`Tips` page for detail on publishing via GitHub Pages." +msgstr "" +"还有很多其他的部署方式供您选择,有一些在第一次通过 ``pelican-quickstart`` " +"命令建立站点时就已经配置。在 :doc:`小技巧` 中可以查看如何通过" +"Github Pages部署站点。" + +#: ../../publish.rst:83 c44ecc79922d419b8627706a6694dd8c +msgid "Automation" +msgstr "自动化" + +#: ../../publish.rst:85 b892dcba14a84306aa6b39295b5f81e3 +msgid "" +"While the ``pelican`` command is the canonical way to generate your site," +" automation tools can be used to streamline the generation and " +"publication flow. One of the questions asked during the ``pelican-" +"quickstart`` process pertains to whether you want to automate site " +"generation and publication. If you answered \"yes\" to that question, a " +"``tasks.py`` and ``Makefile`` will be generated in the root of your " +"project. These files, pre-populated with certain information gleaned from" +" other answers provided during the ``pelican-quickstart`` process, are " +"meant as a starting point and should be customized to fit your particular" +" needs and usage patterns. If you find one or both of these automation " +"tools to be of limited utility, these files can be deleted at any time " +"and will not affect usage of the canonical ``pelican`` command." +msgstr "" +"``pelican`` 命令是生成站点的标准方法,但同时也有自动化工具可以用来简化生成与" +"发布流程。在 ``pelican-quickstart`` 的过程中,其中一个问题就是是否启用自动站点" +"生成与发布。若您选择了 “yes”,在项目的根目录中就会生成 ``tasks.py`` " +"和 ``Makefile`` 。这些文件中预填充了一些从 ``pelican-quickstart`` 过程中" +"收集的信息,您应该从这个生成好的文件出发,再根据实际需要进一步修改。" +"另外,如果您认为这些自动化脚本文件没什么用,完全可以将他们删除,这不会对标准命令 " +"``pelican`` 产生任何影响。" + +#: ../../publish.rst:98 4c49ca3a24e3462a984dda738875ed4e +msgid "" +"Following are automation tools that \"wrap\" the ``pelican`` command and " +"can simplify the process of generating, previewing, and uploading your " +"site." +msgstr "" +"下面是一些自动化工具,其中包装了 ``pelican`` 命令,可以用于简化生成、预览和" +"上传站点的过程。" + +#: ../../publish.rst:102 103fb7405038442aae62b62ea0fcdbe5 +msgid "Invoke" +msgstr "Invoke" + +#: ../../publish.rst:104 d3e46bf8da96489e923f6497e8932538 +msgid "" +"The advantage of Invoke_ is that it is written in Python and thus can be " +"used in a wide range of environments. The downside is that it must be " +"installed separately. Use the following command to install Invoke, " +"prefixing with ``sudo`` if your environment requires it::" +msgstr "" +"Invoke_ 工具使用Python作为编程语言,并且能够用在很多不同的环境中。它需要使用" +"下面的命令单独安装,在某些操作系统中可能需要在前面加上 ``sudo`` :" + +#: ../../publish.rst:111 786359d08e8f45598df7b1c45e32ca0a +msgid "" +"Take a moment to open the ``tasks.py`` file that was generated in your " +"project root. You will see a number of commands, any one of which can be " +"renamed, removed, and/or customized to your liking. Using the out-of-the-" +"box configuration, you can generate your site via::" +msgstr "" +"可以打开 ``tasks.py`` 文件看看其中的代码,可以尝试更改和删除其中的命令," +"也可以按照您的喜好自行进行其他修改。生成好的文件是开箱即用的,您可以通过" +"下面的命令生成站点:" + +#: ../../publish.rst:118 ../../publish.rst:166 04c6045b58c24bc1a1fd594cdcf4ef5c +#: 1e9cf29276ec4446b1b0f4a55a1ef4b8 +msgid "" +"If you'd prefer to have Pelican automatically regenerate your site every " +"time a change is detected (which is handy when testing locally), use the " +"following command instead::" +msgstr "" +"若您希望Pelican在检测到变化时自动重新生成站点(在本地测试的时候很实用)," +"可以使用下面的命令:" + +#: ../../publish.rst:124 ../../publish.rst:172 fabe0ce08eca4c5ebd9ca65898dab138 +#: ff42351e29b944a59e8df22b1cbb20f5 +msgid "" +"To serve the generated site so it can be previewed in your browser at " +"http://localhost:8000/::" +msgstr "" +"下面的命令则可以让您在生成后通过浏览器访问 http://localhost:8000/ 来预览站点" + +#: ../../publish.rst:129 e1b12a6c64b246f89aea105b8d7febbc +msgid "" +"To serve the generated site with automatic browser reloading every time a" +" change is detected, first ``python -m pip install livereload``, then use" +" the following command::" +msgstr "" +"在每次检测到修改重生成站点后,可以让浏览器自动进行重载。先运行 " +"``python -m pip install livereload`` 安装,再运行下面的这条命令就可以实现:" + +#: ../../publish.rst:135 bf0d6c7770fe4a399b81b9ebdd48fa4e +msgid "" +"If during the ``pelican-quickstart`` process you answered \"yes\" when " +"asked whether you want to upload your site via SSH, you can use the " +"following command to publish your site via rsync over SSH::" +msgstr "" +"如果在 ``pelican-quickstart`` 过程中,对是否要通过SSH上传站点问题回答了“yes”," +"您就可以使用下面的命令借助rsync在SSH上发布站点:" + +#: ../../publish.rst:141 9bea9f82ce164ee5ba07349a4c4d58ea +msgid "" +"These are just a few of the commands available by default, so feel free " +"to explore ``tasks.py`` and see what other commands are available. More " +"importantly, don't hesitate to customize ``tasks.py`` to suit your " +"specific needs and preferences." +msgstr "" +"默认就可以使用的命令远不止这些,在 ``tasks.py`` 中可以找到更多可用的命令。" +"更重要的是,当您有特定需求和偏好时,直接修改 ``tasks.py`` 即可。" + +#: ../../publish.rst:147 06a6e7232c6243d79ab9f43ddc28590d +msgid "Make" +msgstr "Make" + +#: ../../publish.rst:149 a2a5b589cf804fcd83ee2d0fbf98c12d +msgid "" +"A ``Makefile`` is also automatically created for you when you say \"yes\"" +" to the relevant question during the ``pelican-quickstart`` process. The " +"advantage of this method is that the ``make`` command is built into most " +"POSIX systems and thus doesn't require installing anything else in order " +"to use it. The downside is that non-POSIX systems (e.g., Windows) do not " +"include ``make``, and installing it on those systems can be a non-trivial" +" task." +msgstr "" +"``Makefile`` 也是自动生成的。在大多数POSIX系统中都内置了 ``make`` 命令," +"无需安装即可使用。但在非POSIX系统(例如Windows)中并没有 ``make`` ,在这些" +"系统中安装 ``make`` 则往往比较麻烦。" + +#: ../../publish.rst:156 68c38c3eb34e4e6ca9cd4a2d3646d5cb +msgid "" +"If you want to use ``make`` to generate your site using the settings in " +"``pelicanconf.py``, run::" +msgstr "" +"使用 ``make`` 命令是以 ``pelicanconf.py`` 作为配置文件来生成站点的:" + +#: ../../publish.rst:161 133e6e1ebf92412a85eedbe56e0b91af +msgid "" +"To generate the site for production, using the settings in " +"``publishconf.py``, run::" +msgstr "" +"使用 ``publishconf.py`` 作为配置文件来为生产环境生成站点:" + +#: ../../publish.rst:177 f4e250949c2145ceb03b65c875767abc +msgid "" +"Normally you would need to run ``make regenerate`` and ``make serve`` in " +"two separate terminal sessions, but you can run both at once via::" +msgstr "" +"一般来说, ``make regenerate`` 和 ``make serve`` 需要在分别在单独的终端会话中" +"运行,下面的命令相当于同时运行上述两个命令:" + +#: ../../publish.rst:182 1f83bbcf60134eef959370bb5ca402d9 +msgid "" +"The above command will simultaneously run Pelican in regeneration mode as" +" well as serve the output at http://localhost:8000." +msgstr "" +"上面的命令会让Pelican在重生成模式下持续运行,同样地,您可以通过 " +"http://localhost:8000 访问生成的站点。" + +#: ../../publish.rst:185 9274a68b1e3b4639bf638a044eda613d +msgid "" +"When you're ready to publish your site, you can upload it via the " +"method(s) you chose during the ``pelican-quickstart`` questionnaire. For " +"this example, we'll use rsync over ssh::" +msgstr "" +"当准备好发布站点时,可以使用在 ``pelican-quickstart`` 过程中选择的方法进行上传。" +"下面的例子使用rsync在ssh上完成这一工作:" + +#: ../../publish.rst:191 9d7e7927c183491f981aacebe14e5bf1 +msgid "That's it! Your site should now be live." +msgstr "OK!您的站点现在已经可以访问了。" + +#: ../../publish.rst:193 8f570acd5f494f5b9645fdbca6db6fbb +msgid "" +"(The default ``Makefile`` and ``devserver.sh`` scripts use the ``python``" +" and ``pelican`` executables to complete its tasks. If you want to use " +"different executables, such as ``python3``, you can set the ``PY`` and " +"``PELICAN`` environment variables, respectively, to override the default " +"executable names.)" +msgstr "" +"(默认的 ``Makefile`` 和 ``devserver.sh`` 脚本执行 ``python`` 和 ``pelican`` " +"来完成任务。若您希望使用其他的可执行文件,例如 ``python3`` ,设置环境变量 ``PY`` " +"和 ``PELICAN`` 来覆盖默认的可执行文件名)" diff --git a/docs/locale/zh_CN/LC_MESSAGES/quickstart.po b/docs/locale/zh_CN/LC_MESSAGES/quickstart.po new file mode 100644 index 00000000..42ad4387 --- /dev/null +++ b/docs/locale/zh_CN/LC_MESSAGES/quickstart.po @@ -0,0 +1,151 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2010–2024 +# This file is distributed under the same license as the PELICAN package. +# FIRST AUTHOR , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: PELICAN 4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-06-24 19:06+0800\n" +"PO-Revision-Date: 2024-06-25 19:00+0800\n" +"Last-Translator: GeorgeHu \n" +"Language: zh_CN\n" +"Language-Team: \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.15.0\n" + +#: ../../quickstart.rst:2 e5f32d61440744aab3f878488ef9e1e3 +msgid "Quickstart" +msgstr "快速开始" + +#: ../../quickstart.rst:4 d3762ec7c3934f85b25b04cf4024a90c +msgid "" +"Reading through all the documentation is highly recommended, but for the " +"truly impatient, following are some quick steps to get started." +msgstr "" +"强烈建议将所有文档完整地看一遍,但如果您目前没空,下面的步骤可以帮助您快速开始" +"使用Pelican。" + +#: ../../quickstart.rst:8 c5982d5ecf7c445590254370b84995be +msgid "Installation" +msgstr "安装" + +#: ../../quickstart.rst:10 fda7d08c05f14e2fa0c07a4a1d216db5 +msgid "" +"Install Pelican (and optionally Markdown if you intend to use it) on " +"Python |min_python| by running the following command in your preferred " +"terminal, prefixing with ``sudo`` if permissions warrant::" +msgstr "" +"在命令行中执行下面的命令以安装Pelican(如果您需要Markdown支持的话,也可以同时安装之)。" +"Pelican需要使用 |min_python| 以上版本的Python。在必要情况下,请在命令前加上 ``sudo`` 。" + +#: ../../quickstart.rst:17 9db650d9dc9d4ac48df4dd9fc0a246ac +msgid "Create a project" +msgstr "创建项目" + +#: ../../quickstart.rst:19 2e9a72a878754604abdb27d9ec37937e +msgid "" +"First, choose a name for your project, create an appropriately-named " +"directory for your site, and switch to that directory::" +msgstr "" +"首先,给您的项目想个名字,并以合适的名字创建一个文件夹来存放您的站点。" +"接着,进入这个新创建的文件夹:" + +#: ../../quickstart.rst:25 da759420dd8440b485936a5a054f142a +msgid "" +"Create a skeleton project via the ``pelican-quickstart`` command, which " +"begins by asking some questions about your site::" +msgstr "" +"通过 ``pelican-quickstart`` 命令创建一个项目的框架,执行这个命令后," +"您需要输入一些站点相关的信息:" + +#: ../../quickstart.rst:30 eb2d702c9f5a4981a93f805e98674cfe +msgid "" +"For questions that have default values denoted in brackets, feel free to " +"use the Return key to accept those default values [#tzlocal_fn]_. When " +"asked for your URL prefix, enter your domain name as indicated (e.g., " +"``https://example.com``)." +msgstr "" +"对于那些在括号中写了默认值的问题,完全可以直接回车以使用预设值 [#tzlocal_fn]_。" +"在输入站点URL的前缀(prefix)时,请根据提示的格式输入站点的域名(例如 " +"``https://example.com``)。" + +#: ../../quickstart.rst:36 66d29d63cce0488a8ec9e43ce97035f9 +msgid "Create an article" +msgstr "创作文章" + +#: ../../quickstart.rst:38 03af35552ef84e4491b46d8bf8c0f51e +msgid "" +"You cannot run Pelican until you have created some content. Use your " +"preferred text editor to create your first article with the following " +"content::" +msgstr "" +"您可以使用喜欢的文本编辑器来创建第一篇文章。下面是一个样例,可以将它作为您的第一篇文章:" + +#: ../../quickstart.rst:47 165d46a3f9da4f949375c70115fdeb3b +msgid "" +"Given that this example article is in Markdown format, save it as " +"``~/projects/yoursite/content/keyboard-review.md``." +msgstr "" +"上面这篇文章是以Markdown的格式完成的,一定要将其保存在站点目录的content文件夹下,例如 " +"``~/projects/yoursite/content/keyboard-review.md``。" + +#: ../../quickstart.rst:51 5cc306848439434f81708eddee812f0e +msgid "Generate your site" +msgstr "生成站点" + +#: ../../quickstart.rst:53 03037d0c3b0b4a64b957f8284f008c9d +msgid "" +"From your project root directory, run the ``pelican`` command to generate" +" your site::" +msgstr "" +"在项目的根目录下,直接运行命令 ``pelican`` 就可以生成您自己的站点了:" + +#: ../../quickstart.rst:57 abadae17b6f94e36b8603bad69f6e24f +msgid "" +"Your site has now been generated inside the ``output/`` directory. (You " +"may see a warning related to feeds, but that is normal when developing " +"locally and can be ignored for now.)" +msgstr "" +"站点会生成在 ``output/`` 目录下。(此时可能会显示和feeds有关的警告,这和当前的" +"本地开发环境有关,目前可以忽略之)" + +#: ../../quickstart.rst:62 7cf36e609f544f02a0c800f8412cf79c +msgid "Preview your site" +msgstr "预览站点" + +#: ../../quickstart.rst:64 1a64015c5cc9401bac0a6ac953164fb3 +msgid "" +"Open a new terminal session, navigate to your project root directory, and" +" run the following command to launch Pelican's web server::" +msgstr "" +"打开一个新的命令行,进入刚才项目的根目录,执行下面的命令以运行一个Pelican web服务器:" + +#: ../../quickstart.rst:69 eb286b4785304d22a46e90884d26de07 +msgid "Preview your site by navigating to http://localhost:8000/ in your browser." +msgstr "打开浏览器,进入 http://localhost:8000/ 就可以看到刚刚生成的站点了。" + +#: ../../quickstart.rst:71 1dc30b5cb267402c9da251303ff59dbf +msgid "" +"Continue reading the other documentation sections for more detail, and " +"check out the Pelican wiki's Tutorials_ page for links to community-" +"published tutorials." +msgstr "" +"请继续阅读文档中的其他部分来了解Pelican的更多用法,也可以前往Pelican的" +"wiki 教程_ 页面获取社区发布的教程。" + +#: ../../quickstart.rst:78 6c135ea1cbb44400b446c0f9074e0fc5 +msgid "Footnotes" +msgstr "脚注" + +#: ../../quickstart.rst:80 911df4217fd94e6184502153ed0e53dc +msgid "" +"You can help localize default fields by installing the optional `tzlocal " +"`_ module." +msgstr "" +"您可以安装可选模块 `tzlocal `_ 来" +"本地化默认字段。" diff --git a/docs/locale/zh_CN/LC_MESSAGES/report.po b/docs/locale/zh_CN/LC_MESSAGES/report.po new file mode 100644 index 00000000..6cbab7f7 --- /dev/null +++ b/docs/locale/zh_CN/LC_MESSAGES/report.po @@ -0,0 +1,249 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2010–2024 +# This file is distributed under the same license as the PELICAN package. +# FIRST AUTHOR , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: PELICAN 4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-06-24 19:06+0800\n" +"PO-Revision-Date: 2024-06-27 19:00+0800\n" +"Last-Translator: GeorgeHu \n" +"Language: zh_CN\n" +"Language-Team: \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.15.0\n" + +#: ../../report.rst:2 bc25575efa494c7b9455e02eb5c514ab +msgid "Some history about Pelican" +msgstr "Pelican的一些历史" + +#: ../../report.rst:6 959bbe068d2e4fd19e48be22706070d2 +msgid "" +"This page comes from a report the original author (Alexis Métaireau) " +"wrote right after writing Pelican, in December 2010. The information may " +"not be up-to-date." +msgstr "" +"此页面来自原作者 Alexis Métaireau 在2010年12月完成Pelican后作的一篇报告,因此" +"其中涉及的具体内容可能和最新的Pelican有些出入。" + +#: ../../report.rst:10 598beb4776eb4a7bb1c928979752b1f1 +msgid "" +"Pelican is a simple static blog generator. It parses markup files " +"(Markdown or reStructuredText for now) and generates an HTML folder with " +"all the files in it. I've chosen to use Python to implement Pelican " +"because it seemed to be simple and to fit to my needs. I did not wanted " +"to define a class for each thing, but still wanted to keep my things " +"loosely coupled. It turns out that it was exactly what I wanted. From " +"time to time, thanks to the feedback of some users, it took me a very few" +" time to provide fixes on it. So far, I've re-factored the Pelican code " +"by two times; each time took less than 30 minutes." +msgstr "" +"Pelican是一个简单的静态博客生成器。它解析标记文件(目前主要是Markdown和" +"reStructuredText),并生成一个文件夹,其中包含了对应于标记文件的HTML。由于Python" +"很简单并且符合需求,我选择使用Python来实现Pelican。我不想为每个东西定义一个类," +"但同时又想要各部件之间低耦合。事实证明,这正是我想要的。在发展过程中,多亏了用户" +"给的反馈,我花了些时间修复了一些问题。到目前为止,我已经将Pelican的代码重构了两次," +"每次重构都不会超过30分钟。" + +#: ../../report.rst:21 1709ab99c3144cb692afd1d1bc388921 +msgid "Use case" +msgstr "使用场景" + +#: ../../report.rst:23 119f315a8e6c409d98783a636ac2147c +msgid "" +"I was previously using WordPress, a solution you can host on a web server" +" to manage your blog. Most of the time, I prefer using markup languages " +"such as Markdown or reStructuredText to type my articles. To do so, I use" +" vim. I think it is important to let the people choose the tool they want" +" to write the articles. In my opinion, a blog manager should just allow " +"you to take any kind of input and transform it to a weblog. That's what " +"Pelican does. You can write your articles using the tool you want, and " +"the markup language you want, and then generate a static HTML weblog." +msgstr "" +"我之前使用的是WordPress,你可以将它部署在Web服务器上来管理博客。大多数时候," +"我更喜欢使用Markdown或reStructuredText等标记语言来撰写文章。为此,我一般用vim" +"来写这些文章。我认为让大家自行选择用于写文章的工具是很重要的。在我看来,博客管理器" +"应该能够接受任何类型的输入并将其转换为博客站。Pelican就采取这一思想。您可以选择自己" +"喜欢的工具以及标记语言来撰写文章,然后生成静态的HTML博客站。" + +#: ../../report.rst:34 1a087a07690c4c35873a7f4ce18ba52b +msgid "" +"To be flexible enough, Pelican has template support, so you can easily " +"write your own themes if you want to." +msgstr "" +"为了足够的灵活性,Pelican中支持使用模板,这样你就可以编写自己的主题了。" + +#: ../../report.rst:38 fca5a0962a0d4c27aa163f2aec94b1cf +msgid "Design process" +msgstr "设计过程" + +#: ../../report.rst:40 073dd0b024fa4701acc0078b84c45648 +msgid "" +"Pelican came from a need I have. I started by creating a single file " +"application, and I have make it grow to support what it does by now. To " +"start, I wrote a piece of documentation about what I wanted to do. Then, " +"I created the content I wanted to parse (the reStructuredText files) and " +"started experimenting with the code. Pelican was 200 lines long and " +"contained almost ten functions and one class when it was first usable." +msgstr "" +"Pelican来源于我的需求。从单文件应用程序出发,不断成长为现在功能丰富的应用。首先,我" +"写了一份需求文档;然后创建了我想要解析的内容(reStructuredText文件),并开始" +"实验性的编写代码。Pelican的第一个能够使用的版本包含了200行代码、10个函数以及1个类。" + +#: ../../report.rst:47 f407fc9ad9434f1082014eeca8c4cc89 +msgid "" +"I have been facing different problems all over the time and wanted to add" +" features to Pelican while using it. The first change I have done was to " +"add the support of a settings file. It is possible to pass the options to" +" the command line, but can be tedious if there is a lot of them. In the " +"same way, I have added the support of different things over time: Atom " +"feeds, multiple themes, multiple markup support, etc. At some point, it " +"appears that the \"only one file\" mantra was not good enough for " +"Pelican, so I decided to rework a bit all that, and split this in " +"multiple different files." +msgstr "" +"我不断遇到各种问题,在使用过程中还想要往Pelican中添加功能。在对代码的第一次修改中," +"添加了对配置文件的支持。虽然可以在命令行中往里传入选项,但当配置项多起来后,就会变得" +"异常冗长。同样地,Pelican支持了越来越多的功能:Atom订阅源、多主体支持、多标记语言" +"支持等等。在某一时刻,单文件应用已经不适合Pelican了,因此我决定多做些工作,将应用分离" +"到多个文件中。" + +#: ../../report.rst:56 57b3d1ba492646e28e20396b78df8ea0 +msgid "I’ve separated the logic in different classes and concepts:" +msgstr "我将系统整体逻辑分为如下几个类和概念:" + +#: ../../report.rst:58 2d4090dba6674569a7e1088919185aa5 +msgid "" +"*writers* are responsible of all the writing process of the files. They " +"are responsible of writing .html files, RSS feeds and so on. Since those " +"operations are commonly used, the object is created once, and then passed" +" to the generators." +msgstr "" +"**Writers** 负责文件的写入工作,即负责完成 html、RSS订阅源等文件的写入。因为这些" +"操作都是比较常用的,这个类只会被创建一次,然后再传给Generators。" + +#: ../../report.rst:63 a4cff6dceb8f430791edaeb3b2280924 +msgid "" +"*readers* are used to read from various formats (Markdown and " +"reStructuredText for now, but the system is extensible). Given a file, " +"they return metadata (author, tags, category, etc) and content (HTML " +"formatted)." +msgstr "" +"**Readers** 用于读取不同格式的文件(目前支持Markdown、reStructuredText," +"但可以继续扩展)。向 **Readers** 输入一个文件,它会返回文档的元数据(作者、标签、" +"分类等等)与HTML格式的文档正文内容。" + +#: ../../report.rst:67 6ed9719c06c2477ea05ea30e4806ad14 +msgid "" +"*generators* generate the different outputs. For instance, Pelican comes " +"with an ArticlesGenerator and PagesGenerator, into others. Given a " +"configuration, they can do whatever you want them to do. Most of the time" +" it's generating files from inputs (user inputs and files)." +msgstr "" +"**Generators** 用以生成不同的输出,Pelican自带了 ``ArticlesGenerator`` 和 " +"``PageGenerator`` 。给定一套配置信息, **Generators** 可以做几乎任何事。" +"但大多数情况下,它的工作就是从输入生成文件。" + +#: ../../report.rst:72 cb5129c105b04d788a908f580a83e7e1 +msgid "" +"I also deal with contents objects. They can be ``Articles``, ``Pages``, " +"``Quotes``, or whatever you want. They are defined in the ``contents.py``" +" module and represent some content to be used by the program." +msgstr "" +"同样,还要处理正文对象。正文对象可以是 ``Articles`` 、 ``Pages`` 、 ``Quotes`` " +"或者其他你想要的类型。这些对象在 ``contents.py`` 模块中完成定义,同时代表了应用中" +"使用到的内容。" + +#: ../../report.rst:77 4123da2b628448359aa9ed20b2ca87d2 +msgid "In more detail" +msgstr "更细节的内容" + +#: ../../report.rst:79 8482492940524edf8244fc220553cd3c +msgid "Here is an overview of the classes involved in Pelican." +msgstr "以下是Pelican中涉及的类的概述。" + +#: ../../report.rst:83 a8a39a1ccc154604b8bb000dff44982d +msgid "" +"The interface does not really exist, and I have added it only to clarify " +"the whole picture. I do use duck typing and not interfaces." +msgstr "" +"上图中的接口事实上并不存在,我是为了整张图的完整性才加上去的。在实际实现中,使用了" +"鸭子类型而不是接口。" + +#: ../../report.rst:86 889dfae0dc4242f0b21ce831c7172001 +msgid "Internally, the following process is followed:" +msgstr "应用内部按以下流程进行处理:" + +#: ../../report.rst:88 fc5cbf8ca65c456c90c56c00cf5ab93f +msgid "" +"First of all, the command line is parsed, and some content from the user " +"is used to initialize the different generator objects." +msgstr "" +"首先,解析命令行,并根据用户给入的一些内容来初始化不同的generator对象。" + +#: ../../report.rst:91 5d0c1dc643364248820fad76c204f663 +msgid "" +"A ``context`` is created. It contains the settings from the command line " +"and a settings file if provided." +msgstr "" +"创建一个 ``context`` ,其中包含了来自命令行和文件的配置信息。" + +#: ../../report.rst:93 36725875f2c14e0bb8fc60b16afa1367 +msgid "" +"The ``generate_context`` method of each generator is called, updating the" +" context." +msgstr "" +"调用各generator对象的 ``generate_context`` 方法来更新 ``context`` 。" + +#: ../../report.rst:95 d50a4b2e38884eb38f1b66fdf7fb1eda +msgid "" +"The writer is created and given to the ``generate_output`` method of each" +" generator." +msgstr "" +"创建 **Writers** 并将其给入generator的 ``generate_output`` 方法。" + +#: ../../report.rst:98 da8d9096940044f2849112fb5efcb4cb +msgid "" +"I make two calls because it is important that when the output is " +"generated by the generators, the context will not change. In other words," +" the first method ``generate_context`` should modify the context, whereas" +" the second ``generate_output`` method should not." +msgstr "" +"由于当generator生成输出时并不会改变上下文,我进行了两次调用。换句话说,第一个方法 " +"``generate_context`` 会修改上下文,而第二个方法 ``generate_output`` 不会。" + +#: ../../report.rst:103 a6350edba931463fb92ae51dd9bc253a +msgid "" +"Then, it is up to the generators to do what the want, in the " +"``generate_context`` and ``generate_content`` method. Taking the " +"``ArticlesGenerator`` class will help to understand some others concepts." +" Here is what happens when calling the ``generate_context`` method:" +msgstr "" +"然后,事情就取决于各generator在 ``generate_context`` 和 ``generate_content`` " +"中做的操作了。拿 ``ArticlesGenerator`` 举例可以帮助理解其他的一些概念。下面是调用 " +"``generate_context`` 方法后会发生的事情:" + +#: ../../report.rst:108 4b99ddf2cf344d0b8fbd080c15adfb64 +msgid "" +"Read the folder “path”, looking for restructured text files, load each of" +" them, and construct a content object (``Article``) with it. To do so, " +"use ``Reader`` objects." +msgstr "" +"读取文件夹路径,查找并加载每个restructured文件,并为每个文件构建一个正文内容对象( " +"``Article`` )。此工作是由 ``Reader`` 对象完成的。" + +#: ../../report.rst:111 176a7a5896904f2e9929623ef652660b +msgid "Update the ``context`` with all those articles." +msgstr "根据所有的文章更新 ``context`` 。" + +#: ../../report.rst:113 bb88942c85004c4c9e0b55a72076b18f +msgid "" +"Then, the ``generate_content`` method uses the ``context`` and the " +"``writer`` to generate the wanted output." +msgstr "" +"然后, ``generate_content`` 方法使用 ``context`` 和 ``writer`` 来生成想要的输出。" diff --git a/docs/locale/zh_CN/LC_MESSAGES/settings.po b/docs/locale/zh_CN/LC_MESSAGES/settings.po new file mode 100644 index 00000000..ef07e611 --- /dev/null +++ b/docs/locale/zh_CN/LC_MESSAGES/settings.po @@ -0,0 +1,2070 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2010–2024 +# This file is distributed under the same license as the PELICAN package. +# FIRST AUTHOR , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: PELICAN 4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-07-13 11:46+0800\n" +"PO-Revision-Date: 2024-06-26 19:00+0800\n" +"Last-Translator: GeorgeHu \n" +"Language: zh_CN\n" +"Language-Team: \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.17.0\n" + +#: ../../settings.rst:2 33f20b9899bd4f78a4f3eb7d250dfcc9 +msgid "Settings" +msgstr "设置" + +#: ../../settings.rst:4 3c3d83a6b67b42e5bb4e2519e403949d +msgid "" +"Pelican is configurable thanks to a settings file you can pass to the " +"command line::" +msgstr "可以通过命令行给Pelican传入配置文件:" + +#: ../../settings.rst:9 4137dd63d4b241cfbf37d291e974734a +msgid "" +"If you used the ``pelican-quickstart`` command, your primary settings " +"file will be named ``pelicanconf.py`` by default." +msgstr "如果使用的是 ``pelican-quickstart`` 命令,默认的主配置文件时 ``pelicanconf.py`` 。" + +#: ../../settings.rst:12 509edfb7c1484707a192b4537faaf3b3 +msgid "" +"You can also specify settings via ``-e`` / ``--extra-settings`` option " +"flags. It will override default settings as well as any defined within " +"the setting file. Note that values must follow JSON notation::" +msgstr "" +"通过 ``-e`` / ``--extra-settings`` " +"选项,可以直接指定一些配置来覆盖配置文件中的设置。需要注意的是,选项值必须时JSON格式的:" + +#: ../../settings.rst:18 2b7e043877334b32996b426ea7f8e1f0 +msgid "" +"Environment variables can also be used here but must be escaped " +"appropriately::" +msgstr "可以在命令中使用环境变量,但是需要正确地进行转义:" + +#: ../../settings.rst:24 e9ac322feb4a4dbd9e07b73a1c49af72 +msgid "" +"When experimenting with different settings (especially the metadata ones)" +" caching may interfere and the changes may not be visible. In such cases " +"disable caching with ``LOAD_CONTENT_CACHE = False`` or use the " +"``--ignore-cache`` command-line switch." +msgstr "" +"在尝试不同的设置(特别是尝试元数据)时,受缓存的干扰,对设置的更改可能不会生效。在这种情况下,指定 ``LOAD_CONTENT_CACHE = " +"False`` 设置或 ``--ignore-cache`` 命令行选项即可。" + +#: ../../settings.rst:29 f8b7aff6141b48b3a03f726f769c9603 +msgid "" +"Settings are configured in the form of a Python module (a file). There is" +" an `example settings file " +"`_" +" available for reference." +msgstr "" +"设置以Python模块(一个文件)的形式。 `示例配置文件 " +"`_" +" 可供您参考。" + +#: ../../settings.rst:34 3ed2687613ef480bb61b8232c47d4af8 +msgid "" +"To see a list of current settings in your environment, including both " +"default and any customized values, run the following command (append one " +"or more specific setting names as arguments to see values for those " +"settings only)::" +msgstr "要查看当前环境下的配置,同时查看默认的或是自定义的配置值,执行下面的命令(在后面以参数的形式添加一个或多个指定的配置名称,可以单独查看指定的配置项):" + +#: ../../settings.rst:40 5d6b03822d2e4f35890b7a651a88987c +msgid "" +"All the setting identifiers must be set in all-caps, otherwise they will " +"not be processed. Setting values that are numbers (5, 20, etc.), booleans" +" (True, False, None, etc.), dictionaries, or tuples should *not* be " +"enclosed in quotation marks. All other values (i.e., strings) *must* be " +"enclosed in quotation marks." +msgstr "" +"所有设置的键(设置中的变量名)都必须是大写的,否则会被无视。配置值可能是数值(5、20等)、布尔值(True、False、None等)、字典或者元组。这些值应该以Python值的形式存在," +" *不* 需要用引号引起来。除此之外的其他配置值(例如字符串) *必须* 用引号引起来。" + +#: ../../settings.rst:46 258fb84ebdee4dfe9373c7b7c2aab94d +msgid "" +"Unless otherwise specified, settings that refer to paths can be either " +"absolute or relative to the configuration file. The settings you define " +"in the configuration file will be passed to the templates, which allows " +"you to use your settings to add site-wide content." +msgstr "除非另有指定,设置中指定的路径可以是绝对路径,也可以是相对于配置文件的相对路径。设置中配置的东西会传递到网站模板中,这使得可以在配置文件中添加在整个站点中都能使用的内容。" + +#: ../../settings.rst:51 938a61723b6b4361b440b165bca533b7 +msgid "Here is a list of settings for Pelican:" +msgstr "下面是Pelican设置项的列表:" + +#: ../../settings.rst:55 8ea36bbc1f084d1d8e29dc0bd2f8c922 +msgid "Basic settings" +msgstr "基础设置" + +#: ../../settings.rst:59 5de910e868b14ee791a313a2d31c16b2 +msgid "" +"When you don't specify a category in your post metadata, set this setting" +" to ``True``, and organize your articles in subfolders, the subfolder " +"will become the category of your post. If set to ``False``, " +"``DEFAULT_CATEGORY`` will be used as a fallback. The default is ``True``." +msgstr "" +"当您没有在推文中指定元数据categroy时,若本项设置设为了 ``True`` " +",并且文章也是通过子文件夹进行分类管理的,那么这些子文件夹的名称就会作为发布内容的分类。若本项设为了 ``False`` ,会使用配置项 " +"``DEFAULT_CATEGORY`` 作为默认分类。本项设置默认为 ``True`` 。" + +#: ../../settings.rst:66 3675c7a1107744f0818c0473c4f0643b +msgid "The default category to fall back on. The default is ``'misc'``." +msgstr "默认的分类。本项设置默认为 ``'misc'`` 。" + +#: ../../settings.rst:70 f4ee51775b44419586a76dbf79d887e5 +msgid "" +"Whether to display pages on the menu of the template. Templates may or " +"may not honor this setting. The default is ``True``." +msgstr "指定是否将“页面”显示在模板的菜单中。模板可能不会遵循此项。本项设置默认为 ``True`` 。" + +#: ../../settings.rst:75 b4f761d35ffb49e9bf520bc1206f7868 +msgid "" +"Whether to display categories on the menu of the template. Templates may " +"or not honor this setting. The default is ``True``." +msgstr "指定是否将“分类”显示在模板的菜单中。模板可能不会遵循此项。本项设置默认为 ``True`` 。" + +#: ../../settings.rst:80 f3b1f471909b4af29de908310a75eaf5 +#, python-brace-format +msgid "" +"Extra configuration settings for the docutils publisher (applicable only " +"to reStructuredText). See `Docutils Configuration`_ settings for more " +"details. The default is ``{}`` with no extra configuration settings." +msgstr "docutils的额外配置项(只针对reStructuredText有效)。在 `Docutils 配置`_ 设置中查看更多信息。" +"默认为 ``{}`` ,即不做任何额外配置。" + +#: ../../settings.rst:86 841018ef5c0c410c92bc7780acf25291 +msgid "" +"Delete the output directory, and **all** of its contents, before " +"generating new files. This can be useful in preventing older, unnecessary" +" files from persisting in your output. However, **this is a destructive " +"setting and should be handled with extreme care.** The default is " +"``False``." +msgstr "" +"在生成新文件前删除输出目录及其中的 **所有** 内容。这可以避免一些老的无用的文件一直存在于输出目录中。但是, " +"**此项配置是具有破坏性的,请谨慎使用** 。本项设置默认为 ``False`` 。" + +#: ../../settings.rst:93 b9b726bedf79446e8f1721edee1b2eb8 +msgid "" +"A list of filenames that should be retained and not deleted from the " +"output directory. One use case would be the preservation of version " +"control data." +msgstr "一个文件名的列表,包含了应该保留,不从输出目录中删除的文件。可以用于版本控制数据的保留。" + +#: ../../settings.rst:96 ../../settings.rst:114 ../../settings.rst:142 +#: 39c5fe892d10473ea765dfd16aa70b29 bcb1712b6ed142d6b8db0d06f30dc902 +msgid "Example::" +msgstr "例子:" + +#: ../../settings.rst:100 ../../settings.rst:146 +#: f0fd9392aa0544248ae3ecfa505cbd50 +msgid "The default is ``[]``." +msgstr "默认为 ``[]`` 。" + +#: ../../settings.rst:104 47a64611cf2f4e6b85543040b8221d3a +#, python-brace-format +msgid "" +"A dictionary of custom Jinja2 environment variables you want to use. This" +" also includes a list of extensions you may want to include. See `Jinja " +"Environment documentation`_. The default is ``{'extensions': [], " +"'trim_blocks': True, 'lstrip_blocks': True}``." +msgstr "一个字典,用于配置自定义Jinja2环境变量。这其中也包含了要使用的扩展列表。详见 `Jinja环境文档`_ 。" +"本项设置默认为 ``{'extensions': [], 'trim_blocks': True, 'lstrip_blocks': True}`` 。" + +#: ../../settings.rst:111 b0e2be83c4684482a75198372a093d96 +msgid "" +"A dictionary of custom Jinja2 filters you want to use. The dictionary " +"should map the filtername to the filter function." +msgstr "一个字典,存放自定义的Jinja2过滤器。此字典中应该是过滤器名称到过滤器函数的映射。" + +#: ../../settings.rst:122 7e0e43b081f94e5dbe72072f2dc251e2 +#, python-brace-format +msgid "See: `Jinja custom filters documentation`_. The default is ``{}``." +msgstr "详见: `Jinja自定义过滤器文档`_ 。本项设置默认为 ``{}`` 。" + +#: ../../settings.rst:126 b0ec3d780aaf4daf95b134faba512564 +#, python-brace-format +msgid "" +"A dictionary of custom objects to map into the Jinja2 global environment " +"namespace. The dictionary should map the global name to the global " +"variable/function. See: `Jinja global namespace documentation`_. The " +"default is ``{}``." +msgstr "" +"一个字典,可以将自定义对象映射到Jinja2的全局环境命名空间中。字典中应该是全局名称到全局变量/函数的映射。详见: " +"`Jinja全局命名空间文档`_ 。本项设置默认为 ``{}`` 。" + +#: ../../settings.rst:133 8ef1787d5b3f4a9fa1111027f183fd4f +#, python-brace-format +msgid "" +"A dictionary of custom Jinja2 tests you want to use. The dictionary " +"should map test names to test functions. See: `Jinja custom tests " +"documentation`_. The default is ``{}``." +msgstr "一个字典,自定义了要使用的Jinja测试。字典中应该是测试名到测试函数的映射。详见: `Jinja自定义测试文档`_ 。" +"本项设置默认为 ``{}`` 。" + +#: ../../settings.rst:139 06c6769420a744ea9fc27fc3e930bfcb +msgid "" +"A list of tuples containing the logging level (up to ``warning``) and the" +" message to be ignored." +msgstr "一个以元组为元素的列表,元组中包含日志等级(最高到 ``warning``)和要忽略的消息。" + +#: ../../settings.rst:150 4234d5d045444f60a42af4d6a76f2de9 +msgid "" +"A dictionary of file extensions / Reader classes for Pelican to process " +"or ignore." +msgstr "一个字典,记录了文件扩展名到Reader类的映射。可以据此让Pelican按照指定规则处理或忽略某些文件。" + +#: ../../settings.rst:153 bda15a1a6e724557ae9ba779a4d941fd +msgid "For example, to avoid processing .html files, set::" +msgstr "例如,下面的配置可以让Pelican忽略 .html的文件不处理:" + +#: ../../settings.rst:157 07c385958bf648868271075a146da55d +msgid "To add a custom reader for the ``foo`` extension, set::" +msgstr "为扩展名为 ``foo`` 的文件添加自定义的reader:" + +#: ../../settings.rst:161 ../../settings.rst:810 ../../settings.rst:861 +#: ../../settings.rst:955 f0fd9392aa0544248ae3ecfa505cbd50 +#, python-brace-format +msgid "The default is ``{}``." +msgstr "默认为 ``{}`` 。" + +#: ../../settings.rst:165 ebc561b14759445386bb22e0318ae6de +msgid "" +"A list of Unix glob patterns. Files and directories matching any of these" +" patterns or any of the commonly hidden files and directories set by " +"``watchfiles.DefaultFilter`` will be ignored by the processor. For " +"example, the default ``['**/.*']`` will ignore \"hidden\" files and " +"directories, and ``['__pycache__']`` would ignore Python 3's bytecode " +"caches." +msgstr "" +"通配符模式的列表。匹配到其中任一个模式,或是 ``watchfiles.DefaultFilter`` 中设置了隐藏的文件和目录都会被忽略。" +"例如,默认的 ``['**/.*']`` 可以用于忽略任何隐藏文件与目录, ``['__pycache__']`` 则可以忽略Python3的字节码缓存文件。" + +#: ../../settings.rst:171 6d3691b43e9741bd97f11cf56ddd89ff +msgid "" +"For a full list of the commonly hidden files set by " +"``watchfiles.DefaultFilter``, please refer to the `watchfiles " +"documentation`_." +msgstr "请参阅 `watchfiles文档`_ 以获取 ``watchfiles.DefaultFilter`` 中设置常见隐藏文件的完整列表" + +#: ../../settings.rst:174 f0fd9392aa0544248ae3ecfa505cbd50 +msgid "The default is ``['**/.*']``." +msgstr "默认为 ``['**/.*']`` 。" + +#: ../../settings.rst:178 43597f10c7444144a4bffed8b2a29b41 +msgid "" +"Extra configuration settings for the Markdown processor. Refer to the " +"Python Markdown documentation's `Options section `_ for a complete list of " +"supported options. The ``extensions`` option will be automatically " +"computed from the ``extension_configs`` option." +msgstr "" +"对Markdown处理器的额外配置。可以参考Python Markdown文档的 `选项章节 `_ ,查看可用选项的完整列表。其中的 " +"``extensions_configs`` 选项会用于自动计算 ``extensions`` 选项。" + +#: ../../settings.rst:184 f0fd9392aa0544248ae3ecfa505cbd50 +msgid "The default is::" +msgstr "默认值为:" + +#: ../../settings.rst:196 38d0b586c896439aa13c04c9555d9a4b +msgid "" +"The dictionary defined in your settings file will replace this default " +"one." +msgstr "配置文件中的字典会覆盖默认设置。" + +#: ../../settings.rst:201 d6295ff5c7a345b2b9eb5f365fc5db8c +msgid "" +"Where to output the generated files. This should correspond to your web " +"server's virtual host root directory." +msgstr "输出生成文件的位置。此项配置应该和web服务器虚拟主机的根目录有关。" + +#: ../../settings.rst:204 f0fd9392aa0544248ae3ecfa505cbd50 +msgid "The default is ``'output'``." +msgstr "默认为 ``'output'`` 。" + +#: ../../settings.rst:208 1da4adc27e65428b8178929389a8ca72 +msgid "" +"Path to content directory to be processed by Pelican. If undefined, and " +"content path is not specified via an argument to the ``pelican`` command," +" Pelican will default to ``'.'``, the current working directory." +msgstr "待Pelican处理的文件目录的路径。如果没有定义,也没有在 ``pelican`` 命令中通过参数指定,Pelican会默认使用当前工作目录。" + +#: ../../settings.rst:214 2b21399d328a41ba9982c23771f4c281 +msgid "" +"A list of directories and files to look at for pages, relative to " +"``PATH``. The default is ``['pages']``." +msgstr "此列表中的目录和文件会被视为页面,路径是相对于 ``PATH`` 的。本项配置默认为 ``['pages']`` 。" + +#: ../../settings.rst:219 c456260766774bcab50850fa7e4f9cf8 +msgid "" +"A list of directories to exclude when looking for pages in addition to " +"``ARTICLE_PATHS``. The default is ``[]``." +msgstr "除了 ``ARTICLE_PATHS`` 中的文件不会被视为页面外,此选项中也可指定不被视为页面的文件目录。本项配置默认为 ``[]`` 。" + +#: ../../settings.rst:224 7d1515dd32ea4eb3bc0b621ef7cd0c2b +msgid "" +"A list of directories and files to look at for articles, relative to " +"``PATH``. The default is ``['']``." +msgstr "此列表中的目录和文件会被视为文章,路径是相对于 ``PATH`` 的。本项配置默认为 ``['']`` 。" + +#: ../../settings.rst:229 562736e3c91442bbb062e85e63d6f1f9 +msgid "" +"A list of directories to exclude when looking for articles in addition to" +" ``PAGE_PATHS``. The default is ``[]``." +msgstr "除了 ``PAGE_PATHS`` 中的文件不会被视为文章外,此选项中也可指定不被视为文章的文件目录。本项配置默认为 ``[]`` 。" + +#: ../../settings.rst:234 ea5874e71eb941a2b37262eb9cb398bf +msgid "" +"Set to True if you want to copy the articles and pages in their original " +"format (e.g. Markdown or reStructuredText) to the specified " +"``OUTPUT_PATH``. The default is ``False``." +msgstr "" +"如果你想要将文章和页面以源格式(例如Markdown或reStructuredText)复制一份到 ``OUTPUT_PATH`` " +"目录中,就将此项设为True。本项配置默认为 ``False`` 。" + +#: ../../settings.rst:240 30108efdc87c48368c035774372eb8f1 +msgid "" +"Controls the extension that will be used by the SourcesGenerator. " +"Defaults to ``.text``. If not a valid string the default value will be " +"used. The default is ``'.text'``." +msgstr "控制SourcesGenerator使用的扩展名。默认为 ``.text`` 。如果设置的值是无效的,会使用默认值。本项配置默认为 ``'.text'`` 。" + +#: ../../settings.rst:246 5763cdeffac14fb4a4403b534251e8e2 +msgid "The list of plugins to load. See :ref:`plugins`. The default is ``None``." +msgstr "要加载的插件列表。详见 :ref:`插件` 。本项配置默认为 ``None`` 。" + +#: ../../settings.rst:250 8f081da9abd648a0b029262e50bb5834 +msgid "" +"A list of directories where to look for plugins. See :ref:`plugins`. The " +"default is ``[]``." +msgstr "查找插件的目录列表。详见 :ref:`插件` 。本项配置默认为 ``[]`` 。" + +#: ../../settings.rst:255 4a0df17e21714b569b3beef92153bc9c +msgid "Your site's name. The default is ``'A Pelican Blog'``." +msgstr "站点名称。默认为 ``'A Pelican Blog'`` 。" + +#: ../../settings.rst:259 a2a835e1c3804bdaa57c834e117f5b2e +msgid "" +"Base URL of your web site. Not defined by default, so it is best to " +"specify your SITEURL; if you do not, feeds will not be generated with " +"properly-formed URLs. If your site is available via HTTPS, this setting " +"should begin with ``https://`` — otherwise use ``http://``. Then append " +"your domain, with no trailing slash at the end. Example: ``SITEURL = " +"'https://example.com'``" +msgstr "" +"网站的基URL。此选项没有默认值,因此最好是指定一下SITEURL;如果不指定,feeds就无法正确生成URL。如果站点使用了HTTPS,那么此项设定最好以" +" ``https://`` 开头;否则使用 ``http://`` 即可。在协议后面接着就是域名,不要以斜杠结尾。一个例子: ``SITEURL " +"= 'https://example.com'`` " + +#: ../../settings.rst:266 72e916aee6f143cd82a15c0c84b2bd73 +msgid "The default is ``''``, the blank string." +msgstr "默认为 ``''`` ,即空字符串。" + +#: ../../settings.rst:270 af6a95fa0a79465287831e83c66b6eb0 +msgid "" +"A list of directories (relative to ``PATH``) in which to look for static " +"files. Such files will be copied to the output directory without " +"modification. Articles, pages, and other content source files will " +"normally be skipped, so it is safe for a directory to appear both here " +"and in ``PAGE_PATHS`` or ``ARTICLE_PATHS``. Pelican's default settings " +"include the \"images\" directory here. The default is ``['images']``." +msgstr "" +"用于查找静态文件的目录列表(相对于 ``PATH`` 目录)。静态文件会原封不动地拷贝到输出目录中。文章、页面以及其他的内容源文件都会被跳过,因此一个目录可以安全地同时出现在此选项以及" +" ``PAGE_PATHS`` 或 ``ARTICLE_PATHS`` 中。Pelican默认会将 \"images\" 目录包含在此选项中。本项配置默认为 ``['images']`` 。" + +#: ../../settings.rst:279 562736e3c91442bbb062e85e63d6f1f9 +msgid "" +"A list of directories to exclude when looking for static files. The " +"default is ``[]``." +msgstr "此选项列表中的目录都会在搜索静态文件时排除在外。本项配置默认为 ``[]`` 。" + +#: ../../settings.rst:284 92849777e12b448898dba49e9799484b +msgid "" +"If set to False, content source files will not be skipped when copying " +"files found in ``STATIC_PATHS``. This setting is for backward " +"compatibility with Pelican releases before version 3.5. It has no effect" +" unless ``STATIC_PATHS`` contains a directory that is also in " +"``ARTICLE_PATHS`` or ``PAGE_PATHS``. If you are trying to publish your " +"site's source files, consider using the ``OUTPUT_SOURCES`` setting " +"instead. The default is ``True``." +msgstr "" +"如果此选项设为False, ``STATIC_PATHS`` " +"中的内容源文件将不会被忽略,也会像静态文件一样被原封不动地拷贝。此项设置是为了给3.5版本前的Pelican进行向后兼容的。若某个目录同时出现在了" +" ``STATIC_PATHS`` 和 ``ARTICLE_PATHS`` 中,或 ``STATIC_PATHS`` 和 " +"``PAGE_PATHS`` 中时才会生效。如果你是想将站点的源文件发布出去的话,请考虑使用 ``OUTPUT_SOURCES`` 。本项配置默认为 ``True`` 。" + +#: ../../settings.rst:294 a4a2ef0dfd6442fb889bf9bfe33688 +msgid "" +"Create links instead of copying files. If the content and output " +"directories are on the same device, then create hard links. Falls back " +"to symbolic links if the output directory is on a different filesystem. " +"If symlinks are created, don't forget to add the ``-L`` or ``--copy-" +"links`` option to rsync when uploading your site. The default is " +"``False``." +msgstr "" +"为静态文件创建链接而不是复制文件本身。如果内容和输出目录位于同一设备上,则创建硬链接;如果输出目录位于不同的文件系统上,则回退至符号链接。若创建了符号链接,使用rsync上传网站时需要添加-L或" +"--copy-links选项。本项配置默认为 ``False`` 。" + +#: ../../settings.rst:302 8c6ff3cd170444dc9e9411e43bbcffdd +msgid "" +"If set to ``True``, and ``STATIC_CREATE_LINKS`` is ``False``, compare " +"mtimes of content and output files, and only copy content files that are " +"newer than existing output files. The default is ``False``." +msgstr "" +"当此项设为 ``True`` 且 ``STATIC_CREATE_LINKS`` 设为 ``False`` " +"时才会生效,此时会比较mtime,只有在当前文件更新时才会执行拷贝。本项配置默认为 ``False`` 。" + +#: ../../settings.rst:308 b26c548f490f45f9bbe95ee6b12fd306 +msgid "" +"If set to ``True``, several typographical improvements will be " +"incorporated into the generated HTML via the `Typogrify " +"`_ library, which can be installed " +"via: ``python -m pip install typogrify``. The default is ``False``." +msgstr "" +"若此项设置为True,一些显示上的改进将通过 `Typogrify `_" +" 库合并到生成的HTML中。可以通过 ``python -m pip install typogrify`` 进行安装。本项配置默认为 ``False`` 。" + +#: ../../settings.rst:315 f4a976dc583346eebd71cedbbd43839c +msgid "" +"A list of tags for Typogrify to ignore. By default Typogrify will ignore " +"``pre`` and ``code`` tags. This requires that Typogrify version 2.0.4 or " +"later is installed. The default is ``[]``." +msgstr "" +"指定Typogrify要忽略的标签列表。默认情况下,Typogrify将忽略 ``pre`` 和 ``code`` " +"标签此项特性需要安装高于2.0.4版本的Typogrify。。本项配置默认为 ``[]`` 。" + +#: ../../settings.rst:321 b40b1e64ddc344bfa9451e3e51e397df +msgid "" +"A list of Typogrify filters to skip. Allowed values are: ``'amp'``, " +"``'smartypants'``, ``'caps'``, ``'initial_quotes'``, ``'widont'``. By " +"default, no filter is omitted (in other words, all filters get applied). " +"This setting requires that Typogrify version 2.1.0 or later is installed." +" The default is ``[]``." +msgstr "要忽略的Typogrify过滤器列表。可用值包括: ``'amp'`` 、 ``'smartypants'`` 、 ``'caps'`` 、 " +"``'initial_quotes'`` 、 ``'widont'`` 。默认不忽略任何过滤器。本项配置需要2.1.0或以上版本的Typogrify。" +"本项配置默认为 ``[]`` 。" + +#: ../../settings.rst:329 8b9d3479e18c407090a4aac6a1dcafdf +msgid "" +"This setting controls how Typogrify sets up the Smartypants filter to " +"interpret multiple dash/hyphen/minus characters. A single ASCII dash " +"character (``-``) is always rendered as a hyphen. The ``default`` setting" +" does not handle en-dashes and converts double-hyphens into em-dashes. " +"The ``oldschool`` setting renders both en-dashes and em-dashes when it " +"sees two (``--``) and three (``---``) hyphen characters, respectively. " +"The ``oldschool_inverted`` setting turns two hyphens into an em-dash and " +"three hyphens into an en-dash. The default is ``'default'``." +msgstr "" +"此设置用于设置Typogrify的Smartypants过滤器,控制过滤器如何解析多个破折号/连字符/减号。单个ASCII破折号字符 " +"(``-``) 始终被视为连字符。设为 ``default`` 时不处理短破折号,并会将双连字符转换为长破折号;设为 ``oldschool`` " +"时会将两个 ( ``--`` ) 和三个 ( ``--`` ) 连字符分别呈现为短破折号和长破折号;设为 " +"``oldschool_inverted`` 时则会将两个连字符转换为长破折号,而将三个连字符转换为短破折号。本项配置默认为 ``'default'`` " + +#: ../../settings.rst:340 44489695c0bb4c75ba04e6d23b17a6b7 +msgid "" +"When creating a short summary of an article, this will be the default " +"length (measured in words) of the text created. This only applies if " +"your content does not otherwise specify a summary. Setting to ``None`` " +"will cause the summary to be a copy of the original content. The default " +"is ``50``." +msgstr "" +"当未给文章或页面书写摘要时,会自动创建摘要,此设置指定了默认创建摘要的长度(以字/词为单位)。若将此项设为 ``None`` " +",摘要会和原始内容一模一样。本项配置默认为 ``50`` 。" + +#: ../../settings.rst:347 aad4656b1b5441f588931776445fb4cf +msgid "" +"When creating a short summary of an article, this will be the number of " +"paragraphs to use as the summary. This only applies if your content does " +"not otherwise specify a summary. Setting to ``None`` will cause the " +"summary to use the whole text (up to ``SUMMARY_MAX_LENGTH``) instead of " +"just the first N paragraphs. The default is ``None``." +msgstr "" +"当未给文章或页面书写摘要时,会自动创建摘要。此设置指定了默认创建摘要的段落数,即将正文的前N段视为摘要。若将此项设为 ``None`` " +",摘要会和原始内容一模一样,但具体还会遵循 ``SUMMARY_MAX_LENGTH`` 。本项配置默认为 ``None`` 。" + +#: ../../settings.rst:355 469780be0d8144f0bfe4fc7c475e11cb +msgid "" +"When creating a short summary of an article and the result was truncated " +"to match the required word length, this will be used as the truncation " +"suffix. The default is ``'…'``." +msgstr "在创建摘要时,若内容因长度被截断,此项设置值将用作截断的结尾。本项配置默认为 ``'…'`` 。" + +#: ../../settings.rst:361 11e86cf295024b67a50156da38d62043 +msgid "" +"If disabled, content with dates in the future will get a default status " +"of ``draft``. See :ref:`reading_only_modified_content` for caveats. The " +"default is ``True``." +msgstr "" +"若此项设为False,带了未来日期的文章或页面的状态都会设为 ``draft`` 。相关注意事项详见 " +":ref:`reading_only_modified_content` 。本项配置默认为 ``True`` 。" + +#: ../../settings.rst:367 c29c4ca7127741d49a164b7dff038232 +#, python-brace-format +msgid "" +"Regular expression that is used to parse internal links. Default syntax " +"when linking to internal files, tags, etc., is to enclose the identifier," +" say ``filename``, in ``{}`` or ``||``. Identifier between ``{`` and " +"``}`` goes into the ``what`` capturing group. For details see :ref:`ref-" +"linking-to-internal-content`. The default is ``'[{|](?P.*?)[|}]'``." +msgstr "" +"用于解析内部链接的正则表达式。链接到内部文件、标签等时的默认语法是将标识符(例如 ``filename`` )括在 ``{}`` 或 ``||``" +" 中。 ``{`` 和 ``}`` 之间的则进入 ``what`` 捕获组。更多详情请参见 :ref:`ref-linking-to-" +"internal-content` 。本项配置默认为 ``'[{|](?P.*?)[|}]'`` 。" + +#: ../../settings.rst:376 a74ea9d0899541e78d3a997b8f481ad6 +#, python-brace-format +msgid "" +"A list of default Pygments settings for your reStructuredText code " +"blocks. See :ref:`internal_pygments_options` for a list of supported " +"options. The default is ``{}``." +msgstr "" +"reStructuredText代码块的默认Pygments设置列表。请参阅 " +":ref:`internal_pygments_options` 查看支持选项列表。本项配置默认为 ``{}`` 。" + +#: ../../settings.rst:382 aa2425b88dea4351bf184f127a5965de +msgid "" +"If ``True``, saves content in caches. See " +":ref:`reading_only_modified_content` for details about caching. The " +"default is ``False``." +msgstr "若设为 ``True`` ,会将内容保存在缓存中。有关缓存请参阅 :ref:`reading_only_modified_content` 。" +"本项配置默认为 ``False`` 。" + +#: ../../settings.rst:388 fe1ca91d569e4c2584b0dd3907761f40 +msgid "" +"If set to ``'reader'``, save only the raw content and metadata returned " +"by readers. If set to ``'generator'``, save processed content objects. " +"The default is ``'reader'``." +msgstr "若设为 ``reader`` ,则只保存reader返回的原始内容和元数据。若设为 ``generator`` ,则保存处理过的内容对象。" +"本项配置默认为 ``'reader'`` 。" + +#: ../../settings.rst:394 9fc3e0a091d0493cb1172bb1c3bde79d +msgid "Directory in which to store cache files. The default is ``'cache'``." +msgstr "指定存储缓存文件的目录。本项配置默认为 ``'cache'`` 。" + +#: ../../settings.rst:398 e37599cff5684bcc92d1102ccb78ba03 +msgid "" +"If ``True``, use gzip to (de)compress the cache files. The default is " +"``True``." +msgstr "若设为 ``True`` ,则使用gzip对缓存文件进行解压缩。本项配置默认为 ``True`` 。" + +#: ../../settings.rst:403 c6735c207785406f93dbd6c85c1e7331 +msgid "Controls how files are checked for modifications." +msgstr "调整判定文件是否修改的方式" + +#: ../../settings.rst:405 ../../settings.rst:1448 +#: 18648953d9c040c8bd0b98d212509bbf +msgid "If set to ``'mtime'``, the modification time of the file is checked." +msgstr "若设为 ``mtime`` ,则检查文件的修改时间。" + +#: ../../settings.rst:407 ../../settings.rst:1450 +#: e5596360b86d44ef81b01bb259b4b189 +msgid "" +"If set to a name of a function provided by the ``hashlib`` module, e.g. " +"``'md5'``, the file hash is checked." +msgstr "若设为 ``hashlib`` 库中提供的方法名,例如 ``md5`` ,则会检查文件的哈希值。" + +#: ../../settings.rst:410 f0fd9392aa0544248ae3ecfa505cbd50 +msgid "The default is ``'mtime'``." +msgstr "默认为 ``'mtime'`` 。" + +#: ../../settings.rst:414 f9de4ce8f2534da6b6318522dd749cef +msgid "" +"If ``True``, load unmodified content from caches. The default is " +"``False``." +msgstr "若设为 ``True`` ,则会从缓存中加载未修改的内容。本项配置默认为 ``False`` 。" + +#: ../../settings.rst:418 48308a306f9c41f0b95ce62120a4c64b +msgid "" +"A list of metadata fields containing reST/Markdown content to be parsed " +"and translated to HTML. The default is ``['summary']``." +msgstr "元数据的列表,此列表中的元数据会被解析为HTML。本项配置默认为 ``['summary']`` 。" + +#: ../../settings.rst:423 43cbc9a1d76d4d698f9c0e4013ec47d8 +msgid "" +"The TCP port to serve content from the output folder via HTTP when " +"pelican is run with ``--listen``. The default is ``8000``." +msgstr "使用--listen运行pelican时,会在此选项指定的TCP端口上以HTTP提供内容。本项配置默认为 ``8000`` 。" + +#: ../../settings.rst:428 ad5bd958c68f45f8b031fe61c19baa46 +msgid "The IP to which to bind the HTTP server. The default is ``'127.0.0.1'``." +msgstr "需要和HTTP服务器绑定的IP地址。本项配置默认为 ``'127.0.0.1'`` 。" + +#: ../../settings.rst:433 bb37f2124e17422e8d92159261df8891 +msgid "URL settings" +msgstr "URL设置" + +#: ../../settings.rst:435 b8f09390ffb0493c87f475f214133b2d +msgid "" +"The first thing to understand is that there are currently two supported " +"methods for URL formation: *relative* and *absolute*. Relative URLs are " +"useful when testing locally, and absolute URLs are reliable and most " +"useful when publishing. One method of supporting both is to have one " +"Pelican configuration file for local development and another for " +"publishing. To see an example of this type of setup, use the ``pelican-" +"quickstart`` script as described in the :doc:`Installation ` " +"section, which will produce two separate configuration files for local " +"development and publishing, respectively." +msgstr "" +"首先要知道的是,URL格式有两种形式: *相对URL* 、 *绝对URL* " +"。相对URL在本地测试时往往比较有用,而绝对URL在发布时往往是比较有效可靠的。要同时支持两种URL形式,可以在本地开发和发布环境中使用两份不同的配置文件。执行脚本" +" ``pelican-quickstart`` 时,就会为本地开发和发布环境分别生成一份配置文件,此脚本在 :doc:`安装Pelican " +"` 一节中有详细描述。" + +#: ../../settings.rst:444 5c90d0e477da4e37a4b3ae46684e3cb1 +#, python-brace-format +msgid "" +"You can customize the URLs and locations where files will be saved. The " +"``*_URL`` and ``*_SAVE_AS`` variables use Python's format strings. These " +"variables allow you to place your articles in a location such as " +"``{slug}/index.html`` and link to them as ``{slug}`` for clean URLs (see " +"example below). These settings give you the flexibility to place your " +"articles and pages anywhere you want." +msgstr "" +"URL和文件存储位置都是可以自定义的, ``*_URL`` 和 ``*_SAVE_AS`` " +"变量使用Python风格的格式化字符串。你可以利用一些变量将文章放在诸如 ``{slug}/index.html`` 的位置,并且可以以 " +"``{slug}`` 的形式进行链接,如此可以让URL更加简洁(详见下面的例子)。这些设置可以让你灵活地将文章和页面放在任何你想要的地方。" + +#: ../../settings.rst:452 0ca45357c5b74c758e00faefa8f4c0e8 +#, python-brace-format +msgid "" +"If a ``*_SAVE_AS`` setting contains a parent directory that doesn't match" +" the parent directory inside the corresponding ``*_URL`` setting, this " +"may cause Pelican to generate unexpected URLs in a few cases, such as " +"when using the ``{attach}`` syntax." +msgstr "" +"如果 ``*_SAVE_AS`` 中包含了不在 ``*_URL`` 中的父目录,会导致Pelican在少数情况下(例如使用 " +"``{attach}`` 语法时)产生不确定的URL。" + +#: ../../settings.rst:457 b04cc2a7f85f4ba692a703555df3a194 +msgid "" +"If you don't want that flexibility and instead prefer that your generated" +" output paths mirror your source content's filesystem path hierarchy, try" +" the following settings::" +msgstr "若不希望有这种灵活性,而是希望生成的输出路径保留源内容路径的层次结构,可以尝试以下设置:" + +#: ../../settings.rst:464 ad7d1e214f2a4d85ae7b1d28e3a164cb +msgid "" +"Otherwise, you can use a variety of file metadata attributes within URL-" +"related settings:" +msgstr "否则,可以在URL相关设置中可以使用下面的这些元数据属性:" + +#: ../../settings.rst:467 c4b17402ea72433f9df15ac8b3a1ceb9 +msgid "slug" +msgstr "slug" + +#: ../../settings.rst:468 fad16eab57e94f5f8f69ec1d19752a95 +msgid "date" +msgstr "date" + +#: ../../settings.rst:469 031db5162fbe4ff2a63a482a1574ef3d +msgid "lang" +msgstr "lang" + +#: ../../settings.rst:470 a4da9aeb8acc4e6eaee3809b7b55cca8 +msgid "author" +msgstr "author" + +#: ../../settings.rst:471 2eb8d928fd324ae2baa8d68c224d8804 +msgid "category" +msgstr "category" + +#: ../../settings.rst:473 ../../settings.rst:616 +#: 9e1b640b50424480b171962702ffdc5f +msgid "Example usage::" +msgstr "例如:" + +#: ../../settings.rst:480 d6a8ebf0d638473eac3819a10923303d +msgid "" +"This would save your articles into something like ``/posts/2011/Aug/07" +"/sample-post/index.html``, save your pages into " +"``/pages/about/index.html``, and render them available at URLs of " +"``/posts/2011/Aug/07/sample-post/`` and ``/pages/about/``, respectively." +msgstr "" +"上面的设置会将你的文章以类似于 ``/posts/2011/Aug/07/sample-post/index.html`` 的形式存储,页面则以 " +"``/pages/about/index.html`` 的形式存储,对应的URL分别为 ``/posts/2011/Aug/07/sample-" +"post/`` 与 ``/pages/about/`` 。" + +#: ../../settings.rst:486 5f57f3feaa7f4e778a1d916ff18c1d63 +msgid "" +"If you specify a ``datetime`` directive, it will be substituted using the" +" input files' date metadata attribute. If the date is not specified for a" +" particular file, Pelican will rely on the file's ``mtime`` timestamp. " +"Check the `Python datetime documentation`_ for more information." +msgstr "" +"如果指定了 ``datetime`` 指令,会使用输入文件的日期元数据进行替换。若没有指定日期,Pelican会根据文件的 ``mtime`` " +"时间戳替换之。更多信息可以参考 `Python datetime文档`_ 。" + +#: ../../settings.rst:496 a82644d4452643c1912f03ab291d6f4b +msgid "" +"Defines whether Pelican should use document-relative URLs or not. Only " +"set this to ``True`` when developing/testing and only if you fully " +"understand the effect it can have on links/feeds. The default is " +"``False``." +msgstr "" +"定义Pelican是否使用文档间的相对URL。请只在开发或测试时将此项设为 ``True`` " +",并且确保你已经明白此项设置对链接与feed的影响。(译者注:当此项为True时,网页之间的链接会使用相对路径表达,例如 ``../my-" +"article.html`` )。本项配置默认为 ``False`` 。" + +#: ../../settings.rst:502 08d86196410f482e803c69d85078652a +#, python-brace-format +msgid "The URL to refer to an article. The default is ``'{slug}.html'``." +msgstr "draft状态文章的URL格式。本项配置默认为 ``'{slug}.html'`` 。" + +#: ../../settings.rst:506 13b5dcc285d849999acd612a07d00105 +#, python-brace-format +msgid "The place where we will save an article. The default is ``'{slug}.html'``." +msgstr "draft状态文章的存储位置。本项配置默认为 ``'{slug}.html'`` 。" + +#: ../../settings.rst:510 08d86196410f482e803c69d85078652a +#, python-brace-format +msgid "" +"The URL to refer to an article which doesn't use the default language. " +"The default is ``'{slug}-{lang}.html``." +msgstr "非默认语言文章的URL格式。本项配置默认为 ``'{slug}-{lang}.html`` 。" + +#: ../../settings.rst:515 13b5dcc285d849999acd612a07d00105 +#, python-brace-format +msgid "" +"The place where we will save an article which doesn't use the default " +"language. The default is ``'{slug}-{lang}.html'``." +msgstr "非默认语言文章的存储位置。本项配置默认为 ``'{slug}-{lang}.html'`` 。" + +#: ../../settings.rst:520 eb807715a5ce47398b0a9545f2d21c3f +#, python-brace-format +msgid "" +"The URL to refer to an article draft. The default is " +"``'drafts/{slug}.html'``." +msgstr "draft状态非默认语言文章的URL格式。本项配置默认为 ``'drafts/{slug}.html'`` 。" + +#: ../../settings.rst:525 b3e2acb8ad31482cacda5244df2b36e1 +#, python-brace-format +msgid "" +"The place where we will save an article draft. The default is " +"``'drafts/{slug}.html'``." +msgstr "draft状态非默认语言文章的存储位置。本项配置默认为 ``'drafts/{slug}.html'`` 。" + +#: ../../settings.rst:529 eb807715a5ce47398b0a9545f2d21c3f +#, python-brace-format +msgid "" +"The URL to refer to an article draft which doesn't use the default " +"language. The default is ``'drafts/{slug}-{lang}.html'``." +msgstr "draft状态非默认语言文章的URL格式。本项配置默认为 ``'drafts/{slug}-{lang}.html'`` 。" + +#: ../../settings.rst:534 b3e2acb8ad31482cacda5244df2b36e1 +#, python-brace-format +msgid "" +"The place where we will save an article draft which doesn't use the " +"default language. The default is ``'drafts/{slug}-{lang}.html'``." +msgstr "draft状态非默认语言文章的存储位置。本项配置默认为 ``'drafts/{slug}-{lang}.html'`` 。" + +#: ../../settings.rst:539 6596ed1c997349bf94a503bdaa8b9e68 +#, python-brace-format +msgid "" +"The URL we will use to link to a page. The default is " +"``'pages/{slug}.html'``." +msgstr "非默认语言页面的URL格式。本项配置默认为 ``'pages/{slug}.html'`` 。" + +#: ../../settings.rst:544 e837fdc936e54e6a80398382c305606b +#, python-brace-format +msgid "" +"The location we will save the page. This value has to be the same as " +"PAGE_URL or you need to use a rewrite in your server config. The default " +"is ``'pages/{slug}.html'``." +msgstr "页面的保存位置。除非在服务器上设置了重写规则,否则此项设置必须和PAGE_URL一致。" +"本项配置默认为 ``'pages/{slug}.html'`` 。" + +#: ../../settings.rst:550 6596ed1c997349bf94a503bdaa8b9e68 +#, python-brace-format +msgid "" +"The URL we will use to link to a page which doesn't use the default " +"language. The default is ``'pages/{slug}-{lang}.html'``." +msgstr "非默认语言页面的URL格式。本项配置默认为 ``'pages/{slug}-{lang}.html'`` 。" + +#: ../../settings.rst:555 e837fdc936e54e6a80398382c305606b +#, python-brace-format +msgid "" +"The location we will save the page which doesn't use the default " +"language. The default is ``'pages/{slug}-{lang}.html'``." +msgstr "非默认语言页面的存储位置。本项配置默认为 ``'pages/{slug}-{lang}.html'`` 。" + +#: ../../settings.rst:560 f50ffd4223fe4f1ab65496ddd66531f7 +#, python-brace-format +msgid "" +"The URL used to link to a page draft. The default is " +"``'drafts/pages/{slug}.html'``." +msgstr "draft状态非默认语言页面的URL格式。本项配置默认为 ``'drafts/pages/{slug}.html'`` 。" + +#: ../../settings.rst:565 3675c7a1107744f0818c0473c4f0643b +#, python-brace-format +msgid "" +"The actual location a page draft is saved at. The default is " +"``'drafts/pages/{slug}.html'``." +msgstr "draft状态非默认语言页面的实际存储位置。本项配置默认为 ``'drafts/pages/{slug}.html'`` 。" + +#: ../../settings.rst:570 ee417f88ca17494cb0c3c7ec38ba9588 +#, python-brace-format +msgid "" +"The URL used to link to a page draft which doesn't use the default " +"language. The default is ``'drafts/pages/{slug}-{lang}.html'``." +msgstr "draft状态非默认语言页面的URL格式。本项配置默认为 ``'drafts/pages/{slug}-{lang}.html'`` 。" + +#: ../../settings.rst:575 3675c7a1107744f0818c0473c4f0643b +#, python-brace-format +msgid "" +"The actual location a page draft which doesn't use the default language " +"is saved at. The default is ``'drafts/pages/{slug}-{lang}.html'``." +msgstr "draft状态非默认语言页面的实际存储位置。本项配置默认为 ``'drafts/pages/{slug}-{lang}.html'`` 。" + +#: ../../settings.rst:580 08d86196410f482e803c69d85078652a +#, python-brace-format +msgid "The URL to use for an author. The default is ``'author/{slug}.html'``." +msgstr "此URL用于作者页。本项配置默认为 ``'author/{slug}.html'`` 。" + +#: ../../settings.rst:584 c4758a4ce8f94850ba4567250259741d +#, python-brace-format +msgid "The location to save an author. The default is ``'author/{slug}.html'``." +msgstr "作者列表的存储位置。本项配置默认为 ``'author/{slug}.html'`` 。" + +#: ../../settings.rst:588 531f7328d8114d868ae245686dd1b85c +#, python-brace-format +msgid "The URL to use for a category. The default is ``'category/{slug}.html'``." +msgstr "此URL用于分类页。本项配置默认为 ``'category/{slug}.html'`` 。" + +#: ../../settings.rst:592 c4758a4ce8f94850ba4567250259741d +#, python-brace-format +msgid "" +"The location to save a category. The default is " +"``'category/{slug}.html'``." +msgstr "分类列表的存储位置。本项配置默认为 ``'category/{slug}.html'`` 。" + +#: ../../settings.rst:596 08d86196410f482e803c69d85078652a +#, python-brace-format +msgid "The URL to use for a tag. The default is ``'tag/{slug}.html'``." +msgstr "此URL用于标签页。本项配置默认为 ``'tag/{slug}.html'`` 。" + +#: ../../settings.rst:600 7a7143a49149452d999c2084cc0266e6 +#, python-brace-format +msgid "The location to save the tag page. The default is ``'tag/{slug}.html'``." +msgstr "某一个标签页的存储位置。本项配置默认为 ``'tag/{slug}.html'``" + +#: ../../settings.rst:604 a62168ceb2d2448fbcdac62882e42d11 +msgid "" +"If you do not want one or more of the default pages to be created (e.g., " +"you are the only author on your site and thus do not need an Authors " +"page), set the corresponding ``*_SAVE_AS`` setting to ``''`` to prevent " +"the relevant page from being generated." +msgstr "如果您不希望创建默认页面(例如你是网站上的唯一作者,因此不需要作者页面),请将相应的 ``*_SAVE_AS`` 设置设置为 ``''`` 。" + +#: ../../settings.rst:609 2478a8d793294eb29adacef7766119bc +msgid "" +"Pelican can optionally create per-year, per-month, and per-day archives " +"of your posts. These secondary archives are disabled by default but are " +"automatically enabled if you supply format strings for their respective " +"``_SAVE_AS`` settings. Period archives fit intuitively with the " +"hierarchical model of web URLs and can make it easier for readers to " +"navigate through the posts you've written over time." +msgstr "" +"可选的,Pelican可以为帖子创建每年、每月或是每日的归档。除非你为各自的 ``*_SAVE_AS`` " +"设置了格式化字符串,否则这些归档在默认情况下是关闭的。按时间进行归档更直观地符合web URL的层次模型,也可以让读者更容易按时间顺序浏览帖子。" + +#: ../../settings.rst:623 31eb7d472c40499eaf3bb2680388fead +msgid "" +"With these settings, Pelican will create an archive of all your posts for" +" the year at (for instance) ``posts/2011/index.html`` and an archive of " +"all your posts for the month at ``posts/2011/Aug/index.html``. These can " +"be accessed through the URLs ``posts/2011/`` and ``posts/2011/Aug/``, " +"respectively." +msgstr "" +"例如若使用了上面的设置,Pelican会创建按年的归档(例如 ``posts/2011/index.html`` ),以及按月的归档(例如 " +"``posts/2011/Aug/index.html`` )。这两个页面分别通过 ``posts/2011/`` 和 " +"``posts/2011/Aug/`` 进行访问。" + +#: ../../settings.rst:629 192f00bf9b4d435788b81599c48e0f66 +msgid "" +"Period archives work best when the final path segment is ``index.html``. " +"This way a reader can remove a portion of your URL and automatically " +"arrive at an appropriate archive of posts, without having to specify a " +"page name." +msgstr "" +"当路径设置为以 ``index.html`` " +"结尾时,归档的体验会非常好。读者可以删除URL中的一部分以到达合适时间段的归档,而不需要指定某一个页面的名称。" + +#: ../../settings.rst:635 e49118aa81654f33bb3e83703e730ab0 +msgid "" +"The location to save per-year archives of your posts. The default is " +"``''``." +msgstr "年归档的存储位置。本项配置默认为 ``''`` 。" + +#: ../../settings.rst:639 531f7328d8114d868ae245686dd1b85c +msgid "" +"The URL to use for per-year archives of your posts. You should set this " +"if you enable per-year archives. The default is ``''``." +msgstr "年归档的URL格式,若想要启用年归档,请配置此项。本项配置默认为 ``''`` 。" + +#: ../../settings.rst:644 d0c7703c21d9400aa5d6ac77b56fe19e +msgid "" +"The location to save per-month archives of your posts. The default is " +"``''``." +msgstr "月归档的存储位置。本项配置默认为 ``''`` 。" + +#: ../../settings.rst:649 b078d36e2bba494ca1c87f5902b2bd15 +msgid "" +"The URL to use for per-month archives of your posts. You should set this " +"if you enable per-month archives. The default is ``''``." +msgstr "月归档的URL格式,若想要启用月归档,请配置此项。本项配置默认为 ``''`` 。" + +#: ../../settings.rst:654 f75ca583dd6249acad90cdd2417bc047 +msgid "" +"The location to save per-day archives of your posts. The default is " +"``''``." +msgstr "日归档的存储位置。本项配置默认为 ``''`` 。" + +#: ../../settings.rst:658 d4b75f03113f4e72872002cf10c3ae79 +msgid "" +"The URL to use for per-day archives of your posts. You should set this if" +" you enable per-day archives. The default is ``''``." +msgstr "日归档的URL格式,若想要启用日归档,请配置此项。本项配置默认为 ``''`` 。" + +#: ../../settings.rst:661 e73bb60a4c2c47ccba854a07265812dc +msgid "" +"``DIRECT_TEMPLATES`` work a bit differently than noted above. Only the " +"``_SAVE_AS`` settings are available, but it is available for any direct " +"template." +msgstr "" +"``DIRECT_TEMPLATES`` 的工作方式与上面提到的有点不同,在其中可以使用一些特别的直接模板,并且仅在 ``*_SAVE_AS`` " +"设置中可用。" + +#: ../../settings.rst:667 c4758a4ce8f94850ba4567250259741d +msgid "" +"The location to save the article archives page. The default is " +"``'archives.html'``." +msgstr "文章归档页面的存储位置。本项配置默认为 ``'archives.html'`` 。" + +#: ../../settings.rst:671 7a7143a49149452d999c2084cc0266e6 +msgid "The location to save the author list. The default is ``'authors.html'``." +msgstr "作者列表的存储位置。本项配置默认为 ``'authors.html'`` 。" + +#: ../../settings.rst:675 c4758a4ce8f94850ba4567250259741d +msgid "" +"The location to save the category list. The default is " +"``'categories.html'``." +msgstr "分类列表的存储位置。本项配置默认为 ``'categories.html'`` 。" + +#: ../../settings.rst:679 7a7143a49149452d999c2084cc0266e6 +msgid "The location to save the tag list. The default is ``'tags.html'``." +msgstr "标签列表的存储位置。本项配置默认为 `'tags.html'`` 。" + +#: ../../settings.rst:683 28942938054b490c8dd5ca8367d87ea9 +msgid "" +"The location to save the list of all articles. The default is " +"``'index.html'``." +msgstr "所有文章列表的存储位置。本项配置默认为 ``'index.html'`` 。" + +#: ../../settings.rst:685 556bfbe4d2ab4b51815544a7ed6fa0aa +msgid "" +"URLs for direct template pages are theme-dependent. Some themes use " +"corresponding ``*_URL`` setting as string, while others hard-code them: " +"``'archives.html'``, ``'authors.html'``, ``'categories.html'``, " +"``'tags.html'``." +msgstr "" +"事实上,直接模板页面的URL是和使用的主题相关的。有些主题会使用 ``*_URL`` 作为变量字符串,而有些则是直接对这些直接模板页面进行硬编码:" +" ``'archives.html'`` 、 ``'authors.html'`` 、 ``'categories.html'`` 。" + +#: ../../settings.rst:692 4f67c4073e084cfdbf5f58188cce97d8 +msgid "" +"Specifies from where you want the slug to be automatically generated. Can" +" be set to ``title`` to use the \"Title:\" metadata tag or ``basename`` " +"to use the article's file name when creating the slug. The default is " +"``'title'``." +msgstr "自动生成slug所依赖的内容。可以指定为元数据标签 ``title`` ,也可以使用文章源文件的文件名 ``basename`` 。" +"本项配置默认为 ``'title'`` 。" + +#: ../../settings.rst:698 161c36590f2b40a3a4d9dab57848fba7 +msgid "" +"Allow Unicode characters in slugs. Set ``True`` to keep Unicode " +"characters in auto-generated slugs. Otherwise, Unicode characters will be" +" replaced with ASCII equivalents. The default is ``False``." +msgstr "" +"指定是否允许在slug中使用Unicode字符。若设为 ``True`` " +",自动生成的slug中会保留Unicode字符;否则Unicode字符会使用含义相同的ASCII替换。本项配置默认为 ``False`` 。" + +#: ../../settings.rst:704 771258d986ef4e46b80e1ee043e3a377 +msgid "" +"Preserve uppercase characters in slugs. Set ``True`` to keep uppercase " +"characters from ``SLUGIFY_SOURCE`` as-is. The default is ``False``." +msgstr "指定是否保留slug中的大写字母。若设为 ``True`` ,则会原样保留 ``SLUGIFY_SOURCE`` 中的大写字母。" +"本项配置默认为 ``False`` 。" + +#: ../../settings.rst:709 ea3e23a38ffe465e8fef398b69940b87 +msgid "" +"Regex substitutions to make when generating slugs of articles and pages. " +"Specified as a list of pairs of ``(from, to)`` which are applied in " +"order, ignoring case. The default substitutions have the effect of " +"removing non-alphanumeric characters and converting internal whitespace " +"to dashes. Apart from these substitutions, slugs are always converted to " +"lowercase ascii characters and leading and trailing whitespace is " +"stripped. Useful for backward compatibility with existing URLs. The " +"default is::" +msgstr "" +"指定生成文章和页面slug时要进行的正则表达式替换。指定的是一对对 ``(from, to)`` " +"(from为要替换的内容,to为替换进去的内容),列表中的各对替换规则是按序执行且忽略大小写的。默认的替换会删除非字母非数字的字符并将内部空格替换为连字符。除此之外,slug会将所有字符转换为小写ASCII字符,并删除所有前导和末尾空格。这有利于现有URL的向后兼容。" +"本项配置默认如下:" + +#: ../../settings.rst:726 4ed665fd61124d7199e5d3a336a6490e +msgid "" +"Regex substitutions for author slugs. The default is " +"``SLUG_REGEX_SUBSTITUTIONS``." +msgstr "针对作者slug的正则替换。默认等于 ``SLUG_REGEX_SUBSTITUTIONS`` 。" + +#: ../../settings.rst:731 9ec67c2063eb4bc5a47a0cbcd68f4e7d +msgid "" +"Regex substitutions for category slugs. The default is " +"``SLUG_REGEX_SUBSTITUTIONS``." +msgstr "针对分类slug的正则替换。默认等于 ``SLUG_REGEX_SUBSTITUTIONS`` 。" + +#: ../../settings.rst:736 04708135895649fd8e9fabc003c0219f +msgid "" +"Regex substitutions for tag slugs. The default is " +"``SLUG_REGEX_SUBSTITUTIONS``." +msgstr "针对标签slug的正则替换。默认等于 ``SLUG_REGEX_SUBSTITUTIONS`` 。" + +#: ../../settings.rst:740 e38808bbec234497a9349626bf5b3e96 +msgid "Time and Date" +msgstr "日期与时间" + +#: ../../settings.rst:744 26e96055ea16439caae61e79c2f1a7b6 +msgid "The timezone used in the date information, to generate Atom and RSS feeds." +msgstr "日期信息中使用的时区,会用于生成Atom和RSS feeds。(无默认值,必须手动设置指定)" + +#: ../../settings.rst:746 0d1bac8219e34ecea81f4733a13ee33a +msgid "" +"If no timezone is defined, UTC is assumed. This means that the generated " +"Atom and RSS feeds will contain incorrect date information if your locale" +" is not UTC." +msgstr "若没有定义时区,会直接使用UTC时区。这意味着当你的时区不等于UTC时,生成的Atom和RSS feeds中会包含错误的日期信息。" + +#: ../../settings.rst:750 e2439055d3b7422fab3a3ba41d07ce62 +msgid "" +"Pelican issues a warning in case this setting is not defined, as it was " +"not mandatory in previous versions." +msgstr "在之前的版本中,这一项设置并不是强制的,因此Pelican会在未设置时区时提出警告。" + +#: ../../settings.rst:753 6cf83583c26d42108c10f9f23a512db3 +msgid "" +"Have a look at `the wikipedia page`_ to get a list of valid timezone " +"values." +msgstr "有效的时区设置值可以在 `维基百科页`_ 中查看。" + +#: ../../settings.rst:759 5e31086101004bde84dc96efa1967666 +msgid "" +"The default date you want to use. If ``'fs'``, Pelican will use the file" +" system timestamp information (mtime) if it can't get date information " +"from the metadata. If given any other string, it will be parsed by the " +"same method as article metadata. If set to a tuple object, the default " +"datetime object will instead be generated by passing the tuple to the " +"``datetime.datetime`` constructor. The default is ``None``." +msgstr "" +"要使用的默认日期。若设为 ``'fs'`` " +",Pelican在无法从元数据中获取日期时,会以系统时间戳信息(mtime)为准;若设为其他字符串,Pelican将用与解析文章元数据相同的方法进行解析;若设为元组,则会将该元组传递给" +" ``datetime.datetime`` 的构造函数来生成日期。本项配置默认为 ``None`` 。" + +#: ../../settings.rst:768 27cab75cf2344a8c8d1573700e1f35ca +#, python-format +msgid "The default date format you want to use. The default is ``'%a %d %B %Y'``." +msgstr "指定要使用的默认日期格式。本项配置默认为 ``'%a %d %B %Y'`` 。" + +#: ../../settings.rst:772 fcf723cc20f544e6a43339335ba86558 +msgid "If you manage multiple languages, you can set the date formatting here." +msgstr "若需要管理多种语言,可以在这里针对不同语言设置不同的日期格式。" + +#: ../../settings.rst:774 d11fdb2b3aaa47b7993a38e4d5603e12 +msgid "" +"If no ``DATE_FORMATS`` are set, Pelican will fall back to " +"``DEFAULT_DATE_FORMAT``. If you need to maintain multiple languages with " +"different date formats, you can set the ``DATE_FORMATS`` dictionary using" +" the language name (``lang`` metadata in your post content) as the key." +msgstr "" +"如果 ``DATE_FORMATS`` 没有设置过,Pelican会使用 ``DEFAULT_DATE_FORMAT`` " +"。如果要为不同语言设置不同如期格式,可以在此设置项字典中指定,键为语言名称(对应于帖子内容元数据中的 ``lang`` ),值为日期格式字符串。" + +#: ../../settings.rst:779 c63c2ef9276b496bac1067b956c93819 +#, python-format +msgid "" +"In addition to the standard C89 strftime format codes that are listed in " +"`Python datetime documentation`_, you can use the ``-`` character between" +" ``%`` and the format character to remove any leading zeros. For example," +" ``%d/%m/%Y`` will output ``01/01/2014`` whereas ``%-d/%-m/%Y`` will " +"result in ``1/1/2014``." +msgstr "" +"除了 `Python datetime文档`_ 中列出的标准C89 strftime格式代码之外,可以通过在 ``%`` 和格式字符之间添加 " +"``-`` 来删除日期中的前导零。例如 ``%d/%m/%Y`` 对应输出 ``01/01/2014`` ,而 ``%-d/%-m/%Y`` " +"对应输出 ``1/1/2014`` 。" + +#: ../../settings.rst:792 f1cb8ed02da747fdb9556138744cb6b4 +msgid "" +"It is also possible to set different locale settings for each language by" +" using a ``(locale, format)`` tuple as a dictionary value which will " +"override the ``LOCALE`` setting:" +msgstr "你还能够通过将元组 ``(locale, format)`` 作为值,来为每种语言指定地区,此处设置的地区会覆盖 ``LOCALE`` 设置:" + +#: ../../settings.rst:814 81db232f575b4d4194222e5afb0d141a +msgid "" +"Change the locale. A list of locales can be provided here or a single " +"string representing one locale. When providing a list, all the locales " +"will be tried until one works." +msgstr "设置地区。可以同时指定多个地区,也可以使用字符串指定单个地区。当设置了多个地区时,会一个个尝试直到某一个可以使用。" + +#: ../../settings.rst:818 d3630c9f75e145a98dd5746f4ca54ae4 +msgid "You can set locale to further control date format:" +msgstr "通过设置地区进一步控制日期格式:" + +#: ../../settings.rst:826 feb0efa8a8a648648634ef896509879b +msgid "" +"For a list of available locales refer to `locales on Windows`_ or on " +"Unix/Linux, use the ``locale -a`` command; see manpage `locale(1)`_ for " +"more information. The default is the system locale." +msgstr "" +"要查看可用的地区列表,可以参看 `Windows上的地区`_ ;若使用的时Unix/Linux系统, 使用 ``locale -a`` " +"命令即可,有关该命令的更多信息可以参阅手册 `locale(1)`_ 。本项配置默认与系统locale保持一致。" + +#: ../../settings.rst:843 15067988a9f64c23ac30113f261c932f +msgid "Template pages" +msgstr "模板页面" + +#: ../../settings.rst:847 1e8e76f577b44f389d546bebe897b0a4 +msgid "" +"A mapping containing template pages that will be rendered with the blog " +"entries." +msgstr "一些映射关系,指出了会和博客一起渲染的模板页面。" + +#: ../../settings.rst:850 97158dd7cf984420b72d4fe184f613f3 +msgid "" +"If you want to generate custom pages besides your blog entries, you can " +"point any Jinja2 template file with a path pointing to the file and the " +"destination path for the generated file." +msgstr "如果你想要生成除了博客之外的自定义页面,你可以指出任何Jinja2的模板文件,需要同时指出源文件路径和生成文件的路径。" + +#: ../../settings.rst:854 3bab3b6570c044c3a507687ebd136988 +msgid "" +"For instance, if you have a blog with three static pages — a list of " +"books, your resume, and a contact page — you could have::" +msgstr "例如,如果你的博客有三个静态页面——书籍列表、你的简历、以及一个联系我们页面,你可这么配置:" + +#: ../../settings.rst:865 c1a40d40e5b34bc49b138e87baf1dd09 +msgid "" +"The extensions to use when looking up template files from template names." +" The default is ``['.html']``." +msgstr "指定要查找并视为模板文件的文件扩展名。本项配置默认为 ``['.html']`` 。" + +#: ../../settings.rst:870 ad976b56f784425380d5ca5095c83bad +msgid "" +"List of templates that are used directly to render content. Typically " +"direct templates are used to generate index pages for collections of " +"content (e.g., category and tag index pages). If the author, category and" +" tag collections are not needed, set ``DIRECT_TEMPLATES = ['index', " +"'archives']``" +msgstr "" +"指定用于直接渲染内容的模板列表。一般来说直接模板会用于生成内容集合的主页(例如分类和标签的主页)。如果不需要作者、分类或者标签集合,可以设置 " +"``DIRECT_TEMPLATES = ['index', archives']`` 。" + +#: ../../settings.rst:875 f545160f96c34ac9b9218b8cb88c2bab +msgid "" +"``DIRECT_TEMPLATES`` are searched for over paths maintained in " +"``THEME_TEMPLATES_OVERRIDES``." +msgstr "``DIRECT_TEMPLATES`` 会在 ``THEME_TEMPLATES_OVERRIDES`` 的路径中搜索。" + +#: ../../settings.rst:878 57441857f4a146568ebfdb358c6647e5 +msgid "The default is ``['index', 'tags', 'categories', 'authors', 'archives']``." +msgstr "默认为 ``['index', 'tags', 'categories', 'authors', 'archives']`` 。" + +#: ../../settings.rst:881 e5b9ac921eba40d7961d58d716d285ff +msgid "Metadata" +msgstr "元数据" + +#: ../../settings.rst:885 983b827b2d9e4162ac78b6659e73f99f +msgid "" +"Default author (usually your name). The default is ``None``, which " +"removes the byline." +msgstr "默认作者(通常是你自己)。本项配置默认为 ``None`` ,此时会删除作者名一行。" + +#: ../../settings.rst:889 27cab75cf2344a8c8d1573700e1f35ca +#, python-brace-format +msgid "" +"The default metadata you want to use for all articles and pages. The " +"default is ``{}``." +msgstr "应用于所有文章和页面的默认元数据。本项配置默认为 ``{}`` 。" + +#: ../../settings.rst:894 f322adf782eb45b6b261a51befce0b7b +msgid "" +"The regexp that will be used to extract any metadata from the filename. " +"All named groups that are matched will be set in the metadata object. " +"The default value will only extract the date from the filename." +msgstr "指定用于从文件名中提取元数据的正则表达式。所有匹配上的命名匹配组都会用于设置元数据。默认值会从文件名中提取日期。" + +#: ../../settings.rst:898 b14cef00e4d74cf1aafa83f8adc7ff22 +msgid "For example, to extract both the date and the slug::" +msgstr "例如,可以同时提取日期和slug:" + +#: ../../settings.rst:902 6f0fe6e9f1634fa281d42a4db9c7df83 +#, python-brace-format +msgid "" +"See also ``SLUGIFY_SOURCE``. The default is " +"``r'(?P\\d{4}-\\d{2}-\\d{2}).*'``." +msgstr "参考 ``SLUGIFY_SOURCE`` 。本项配置默认为 ``r'(?P\\d{4}-\\d{2}-\\d{2}).*'`` 。" + +#: ../../settings.rst:906 6868648226c841849965cfc4a8f8a0fb +msgid "" +"Like ``FILENAME_METADATA``, but parsed from a page's full path relative " +"to the content source directory. The default is ``''``." +msgstr "和 ``FILENAME_METADATA`` 类似,但解析时的路径是相对于内容源文件所在目录的。本项配置默认为 ``''`` 。" + +#: ../../settings.rst:911 52089bec13c64713a256032ed4f894ef +msgid "" +"Extra metadata dictionaries keyed by relative path. Relative paths " +"require correct OS-specific directory separators (i.e. / in UNIX and \\\\" +" in Windows) unlike some other Pelican file settings. Paths to a " +"directory apply to all files under it. The most-specific path wins " +"conflicts." +msgstr "指定要从相对路径提取的额外元数据字典。与Pelican的其他设置文件不同,此项设置需要正确使用和操作系统对应的目录分隔符(Unix中使用/,Windows中使用\\\\)。若对一个目录设置了规则,该规则会作用于该目录下所有文件。当有多个路径相互冲突时,Pelican会选用更为具体的路径。" + +#: ../../settings.rst:916 375cc26258cd4030a2e1743220b331db +msgid "" +"Not all metadata needs to be :ref:`embedded in source file itself " +"`. For example, blog posts are often named following a" +" ``YYYY-MM-DD-SLUG.rst`` pattern, or nested into ``YYYY/MM/DD-SLUG`` " +"directories. To extract metadata from the filename or path, set " +"``FILENAME_METADATA`` or ``PATH_METADATA`` to regular expressions that " +"use Python's `group name notation`_ ``(?P…)``. If you want to " +"attach additional metadata but don't want to encode it in the path, you " +"can set ``EXTRA_PATH_METADATA``:" +msgstr "" +"不是所有元数据都需要直接 :ref:`放在推文源文件中 ` 。例如,博文可能是以 ``YYYY-MM-DD-" +"SLUG.rst`` 的形式命名的,或者是直接放在 ``YYYY/MM/DD-SLUG`` 文件夹中。要从文件名或路径中提取元数据,设置 " +"``FILENAME_METADATA`` 或 ``PATH_METADATA`` 即可,需使用Python风格的 `命名组表示法`_ " +"``(?P…)`` 。当你需要为帖子附加一些额外的元数据,但不想将其编码在文件路径中时,就可以在 " +"``EXTRA_PATH_METADATA`` 中设置:" + +#: ../../settings.rst:937 43d9707ff47e488dba64d7d1d23cbc4a +msgid "" +"This can be a convenient way to shift the installed location of a " +"particular file:" +msgstr "通过这个设置项,很方便就可以转移特定文件的位置:" + +#: ../../settings.rst:959 ef39cc18199a44b895748dfe9c46a07c +msgid "Feed settings" +msgstr "订阅源设置" + +#: ../../settings.rst:961 8c7bb16134c24af5b49a9e63b6ff36f8 +msgid "" +"By default, Pelican uses Atom feeds. However, it is also possible to use " +"RSS feeds if you prefer." +msgstr "默认情况下,Pelican会使用Atom订阅源。但如果你愿意的话,也可以使用RSS。" + +#: ../../settings.rst:964 a20b5eb7bea54cde84cfde3380cc9c86 +msgid "" +"Pelican generates category feeds as well as feeds for all your articles. " +"It does not generate feeds for tags by default, but it is possible to do " +"so using the ``TAG_FEED_ATOM`` and ``TAG_FEED_RSS`` settings:" +msgstr "" +"Pelican会生成分类的feed,也会为所有文章生成,但默认并不会为标签生成feed,要生成标签feed,可以使用 " +"``TAG_FEED_ATOM`` 和 ``TAG_FEED_RSS`` 设置:" + +#: ../../settings.rst:970 1ffaa4be4dae4481b80eff1b8191f366 +msgid "" +"The domain prepended to feed URLs. Since feed URLs should always be " +"absolute, it is highly recommended to define this (e.g., " +"\"https://feeds.example.com\"). If you have already explicitly defined " +"SITEURL (see above) and want to use the same domain for your feeds, you " +"can just set: ``FEED_DOMAIN = SITEURL``. The default is ``None``, which " +"uses the base URL \"/\"." +msgstr "" +"指定要附加到订阅源URL前面的域名。因为订阅源URL应该是绝对的,所以强烈推荐定义此设置项(例如 " +"https://feeds.example.com )。若SITEURL已经显式地定义了,并且希望使用相同地URL,就可以直接设置 " +"``FEED_DOMAIN = SITEURL`` 。本项配置默认为 ``None`` ,即使用基础URL \"/\" 。" + +#: ../../settings.rst:979 7a7143a49149452d999c2084cc0266e6 +msgid "" +"The location to save the Atom feed. The default is ``None``, for no Atom " +"feed." +msgstr "指定Atom订阅源的存储位置。本项配置默认为 ``None`` ,即不使用Atom订阅源。" + +#: ../../settings.rst:984 2fd2426a582247f8a375940ecbd0f96a +msgid "" +"Relative URL of the Atom feed. If not set, ``FEED_ATOM`` is used both for" +" save location and URL. The default is ``None``." +msgstr "Atom订阅源的相对URL。如果未设置此项,会将 ``FEED_ATOM`` 同时用于存储位置和URL。" +"本项配置默认为 ``None`` 。" + +#: ../../settings.rst:989 c4758a4ce8f94850ba4567250259741d +msgid "" +"The location to save the RSS feed. The default is ``None``, for no RSS " +"feed." +msgstr "RSS订阅源的存储位置。本项配置默认为 ``None`` ,即不使用RSS订阅源。" + +#: ../../settings.rst:993 737caf1d58854aa3b86820243fc80403 +msgid "" +"Relative URL of the RSS feed. If not set, ``FEED_RSS`` is used both for " +"save location and URL. The default is ``None``." +msgstr "RSS订阅源的相对URL。如果未设置此项,会将 ``FEED_RSS`` 同时用于存储位置和URL。本项配置默认为 ``None`` 。" + +#: ../../settings.rst:998 28942938054b490c8dd5ca8367d87ea9 +msgid "" +"The location to save the all-posts Atom feed: this feed will contain all " +"posts regardless of their language. The default is " +"``'feeds/all.atom.xml'``." +msgstr "存储all-posts Atom订阅源的文件位置:其中会包含所有语言的帖子。本项配置默认为 ``'feeds/all.atom.xml'`` 。" + +#: ../../settings.rst:1003 f4e7fbd9297743ccaadafa11c7cfb1e1 +msgid "" +"Relative URL of the all-posts Atom feed. If not set, ``FEED_ALL_ATOM`` is" +" used both for save location and URL. The default is ``None``." +msgstr "all-posts Atom订阅源的相对URL。如果未设置此项,会将 ``FEED_ALL_ATOM`` 同时用于存储位置和URL。" +"本项配置默认为 ``None`` 。" + +#: ../../settings.rst:1008 eaacfd07bdb94dd2a9c6792a1f036807 +msgid "" +"The location to save the the all-posts RSS feed: this feed will contain " +"all posts regardless of their language. The default is ``None``, for no " +"all-posts RSS feed." +msgstr "存储all-posts RSS订阅源的文件位置:其中会包含所有语言的帖子。本项配置默认为 ``None`` ,即不使用all-posts RSS订阅源。" + +#: ../../settings.rst:1014 fe17f05439064eea8fb3dad8255cd467 +msgid "" +"Relative URL of the all-posts RSS feed. If not set, ``FEED_ALL_RSS`` is " +"used both for save location and URL. The default is ``None``." +msgstr "all-posts RSS订阅源的相对URL。如果未设置此项,会将 ``FEED_ALL_RSS`` 同时用于存储位置和URL。本项配置默认为 ``None`` 。" + +#: ../../settings.rst:1019 c4758a4ce8f94850ba4567250259741d +#, python-brace-format +msgid "" +"The location to save the category Atom feeds. [2]_ The default is " +"``'feeds/{slug}.atom.xml'``." +msgstr "category Atom订阅源的存储位置。 [2]_ 本项配置默认为 ``'feeds/{slug}.atom.xml'`` 。" + +#: ../../settings.rst:1024 d31bcd45f3ee47e4a316ac3f765c527d +#, python-brace-format +msgid "" +"Relative URL of the category Atom feeds, including the ``{slug}`` " +"placeholder. [2]_ If not set, ``CATEGORY_FEED_ATOM`` is used both for " +"save location and URL. The default is ``None``." +msgstr "" +"category Atom订阅源的相对URL,其中包含 ``{slug}`` 。 [2]_ 如果未设置, 会将 " +"``CATEGORY_FEED_ATOM`` 同时用于存储位置和URL。本项配置默认为 ``None`` 。" + +#: ../../settings.rst:1030 fabfac75a52f48029a8147f62289c252 +#, python-brace-format +msgid "" +"The location to save the category RSS feeds, including the ``{slug}`` " +"placeholder. [2]_ The default is ``None``, for no RSS feed." +msgstr "category RSS订阅源的存储位置,其中包含 ``{slug}`` 。 [2]_ 本项配置默认为 ``None`` ,即不使用RSS订阅源。" + +#: ../../settings.rst:1035 fabfac75a52f48029a8147f62289c252 +#, python-brace-format +msgid "" +"Relative URL of the category RSS feeds, including the ``{slug}`` " +"placeholder. [2]_ If not set, ``CATEGORY_FEED_RSS`` is used both for save" +" location and URL. The default is ``None``." +msgstr "" +"category RSS订阅源的相对URL,其中包含 ``{slug}`` 。 [2]_ 如果未设置, 会将 " +"``CATEGORY_FEED_RSS`` 同时用于存储位置和URL。本项配置默认为 ``None`` 。" + +#: ../../settings.rst:1041 28942938054b490c8dd5ca8367d87ea9 +#, python-brace-format +msgid "" +"The location to save the author Atom feeds. [2]_ The default is " +"``'feeds/{slug}.atom.xml'``." +msgstr "author Atom订阅源的存储位置,其中包含 ``{slug}`` 。 [2]_ 本项配置默认为 ``'feeds/{slug}.atom.xml'`` 。" + +#: ../../settings.rst:1046 fde52f62d95a4bad85a5a1b49eed6170 +#, python-brace-format +msgid "" +"Relative URL of the author Atom feeds, including the ``{slug}`` " +"placeholder. [2]_ If not set, ``AUTHOR_FEED_ATOM`` is used both for save " +"location and URL. The default is ``None`` (not set)." +msgstr "" +"author Atom订阅源的相对URL,其中包含 ``{slug}`` 。 [2]_ 如果未设置, 会将 " +"``AUTHOR_FEED_ATOM`` 同时用于存储位置和URL。本项配置默认为 ``None`` ,即不使用。" + +#: ../../settings.rst:1052 c4758a4ce8f94850ba4567250259741d +#, python-brace-format +msgid "" +"The location to save the author RSS feeds. [2]_ The default is " +"``'feeds/{slug}.rss.xml'``." +msgstr "author RSS订阅源的存储位置。 [2]_ 本项配置默认为 ``'feeds/{slug}.rss.xml'`` 。" + +#: ../../settings.rst:1057 367ef87d541c45ffaf65e8d8b1469f1a +#, python-brace-format +msgid "" +"Relative URL of the author RSS feeds, including the ``{slug}`` " +"placeholder. [2]_ If not set, ``AUTHOR_FEED_RSS`` is used both for save " +"location and URL. The default is ``None``." +msgstr "" +"author RSS订阅源的相对URL,其中包含 ``{slug}`` 。 [2]_ 如果未设置, 会将 ``AUTHOR_FEED_RSS`` " +"同时用于存储位置和URL。本项配置默认为 ``None`` 。" + +#: ../../settings.rst:1063 b1159e07c8184831b6dcfd308cd23439 +#, python-brace-format +msgid "" +"The location to save the tag Atom feed, including the ``{slug}`` " +"placeholder. [2]_ The default is ``None``, for no tag feed." +msgstr "tag Atom订阅源的存储位置,其中包含 ``{slug}`` 。 [2]_ 本项配置默认为 ``None`` ,即不使用tag feed。" + +#: ../../settings.rst:1068 d744ca82b48d4e9298f2ca19252aedec +#, python-brace-format +msgid "" +"Relative URL of the tag Atom feed, including the ``{slug}`` placeholder. " +"[2]_ The default is ``None``." +msgstr "tag Atom订阅源的相对URL,其中包含 ``{slug}`` 。 [2]_ 本项配置默认为 ``None`` 。" + +#: ../../settings.rst:1073 b1159e07c8184831b6dcfd308cd23439 +#, python-brace-format +msgid "" +"Relative URL to output the tag RSS feed, including the ``{slug}`` " +"placeholder. If not set, ``TAG_FEED_RSS`` is used both for save location " +"and URL. The default is ``None``, for no tag feed." +msgstr "tag RSS订阅源的相对URL,其中包含 ``{slug}`` 。如果未设置,会将 ``TAG_FEED_RSS`` 同时用于存储位置和URL。" +"本项配置默认为 ``None`` ,即不使用tag feed。" + +#: ../../settings.rst:1079 c8f29653c4f3423b8dec9905fa1de6f2 +msgid "" +"Maximum number of items allowed in a feed. Setting to ``None`` will cause" +" the feed to contains every article. 100 if not specified. The default is" +" ``100``." +msgstr "单个订阅源中允许包含的最多元素数量。若设为 ``None`` 表示不做上限;若不指定,默认上限为100。" + +#: ../../settings.rst:1084 27393055cbb846bba21699d9a59502c2 +msgid "" +"Only include item summaries in the ``description`` tag of RSS feeds. If " +"set to ``False``, the full content will be included instead. This setting" +" doesn't affect Atom feeds, only RSS ones. The default is ``True``." +msgstr "" +"仅在RSS订阅源的 ``description`` 标签中包含项目摘要。若设为 ``False`` ,则将包含完整内容。此项设置不会影响Atom " +"feed,只针对RSS feed。本项配置默认为 ``True`` 。" + +#: ../../settings.rst:1090 2c53416e07e34cc9998718fc5e82cc12 +msgid "" +"If set to ``True``, ``?ref=feed`` will be appended to links in generated " +"feeds for the purpose of referrer tracking. The default is ``False``." +msgstr "若设为 ``True`` ,会将 ``?ref=feed`` 附到生成的链接中,以便追踪引用。本项配置默认为 ``False`` 。" + +#: ../../settings.rst:1093 7f647c4c65494b93bb6d1c3ef4b39af6 +msgid "" +"If you don't want to generate some or any of these feeds, set the above " +"variables to ``None``." +msgstr "若你不想要生成某些订阅源,将对应变量设为 ``None`` 即可。" + +#: ../../settings.rst:1096 372a88d4b1044ba491c1547e90014c73 +#, python-brace-format +msgid "``{slug}`` is replaced by name of the category / author / tag." +msgstr "``{slug}`` 会分别用分类名/作者名/标签名来替换。" + +#: ../../settings.rst:1100 9913cc3370754eda888a2594a73ce4da +msgid "Pagination" +msgstr "分页" + +#: ../../settings.rst:1102 caf94bfd47344208a34f6b10225646a1 +msgid "" +"The default behaviour of Pelican is to list all the article titles along " +"with a short description on the index page. While this works well for " +"small-to-medium sites, sites with a large quantity of articles will " +"probably benefit from paginating this list." +msgstr "默认情况下,Pelican会把所有文章以简短描述的形式展示在首页上。虽然这对中小型网站效果不错,但对于拥有大量文章的网站来说可能需要将此列表进行分页。" + +#: ../../settings.rst:1107 2667020362fe4d23a84b1d25b24863c3 +msgid "You can use the following settings to configure the pagination." +msgstr "你可以使用下面的设置来配置分页。" + +#: ../../settings.rst:1111 656911c7bc2145b0bd1ff10d5373d7dc +msgid "" +"The minimum number of articles allowed on the last page. Use this when " +"you don't want the last page to only contain a handful of articles. The " +"default is ``0``." +msgstr "最后一页允许的最小文章数。当不希望最后一页仅包含少数文章时,请使用此选项。(译者注:当最后一页达不到此最小文章数时,会被合并到前一页)" +"本项配置默认为 ``0`` 。" + +#: ../../settings.rst:1117 030af02515a84a13925108ab06457c0b +msgid "" +"The maximum number of articles to include on a page, not including " +"orphans. False to disable pagination. The default is ``False``." +msgstr "一个页面上包含的最大文章数,不包括孤立文章(译者注:当发生上一条设置选项中提到的合并时,最后一页显然会超过此最大文章数)。设为False会禁用分页。" +"本项配置默认为 ``False`` 。" + +#: ../../settings.rst:1122 478c5db91b16485b81ea4523ae70b6f1 +#, python-brace-format +msgid "" +"The templates to use pagination with, and the number of articles to " +"include on a page. If this value is ``None``, it defaults to " +"``DEFAULT_PAGINATION``. The default is ``{'index': None, 'tag': None, " +"'category': None, 'author': None}``." +msgstr "指定哪些模板需要启用分页,以及对应的单页面文章数量。若设为 ``None`` ,则默认值为 ``DEFAULT_PAGINATION`` 。" +"本项配置默认为 ``{'index': None, 'tag': None, 'category': None, 'author': None}`` 。" + +#: ../../settings.rst:1128 631c92f55fca4dd4acff9348397bdead +msgid "" +"A set of patterns that are used to determine advanced pagination output. " +"The default is::" +msgstr "一组匹配模式,用于高级分页输出。本项配置默认如下:" + +#: ../../settings.rst:1138 319e228179c2404dace7b1374e30a558 +msgid "Using Pagination Patterns" +msgstr "使用分页模式" + +#: ../../settings.rst:1140 7c7876166cba4db0bc8ca7c6ceb1f828 +msgid "" +"By default, pages subsequent to ``.../foo.html`` are created as " +"``.../foo2.html``, etc. The ``PAGINATION_PATTERNS`` setting can be used " +"to change this. It takes a sequence of triples, where each triple " +"consists of::" +msgstr "" +"默认情况下,连续页面的URL会如此编码:第一页为 ``.../foo.html`` ,后一页为 ``.../foo2.html`` " +"。``PAGINATION_PATTERNS`` 就是用于修改这个编页规则的,其中是一些三元组:" + +#: ../../settings.rst:1146 b96115cbd30a454e98427c2f568c9d9f +#, python-brace-format +msgid "" +"For ``page_url`` and ``page_save_as``, you may use a number of variables." +" ``{url}`` and ``{save_as}`` correspond respectively to the ``*_URL`` and" +" ``*_SAVE_AS`` values of the corresponding page type (e.g. " +"``ARTICLE_SAVE_AS``). If ``{save_as} == foo/bar.html``, then ``{name} == " +"foo/bar`` and ``{extension} == .html``. ``{base_name}`` equals ``{name}``" +" except that it strips trailing ``/index`` if present. ``{number}`` " +"equals the page number." +msgstr "" +"在 ``page_url`` 和 ``page_save_as`` 中,你可以使用很多变量。对于不同的页面类型, ``{url}`` 和 " +"``{save_as}`` 对应于其 ``*_URL`` 和 ``*_SAVE_AS`` 配置项的计算值(例如 " +"``ARTICLE_SAVE_AS`` )。假设 ``{save_as} == foo/bar.html`` ,那么此时 ``{name} == " +"foo/bar`` 、``{extension} == .html`` 。另外, ``{base_name}`` 和 ``{name}`` " +"相同,只不过会截去末尾的 ``/index`` (如果有的话)。 ``{number}`` 则等于页码。(译者注: " +"``minimum_page`` 意味到达该页面数后开始使用此条规则)" + +#: ../../settings.rst:1153 0513d4b59b6443a592d6c47abf6ffd13 +msgid "" +"For example, if you want to leave the first page unchanged, but place " +"subsequent pages at ``.../page/2/`` etc, you could set " +"``PAGINATION_PATTERNS`` as follows::" +msgstr "" +"举个例子,如果你想要保持第一面保持不变,但后续页面都以 ``.../page/2/`` 的形式出现,你可以如此设置 " +"``PAGINATION_PATTERNS`` :" + +#: ../../settings.rst:1163 a7e53284e5344eb5bab04206293349e4 +msgid "" +"If you want a pattern to apply to the last page in the list, use ``-1`` " +"as the ``minimum_page`` value::" +msgstr "如果你想指定最后一面制定规则,将 ``minimum_page`` 的值设为 ``-1`` 即可:" + +#: ../../settings.rst:1169 ee7ce86e8f1749e686233ec4a999dcc9 +msgid "Translations" +msgstr "翻译" + +#: ../../settings.rst:1171 66ba1c80957b4e84a265bbf1cfac36e5 +msgid "" +"Pelican offers a way to translate articles. See the :doc:`Content " +"` section for more information." +msgstr "Pelican为文章翻译提供了展示方法。详见 :doc:`创作内容 ` 。" + +#: ../../settings.rst:1176 27cab75cf2344a8c8d1573700e1f35ca +msgid "The default language to use. The default is ``'en'``." +msgstr "指定默认语言。本项配置默认为 ``'en'`` 。" + +#: ../../settings.rst:1180 2db269f9350e48098e8e06643b77a107 +msgid "" +"The metadata attribute(s) used to identify which articles are " +"translations of one another. May be a string or a collection of strings. " +"Set to ``None`` or ``False`` to disable the identification of " +"translations. The default is ``'slug'``." +msgstr "指定用于标识不同翻译是同一篇文章的元数据。可以是一个或多个字符串。要禁用对文章翻译的识别,将此项设为 ``None`` 或 ``False`` 。" +"本项配置默认为 ``'slug'`` 。" + +#: ../../settings.rst:1187 bfa4d3e17c6f42ac9ddeb79fd2131943 +msgid "" +"The metadata attribute(s) used to identify which pages are translations " +"of one another. May be a string or a collection of strings. Set to " +"``None`` or ``False`` to disable the identification of translations. The " +"default is ``'slug'``." +msgstr "指定用于标识不同翻译是同一个页面的元数据。可以是一个或多个字符串。要禁用对页面翻译的识别,将此项设为 ``None`` 或 ``False`` 。" +"本项配置默认为 ``'slug'`` 。" + +#: ../../settings.rst:1194 2ae8d30c65cb460194294c5a5de14f02 +#, python-brace-format +msgid "" +"The location to save the Atom feed for translations. [3]_ The default is " +"``'feeds/all-{lang}.atom.xml'``." +msgstr "指定各翻译Atom订阅源的存储位置。 [3]_ 本项配置默认为 ``'feeds/all-{lang}.atom.xml'`` 。" + +#: ../../settings.rst:1199 bc09f3717a8a497680abc66b70745d0f +#, python-brace-format +msgid "" +"Relative URL of the Atom feed for translations, including the ``{lang}`` " +"placeholder. [3]_ If not set, ``TRANSLATION_FEED_ATOM`` is used both for " +"save location and URL. The default is ``None``." +msgstr "" +"指定各翻译Atom feed的含有 ``{lang}`` 的相对URL。 [3]_ " +"若未设置此项,``TRANSLATION_FEED_ATOM`` 会同时用于存储位置和URL。本项配置默认为 ``None`` 。" + +#: ../../settings.rst:1205 1049b8c5e754466684e120afb2f7d281 +msgid "" +"Where to put the RSS feed for translations. The default is ``None``, " +"meaning no RSS feed." +msgstr "指定各翻译RSS订阅源的存储位置。本项配置默认为 ``None`` ,即无RSS feed。" + +#: ../../settings.rst:1210 625b105c73764fce865b2504e811e055 +#, python-brace-format +msgid "" +"Relative URL of the RSS feed for translations, including the ``{lang}`` " +"placeholder. [3]_ If not set, ``TRANSLATION_FEED_RSS`` is used both for " +"save location and URL. The default is ``None``." +msgstr "" +"文章或页面不同翻译在RSS订阅源中的相对路径,其中含有 ``{lang}``。 [3]_ " +"若未设置此项,``TRANSLATION_FEED_RSS`` 会同时用于存储位置和URL。本项配置默认为 ``None`` 。" + +#: ../../settings.rst:1214 088e79d226f0487fafc14494179cabcf +#, python-brace-format +msgid "{lang} is the language code" +msgstr "{lang} 为语言代码" + +#: ../../settings.rst:1217 4376232e5a294aca906df56af2f49303 +msgid "Ordering content" +msgstr "内容的排列顺序" + +#: ../../settings.rst:1221 41cf2c63929d4eeeae7bfdee85e8d084 +msgid "" +"Order archives by newest first by date. (False: orders by date with older" +" articles first.) The default is ``True``." +msgstr "若设为True,日期较新的会排在前面;若设为False,则日期较旧的会排在前面。本项配置默认为 ``True`` 。" + +#: ../../settings.rst:1226 3f3709e077b3416f8c3640dfc4432e38 +msgid "" +"Reverse the category order. (True: lists by reverse alphabetical order; " +"default lists alphabetically.) The default is ``False``." +msgstr "若设为True,分类会按字典序逆序排列;若设为False,则按字典序顺序排列。本项配置默认为 ``False`` 。" + +#: ../../settings.rst:1231 ff8d745b1884450185d26b1f7d645a5f +msgid "" +"Defines how the articles (``articles_page.object_list`` in the template) " +"are sorted. Valid options are: metadata as a string (use ``reversed-`` " +"prefix to reverse the sort order), special option ``'basename'`` which " +"will use the basename of the file (without path), or a custom function to" +" extract the sorting key from articles. Using a value of ``'date'`` will " +"sort articles in chronological order, while the default value, " +"``'reversed-date'``, will sort articles by date in reverse order (i.e., " +"newest article comes first). The default is ``'reversed-date'``." +msgstr "" +"定义文章(模板中的 ``articles_page.object_list`` " +")的排序方式。有效选项包括:字符串形式的元数据(使用前缀 ``reversed-`` 来指定逆序)、特殊选项 ``'basename'`` " +"(不带路径的文件名)、或是一个可以从文章中提取排序键的自定义函数。例如,将选项值设为 ``'date'`` ,文章就会以时间顺序排列文章。默认值为" +" ``'reversed-date'`` ,即以日期逆序排列,即新文章在前、旧文章在后。本项配置默认为 ``'reversed-date'`` 。" + +#: ../../settings.rst:1242 c2de8ca998954143a3a21d52f57a4e17 +msgid "" +"Defines how the pages (``pages`` variable in the template) are sorted. " +"Options are same as ``ARTICLE_ORDER_BY``. The default value, " +"``'basename'`` will sort pages by their basename. The default is " +"``'basename'``." +msgstr "" +"定义页面(模板中的 ``pages`` 变量)的排序顺序。有效选项和 ``ARTICLE_ORDER_BY`` 中的相同。本项配置默认为 ``'basename'`` 。" + +#: ../../settings.rst:1250 6a345fb283734251b7acad72b7c4cf51 +msgid "Themes" +msgstr "主题" + +#: ../../settings.rst:1252 6498842c51bb40548a640a7d419909bf +msgid "" +"Creating Pelican themes is addressed in a dedicated section (see :ref" +":`theming-pelican`). However, here are the settings that are related to " +"themes." +msgstr "创建Pelican主题在单独的一节中讲解(参见 :ref:`theming-pelican` )。此处讲解和主题有关的配置项。" + +#: ../../settings.rst:1258 bb35f8335e4142f5b69a61115ab790e5 +msgid "" +"Theme to use to produce the output. Can be a relative or absolute path to" +" a theme folder, or the name of a default theme or a theme installed via " +":doc:`pelican-themes` (see below). The default theme is \"notmyidea\"." +msgstr "" +"用于产生输出的主题。可以是到达要使用主题的文件夹的相对或绝对路径,或是主题的名称(默认主题或通过 :doc:`pelican-themes` " +"安装的主题)。默认主题为 \"notmyidea\" 。" + +#: ../../settings.rst:1264 3d47fbf73e7a4188a877619ef4cbed77 +msgid "" +"Destination directory in the output path where Pelican will place the " +"files collected from `THEME_STATIC_PATHS`. Default is `theme`. The " +"default is ``'theme'``." +msgstr "" +"Pelican从 `THEME_STATIC_PATHS` 中发现主题要使用的静态文件,此设置项指定这些静态文件在输出路径中的目录。" +"本项配置默认为 ``'theme'`` 。" + +#: ../../settings.rst:1270 c0b9021df19241fab6b6f90983248f9c +msgid "" +"Static theme paths you want to copy. Default value is `static`, but if " +"your theme has other static paths, you can put them here. If files or " +"directories with the same names are included in the paths defined in this" +" settings, they will be progressively overwritten. The default is " +"``['static']``." +msgstr "" +"要复制的静态主题路径。默认值为 `static` " +",但如果你的主题有其他静态路径,也可以将其放在此处。此项设置中若包含了相同名称的文件或目录,前面的会被后面的覆盖。" +"本项配置默认为 ``['static']`` 。" + +#: ../../settings.rst:1277 117f2d4711394bf39c50303d6b24c06b +msgid "" +"A list of paths you want Jinja2 to search for templates before searching " +"the theme's ``templates/`` directory. Allows for overriding individual " +"theme template files without having to fork an existing theme. Jinja2 " +"searches in the following order: files in ``THEME_TEMPLATES_OVERRIDES`` " +"first, then the theme's ``templates/``. The default is ``[]``." +msgstr "" +"在搜索主题的 ``templates/`` " +"目录前,Jinja2会先搜索此设置项中的路径。可以使用此设置项覆盖主题中的某些模板文件,以尽量避免修改现有主题。" +"Jinja2会先搜索 ``THEME_TEMPLATES_OVERRIDES`` 配置的文件,再搜索主题中的 ``templates/`` 目录。" +"本项配置默认为 ``[]`` 。" + +#: ../../settings.rst:1283 3f686a923ffa4a468df172f04146e388 +#, python-brace-format, python-format +msgid "" +"You can also extend templates from the theme using the ``{% extends %}`` " +"directive utilizing the ``!theme`` prefix as shown in the following " +"example:" +msgstr "利用 ``{% extends %}`` 指令中的 ``!theme`` 前缀也可以用于从主题扩展模板,如下例所示:" + +#: ../../settings.rst:1292 35121540d2254f698cbf9538d00cf5bd +msgid "Specify the CSS file you want to load. The default is ``'main.css'``." +msgstr "指定需要加载的CSS文件。本项配置默认为 ``'main.css'`` 。" + +#: ../../settings.rst:1294 533f2b3f18864e7ca68bfcb5d6961fe1 +msgid "" +"By default, two themes are available. You can specify them using the " +"``THEME`` setting or by passing the ``-t`` option to the ``pelican`` " +"command:" +msgstr "默认情况下,有两个主题可供选择。可以使用 ``THEME`` 选项指定,或是在 ``pelican`` 命令中使用 ``-t`` 选项的参数传入。" + +#: ../../settings.rst:1297 f1ea5d4700ca4f1091d6ee798596cff7 +msgid "notmyidea" +msgstr "notmyidea(默认值)" + +#: ../../settings.rst:1298 9b7be83a91ab4de7bd6d7a30dbcef939 +msgid "simple (a synonym for \"plain text\" :)" +msgstr "simple(即“plain text”)" + +#: ../../settings.rst:1300 3ac1546ab1144586825809c12f4abc78 +msgid "" +"There are a number of other themes available at " +"https://github.com/getpelican/pelican-themes. Pelican comes with :doc" +":`pelican-themes`, a small script for managing themes." +msgstr "" +"还有很多主题可以在 https://github.com/getpelican/pelican-themes 上下载。Pelican使用一个称为 " +":doc:`pelican-themes` 的小脚本来管理主题。" + +#: ../../settings.rst:1304 f1b29806557540ddaefe6bc035a48459 +msgid "" +"You can define your own theme, either by starting from scratch or by " +"duplicating and modifying a pre-existing theme. Here is :doc:`a guide on " +"how to create your theme `." +msgstr "你还可以创建自己的主题,可以从头开始,也可以在已有主题的基础上修改。请参看 :doc:`主题 ` 文档。" + +#: ../../settings.rst:1308 47a8dd97888b440aabbea22aee72630a +msgid "Following are example ways to specify your preferred theme::" +msgstr "下面是几个指定某个主题的例子:" + +#: ../../settings.rst:1319 3f51b49bed124af39ae67bf60c8384f8 +msgid "" +"The built-in ``simple`` theme can be customized using the following " +"settings." +msgstr "内置的 ``simple`` 主题可以使用以下设置项进行自定义。" + +#: ../../settings.rst:1323 08d86196410f482e803c69d85078652a +msgid "The URL of the stylesheet to use. The default is ``None``." +msgstr "要使用的样式表的URL。本项配置默认为 ``None`` 。" + +#: ../../settings.rst:1325 369beaeb61fd4e4f843d8174b666c0a7 +msgid "" +"The built-in ``notmyidea`` theme can make good use of the following " +"settings. Feel free to use them in your themes as well." +msgstr "下面的一下选项可以很好地作用于内置的 ``notmyidea`` 主题。当然在其他主题中你也可以尽情尝试这些选项。" + +#: ../../settings.rst:1330 7f647c4c65494b93bb6d1c3ef4b39af6 +msgid "A subtitle to appear in the header. The default is ``None``." +msgstr "页面顶部要显示的副标题。本项配置默认为 ``None`` 。" + +#: ../../settings.rst:1334 49eda3f428d7490bb78e081bbc941e64 +msgid "" +"Pelican can handle Disqus comments. Specify the Disqus sitename " +"identifier here. The default is ``None``." +msgstr "可以在Pelican中使用Disqus的评论系统,此设置项用于设置Disqus的站点标识符。本项配置默认为 ``None`` 。" + +#: ../../settings.rst:1339 a52590c6150e459495608626cf47cbc8 +msgid "" +"Your GitHub URL (if you have one). It will then use this information to " +"create a GitHub ribbon. The default is ``None``." +msgstr "指定你的GitHub URL(如果有的话),此信息将被用于创建GitHub标记。本项配置默认为 ``None`` 。" + +#: ../../settings.rst:1344 7a1fab7bd7d248aca77d6cebb71415fb +msgid "" +"Put any desired analytics scripts in this setting in ``publishconf.py``. " +"Example:" +msgstr "在 ``publishconf.py`` 中设置此项,用于指定想要使用的统计分析脚本。如下例:" + +#: ../../settings.rst:1356 f0fd9392aa0544248ae3ecfa505cbd50 +msgid "The default is ``None``." +msgstr "默认为 ``None``" + +#: ../../settings.rst:1360 5f3cf76b56694fa88318f38e06dfb9d9 +msgid "" +"A list of tuples (Title, URL) for additional menu items to appear at the " +"beginning of the main menu. The default is ``None``." +msgstr "指定 (标题, URL) 元组的列表,用于指定额外的菜单项,会添加在菜单栏的开头。本项配置默认为 ``None`` 。" + +#: ../../settings.rst:1365 23402de55a8d4b9a99f81aa3cbfd334f +msgid "" +"A list of tuples (Title, URL) for links to appear on the header. The " +"default is ``None``." +msgstr "指定 (标题, URL) 元组的列表,用于指定要展示在顶部的链接。本项配置默认为 ``None`` 。" + +#: ../../settings.rst:1370 55e5a965cc1f45eea43a064d8c93c758 +msgid "" +"A list of tuples (Title, URL) to appear in the \"social\" section. The " +"default is ``None``." +msgstr "指定 (标题, URL) 元组的列表,用于指定要展示在“social”部分的内容。本项配置默认为 ``None`` 。" + +#: ../../settings.rst:1375 2b60264917b1429b9252029724038ed9 +msgid "" +"Allows for adding a button to articles to encourage others to tweet about" +" them. Add your Twitter username if you want this button to appear. The " +"default is ``None``." +msgstr "允许在文章中添加按钮,以便其他人在tweet上引用。如果希望显示此按钮,在此项中设置你的Twitter用户名。本项配置默认为 ``None`` 。" + +#: ../../settings.rst:1381 f625d19e9cfc481f90ba05c050829ef3 +msgid "" +"Allows override of the name of the links widget. If not specified, " +"defaults to \"links\". The default is ``None``." +msgstr "指定用于覆盖“links”部分的名称,若不指定,默认设为 “links”。本项配置默认为 ``None`` 。" + +#: ../../settings.rst:1386 54cd361f2d6c44ec8b8838f2364f9c7f +msgid "" +"Allows override of the name of the \"social\" widget. If not specified, " +"defaults to \"social\". The default is ``None``." +msgstr "指定用于覆盖“social”部分的名称。若不指定,默认设为 “social”。本项配置默认为 ``None`` 。" + +#: ../../settings.rst:1389 16874b8a80b149578efba9c45a78a9c7 +msgid "" +"In addition, you can use the \"wide\" version of the ``notmyidea`` theme " +"by adding the following to your configuration::" +msgstr "另外,你可以使用 ``notmyidea`` 主题的“宽屏”版本,在配置文件中添加下面这行配置即可:" + +#: ../../settings.rst:1396 9d24e75fc67d4b98a06bbe832f7cd947 +msgid "Logging" +msgstr "日志" + +#: ../../settings.rst:1398 9ddaf0c25b314e609b7de6873b2cfbcf +msgid "" +"Sometimes, a long list of warnings may appear during site generation. " +"Finding the **meaningful** error message in the middle of tons of " +"annoying log output can be quite tricky. In order to filter out redundant" +" log messages, Pelican comes with the ``LOG_FILTER`` setting." +msgstr "" +"在站点生成过程中有时可能会出现一堆警告信息。在这一大堆日志输出中寻找 **有意义** " +"的错误消息是非常棘手的。为了过滤掉多余的日志消息,可以在Pelican中指定 ``LOG_FILTER`` 设置。" + +#: ../../settings.rst:1403 4c3ea89d86e846f3b38f146060f19c53 +msgid "" +"``LOG_FILTER`` should be a list of tuples ``(level, msg)``, each of them " +"being composed of the logging level (up to ``warning``) and the message " +"to be ignored. Simply populate the list with the log messages you want to" +" hide, and they will be filtered out." +msgstr "" +"``LOG_FILTER`` 是元组 ``(level, msg)`` ,level指定日志记录等级(最高为 ``warning`` " +"),msg指定要忽略的消息。将想要隐藏的日志消息添加到此列表中就可以将他们过滤掉。" + +#: ../../settings.rst:1408 ../../settings.rst:1416 +#: b62320cd110548f08cdc2b9ff52953d5 +msgid "For example::" +msgstr "例如:" + +#: ../../settings.rst:1413 8a81ee82a14e4571852d1b955568028a +msgid "" +"It is possible to filter out messages by a template. Check out source " +"code to obtain a template." +msgstr "用模板字符串指定要过滤的消息也是可以的。具体的消息种类请查看源码。" + +#: ../../settings.rst:1423 880baed291ff4f63836986b7c9082825 +msgid "" +"Silencing messages by templates is a dangerous feature. It is possible to" +" unintentionally filter out multiple message types with the same template" +" (including messages from future Pelican versions). Proceed with caution." +msgstr "通过模板过滤忽略消息是一个危险的功能。 使用同一模板可能会无意中过滤掉多种消息类型(包括来自新版本Pelican的消息),请谨慎行事。" + +#: ../../settings.rst:1429 988048d34b0340beb22f11922ce0959a +msgid "This option does nothing if ``--debug`` is passed." +msgstr "当使用了 ``--debug`` 参数,此项设置就不会起作用。" + +#: ../../settings.rst:1435 e1b3e06d5d29428ba28f2842124a7dcc +msgid "Reading only modified content" +msgstr "只读取修改过的内容" + +#: ../../settings.rst:1437 ff9209b75d1645c8b5af8941525fead0 +msgid "" +"To speed up the build process, Pelican can optionally read only articles " +"and pages with modified content." +msgstr "为了加速网站构建过程,Pelican能够只读取修改过内容的文章和页面。" + +#: ../../settings.rst:1440 5aee5c450b2047bea84e436894c179ef +msgid "When Pelican is about to read some content source file:" +msgstr "当Pelican准备读取内容源文件时,会执行下面的规则:" + +#: ../../settings.rst:1442 0aca4765447b49308b5a52b22a74d16a +msgid "" +"The hash or modification time information for the file from a previous " +"build are loaded from a cache file if ``LOAD_CONTENT_CACHE`` is ``True``." +" These files are stored in the ``CACHE_PATH`` directory. If the file has" +" no record in the cache file, it is read as usual." +msgstr "" +"若 ``LOAD_CONTENT_CACHE`` 为 ``True`` " +",则从缓存文件中加载上一次构建时文件的哈希值或修改时间。这些缓存的文件存储在 ``CACHE_PATH`` " +"所指定的目录中。若文件是新的,在缓存文件中没有记录,则照常读取。" + +#: ../../settings.rst:1446 b8bb9d616a2d41b484ec5440fa09e57a +msgid "The file is checked according to ``CHECK_MODIFIED_METHOD``:" +msgstr "文件会以 ``CHECK_MODIFIED_METHOD`` 设置的方式检查:" + +#: ../../settings.rst:1452 fb6105f54c80491c80f99b8b447c5a4b +msgid "" +"If set to anything else or the necessary information about the file " +"cannot be found in the cache file, the content is read as usual." +msgstr "如果设置为其他任何值或在缓存文件中无法找到有关该文件的必要信息,则将照常读取内容。" + +#: ../../settings.rst:1455 c46fe5fc65a44157b02b9e26befcefc6 +msgid "" +"If the file is considered unchanged, the content data saved in a previous" +" build corresponding to the file is loaded from the cache, and the file " +"is not read." +msgstr "如果Pelican认为文件没有更改过,会直接从上一次构建的对应文件中加载内容,源文件就不会被读取。" + +#: ../../settings.rst:1458 0d597148978d4d228fc55b546d77ba97 +msgid "" +"If the file is considered changed, the file is read and the new " +"modification information and the content data are saved to the cache if " +"``CACHE_CONTENT`` is ``True``." +msgstr "" +"若Pelican认为文件更改过了,则会读取源文件;若 ``CACHE_CONTENT`` 设为了 ``True`` " +",Pelican还会将修改后的信息以及内容数据存入缓存。" + +#: ../../settings.rst:1462 e1c91fa9ecf84419a4e34e3fa0951b56 +msgid "" +"If ``CONTENT_CACHING_LAYER`` is set to ``'reader'`` (the default), the " +"raw content and metadata returned by a reader are cached. If this setting" +" is instead set to ``'generator'``, the processed content object is " +"cached. Caching the processed content object may conflict with plugins " +"(as some reading related signals may be skipped) and the " +"``WITH_FUTURE_DATES`` functionality (as the ``draft`` status of the " +"cached content objects would not change automatically over time)." +msgstr "" +"若 ``CONTENT_CACHING_LAYER`` 设为了 ``'reader'`` (默认值),则缓存reader返回的原始内容和元数据;若" +" ``CONTENT_CACHING_LAYER`` 设为了 ``'generator'`` " +",则缓存处理过后的内容对象。缓存已处理的内容对象可能会和插件(因为可能会跳过一些与读取相关的信号)与 ``WITH_FUTURE_DATES`` " +"的功能(因为已处理内容对象的 ``draft`` 状态不会改变)冲突。" + +#: ../../settings.rst:1470 d46b39637a86497eb38667c8ecf9bf66 +msgid "" +"Checking modification times is faster than comparing file hashes, but it " +"is not as reliable because ``mtime`` information can be lost, e.g., when " +"copying content source files using the ``cp`` or ``rsync`` commands " +"without the ``mtime`` preservation mode (which for ``rsync`` can be " +"invoked by passing the ``--archive`` flag)." +msgstr "" +"检查文件修改时间比计算文件哈希更快,但事实上却不太可靠,因为 ``mtime`` 信息有丢失的可能。例如,使用 ``cp`` 或 " +"``rsync`` 命令时没有开启 ``mtime`` 保留模式。(rsync可以通过指定 ``--archive`` 标志启用 " +"``mtime`` 保留模式)" + +#: ../../settings.rst:1476 3ef54978b60c4fcb9f2b0dc625797b74 +msgid "" +"The cache files are Python pickles, so they may not be readable by " +"different versions of Python as the pickle format often changes. If such " +"an error is encountered, it is caught and the cache file is rebuilt " +"automatically in the new format. The cache files will also be rebuilt " +"after the ``GZIP_CACHE`` setting has been changed." +msgstr "" +"缓存文件使用的是Python " +"pickles,因此不同版本的Python由于pickle文件格式变化可能无法读取缓存。如果遇到此类错误,会自动以新格式重新构建缓存。另外,当 " +"``GZIP_CACHE`` 设置发生变化后,缓存也会自动重建。" + +#: ../../settings.rst:1482 40fb13c9fe444d109c9014ce4f294f92 +msgid "" +"The ``--ignore-cache`` command-line option is useful when the whole cache" +" needs to be regenerated, such as when making modifications to the " +"settings file that will affect the cached content, or just for debugging " +"purposes. When Pelican runs in autoreload mode, modification of the " +"settings file will make it ignore the cache automatically if " +"``AUTORELOAD_IGNORE_CACHE`` is ``True``." +msgstr "" +"当需要重新生成整个缓存时,可以使用 ``--ignore-cache`` " +"命令行选项,例如当需要修改会影响缓存内容的设置项时,或是调试时,都可以使用 ``--ignore-cache`` 。若 " +"``AUTORELOAD_IGNORE_CACHE`` 设为了 ``True`` ,修改设置文件时会自动忽略缓存。" + +#: ../../settings.rst:1488 05ea098bd1b34660878cc598cf9c639c +msgid "" +"Note that even when using cached content, all output is always written, " +"so the modification times of the generated ``*.html`` files will always " +"change. Therefore, ``rsync``-based uploading may benefit from the " +"``--checksum`` option." +msgstr "" +"需要注意的是,即使使用了缓存的内容,最终的输出文件也始终会进行重新写入,因此生成的 ``*.html`` 文件的修改时间始终会变化。所以,基于 " +"``rsync`` 进行上传时,可以考虑使用 ``--checksum`` 选项。" + +#: ../../settings.rst:1495 358bf9edd2594e2fa3db87aae3703994 +msgid "Example settings" +msgstr "配置示例" + +#~ msgid "Your site name" +#~ msgstr "站点名称" + +#~ msgid "The URL to refer to an article." +#~ msgstr "文章的URL格式。" + +#~ msgid "The place where we will save an article." +#~ msgstr "文章的存储位置。" + +#~ msgid "The URL we will use to link to a page." +#~ msgstr "页面的URL格式。" + +#~ msgid "The URL used to link to a page draft." +#~ msgstr "draft状态页面的URL。" + +#~ msgid "The actual location a page draft is saved at." +#~ msgstr "draft状态页面的实际存储位置。" + +#~ msgid "The URL to use for an author." +#~ msgstr "某一个作者的URL格式。" + +#~ msgid "The location to save an author." +#~ msgstr "某一个作者的存储位置。" + +#~ msgid "The URL to use for a category." +#~ msgstr "某一个分类的URL格式。" + +#~ msgid "The location to save a category." +#~ msgstr "某一个分类的存储位置。" + +#~ msgid "The URL to use for a tag." +#~ msgstr "某一个标签的URL格式。" + +#~ msgid "Default is the system locale." +#~ msgstr "默认值与系统的地区设置保持一致。" + +#~ msgid "Default author (usually your name)." +#~ msgstr "默认作者(通常是你自己的名字)。" + +#~ msgid "See also ``SLUGIFY_SOURCE``." +#~ msgstr "另请参看 ``SLUGIFY_SOURCE`` 。" + +#~ msgid "The location to save the Atom feed." +#~ msgstr "指定保存Atom订阅源的位置。" + +#~ msgid "The location to save the RSS feed." +#~ msgstr "指定保存RSS订阅源的位置。" diff --git a/docs/locale/zh_CN/LC_MESSAGES/sphinx.po b/docs/locale/zh_CN/LC_MESSAGES/sphinx.po new file mode 100644 index 00000000..860cbcb2 --- /dev/null +++ b/docs/locale/zh_CN/LC_MESSAGES/sphinx.po @@ -0,0 +1,60 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2010–2024 +# This file is distributed under the same license as the PELICAN package. +# FIRST AUTHOR , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: PELICAN 4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-06-24 19:06+0800\n" +"PO-Revision-Date: 2024-06-27 19:00+0800\n" +"Last-Translator: GeorgeHu \n" +"Language: zh_CN\n" +"Language-Team: \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.15.0\n" + +#: ../../_templates/page.html:68 697aead398874e06aa15cfd74d134745 +msgid "Back to top" +msgstr "返回顶部" + +#: ../../_templates/page.html:101 f91a64e54aae49c2bd09a944ea693193 +msgid "Next" +msgstr "下一节" + +#: ../../_templates/page.html:113 6c3ad069077b4e2cb6e1f77cc2962881 +msgid "Previous" +msgstr "前一节" + +#: ../../_templates/page.html:116 e83e03d0b50c4065a9f87db25a23b3ee +msgid "Home" +msgstr "首页" + +#: ../../_templates/page.html:129 1d0fdb4c0b4e420283101ba5c21ac985 +#, python-format +msgid "Copyright © %(copyright)s" +msgstr "Copyright © %(copyright)s" + +#: ../../_templates/page.html:133 0a35c662e6574da48f7ac5c6b2c82874 +#, python-format +msgid "" +"Copyright © %(copyright)s, Justin Mayer, Alexis Metaireau, and " +"contributors" +msgstr "" +"Copyright © %(copyright)s, Justin Mayer, Alexis Metaireau, and " +"contributors" + +#: ../../_templates/page.html:141 07b89372db484251bfcd3b54e0845bf0 +#, python-format +msgid "Last updated on %(last_updated)s" +msgstr "最后更新于 %(last_updated)s" + +#: ../../_templates/page.html:187 2eb9f1b479a7405290a91d8e1962f265 +msgid "On this page" +msgstr "本页目录" diff --git a/docs/locale/zh_CN/LC_MESSAGES/themes.po b/docs/locale/zh_CN/LC_MESSAGES/themes.po new file mode 100644 index 00000000..5f626265 --- /dev/null +++ b/docs/locale/zh_CN/LC_MESSAGES/themes.po @@ -0,0 +1,1269 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2010–2024 +# This file is distributed under the same license as the PELICAN package. +# FIRST AUTHOR , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: PELICAN 4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-06-25 20:36+0800\n" +"PO-Revision-Date: 2024-06-26 19:00+0800\n" +"Last-Translator: GeorgeHu \n" +"Language: zh_CN\n" +"Language-Team: \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.15.0\n" + +#: ../../themes.rst:4 89902fe106274689a45bfad9447f4485 +msgid "Themes" +msgstr "主题" + +#: ../../themes.rst:6 877321a191544e6db8b1fe257b7bfc82 +msgid "" +"There is a community-managed repository of `Pelican Themes`_ for people " +"to share and use." +msgstr "" +"有一个由社区管理的主题仓库 `Pelican Themes`_ 供大家使用。" + +#: ../../themes.rst:9 6f0fdcf7ea28413482621e993a00aba2 +msgid "" +"Please note that while we do our best to review and merge theme " +"contributions, they are submitted by the Pelican community and thus may " +"have varying levels of support and interoperability." +msgstr "" +"请注意,虽然我们已经尽全力审查与合并主题,但是由于他们是由社区提交的,因此" +"支持性和互操作性各有不同。" + +#: ../../themes.rst:14 f4083056816746ad8779108e8605f782 +msgid "Creating Themes" +msgstr "创建主题" + +#: ../../themes.rst:16 11544ff05900447c9d89b7e4b762b456 +msgid "" +"To generate its HTML output, Pelican uses the `Jinja " +"`_ templating engine due to its " +"flexibility and straightforward syntax. If you want to create your own " +"theme, feel free to take inspiration from the `\"simple\" theme " +"`_." +msgstr "" +"Pelican使用 `Jinja `_ 来生成HTML。" +"如果你想要创建你自己的主题,请从 `\"simple\" 主题 " +"`_ " +"中找寻灵感。" + +#: ../../themes.rst:22 646df766f1a64f6e89ba22466a9a57ee +msgid "" +"To generate your site using a theme you have created (or downloaded " +"manually and then modified), you can specify that theme via the ``-t`` " +"flag::" +msgstr "" +"要使用你自己创建的主题生成站点,你可以通过命令行中的 ``-t`` 参数指定主题:" + +#: ../../themes.rst:27 f3b0f229f56444d0b09f27dcc5076398 +msgid "" +"If you'd rather not specify the theme on every invocation, you can define" +" ``THEME`` in your settings to point to the location of your preferred " +"theme." +msgstr "" +"如果你不希望每次都通过命令行手动指定主题,你可以在配置文件中定义 ``THEME`` " +"来指定你希望使用的主题的位置。" + +#: ../../themes.rst:32 b8028cb48f844e16b49bd30e6f7c7ec5 +msgid "Structure" +msgstr "结构" + +#: ../../themes.rst:34 a3fcbbe24e4c4448b09db74e7140dd52 +msgid "To make your own theme, you must follow the following structure::" +msgstr "你需要遵循下面的结构来制作你自己的主题:" + +#: ../../themes.rst:52 153830a0dc1c47358f1fd67c11174676 +msgid "" +"`static` contains all the static assets, which will be copied to the " +"output `theme` folder. The above filesystem layout includes CSS and image" +" folders, but those are just examples. Put what you need here." +msgstr "" +"`static` 文件夹包含了所有静态资源,会被复制输出到 `theme` 文件夹中。上面的文件夹" +"布局结构包括了CSS和image文件夹,但是这只是举个例子。你可以根据需求安排文件。" + +#: ../../themes.rst:56 e923579cd7b74cdc94f43d4da4e47b2e +msgid "" +"`templates` contains all the templates that will be used to generate the " +"content. The template files listed above are mandatory; you can add your " +"own templates if it helps you keep things organized while creating your " +"theme." +msgstr "" +"`templates` 文件夹包含了需要用到的所有模板文件,这些模板文件会用于生成网站内容。" +"上面列出的模板文件都是必须有的。当然,你可以添加一些其他的模板来帮助组织主题文件。" + +#: ../../themes.rst:64 354197c97b424a53b682d31d2432bbd7 +msgid "Templates and Variables" +msgstr "模板和变量" + +#: ../../themes.rst:66 263ff11382b1433082f35b605ed76f4b +msgid "" +"The idea is to use a simple syntax that you can embed into your HTML " +"pages. This document describes which templates should exist in a theme, " +"and which variables will be passed to each template at generation time." +msgstr "" +"你可以将一些简单的语法嵌入到HTML文件中。以下文档描述了哪些模板需要存在于主题中," +"以及有哪些变量可以在模板中使用。" + +#: ../../themes.rst:70 b511ed5df3fc4f75a8e9ca6e874b6cf7 +msgid "" +"All templates will receive the variables defined in your settings file, " +"as long as they are in all-caps. You can access them directly." +msgstr "" +"所有模板都能接收到配置文件中定义的变量,变量名都是全大写的,可以直接使用。" + +#: ../../themes.rst:77 903d9890350a4b08a3c5e11bdc202d10 +msgid "Common Variables" +msgstr "通用变量" + +#: ../../themes.rst:79 fa18fc2c334d4b51ae7545d24a8b5df5 +msgid "All of these settings will be available to all templates." +msgstr "下列变量在所有模板中均可使用。" + +#: ../../themes.rst:82 ../../themes.rst:170 ../../themes.rst:199 +#: ../../themes.rst:233 ../../themes.rst:266 ../../themes.rst:306 +#: ../../themes.rst:322 ../../themes.rst:355 1a4a93014c47420d8957a7f2209d6525 +#: 2d1889e9a23a4cb298d38366289f381d 63553de1af084662a41fded0a700913d +#: 87ec83ae24564eaf831ada4f4aab01a3 8907d23ec9f94b5b83a9bdd717fc95bd +#: 951f8b457243424da836ecf85c5db0e1 a3866a27423c4782a6d47b28d41e1144 +#: eee781bef37d4e94a9796ff50dd63447 +msgid "Variable" +msgstr "变量名" + +#: ../../themes.rst:82 ../../themes.rst:170 ../../themes.rst:199 +#: ../../themes.rst:233 ../../themes.rst:266 ../../themes.rst:306 +#: ../../themes.rst:322 ../../themes.rst:355 ../../themes.rst:446 +#: ../../themes.rst:490 ../../themes.rst:509 17384d55be144a6ab765864d5833f96f +#: 2e69f59326a04747b7655b61a713bcf5 46ecfcac4e0b48879a665f5ded2abc4c +#: 4b4d47cfd511455db6eb2793e60907b6 6b9bab6f2603419da0032456f90e326a +#: 9cadd069ae2b471eaaeeac1281b7f88d af7a426781734d61a2f1c95aff008adc +#: c1274b2e4b5442d7b9774ffacdd22c1a f53c09af9fd642f7a26552ada70160d8 +#: f9ffc9bb411340199e68bb28e1c38e97 ff0cc823d5f44c71be4d9dfb09198ae5 +msgid "Description" +msgstr "描述" + +#: ../../themes.rst:84 92684afe53b74e5eacca15acf5567c1c +msgid "output_file" +msgstr "output_file" + +#: ../../themes.rst:84 9534d42aed3a4f5bbcefb8f9aebefc9e +msgid "" +"The name of the file currently being generated. For instance, when " +"Pelican is rendering the home page, output_file will be \"index.html\"." +msgstr "" +"当前正在生成的文件名。例如在Pelican渲染主页时,此变量的值就是“index.html”。" + +#: ../../themes.rst:87 ../../themes.rst:202 ../../themes.rst:236 +#: ../../themes.rst:325 ../../themes.rst:406 5e810b19b7934988905a23189aa25584 +#: 7ce75b9ff72a41368aa4d85147b3ee01 b304eca8c6ab4a97b9f9816e48e785a3 +#: b4b801b67a5f4a038664df8273752437 f6d5de62ec124133abd3e71d052076c9 +msgid "articles" +msgstr "articles" + +#: ../../themes.rst:87 a37338288479498dabc0d35a3499ae2a +msgid "" +"The list of articles, ordered descending by date. All the elements are " +"`Article` objects, so you can access their attributes (e.g. title, " +"summary, author etc.). Sometimes this is shadowed (for instance, in the " +"tags page). You will then find info about it in the `all_articles` " +"variable." +msgstr "" +"文章列表,以日期降序排列。所有元素都是 `Article` 对象,因此你可以访问 `Article` " +"对象的属性(例如title、summary、author等)。有时候此变量是隐藏的(例如在标签页面中)。" +"但仍可以在 `all_articles` 变量中找到相关信息。" + +#: ../../themes.rst:93 ../../themes.rst:203 ../../themes.rst:237 +#: ../../themes.rst:326 ../../themes.rst:408 100c5d8c8602411da08bfcde279249f2 +#: 24ff711ecb9e4308b52d404b822244f3 389e8343632d48048b4ced0128d20011 +#: 3d9a59ea4c7a428998e0bb4df84c6576 b0fe593f0e774b7a9b33ff8e44c8284a +msgid "dates" +msgstr "dates" + +#: ../../themes.rst:93 957d856345744280bb8cde05d15b934c +msgid "The same list of articles, but ordered by date, ascending." +msgstr "和articles相同的文章列表,但是以日期升序排列" + +#: ../../themes.rst:95 850f75175d0f44c9987b95b244e0e085 +msgid "hidden_articles" +msgstr "hidden_articles" + +#: ../../themes.rst:95 2853b0eb27e241c78c5ad83d8d502905 +msgid "The list of hidden articles" +msgstr "处于隐藏状态的文章的列表" + +#: ../../themes.rst:96 68baf2e00aeb4fbbb9b18c562f5215de +msgid "drafts" +msgstr "drafts" + +#: ../../themes.rst:96 3eefce5813424f4b8a5edb283ec34699 +msgid "The list of draft articles" +msgstr "处于草稿状态的文章的列表" + +#: ../../themes.rst:97 2bde499d530048a8ba3e5fb72a4a1840 +msgid "period_archives" +msgstr "period_archives" + +#: ../../themes.rst:97 afad8caed5294d4bae4922b2674806ff +msgid "" +"A dictionary containing elements related to time-period archives (if " +"enabled). See the section :ref:`Listing and Linking to Period Archives " +"` for details." +msgstr "" +"一个字典,包含与时间段存档相关的元素(若启用了时间段存档)。详见 " +":ref:`时间段存档的列表和链接 `" + +#: ../../themes.rst:101 ../../themes.rst:450 0b796b141cc24e34b57bc554273720c1 +#: d5bf3dd243d04c55ace1738de4d5b81b +msgid "authors" +msgstr "authors" + +#: ../../themes.rst:101 10010e1b527e4eedb7477d52bbf0ed94 +msgid "" +"A list of (author, articles) tuples, containing all the authors and " +"corresponding articles (values)" +msgstr "" +"元组(author, articles)的列表,包含所有作者及对应文章。" + +#: ../../themes.rst:103 7bb90c8b99344911b68de2dc8ba1a9d7 +msgid "categories" +msgstr "categories" + +#: ../../themes.rst:103 becaee92fa434a47bb2ffa4ba6d3d863 +msgid "" +"A list of (category, articles) tuples, containing all the categories and " +"corresponding articles (values)" +msgstr "" +"元组(category, articles)的列表,包含所有分类及对应文章" + +#: ../../themes.rst:105 ../../themes.rst:470 ../../themes.rst:529 +#: 9d21fa3040b14b91a47dff071caae024 b8597a5c585e43a0bb544bfe8cf9bd26 +#: d692f555b4ea461ca4d8c0c65a67f21a +msgid "tags" +msgstr "tags" + +#: ../../themes.rst:105 0c0424ec68a74f578e271d0b1fe44b28 +msgid "" +"A list of (tag, articles) tuples, containing all the tags and " +"corresponding articles (values)" +msgstr "" +"元组(tag, articles)的列表,包含所有标签及对应文章" + +#: ../../themes.rst:107 196d2ef3131b4ab2b7e90a43d8c17dcd +msgid "pages" +msgstr "pages" + +#: ../../themes.rst:107 abb2b6303bb44b3e9335fcc9bfa2a704 +msgid "The list of pages" +msgstr "页面的列表" + +#: ../../themes.rst:108 14a71679646448d59f6ccc2c63c2cc8b +msgid "hidden_pages" +msgstr "hidden_pages" + +#: ../../themes.rst:108 dfc32fdbe91240a78c15ff048e2f58ce +msgid "The list of hidden pages" +msgstr "处于隐藏状态的页面的列表" + +#: ../../themes.rst:109 78a644f88301408e977449a4fc0ffe12 +msgid "draft_pages" +msgstr "draft_pages" + +#: ../../themes.rst:109 7418727938f343da8cb0071239f67d71 +msgid "The list of draft pages" +msgstr "处于草稿状态的页面的列表" + +#: ../../themes.rst:114 04e0bd5e7d504ff8975c8492ce8c250a +msgid "Sorting" +msgstr "排序" + +#: ../../themes.rst:116 edae254af6974908bbeb7125dca0c708 +msgid "" +"URL wrappers (currently categories, tags, and authors), have comparison " +"methods that allow them to be easily sorted by name::" +msgstr "" +"URL包装器(分类、标签、作者),都拥有比较方法,使其易于按名称排序:" + +#: ../../themes.rst:121 878bb8a3a3064552b7608444cb419856 +msgid "" +"If you want to sort based on different criteria, `Jinja's sort command`__" +" has a number of options." +msgstr "" +"如果你想要以不同条件进行排序,可以使用 `Jinja的排序命令`__ ,其中有丰富的选项。" + +#: ../../themes.rst:128 3f3c857d79ed447f9dd3f5ce91082747 +msgid "Date Formatting" +msgstr "日期格式" + +#: ../../themes.rst:130 37d3f94188aa435297071a869bfdca96 +msgid "" +"Pelican formats the date according to your settings and locale " +"(``DATE_FORMATS``/``DEFAULT_DATE_FORMAT``) and provides a ``locale_date``" +" attribute. On the other hand, the ``date`` attribute will be a " +"`datetime`_ object. If you need custom formatting for a date different " +"than your settings, use the Jinja filter ``strftime`` that comes with " +"Pelican. Usage is same as Python `strftime`_ format, but the filter will " +"do the right thing and format your date according to the locale given in " +"your settings::" +msgstr "" +"Pelican会根据设置和地区( ``DATE_FORMATS``/``DEFAULT_DATE_FORMAT`` )对日期" +"进行格式化,同时还会提供一个 ``locale_date`` 属性。 ``date`` 属性以 `datetime`_ " +"类表示。如果你需要使用与设置中不同的自定义日期格式,使用Jinja中的 ``strftime`` " +"过滤器即可。用法Python中的 `strftime`_ 相同,但是过滤器会根据设置中给出的地区对" +"日期进行格式化:" + +#: ../../themes.rst:144 cc5bc390c54b4c4f96641b2d8efe2169 +msgid "Checking Loaded Plugins" +msgstr "检测已加载的插件" + +#: ../../themes.rst:146 2805eea94378479eafe1f9e214875f44 +msgid "" +"Pelican provides a ``plugin_enabled`` Jinja test for checking if a " +"certain plugin is enabled. This test accepts a plugin name as a string " +"and will return a Boolean. Namespace plugins can be specified by full " +"name (``pelican.plugins.plugin_name``) or short name (``plugin_name``). " +"The following example uses the ``webassets`` plugin to minify CSS if the " +"plugin is enabled and otherwise falls back to regular CSS::" +msgstr "" +"Pelican 提供了一个名为 ``plugin_enabled`` 的Jinja test,可用于检测某个插件是否启用。" +"此test以字符串形式接受一个插件名称,并且返回一个布尔值。命名空间插件可以通过全名" +"( ``pelican.plugins.plugin_name`` )或者短名称( ``plugin_name`` )指定。" +"下面的例子中通过 ``webassets`` 插件来减小CSS的体积,但若此插件未启用,则回滚回普通的CSS:" + +#: ../../themes.rst:162 f31869529aef47a28224e3da3bc0c702 +msgid "index.html" +msgstr "index.html" + +#: ../../themes.rst:164 d412aecaa8e34b2ca56032be8711b258 +msgid "This is the home page or index of your blog, generated at ``index.html``." +msgstr "站点的主页,可以理解为推文的索引页,生成为 ``index.html`` 。" + +#: ../../themes.rst:166 396a268629374d1aaef9857ccff9ee53 +msgid "" +"If pagination is active, subsequent pages will reside in " +"``index{number}.html``." +msgstr "" +"如果开启了分页功能,后续的页面会以 ``index{number}.html`` 的形式生成。" + +#: ../../themes.rst:172 ../../themes.rst:205 ../../themes.rst:239 +#: ../../themes.rst:328 08f6e73beb544181b9b2627ad68dbbfe +#: 244d220cd8684bb68489bf61227f87b5 34b8185111f54d8fbffa9ac5a87302a8 +#: d7bcb30486284e9dac239a40d4b9f229 +msgid "articles_paginator" +msgstr "articles_paginator" + +#: ../../themes.rst:172 ../../themes.rst:205 ../../themes.rst:239 +#: ../../themes.rst:328 3fa810e9ae1d4dc1839754210e5d2570 +#: 9554b801f6df475caedff0345c5dfb93 bbc15c5dfe934bcd9e5f258f2008af11 +#: e5952c856b7d4670a93a99863ef94c49 +msgid "A paginator object for the list of articles" +msgstr "一个分页器对象,其中存放着文章列表" + +#: ../../themes.rst:173 ../../themes.rst:206 ../../themes.rst:240 +#: ../../themes.rst:329 2362ac4e51264ba8b1a38272414c026c +#: 755bbbd447fe420eb124c1dcbfecd767 7eaa5ec86823488fa38009e3a5bf1756 +#: 82eef974e6c2428eb29528b9a6cae6d3 +msgid "articles_page" +msgstr "articles_page" + +#: ../../themes.rst:173 ../../themes.rst:206 ../../themes.rst:240 +#: ../../themes.rst:329 283875f54861414396ce8695d3002f7d +#: b7400c136a8340df9eaa5e5f29b81766 ba00d04cfe6c4040bf704c17be73470f +#: cdb81b11ea1a44d2890915c496eada40 +msgid "The current page of articles" +msgstr "当前分页包含的文章的列表" + +#: ../../themes.rst:174 ../../themes.rst:207 ../../themes.rst:241 +#: ../../themes.rst:330 4fd0b5d101a74f23b8fb32e95b35af7f +#: 6d6631ebf17e436ebd910cb778fa47e6 8869fe25c487475ea64c0ab80ee8c48b +#: efd8e4bfc9234996870b90026c00f695 +msgid "articles_previous_page" +msgstr "articles_previous_page" + +#: ../../themes.rst:174 ../../themes.rst:207 ../../themes.rst:241 +#: ../../themes.rst:330 228a67aba662491bb3e8b8f53d936921 +#: 4e0499da01e146d78c4c50ab293ceaec a9c5b7f1fb854f359f596f2de65510e9 +#: eaeb09fc611545ec87fbdbe32b7da599 +msgid "The previous page of articles (``None`` if page does not exist)" +msgstr "前一分页包含的文章的列表(若没有前一页,此变量值为 ``None`` )" + +#: ../../themes.rst:176 ../../themes.rst:209 ../../themes.rst:243 +#: ../../themes.rst:332 44e81860c57c4136953fec9d390a1896 +#: 92e4766edf0d4f1a94801521a3ccc8c6 c7f7e0e63a5e4b3f838df1082628f71f +#: eb4130c14eef4dc59383097aa4bfd9cc +msgid "articles_next_page" +msgstr "articles_next_page" + +#: ../../themes.rst:176 ../../themes.rst:209 ../../themes.rst:243 +#: ../../themes.rst:332 0aaccba1bbd843f3a13da1b8b206cb47 +#: 87d1cad4927745329bf74840147f3cae 9df65206ff0040caae56f0d2185e63d4 +#: a38e11e768ec40acafdc943d00fd1c39 +msgid "The next page of articles (``None`` if page does not exist)" +msgstr "后一分页包含的文章的列表(若没有后一页,此变量值为 ``None`` )" + +#: ../../themes.rst:178 ../../themes.rst:211 ../../themes.rst:245 +#: ../../themes.rst:334 06c22ce247524bc59649f37ac570360d +#: 3f913f031d1544049d4204b5c786e8eb 80e9ef1975ac43cb87b1cb1e2292a15d +#: 9d50cd6bc33542ff9ec268664242cdac +msgid "dates_paginator" +msgstr "dates_paginator" + +#: ../../themes.rst:178 ../../themes.rst:211 470234ce4ff84c1282773c5e074a0984 +#: 66b61e29b0d94312be1924ffbf6a76f0 +msgid "A paginator object for the article list, ordered by date, ascending." +msgstr "分页器对象,存放着以日期正序排列的文章列表。" + +#: ../../themes.rst:180 ../../themes.rst:213 ../../themes.rst:247 +#: ../../themes.rst:336 06688dad88b84be0a1b8a77904d3e36c +#: 4c3336d0cc6146c0854e1a3b0a01226a c22fbf78288d40c2a7f53a0e05827bc9 +#: cbead4319b8449948907728edd1563e5 +msgid "dates_page" +msgstr "dates_page" + +#: ../../themes.rst:180 ../../themes.rst:213 332ab164d0d14965a064f41289fd8b5a +#: 9c0313b487514c1a8ea9ed741a022a98 +msgid "The current page of articles, ordered by date, ascending." +msgstr "以日期正序(从旧到新)排列时,当前分页包含的文章的列表。" + +#: ../../themes.rst:182 ../../themes.rst:215 ../../themes.rst:249 +#: ../../themes.rst:338 225a16b1ca764c1297a6126e82294ea5 +#: 25b7b90357db4d999771a5dbb3ee46f0 f42233112a7940cfa0e448f72c254385 +#: fd276760afc04d66a3abb295db0c491b +msgid "dates_previous_page" +msgstr "dates_previous_page" + +#: ../../themes.rst:182 ../../themes.rst:215 ../../themes.rst:249 +#: ../../themes.rst:338 058e893b353046ffbdee082ea0ddcde2 +#: 0b15ab2a1e6e4d58a6648a72a2207ae5 13dc7929b6e9453bac9c30a9abf9a5f6 +#: 62de8d49e771412a89266c2d8731bd49 +msgid "" +"The previous page of articles, ordered by date, ascending (``None`` if " +"page does not exist)" +msgstr "" +"以日期正序(从旧到新)排列时,前一分页包含的文章的列表。" +"(若没有前一页,此变量值为 ``None`` )" + +#: ../../themes.rst:184 ../../themes.rst:217 ../../themes.rst:251 +#: ../../themes.rst:340 156f78d11b96475a9d52085860a1e6c5 +#: 33b0c94c117c41ee955df750c1fd728c 5763fdf2c1cd43fc96013756029661d6 +#: add31a94f5dc490684aac08b7bcad8e5 +msgid "dates_next_page" +msgstr "dates_next_page" + +#: ../../themes.rst:184 ../../themes.rst:217 ../../themes.rst:251 +#: ../../themes.rst:340 a61d56f03b5946899f9e951eba65df08 +#: ac60da91c10449cc8d519beb0b2f1102 cdfa2284c2c54da3a366d1deaefab551 +#: dc9ea16f9bb44d1d8d1032397aac1a8e +msgid "" +"The next page of articles, ordered by date, ascending (``None`` if page " +"does not exist)" +msgstr "" +"以日期正序(从旧到新)排列时,后一分页包含的文章的列表。" +"(若没有后一页,此变量值为 ``None`` )" + +#: ../../themes.rst:186 ../../themes.rst:219 ../../themes.rst:253 +#: ../../themes.rst:342 ../../themes.rst:493 501f30d99fc441f3b5070f8703c7e324 +#: 6a4735af4aa84d56bf745244c29f7e0c 8c9158f1b7f04d5ea07058d816be2e70 +#: cf1d564d80d34860a32fcddbac41375c e8c83819bbc0448799bae5ea19538100 +msgid "page_name" +msgstr "page_name" + +#: ../../themes.rst:186 99f67be157844a6e85f1ebe6d40c9182 +msgid "'index' -- useful for pagination links" +msgstr "值为 'index' ——在分页链接中很实用" + +#: ../../themes.rst:191 01c6da9f6c7b431d971fa0ec426f948f +msgid "author.html" +msgstr "author.html" + +#: ../../themes.rst:193 feee792cfdbf49b3a289762c8e0e0edb +msgid "" +"This template will be processed for each of the existing authors, with " +"output generated according to the ``AUTHOR_SAVE_AS`` setting (`Default:` " +"``author/{slug}.html``). If pagination is active, subsequent pages will " +"by default reside at ``author/{slug}{number}.html``." +msgstr "" +"此模板会应用于每个已存在的作者上,并根据配置项 ``AUTHOR_SAVE_AS`` 确定输出路径" +"( `默认值为:` ``author/{slug}.html`` )。如果启用了分页,后续页面会保存为 " +"``author/{slug}{number}.html`` 。" + +#: ../../themes.rst:201 ../../themes.rst:448 ../../themes.rst:511 +#: 1f0784e3f85140afab2178a061897017 af9d9be813ae4f43be00ff6770a75fe5 +#: f9ea3f154b7f4268ab412ea2e6bf6c87 +msgid "author" +msgstr "author" + +#: ../../themes.rst:201 01d284aaf9534cc5852557cc4063b6dc +msgid "The name of the author being processed" +msgstr "当前正在处理的作者名" + +#: ../../themes.rst:202 9a53c5cec5fb4fdd8df98bab9cfc77fa +msgid "Articles by this author" +msgstr "当前作者的文章" + +#: ../../themes.rst:203 4d5fc91dac964d63a9ac28ff07f44b97 +msgid "Articles by this author, but ordered by date, ascending" +msgstr "当前作者的文章,以日期正序排列" + +#: ../../themes.rst:219 2f5aca7ff98c4de4bfdd82d6e57803e1 +msgid "" +"AUTHOR_URL where everything after `{slug}` is removed -- useful for " +"pagination links" +msgstr "" +"变量值与AUTHOR_URL一致,所有在 `{slug}` 之后的字符都会被删除——这对分页链接很有用" + +#: ../../themes.rst:225 a603e6fd07f7404ca86716249a4347ef +msgid "category.html" +msgstr "category.html" + +#: ../../themes.rst:227 10beee5e95394fd2ac3ab29e76cc06fc +msgid "" +"This template will be processed for each of the existing categories, with" +" output generated according to the ``CATEGORY_SAVE_AS`` setting " +"(`Default:` ``category/{slug}.html``). If pagination is active, " +"subsequent pages will by default reside at " +"``category/{slug}{number}.html``." +msgstr "" +"此模板会应用于每个已存在的分类上,根据设置项 ``CATEGORY_SAVE_AS`` 确定输出路径" +"(`默认值为:` ``category/{slug}.html`` )。如果启用了分页,后续页面会保存为 " +"``category/{slug}{number}.html`` 。" + +#: ../../themes.rst:235 ../../themes.rst:269 ../../themes.rst:452 +#: 04b6f1c1d1f04e0e806f898dda0df53e a8a2719723a44a04b0cc7516a9b8e811 +#: fc79984925564ea5b5dece084dbd3f15 +msgid "category" +msgstr "category" + +#: ../../themes.rst:235 feb49105f74f4e93b8f7f3471327cc4b +msgid "The name of the category being processed" +msgstr "正在处理的分类名称" + +#: ../../themes.rst:236 fa6d2909a42446edbce322e4bdd74ca9 +msgid "Articles for this category" +msgstr "此分类下的文章" + +#: ../../themes.rst:237 c89759eb3241470fb8f098ccb022f286 +msgid "Articles for this category, but ordered by date, ascending" +msgstr "此分类下的文章,以日期正序排列" + +#: ../../themes.rst:245 ../../themes.rst:334 03985448999c44859adcb45b7a9da87c +#: b5506c9105b843de92190998f7d07245 +msgid "A paginator object for the list of articles, ordered by date, ascending" +msgstr "分页器对象,存放着以日期正序排列的文章列表" + +#: ../../themes.rst:247 ../../themes.rst:336 926e4184e9fc4288be3701737c8ea3cc +#: 929ee1e0a49d4a7fa52343db55e6201b +msgid "The current page of articles, ordered by date, ascending" +msgstr "当前页面中的文章,以日期正序排列" + +#: ../../themes.rst:253 6b396d9ad87e4156a694c9e31663d935 +msgid "" +"CATEGORY_URL where everything after `{slug}` is removed -- useful for " +"pagination links" +msgstr "" +"变量值与CATEGORY_URL一致,所有在 `{slug}` 之后的字符都会被删除——这对分页链接很有用" + +#: ../../themes.rst:259 0c7b031962f14ca78b9cd72aa2de5b03 +msgid "article.html" +msgstr "article.html" + +#: ../../themes.rst:261 1132a54c80564ac0a2706b026b263af7 +msgid "" +"This template will be processed for each article, with output generated " +"according to the ``ARTICLE_SAVE_AS`` setting (`Default:` " +"``{slug}.html``). The following variables are available when rendering." +msgstr "" +"此模板会应用于文章上,根据设置项 ``ARTICLE_SAVE_AS`` 确定输出路径(`默认值为:` " +"``{slug}.html`` )。在渲染文章过程中可以使用下列变量。" + +#: ../../themes.rst:268 6cc80575f5ac41e9bca4ce466d593f1d +msgid "article" +msgstr "article" + +#: ../../themes.rst:268 bbad6618dfa346c396dfa8cf02cb7ee7 +msgid "The article object to be displayed" +msgstr "准备显示的文章对象" + +#: ../../themes.rst:269 4a9bcc18543a4d9eb533092d25bd59a2 +msgid "The name of the category for the current article" +msgstr "当前文章所属分类的名称" + +#: ../../themes.rst:272 fdbbcc85d2aa406493ae4f0b4511e1a8 +msgid "" +"Any metadata that you put in the header of the article source file will " +"be available as fields on the ``article`` object. The field name will be " +"the same as the name of the metadata field, except in all-lowercase " +"characters." +msgstr "" +"文章源文件开头部分的元数据都会作为 ``article`` 对象的属性存在,属性名和元数据中" +"指定的相同(但是是全小写的)。" + +#: ../../themes.rst:276 1c7d9a6b460849daacae3a205b6a59a6 +msgid "" +"For example, you could add a field called `FacebookImage` to your article" +" metadata, as shown below:" +msgstr "" +"例如,一篇文章源文件中添加了一个额外的元数据 `FacebookImage` :" + +#: ../../themes.rst:289 b934e5fbde064a7eb6d09405abc0ba1d +msgid "" +"This new metadata will be made available as `article.facebookimage` in " +"your `article.html` template. This would allow you, for example, to " +"specify an image for the Facebook open graph tags that will change for " +"each article:" +msgstr "" +"此元数据在 `article.html` 模板中可以通过 `article.facebookimage` 获取。" +"通过这种方式,就可以实现例如Facebook的动态打开标签:" + +#: ../../themes.rst:299 dacf9a5dc4de4a5398baf9632399be4b +msgid "page.html" +msgstr "page.html" + +#: ../../themes.rst:301 a65649dffe0e4e1fb26e38565a89fbf2 +msgid "" +"This template will be processed for each page, with output generated " +"according to the ``PAGE_SAVE_AS`` setting (`Default:` " +"``pages/{slug}.html``). The following variables are available when " +"rendering." +msgstr "" +"此模板会应用于页面上,根据设置项 ``PAGE_SAVE_AS`` 确定输出路径(`默认值为:` " +"``pages/{slug}.html`` )。在渲染过程中可以使用下列变量。" + +#: ../../themes.rst:308 fb581643c0c04d6b89c3aa62bcdb5225 +msgid "page" +msgstr "page" + +#: ../../themes.rst:308 02c821223e5448d7999f67d499844684 +msgid "" +"The page object to be displayed. You can access its title, slug, and " +"content." +msgstr "" +"准备显示的页面对象,可以从中获取标题、slug和具体内容。" + +#: ../../themes.rst:314 4f312193d3914a58be2a8e54e2fb61d8 +msgid "tag.html" +msgstr "tag.html" + +#: ../../themes.rst:316 e96e2b0601e340878872dfcf5159575e +msgid "" +"This template will be processed for each tag, with output generated " +"according to the ``TAG_SAVE_AS`` setting (`Default:` " +"``tag/{slug}.html``). If pagination is active, subsequent pages will by " +"default reside at ``tag/{slug}{number}.html``." +msgstr "" +"此模板会应用于标签页上,根据设置项 ``TAG_SAVE_AS`` 确定输出路径(`默认值为:` " +"``tag/{slug}.html`` )。若启用了分页,后续页面默认存储为。``tag/{slug}{number}.html`` 。" + +#: ../../themes.rst:324 2c8332f2cdc144828b75e23937d3ef8e +msgid "tag" +msgstr "tag" + +#: ../../themes.rst:324 413cc4b9730a40d3aaee657a7d261daa +msgid "The name of the tag being processed" +msgstr "当前正在处理标签的名称" + +#: ../../themes.rst:325 726e68a5b71c4ba182afd29b36394c82 +msgid "Articles related to this tag" +msgstr "和此标签关联的文章" + +#: ../../themes.rst:326 780cb9b0de1e4bc1842b8a1bc1ad9202 +msgid "Articles related to this tag, but ordered by date, ascending" +msgstr "和此标签关联的文章,以日期正序排列" + +#: ../../themes.rst:342 c6fb1ba5f18b454ead7abdee5cded85b +msgid "" +"TAG_URL where everything after `{slug}` is removed -- useful for " +"pagination links" +msgstr "" +"变量值与TAG_URL一致,所有在 `{slug}` 之后的字符都会被删除——这对分页链接很有用" + +#: ../../themes.rst:348 8786a045b390459fad281b06b7edae8c +msgid "period_archives.html" +msgstr "period_archives.html" + +#: ../../themes.rst:350 c2fad0f517ec40eb8309beca3794ca8b +msgid "" +"This template will be processed for each year of your posts if a path for" +" ``YEAR_ARCHIVE_SAVE_AS`` is defined, each month if " +"``MONTH_ARCHIVE_SAVE_AS`` is defined, and each day if " +"``DAY_ARCHIVE_SAVE_AS`` is defined." +msgstr "" +"此模板用于生成归档页面, ``YEAR_ARCHIVE_SAVE_AS`` 、 ``MONTH_ARCHIVE_SAVE_AS`` " +"与 ``DAY_ARCHIVE_SAVE_AS`` 分别对应着年、月、日的归档,只有指定了对应的路径才会生成" +"归档页面。" + +#: ../../themes.rst:357 ../../themes.rst:394 ef52bf257ddc4687801b9438efa2660a +#: f6eb6f96a622406cbf6d60a5c57276c7 +msgid "period" +msgstr "period" + +#: ../../themes.rst:357 2d01d1314880482791134dbae86647d8 +msgid "" +"A tuple of the form (`year`, `month`, `day`) that indicates the current " +"time period. `year` and `day` are numbers while `month` is a string. This" +" tuple only contains `year` if the time period is a given year. It " +"contains both `year` and `month` if the time period is over years and " +"months and so on." +msgstr "" +"一个元组,格式为 (`year`, `month`, `day`) ,指明了当前的时间段。 `year` 和 `day` " +"为数字, `month` 则为字符串。当时间段以年给定时,此元组只会有 `year` ;当时间段以年" +"和月给定时此元组中则只会包含 `year` 和 `month` ;以此类推。" + +#: ../../themes.rst:364 ../../themes.rst:397 2164d658ab7342839ea592c7f534c332 +#: ff99b9574a444dec9014c06b0c9b908e +msgid "period_num" +msgstr "period_num" + +#: ../../themes.rst:364 c4864711405b4f9fa565ac3bcc3a8803 +msgid "" +"A tuple of the form (``year``, ``month``, ``day``), as in ``period``, " +"except all values are numbers." +msgstr "" +"一个元组,格式为 (``year``, ``month``, ``day``) ,与 ``period`` 含义相同," +"只不过年月日都是以数字给出的。" + +#: ../../themes.rst:369 27affb54796f4855826eaf3506ed4ed5 +msgid "" +"You can see an example of how to use `period` in the `\"simple\" theme " +"period_archives.html template " +"`_." +msgstr "" +"有关 `period` 的使用可以参考 `\"simple\" 主题中的period_archives.html模板 " +"`_ ." + +#: ../../themes.rst:377 f556c7dd5ca5454888d19edf992c8dfa +msgid "Listing and Linking to Period Archives" +msgstr "列出归档与链接到归档" + +#: ../../themes.rst:379 d76f0d91885c42edb2652303f4a60cb6 +msgid "" +"The ``period_archives`` variable can be used to generate a list of links " +"to the set of period archives that Pelican generates. As a :ref:`common " +"variable `, it is available for use in any template, so" +" you can implement such an index in a custom direct template, or in a " +"sidebar visible across different site pages." +msgstr "" +"对于Pelican给出的归档时间段, ``period_archives`` 可用于生成对应的链接列表。" +"此变量作为 :ref:`通用变量 ` ,可在所有模板中使用。因此可以借此" +"在自定义直接模板中或是侧边栏中实现链接索引。" + +#: ../../themes.rst:385 bf76ed577485401d8c5e180a2ea6b7fe +msgid "" +"``period_archives`` is a dict that may contain ``year``, ``month``, " +"and/or ``day`` keys, depending on which ``*_ARCHIVE_SAVE_AS`` settings " +"are enabled. The corresponding value is a list of dicts, where each dict " +"in turn represents a time period (ordered according to the " +"``NEWEST_FIRST_ARCHIVES`` setting) with the following keys and values:" +msgstr "" +"``period_archives`` 是一个字典,根据 ``*_ARCHIVE_SAVE_AS`` 设置的启用情况," +"其键对应为 ``year`` 、 ``month`` 与 ``day`` ,其值是包含字典的列表,每个字典依次" +"表示一个时间段(顺序由 ``NEWEST_FIRST_ARCHIVES`` 设置决定),并包含以下键值对:" + +#: ../../themes.rst:392 d4b7e16101e24e13ac49a201f2e9b288 +msgid "Key" +msgstr "键" + +#: ../../themes.rst:392 cda01b45b25c4b76bf38849c6b5368d0 +msgid "Value" +msgstr "值" + +#: ../../themes.rst:394 ac2a1a43510a417fb10561cff9a5189e +msgid "" +"The same tuple as described in ``period_archives.html``, e.g. ``(2023, " +"'June', 18)``." +msgstr "" +"一个元组,内容和 ``period_archives.html`` 中一样,例如 ``(2023, 'June', 18)`` 。" + +#: ../../themes.rst:397 fdae5356b80444dc84294a4e54b7a69e +msgid "" +"The same tuple as described in ``period_archives.html``, e.g. ``(2023, 6," +" 18)``." +msgstr "" +"一个元组,内容和 ``period_archives.html`` 中一样,例如 ``(2023, 6, 18)`` 。" + +#: ../../themes.rst:399 ../../themes.rst:476 ../../themes.rst:496 +#: ../../themes.rst:535 08cccff8dd0048a39054424ae58bfe24 +#: 3fe5b8e9d83a4cd28bfc96c745406432 c2d9d11c36e94278a94b3404e8335524 +#: c9ee356463204591986c9c17f8dfc8b4 +msgid "url" +msgstr "url" + +#: ../../themes.rst:399 0c826cc879af4c8fa1fb4fceb92bb362 +msgid "" +"The URL to the period archive page, e.g. ``posts/2023/06/18/``. This is " +"controlled by the corresponding ``*_ARCHIVE_URL`` setting." +msgstr "" +"当前时间段归档页面的URL,例如 ``posts/2023/06/18/`` 。具体值由对应的设置项 " +"``*_ARCHIVE_URL`` 决定。" + +#: ../../themes.rst:402 ../../themes.rst:463 ../../themes.rst:494 +#: ../../themes.rst:522 155a764c3763409c9bdf881881da49e4 +#: 8da502261f724333814ae130f068a454 d3eaeebea8a54785a4778eac9d436479 +#: ec45a7fbd4db443ab75b13b0fb2876e7 +msgid "save_as" +msgstr "save_as" + +#: ../../themes.rst:402 29cd2e19b0f24fa8ac20e184aea547c5 +msgid "" +"The path to the save location of the period archive page file, e.g. " +"``posts/2023/06/18/index.html``. This is used internally by Pelican and " +"is usually not relevant to themes." +msgstr "" +"当前时间段归档页面的存储路径,例如 ``posts/2023/06/18/index.html`` 。此路径用于" +"Pelican内部处理,往往与主题无关。" + +#: ../../themes.rst:406 4bd641dcf26c4f61bf8d3c8667552501 +msgid "" +"A list of :ref:`Article ` objects that fall under the " +"time period." +msgstr "" +"一个列表,其中为当前时间段内所有文章的 :ref:`Article ` 对象。" + +#: ../../themes.rst:408 c59db635e66a4ed68b2648b6cd8691a4 +msgid "" +"Same list as ``articles``, but ordered according to the " +"``NEWEST_FIRST_ARCHIVES`` setting." +msgstr "" +"和 ``articles`` 相同的列表,但按照 ``NEWEST_FIRST_ARCHIVES`` 设置项进行排列。" + +#: ../../themes.rst:412 f096e1915d684d6b9bd0a1e5e034e5f0 +msgid "Here is an example of how ``period_archives`` can be used in a template:" +msgstr "下面的例子展示了如何在模板中使用 ``period_archives`` :" + +#: ../../themes.rst:426 3f6144d2a3914984bc376ed6f33af53b +msgid "" +"You can change ``period_archives.month`` in the ``for`` statement to " +"``period_archives.year`` or ``period_archives.day`` as appropriate, " +"depending on the time period granularity desired." +msgstr "" +"你可以根据需要的时间粒度将 ``for`` 语句中的 ``period_archives.month`` 改为 " +"``period_archives.year`` 或 ``period_archives.day`` 。" + +#: ../../themes.rst:432 ce9158ea38b54c5faeee718a7644ca5f +msgid "Objects" +msgstr "对象" + +#: ../../themes.rst:434 dd0725152df94c8f9e2d94439ccfa3a1 +msgid "" +"Detail objects attributes that are available and useful in templates. Not" +" all attributes are listed here, this is a selection of attributes " +"considered useful in a template." +msgstr "" +"下面是对在模板中可用对象的属性的详细说明。以下仅列出了较常用的一些,并不是全部。" + +#: ../../themes.rst:441 af8644dff51348af8e52938bb8d6a0c8 +msgid "Article" +msgstr "Article" + +#: ../../themes.rst:443 cc283674732243e5883a99b6a32166af +msgid "The string representation of an Article is the `source_path` attribute." +msgstr "Article对象的字符串表示即为 `source_path` 属性。" + +#: ../../themes.rst:446 ../../themes.rst:490 ../../themes.rst:509 +#: 3f2a9f3ea4c34e4ba7b83b17897f4b59 529f2387d2044534a0e3059defb2be46 +#: 97104fabe548459e9142574e4194afdb +msgid "Attribute" +msgstr "属性" + +#: ../../themes.rst:448 16d19143b7964b99953026728e8a5d4a +msgid "The :ref:`Author ` of this article." +msgstr "当前文章的 :ref:`Author `" + +#: ../../themes.rst:450 5a7ae4c0e9164288bd46cbf698ae01f8 +msgid "A list of :ref:`Authors ` of this article." +msgstr "当前文章的多个 :ref:`Authors `" + +#: ../../themes.rst:452 982b4fe7fa4a41a5b3aed3a82168b462 +msgid "The :ref:`Category ` of this article." +msgstr "当前文章的 :ref:`Category `" + +#: ../../themes.rst:454 ../../themes.rst:513 10ea5d1008fa4e7e9f11680013530b13 +#: 3bca890724c2487885fbfb34803f0a8b +msgid "content" +msgstr "content" + +#: ../../themes.rst:454 14973ea2fac140dbac7ed05f09f3b27d +msgid "The rendered content of the article." +msgstr "当前文章渲染完成的内容" + +#: ../../themes.rst:455 ../../themes.rst:514 1733ed5bfe0d421d96f074c2ea46c163 +#: b577071078d5413ba0199a4b5a64a926 +msgid "date" +msgstr "date" + +#: ../../themes.rst:455 c99033f75c6c4aabb03c1ed24e530551 +msgid "Datetime object representing the article date." +msgstr "当前文章的Datetime对象" + +#: ../../themes.rst:456 ../../themes.rst:515 9f8a6847d9f24162980e8bac2cc6e159 +#: c01cd89b410d45258311d8d62a0b3b24 +msgid "date_format" +msgstr "date_format" + +#: ../../themes.rst:456 ../../themes.rst:515 14a1bee230d243da83e1a8f8e4817838 +#: 35bed86384a74210a5c5be86feb1ca83 +msgid "Either default date format or locale date format." +msgstr "默认日期格式或是特定地区的日期格式" + +#: ../../themes.rst:457 ../../themes.rst:516 7c05e281dd0f4b7885653f977ce73b96 +#: 942fcdc259554437b58035fd53b3f430 +msgid "default_template" +msgstr "default_template" + +#: ../../themes.rst:457 ../../themes.rst:516 754d4caf3da64863818cae661450c76b +#: 7fc12db08b5641f388113c447d272970 +msgid "Default template name." +msgstr "默认的模板名称" + +#: ../../themes.rst:458 ../../themes.rst:517 6434f76e9f2c425ab2e0f4e1df0d5eff +#: 7a42be4c30d74d93b9778768d88f0d61 +msgid "in_default_lang" +msgstr "in_default_lang" + +#: ../../themes.rst:458 ../../themes.rst:517 573f32f9ea2942b2849cb62bc4ad5b0d +#: d9bbddf5ba92486faca7219d41907449 +msgid "Boolean representing if the article is written in the default language." +msgstr "布尔值,用于表示当前文章是不是以默认语言写的。" + +#: ../../themes.rst:460 ../../themes.rst:519 c06096412cd6477f9a9505202b65a66b +#: cf2ee07db2b544fb8bb5867fd47b4766 +msgid "lang" +msgstr "lang" + +#: ../../themes.rst:460 ../../themes.rst:519 5feb94756b424a1f970b45ad224ab4df +#: bb4db90299324791bcc00c9687d458e8 +msgid "Language of the article." +msgstr "当前文章使用的语言。" + +#: ../../themes.rst:461 ../../themes.rst:520 3ddd8549af7f4c54bb4d1176ab4991fe +#: f599ee9e24d24679ae8efe1b92bfabd2 +msgid "locale_date" +msgstr "locale_date" + +#: ../../themes.rst:461 ../../themes.rst:520 492201eaff5d43bcb2a27d38dd414ea5 +#: bd9e52a8bfc24c89982c21a7ec33546b +msgid "Date formatted by the `date_format`." +msgstr "以 `date_format` 格式化后的日期。" + +#: ../../themes.rst:462 ../../themes.rst:521 298a8c49a9c54aa08e92063a205b4270 +#: 91a12b6902f140a285bd808fe527e942 +msgid "metadata" +msgstr "metadata" + +#: ../../themes.rst:462 a6266566a3764288a3439022e3a374b5 +msgid "Article header metadata `dict`." +msgstr "文章元数据的字典。" + +#: ../../themes.rst:463 8c8bb35d3d0a4fd4a8cbbe66da13e9f6 +msgid "Location to save the article page." +msgstr "本篇文章生成保存的位置。" + +#: ../../themes.rst:464 ../../themes.rst:495 ../../themes.rst:523 +#: 02324ac5ed2f418d8aeabad7ef196271 265ffa91569c417faf9edfad84909010 +#: eb3abbd690c540dc8c8f96c457a949f1 +msgid "slug" +msgstr "slug" + +#: ../../themes.rst:464 ../../themes.rst:495 ../../themes.rst:523 +#: 6ceb857897804044822f46787b8b2e24 6f893196b6f94121aa829816652d9b8d +#: d07f43f0b91e4e0492db289b425a66ca +msgid "Page slug." +msgstr "推文的slug" + +#: ../../themes.rst:465 ../../themes.rst:524 2a6c951175234a94ad49fe66b5e0ac67 +#: 8cc7b9782316464ab8f4d93f44364487 +msgid "source_path" +msgstr "source_path" + +#: ../../themes.rst:465 e56b161d0ff444db81b9ef5438205492 +msgid "Full system path of the article source file." +msgstr "文章源文件的完整系统路径。" + +#: ../../themes.rst:466 ../../themes.rst:525 3288505bb4c94604a880a6e41e854174 +#: c6d1c1970adc4b7d851fc9a62579e2c6 +msgid "relative_source_path" +msgstr "relative_source_path" + +#: ../../themes.rst:466 efa94005826e46b1a7ace439cfea8ecd +msgid "Relative path from PATH_ to the article source file." +msgstr "从 PATH_ 到当前文章源文件的相对路径。" + +#: ../../themes.rst:467 ../../themes.rst:526 0f57131e78b043bd974e545651a9eac6 +#: 4f11a741e9684957bc2ac83e1aa850ca +msgid "status" +msgstr "status" + +#: ../../themes.rst:467 ff6df46c090044a9afd9bafe55483999 +msgid "The article status, can be any of 'published' or 'draft'." +msgstr "当前文章的状态,可能值为'published'或'draft'。" + +#: ../../themes.rst:469 ../../themes.rst:528 042ac3c1853845f99752c484e341dbde +#: 59ec1f34a47b41959621ae638ee75bf6 +msgid "summary" +msgstr "summary" + +#: ../../themes.rst:469 ../../themes.rst:528 f13f50f1e1024ce2bb1a3cd2d6bd0f45 +#: fe9173ab1a3b42a39d1ae3f24b2e13b6 +msgid "Rendered summary content." +msgstr "渲染后的摘要内容。" + +#: ../../themes.rst:470 ../../themes.rst:529 455d848accf04082b6d0efe5c0451a8c +#: 5acb76f85cdd47f0933b5c411f645ccd +msgid "List of :ref:`Tag ` objects." +msgstr ":ref:`Tag ` 对象的列表。" + +#: ../../themes.rst:472 ../../themes.rst:531 346843df50f64fcb8738d9a33a5991c0 +#: 5b43ff1b52e049a080dcfcf7c8532e55 +msgid "template" +msgstr "template" + +#: ../../themes.rst:472 ../../themes.rst:531 1c98b0c5f84b438d9fbcdc7e564b532a +#: 75b07b60fd0540ac998a7a5f8c755abb +msgid "Template name to use for rendering." +msgstr "用于渲染的模板名称" + +#: ../../themes.rst:473 ../../themes.rst:532 3da31ca0f3a74f1b807028b268704562 +#: 939c8b4e82c34cdc9e11fff8728e925a +msgid "title" +msgstr "title" + +#: ../../themes.rst:473 4f435f74edea49abba15e465cd65bc9b +msgid "Title of the article." +msgstr "当前文章的标题。" + +#: ../../themes.rst:474 ../../themes.rst:533 4c7c144119804fcc9b3aff5ba1cc1d60 +#: 60cfb30189bc4622b9f0f10d57e8cebb +msgid "translations" +msgstr "translations" + +#: ../../themes.rst:474 ../../themes.rst:533 5086f31401d243e5ba1e7d3a4dbc75ea +#: 6c9e4cba9d80461787be1e245ea0e77c +msgid "List of translations :ref:`Article ` objects." +msgstr "当前文章所有翻译版本的 :ref:`Article ` 对象。" + +#: ../../themes.rst:476 0bbe38a721924758b16f7ed92bd47060 +msgid "URL to the article page." +msgstr "文章页面的URL。" + +#: ../../themes.rst:485 6a1b829fd11b4a5aaa913e8ab5d8cb9a +msgid "Author / Category / Tag" +msgstr "Author / Category / Tag" + +#: ../../themes.rst:487 e74be0b0e7d7477791a14dc892a01970 +msgid "The string representation of those objects is the `name` attribute." +msgstr "这些对象的字符串表示与 `name` 属性一致。" + +#: ../../themes.rst:492 95f673648cd347589e30bac268c62402 +msgid "name" +msgstr "name" + +#: ../../themes.rst:492 c85c4552f17e47ce8e75aa83968488b7 +msgid "Name of this object [1]_." +msgstr "当前对象的名称 [1]_ 。" + +#: ../../themes.rst:493 9ab58cf8d1c14233b5fab67bcff1ed07 +msgid "Author page name." +msgstr "作者页面的名称。" + +#: ../../themes.rst:494 8924be38e76744c18a232657e3e53541 +msgid "Location to save the author page." +msgstr "保存当前作者页面的路径。" + +#: ../../themes.rst:496 d836061f54274605b775c9a303e73355 +msgid "URL to the author page." +msgstr "作者页面的URL。" + +#: ../../themes.rst:499 8a004fbcd1134a6aa51ecc83ead04eb3 +msgid "for Author object, coming from `:authors:` or `AUTHOR`." +msgstr "对于Author对象,此属性值由 `:authors:` 或 `AUTHOR` 得来。" + +#: ../../themes.rst:504 015a5ef21bc1482baa94fe2ecc389be9 +msgid "Page" +msgstr "Page" + +#: ../../themes.rst:506 e509492329b543b094117d9b207d40c1 +msgid "The string representation of a Page is the `source_path` attribute." +msgstr "Page对象的字符串表示与 `source_path` 属性一致。" + +#: ../../themes.rst:511 acbd8346326242e3a6124d349d90c83f +msgid "The :ref:`Author ` of this page." +msgstr "当前页面的 :ref:`Author ` 。" + +#: ../../themes.rst:513 17df00ade1b84d89b90e0cf8949014c5 +msgid "The rendered content of the page." +msgstr "当前页面渲染后的内容。" + +#: ../../themes.rst:514 50ec2f44596c4f849458456113b6688d +msgid "Datetime object representing the page date." +msgstr "当前页面日期对应的Datetime对象。" + +#: ../../themes.rst:521 29fd9eb25f1643bc844a9480618ddee3 +msgid "Page header metadata `dict`." +msgstr "页面元数据的 `字典` 。" + +#: ../../themes.rst:522 caeac875f56345dfb4b871dd5cc47ff6 +msgid "Location to save the page." +msgstr "保存页面的位置。" + +#: ../../themes.rst:524 ee2e9caa90d24f7f8106e82449194c5b +msgid "Full system path of the page source file." +msgstr "页面源文件的完整系统路径。" + +#: ../../themes.rst:525 4ac1a61bb61b491ab05058392e561819 +msgid "Relative path from PATH_ to the page source file." +msgstr "页面源文件相对于 PATH_ 的相对路径。" + +#: ../../themes.rst:526 1e21d2a5056e4f56b1fb9aeb9b56240a +msgid "The page status, can be any of 'published', 'hidden' or 'draft'." +msgstr "页面的状态,可能值有'published'、'hidden'或者'draft'。" + +#: ../../themes.rst:532 0afb2b618cdd49d5b6f4c37dfa84c847 +msgid "Title of the page." +msgstr "页面的标题。" + +#: ../../themes.rst:535 e4f719f69ae3495280e4953b0e948e02 +msgid "URL to the page." +msgstr "页面的URL" + +#: ../../themes.rst:542 dbc8f1369a294996ac59e07d955880b6 +msgid "Feeds" +msgstr "订阅源" + +#: ../../themes.rst:544 dbfa3023cab6407cb324cffe523c8533 +msgid "" +"The feed variables changed in 3.0. Each variable now explicitly lists " +"ATOM or RSS in the name. ATOM is still the default. Old themes will need " +"to be updated. Here is a complete list of the feed variables::" +msgstr "" +"订阅源相关变量在3.0版本发生过变化。各变量现在都在名称中显示地表达了属于ATOM还是RSS。" +"默认使用ATOM。旧的主题需要进行更新。下面是订阅源相关变量的完整列表:" + +#: ../../themes.rst:563 ee43d4b51dda44288f9786eefb8bf62c +msgid "Inheritance" +msgstr "继承" + +#: ../../themes.rst:565 a921f3b3e050422db6694600b6ae3379 +msgid "" +"Since version 3.0, Pelican supports inheritance from the ``simple`` " +"theme, so you can re-use the ``simple`` theme templates in your own " +"themes." +msgstr "" +"从3.0版本开始,Pelican支持从 ``simple`` 主题继承,因此可以在你自己的主题中" +"重用 ``simple`` 主题。" + +#: ../../themes.rst:568 36142bb5338a43a5bf0d9e53b52c0c05 +msgid "" +"If one of the mandatory files in the ``templates/`` directory of your " +"theme is missing, it will be replaced by the matching template from the " +"``simple`` theme. So if the HTML structure of a template in the " +"``simple`` theme is right for you, you don't have to write a new template" +" from scratch." +msgstr "" +"如果 ``templates/`` 目录中缺失了的某些必须要有的文件,会自动使用 ``simple`` " +"主题中的对应模板。因此如果 ``simple`` 主题中的一些模板正合你意,就没必要重新" +"写个新的了。" + +#: ../../themes.rst:573 d4c77f03fe8049ed82ea0870e4384991 +#, python-format +msgid "" +"You can also extend templates from the ``simple`` theme in your own " +"themes by using the ``{% extends %}`` directive as in the following " +"example:" +msgstr "" +"你也可以使用 ``{% extends %}`` 指令在你自己的主题中扩展 ``simple`` 主题:" + +#: ../../themes.rst:584 6c8634ea148d48e68124f8b240de47c3 +msgid "Example" +msgstr "例子" + +#: ../../themes.rst:586 c5845f57a75642a5a2a0c9018fd1dac0 +msgid "With this system, it is possible to create a theme with just two files." +msgstr "利用这种自动继承的规则,只用两个文件就可以创建一个主题。" + +#: ../../themes.rst:589 c7ea4273a1ca4050968a1308a5a47c51 +msgid "base.html" +msgstr "base.html" + +#: ../../themes.rst:591 4fa7a95ff17c4421bd39c45a9cd42f8f +msgid "The first file is the ``templates/base.html`` template:" +msgstr "第一个文件是 ``templates/base.html`` 模板:" + +#: ../../themes.rst:602 87484a8d548449b4b58d6773201ddf67 +msgid "" +"On the first line, we extend the ``base.html`` template from the " +"``simple`` theme, so we don't have to rewrite the entire file." +msgstr "" +"第一行中,从 ``simple`` 主题中扩展了 ``base.html`` 模板,因此无需重写整个文件。" + +#: ../../themes.rst:604 20209f5462c24d3b9918f14db3dc9f0c +msgid "" +"On the third line, we open the ``head`` block which has already been " +"defined in the ``simple`` theme." +msgstr "" +"第三行,我们开始声明 ``head`` 块,这个块已在 ``simple`` 中进行了定义。" + +#: ../../themes.rst:606 9d6577b07bdd4eab814a188effd796c7 +msgid "" +"On the fourth line, the function ``super()`` keeps the content previously" +" inserted in the ``head`` block." +msgstr "" +"第四行中, ``super()`` 函数使得已添加到 ``head`` 块中的前序内容得以保留。" + +#: ../../themes.rst:608 157f34425e4d4b119c97bc7a9cb513ff +msgid "On the fifth line, we append a stylesheet to the page." +msgstr "第五行为页面添加了一个样式表。" + +#: ../../themes.rst:609 bf52b4834d67475194b43b35c2a9dfde +msgid "On the last line, we close the ``head`` block." +msgstr "最后一行结束对 ``head`` 块的声明。" + +#: ../../themes.rst:611 968532a3244e436fba5b6df5c996888d +msgid "" +"This file will be extended by all the other templates, so the stylesheet " +"will be linked from all pages." +msgstr "" +"其他所有模板都会在此文件基础上进行扩展,因此样式表会被所有页面引用。" + +#: ../../themes.rst:615 62629bf8d5ea4271a598b95ebede4757 +msgid "style.css" +msgstr "style.css" + +#: ../../themes.rst:617 e8e0ee6348e84ff590fe5afebe39ec63 +msgid "The second file is the ``static/css/style.css`` CSS stylesheet:" +msgstr "第二个文件是CSS样式表 ``static/css/style.css`` :" + +#: ../../themes.rst:661 80ec5c70bd9b49e7b22718cc18e46b84 +msgid "Download" +msgstr "下载" + +#: ../../themes.rst:663 acf9dfc296794b3c928572374b39926e +msgid "" +"You can download this example theme :download:`here <_static/theme-" +"basic.zip>`." +msgstr "" +"可以在 :download:`这里 <_static/theme-basic.zip>` 下载此例。" + +#~ msgid "" +#~ "To generate its HTML output, Pelican " +#~ "uses the `Jinja " +#~ "`_ templating engine" +#~ " due to its flexibility and " +#~ "straightforward syntax. If you want to" +#~ " create your own theme, feel free " +#~ "to take inspiration from the `\"simple\"" +#~ " theme " +#~ "`_." +#~ msgstr "" + +#~ msgid "" +#~ "You can see an example of how " +#~ "to use `period` in the `\"simple\" " +#~ "theme period_archives.html template " +#~ "`_." +#~ msgstr "" diff --git a/docs/locale/zh_CN/LC_MESSAGES/tips.po b/docs/locale/zh_CN/LC_MESSAGES/tips.po new file mode 100644 index 00000000..a65edf13 --- /dev/null +++ b/docs/locale/zh_CN/LC_MESSAGES/tips.po @@ -0,0 +1,723 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2010–2024 +# This file is distributed under the same license as the PELICAN package. +# FIRST AUTHOR , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: PELICAN 4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-11-07 16:25+0800\n" +"PO-Revision-Date: 2024-06-27 19:00+0800\n" +"Last-Translator: GeorgeHu \n" +"Language: zh_CN\n" +"Language-Team: zh_CN \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.16.0\n" + +#: ../../tips.rst:2 9c4618aaecd44b0d93537cb760e227fa +msgid "Tips" +msgstr "小技巧" + +#: ../../tips.rst:4 f49ab5e1ef034ca29140bac3832e8e1c +msgid "Here are some tips about Pelican that you might find useful." +msgstr "以下是一些实用的小技巧。" + +#: ../../tips.rst:7 ../../tips.rst:309 95bea35d0347495bb551fe9486bcd29d +#: b64b7ed713b64f588ea7488c6d0b0441 +msgid "Custom 404 Pages" +msgstr "自定义404页面" + +#: ../../tips.rst:9 d59dc30de5954aa1abc7c46fbac596c6 +msgid "" +"When a browser requests a resource that the web server cannot find, the " +"web server usually displays a generic \"File not found\" (404) error page" +" that can be stark and unsightly. One way to provide an error page that " +"matches the theme of your site is to create a custom 404 page (*not* an " +"article), such as this Markdown-formatted example stored in " +"``content/pages/404.md``::" +msgstr "" +"当浏览器请求的资源无法在服务器中找到时,web服务器常常会显示一个通用的“File not found " +"404”的错误页面,这可能会不太美观。为了能使用一个与站点主题相匹配的404页面(注意是页面而 **不是** " +"文章),例如下面这个Markdown格式的例子,将此文件存为了 ``content/pages/404.md`` :" + +#: ../../tips.rst:22 416f9b3eeaac4af8bdc9f32b7cdcba39 +msgid "" +"The next step is to configure your web server to display this custom page" +" instead of its default 404 page. For Nginx, add the following to your " +"configuration file's ``location`` block::" +msgstr "" +"接下来就是要配置web服务器,使其显示此自定义页面而不是默认的404页面。例如对于Nginx,在配置文件的 ``location`` " +"块中添加下面的命令:" + +#: ../../tips.rst:28 5d52fbcc9d9d4603b3f9d97360face10 +msgid "For Apache::" +msgstr "对于Apache:" + +#: ../../tips.rst:32 5413c6bcff6a41688ffcede94b9955e4 +msgid "" +"For Amazon S3, first navigate to the ``Static Site Hosting`` menu in the " +"bucket settings on your AWS console. From there::" +msgstr "对于Amazon S3实例,先在控制台的设置中找到 ``Static Site Hosting`` ,并添加:" + +#: ../../tips.rst:38 9b02aa39367a4c33918bddef02d1788d +msgid "Publishing to GitHub Pages" +msgstr "发布到GitHub Pages" + +#: ../../tips.rst:40 ca3f1deb69a04d40a89576f580d63781 +msgid "" +"If you use `GitHub `_ for your Pelican site you can " +"publish your site to `GitHub Pages `_ for " +"free. Your site will be published to ``https://.github.io`` if " +"it's a user or organization site or to " +"``https://.github.io/`` if it's a project site. " +"It's also possible to `use a custom domain with GitHub Pages " +"`_." +msgstr "" +"如果将Pelican站点放在了 `GitHub `_ 上,那么你就可以将站点免费发布在 `GitHub " +"Pages `_ 上。如果是用户或组织的站点,发布的地址为 " +"``https://.github.io`` ;如果是某个项目的站点,发布的地址则为 " +"``https://.github.io/`` 。当然也可以 `在GitHub " +"Pages上使用自定义域名 `_ 。" + +#: ../../tips.rst:46 5962c3cb4a0b41289d6b08b9edd2fdee +msgid "" +"There are `two ways to publish a site to GitHub Pages " +"`_:" +msgstr "" +"总的来说,有 `两种将站点发布到GitHub Pages的方法 `_ :" + +#: ../../tips.rst:48 ad6f071b3cdc4529a41776f799347da0 +msgid "" +"**Publishing from a branch:** run ``pelican`` locally and push the output" +" directory to a special branch of your GitHub repo. GitHub will then " +"publish the contents of this branch to your GitHub Pages site." +msgstr "" +"**从某一分支发布:** 在本地运行 ``pelican`` " +"后将输出文件夹push到GitHub仓库的某一分支。GitHub就会将该分支的内容发布到GitHub Pages上。" + +#: ../../tips.rst:51 6237e147cf4142d9b172588964ec00d2 +msgid "" +"**Publishing with a custom GitHub Actions workflow:** just push the " +"source files of your Pelican site to your GitHub repo's default branch " +"and have a custom GitHub Actions workflow run ``pelican`` for you to " +"generate the output directory and publish it to your GitHub Pages site. " +"This way you don't need to run ``pelican`` locally. You can even edit " +"your site's source files using GitHub's web interface and any changes " +"that you commit will be published." +msgstr "" +"**从自定义GitHub Actions工作流发布:** 将内容源文件推送到GitHub仓库的默认分支,然后在GitHub " +"Actions工作流中执行 ``pelican`` 以生成输出文件夹,最后将其发布到你的GitHub Pages站点。此种方法下就无需在本地执行 " +"``pelican`` 命令了。甚至可以直接在GitHub的网页中在线修改站点内容源文件。" + +#: ../../tips.rst:60 f2655b8ab23147e58fd68e2385a7624a +msgid "Publishing a Project Site to GitHub Pages from a Branch" +msgstr "从某一分支发布项目站点到GitHub Pages" + +#: ../../tips.rst:62 1a156c5a8019400d86a33ce306b521ac +msgid "" +"To publish a Pelican site as a Project Page you need to *push* the " +"content of the ``output`` dir generated by Pelican to a repository's " +"``gh-pages`` branch on GitHub." +msgstr "" +"要将Pelican站点发布为项目页面,你需要将Pelican生成的 ``output`` 目录 **push** 到GitHub仓库的 ``gh-" +"pages`` 分支。" + +#: ../../tips.rst:66 22caeeba90b24dbe9f0305370de074fc +msgid "" +"The excellent `ghp-import `_, which" +" can be installed with ``pip``, makes this process really easy." +msgstr "" +"可通过 ``pip`` 安装的 `ghp-import `_ " +"使这一步变得非常简单。" + +#: ../../tips.rst:69 6ea08af050644b58ae5255dafb4f4d8b +msgid "" +"For example, if the source of your Pelican site is contained in a GitHub " +"repository, and if you want to publish that Pelican site in the form of " +"Project Pages to this repository, you can then use the following::" +msgstr "例如,当Pelican站点的源文件已经包含在GitHub仓库中时,可以将其作为此仓库的项目页面:" + +#: ../../tips.rst:77 355b81e8a2194cf9b91bee0f4ee6dca9 +msgid "" +"The ``ghp-import output`` command updates the local ``gh-pages`` branch " +"with the content of the ``output`` directory (creating the branch if it " +"doesn't already exist). The ``git push origin gh-pages`` command updates " +"the remote ``gh-pages`` branch, effectively publishing the Pelican site." +msgstr "" +"``ghp-import output`` 命令会用 ``output`` 目录下的内容更新本地的 ``gh-pages`` " +"分支(如果此分支不存在则会先创建)。接着再用 ``git push origin gh-pages`` 命令更新远程分支 ``gh-" +"pages`` ,如此就能够发布Pelican站点了。" + +#: ../../tips.rst:84 8a3fd725eba44fa99541376722601cce +msgid "" +"The ``github`` target of the Makefile (and the ``gh_pages`` task of " +"``tasks.py``) created by the ``pelican-quickstart`` command publishes the" +" Pelican site as Project Pages, as described above." +msgstr "" +"``pelican-quickstart`` 在Makefile文件中所生成的 ``github`` 目标(以及为 ``gh_pages`` " +"任务生成的 ``tasks.py`` )使得Pelican站点能像上面描述的那样被发布为项目页面。" + +#: ../../tips.rst:89 e8ebf23099ed45e7a65d23b9a7e4ccbd +msgid "Publishing a User Site to GitHub Pages from a Branch" +msgstr "从某一分支发布用户站点到GitHub Pages" + +#: ../../tips.rst:91 7dc8ae1992b7411d9d6db7cc4a0127cb +msgid "" +"To publish a Pelican site in the form of User Pages, you need to *push* " +"the content of the ``output`` dir generated by Pelican to the ``main`` " +"branch of your ``.github.io`` repository on GitHub." +msgstr "" +"要以用户页面形式发布Pelican站点,你需要将Pelican生成的 ``output`` 目录内容 **push** 到 " +"``.github.io`` 仓库的 ``master`` 分支上。" + +#: ../../tips.rst:95 da706340ef5f4d18bfb183596a4196c9 +msgid "Again, you can take advantage of ``ghp-import``::" +msgstr "同样的,此处也可以使用 ``ghp-import`` :" + +#: ../../tips.rst:101 61aa6f0d9fdf407682d3f781ae5475c6 +msgid "" +"The ``git push`` command pushes the local ``gh-pages`` branch (freshly " +"updated by the ``ghp-import`` command) to the ``elemoine.github.io`` " +"repository's ``main`` branch on GitHub." +msgstr "" +"``git push`` 命令将本地的 ``gh-pages`` 分支(此分支在刚刚通过 ``ghp-import`` " +"命令进行了更新)push到了GitHub仓库 ``elemoine.github.io`` 的 ``master`` 分支。" + +#: ../../tips.rst:107 f74afbf668a1472d901fe0a16472ab98 +msgid "" +"To publish your Pelican site as User Pages, feel free to adjust the " +"``github`` target of the Makefile." +msgstr "要将Pelican站点发布为用户页面,可以根据需要修改Makefile中的 ``github`` 目标。" + +#: ../../tips.rst:110 d69dcdb58a4b4b38aa8b8bf8e4fd733a +msgid "" +"Another option for publishing to User Pages is to generate the output " +"files in the root directory of the project." +msgstr "发布用户页面的另一种方法就是将输出文件生成在项目的根目录下。" + +#: ../../tips.rst:113 4991892f24df40b982faf01ddb292175 +msgid "" +"For example, your main project folder is ``.github.io`` and you" +" can create the Pelican project in a subdirectory called ``Pelican``. " +"Then from inside the ``Pelican`` folder you can run::" +msgstr "" +"例如,项目的主文件夹是 ``.github.io`` ,你可以在子目录 ``Pelican`` " +"中创建一个Pelican项目。然后你可以在这个 ``Pelican`` 文件夹中执行下面的命令:" + +#: ../../tips.rst:119 ca5939f8c58b44b69ebfb2f953a4a73b +msgid "" +"Now you can push the whole project ``.github.io`` to the main " +"branch of your GitHub repository::" +msgstr "接着可以将整个项目 ``.github.io`` push到GitHub仓库的master分支中:" + +#: ../../tips.rst:124 54962439805d47abb121ca9454e7a4cc +msgid "(assuming origin is set to your remote repository)." +msgstr "(此处假设远程仓库命名为origin)。" + +#: ../../tips.rst:127 b3fe320a90904fbda8c7ed8c7bddbd6e +msgid "Publishing to GitHub Pages Using a Custom GitHub Actions Workflow" +msgstr "使用自定义GitHub Actions工作流将站点发布GitHub Pages中" + +#: ../../tips.rst:129 3b368bc0a307473dae560671fd9527be +msgid "" +"Pelican-powered sites can be published to GitHub Pages via a `custom " +"workflow " +"`_." +" To use it:" +msgstr "" +"Pelican已经给你准备了一份 `自定义工作流 " +"`_" +" ,你可以直接使用此工作流发布站点:" + +#: ../../tips.rst:133 a7b1be522b694d9a8beb186b4603a7aa +msgid "" +"Enable GitHub Pages in your repo: go to **Settings → Pages** and choose " +"**GitHub Actions** for the **Source** setting." +msgstr "" +"首先为仓库开启GitHub Pages: **Settings → Pages** 中有个 **Source** 设置项,将其选择为 " +"**GitHub Actions** 。" + +#: ../../tips.rst:136 9cc114d8a6b44ff49fa7fecbdbcd012f +msgid "" +"Commit a ``.github/workflows/pelican.yml`` file to your repo with these " +"contents:" +msgstr "往你的仓库中commit一个 ``.github/workflows/pelican.yml`` 文件,文件内容如下:" + +#: ../../tips.rst:155 f7d029425d7047deae43e9506c7f4779 +msgid "" +"You may want to replace the ``@main`` with the ID of a specific commit in" +" this repo in order to pin the version of the reusable workflow that " +"you're using: ``uses: " +"getpelican/pelican/.github/workflows/github_pages.yml@``. If " +"you do this you might want to get Dependabot to send you automated pull " +"requests to update that commit ID whenever new versions of this workflow " +"are published, like so:" +msgstr "" +"你可能想要将 ``@main`` 替换为这个仓库中某个特定commit的ID,以便将你使用的可重用工作流的版本固定下来,此时,可以使用 " +"``uses: " +"getpelican/pelican/.github/workflows/github_pages.yml@`` " +"。在这种情况下,你可能想让Dependabot自动向你发送PR,以便在发布新版本的工作流时更新commit ID,如下所示:" + +#: ../../tips.rst:172 fd060b5d5d824ab8825b384d37872894 +msgid "" +"See `GitHub's docs about using Dependabot to keep your actions up to date" +" `_." +msgstr "" +"请参阅 `GitHub文档 `_ ,了解如何使用Dependabot使您的action保持最新。" + +#: ../../tips.rst:174 1b862876e15c4fcd898c4d9b3ba616c5 +msgid "" +"Go to the **Actions** tab in your repo " +"(``https://github.com///actions``) and you should " +"see a **Deploy to GitHub Pages** action running." +msgstr "" +"选中仓库的 **Actions** 标签栏( " +"``https://github.com///actions`` ),此时你应该会看到已经有一个名为 " +"**Deploy to GitHub Pages** 的action正在运行。" + +#: ../../tips.rst:178 f8413793636140f9b017abad379b3429 +msgid "" +"Once the action completes you should see your Pelican site deployed at " +"your repo's GitHub Pages URL: ``https://.github.io`` for a user" +" or organization site or ``https://.github.io/>`` " +"for a project site." +msgstr "" +"当此action执行完成,就能够通过仓库的GitHub Pages地址 ``https://.github.io`` " +"看到部署好了的用户或组织站点了,对于项目站点,可通过 ``https://.github.io/`` " +"访问。" + +#: ../../tips.rst:183 d792bb046c474f70aa98b2c16a5b1254 +msgid "Notes:" +msgstr "注意事项:" + +#: ../../tips.rst:185 89472d2b7231439faf9e51eda07d8323 +msgid "" +"You don't need to set ``SITEURL`` or ``FEED_DOMAIN`` in your Pelican " +"settings: the workflow will set them correctly for you" +msgstr "无需在Pelican配置文件中设置 ``SITEURL`` ,工作流会帮你进行设置。" + +#: ../../tips.rst:188 ea2b632160804a6e9bf1b4cecb7de716 +msgid "" +"You don't need to commit your ``--output`` / ``OUTPUT_PATH`` directory " +"(``output/``) to git: the workflow will run ``pelican`` to build the " +"output directory for you on GitHub Actions" +msgstr "" +"无需commit ``--output`` 或 ``OUTPUT_PATH`` 所指定的目录( ``output/`` ):工作流会自己执行 " +"``pelican`` 命令来构建输出目录。" + +#: ../../tips.rst:192 fd9fb772fba844f099cac781f2b0642f +msgid "" +"See `GitHub's docs about reusable workflows " +"`_ " +"for more information." +msgstr "" +"更多信息请参阅 `GitHub可重用工作流文档 `_ 。" + +#: ../../tips.rst:195 f9c527704af24f6da0b4229b7882a25b +msgid "" +"A number of optional inputs can be added to the ``with:`` block when " +"calling the workflow, for example:" +msgstr "有一些可选输入可以添加到工作流的 ``with:`` 块中:" + +#: ../../tips.rst:206 956f5bae1fc64096acd2a2540a29004c +msgid "Here's the complete list of workflow inputs:" +msgstr "下面是工作流可用输入参数的完整列表:" + +#: ../../tips.rst:209 eb37c894d7bc4278ab1a92e3b82c5603 +msgid "Name" +msgstr "名称" + +#: ../../tips.rst:209 446faf9e7d544e6aa47d4a1eca506c01 +msgid "Required" +msgstr "是否必需" + +#: ../../tips.rst:209 de96e4f5cd09488296f97f569fe1fb90 +msgid "Description" +msgstr "描述" + +#: ../../tips.rst:209 181bbfff09144f5b9c241b2fc79c989d +msgid "Type" +msgstr "值的类型" + +#: ../../tips.rst:209 c3d44d1e7be6421a83bae2f5dc6e578f +msgid "Default" +msgstr "默认值" + +#: ../../tips.rst:211 305d9d73681b4c6c80161cc906d60bbd +msgid "``settings``" +msgstr "``settings``" + +#: ../../tips.rst:211 dbe6210f19914ae3b11e4caec7a945f0 +msgid "Yes" +msgstr "是" + +#: ../../tips.rst:211 bbd2306b324d4b5eae513cb7a7683286 +msgid "" +"The path to your Pelican settings file (``pelican``'s ``--settings`` " +"option), for example: ``\"publishconf.py\"``" +msgstr "" +"Pelican配置文件的路径(会被用于 ``pelican`` 命令的 ``--settings`` 选项),例如 " +"``\"publishconf.py\"`` 。" + +#: ../../tips.rst:211 ../../tips.rst:216 ../../tips.rst:223 ../../tips.rst:227 +#: ../../tips.rst:231 ../../tips.rst:237 ../../tips.rst:243 +#: 073e18d8ae29406eb05040d4e3a9ae60 7d43e6cfb091410ebec7464da05b61b4 +#: 8837cc8935f148fb80f05cc5d3d53629 b2da1f7640f948039230cd835c49accd +#: bfe3d052cdc443bb81fed82e77acf3c1 c93816e00a254ef69c69f05833e8762b +#: ee35302c7e034070af1d234ab919c32a +msgid "string" +msgstr "string" + +#: ../../tips.rst:216 4eab6faa96244f13a09754112a783f2f +msgid "``requirements``" +msgstr "``requirements``" + +#: ../../tips.rst:216 ../../tips.rst:223 ../../tips.rst:227 ../../tips.rst:231 +#: ../../tips.rst:237 ../../tips.rst:243 ../../tips.rst:249 +#: 197d6ee11fce4a50996a0c458cfdbdad 2086d667b9b1475cb0f002924cdfde12 +#: 25e940621f5b48c9af487d898d7f93cf 5664232c9fdd46c7b8278b8ecef8e3b1 +#: 6693126a0da74c61b67e14ca8e535ec3 7f8a93a2048140748fa73537bfae2a54 +#: 85fd40a29f31490bb23b20f05e574aaa +msgid "No" +msgstr "否" + +#: ../../tips.rst:216 9d5bdd70e7da4794805180cc758ebe37 +msgid "" +"The Python requirements to install, for example to enable markdown and " +"typogrify use: ``\"pelican[markdown] typogrify\"`` or if you have a " +"requirements file: ``\"-r requirements.txt\"``" +msgstr "" +"需要安装的Python模块,例如要开启markdown和typogrify,可指定 ``\"pelican[markdown] " +"typogrify\"`` ,或者可以指定一个requirements文件: ``\"-r requirements.txt\"`` " + +#: ../../tips.rst:216 03ad0b322a714032bcce9f56ce66318d +msgid "``\"pelican\"``" +msgstr "``\"pelican\"``" + +#: ../../tips.rst:223 e568553782b443dbacecaa7ded4c391c +msgid "``output-path``" +msgstr "``output-path``" + +#: ../../tips.rst:223 2920ae9de5a64ae1ad82bd2287fa7c1e +msgid "Where to output the generated files (``pelican``'s ``--output`` option)" +msgstr "生成文件的输出位置(会被用于 ``pelican`` 命令的 ``--output`` 选项)" + +#: ../../tips.rst:223 41b90747f0954a5799c8baf4a59d99fd +msgid "``\"output/\"``" +msgstr "``\"output/\"``" + +#: ../../tips.rst:227 e2cc62185182463abc5140244a808e6d +msgid "``theme``" +msgstr "``theme``" + +#: ../../tips.rst:227 cd3b78d03dcd4554a8ce10a873f5ff9f +msgid "" +"The GitHub repo URL of a custom theme to use, for example: " +"``\"https://github.com/seanh/sidecar.git\"``" +msgstr "要使用的自定义主题的GitHub仓库URL,例如: ``\"https://github.com/seanh/sidecar.git\"``" + +#: ../../tips.rst:227 d94f331173334fb2a84b1caadffb72df +msgid "``\"\"``" +msgstr "``\"\"``" + +#: ../../tips.rst:231 44ceb2743481486b95c1c739d543f15d +msgid "``python``" +msgstr "``python``" + +#: ../../tips.rst:231 4b5cddab44d24c7c8560e16991b784c7 +msgid "" +"The version of Python to use to build the site, for example: ``\"3.12\"``" +" (to use the most recent version of Python 3.12, this is faster) or " +"``\"3.12.1\"`` (to use an exact version, slower)" +msgstr "构建站点时使用的Python版本,例如: ``\"3.12\"`` 或 ``\"3.12.1\"``" + +#: ../../tips.rst:231 919c0e36e8ff40bcbcc4480081b49ce5 +msgid "``\"3.12\"``" +msgstr "``\"3.12\"``" + +#: ../../tips.rst:237 842af56c539f4a74a97c7a5b1525eb35 +msgid "``siteurl``" +msgstr "``siteurl``" + +#: ../../tips.rst:237 7fc0777d6e174d6f8d757926a61aa3c8 +msgid "" +"The base URL of your web site (Pelican's ``SITEURL`` setting). If not " +"passed this will default to the URL of your GitHub Pages site, which is " +"correct in most cases." +msgstr "站点的基URL,会用于配置项 ``SITEURL`` 。若未指定,默认值为GitHub Pages站点的URL,这适用于大部分情况。" + +#: ../../tips.rst:237 ../../tips.rst:243 082f65333e224d71817b82b1e4f515c4 +#: 3d786e828a4745db849bdb8f47738db8 +msgid "The URL of your GitHub Pages site." +msgstr "GitHub Pages站点的URL" + +#: ../../tips.rst:243 e5adb69f985547b7b3cc2bd3f31d4cc3 +msgid "``feed_domain``" +msgstr "``feed_domain``" + +#: ../../tips.rst:243 c88f037c9f1f4148bef6347228257f7d +msgid "" +"The domain to be prepended to feed URLs (Pelican's ``FEED_DOMAIN`` " +"setting). If not passed this will default to the URL of your GitHub Pages" +" site, which is correct in most cases." +msgstr "" +"订阅源URL前要附加的域名,会用于配置项 ``FEED_DOMAIN`` 。若未指定,默认值为GitHub " +"Pages站点的URL,这适用于大部分情况。" + +#: ../../tips.rst:249 358c5aa434cd4ad09beab02df88413d5 +msgid "``deploy``" +msgstr "``deploy``" + +#: ../../tips.rst:249 b8748aeace5a448d9382e225be98f90c +msgid "" +"This is used to determine whether you will deploy the site or not to " +"GitHub Pages. This is most useful if you want to test a change to your " +"website in a pull request before deploying those change." +msgstr "此项配置用于表示是否要将站点部署至GitHub Pages。当对站点做了更改,并且在正式部署前进行测试,就可以用到此项。" + +#: ../../tips.rst:249 034006b9b71b4cb486f230b8aad873ce +msgid "bool" +msgstr "bool" + +#: ../../tips.rst:249 078ac613a8b74703af98c75bb5a007c1 +msgid "``true``" +msgstr "``true``" + +#: ../../tips.rst:257 e63cf881e3204be8b52ee5d8635ba4cf +msgid "Testing Your Build in a GitHub Pull Request" +msgstr "在Github拉取请求时进行测试" + +#: ../../tips.rst:259 a2f6bd3420eb46a08f54efda35a6eaf4 +msgid "" +"If you want to test your build in a pull request before deploying to " +"GitHub, your workflow might look something like this:" +msgstr "如果想在正式部署到 GitHub 前在PR中进行测试,下面是一个可用的 workflow 示例" + +#: ../../tips.rst:288 84393693279741efa82c5ee6b27cbd28 +msgid "" +"The ``on`` section of the workflow defines the events that will trigger " +"the workflow. In this example, the workflow will run on pushes to the " +"main branch, pull requests to the main branch, and manual runs of the " +"workflow." +msgstr "工作流的 ``on`` 部分定义了工作流的触发器。在此示例中,工作流将在main分支收到push、有PR提起到主分支以及" +"手动运行工作流时执行。" + +#: ../../tips.rst:290 cd3c13b2af974a32aa4291d07fc11e9c +msgid "" +"``workflow_dispatch`` defines the deploy boolean to be true by default. " +"This means that if you run the workflow manually, it will deploy the " +"site." +msgstr "``workflow_dispatch`` 将 deploy 的默认值设为 true。也就是说当手动运行工作流时,更改的内容就会正式部署。" + +#: ../../tips.rst:292 5402cd211d5b4aa8a244c916bb381a5b +msgid "" +"The ``deploy`` input for the job is using a set of standard GitHub " +"workflow variables to control when ``deploy`` will either be true or " +"false (you can customize this to your needs)." +msgstr "job中的 ``deploy`` 使用了一些 GitHub workflow 变量来计算 ``deploy`` 值为 true 还是 false(您可以根据需要自定义)。" + +#: ../../tips.rst:294 d084908e3a0749f0b802b43626cfe2c4 +msgid "" +"In this example, the ``deploy`` will be true if the event is a push to " +"the main branch (or merging into main from a PR) or a manual run of the " +"workflow. If the event is a pull request, the ``deploy`` will be false " +"and it will only build an artifact for the site." +msgstr "在此示例中,如果触发事件是推送到主分支(或从 PR 合并到主分支)或手动运行工作流,则 deploy 将为 true;" +"如果触发事件只是Pull Request,则 ``deploy`` 将为 false,并且此时只会为站点构建一个artifact。" + +#: ../../tips.rst:297 85e70fc3faa04208979f7bbe92b025ef +msgid "\"Insecure content\" warnings from browsers" +msgstr "浏览器报“不安全的内容(Insecure content)”警告" + +#: ../../tips.rst:299 34f7075cf31f416da2aeb529c616d97d +msgid "" +"If your site uses ``https://`` and is broken because the browser is " +"blocking network requests (for example for CSS files) due to \"insecure " +"content\" this may be because GitHub Pages is generating ``http://`` URLs" +" for your site." +msgstr "" +"当站点使用 ``https://`` " +"时,可能会损坏,无法正常显示,这是由于浏览器阻拦了一些对“不安全内容”的网络请求。可能的原因之一是GitHub Pages给你的站点生成了 " +"``http://`` URL。" + +#: ../../tips.rst:303 47271df82577424c8e2c31a9e76a553a +msgid "" +"To fix this go into your site repo's settings and enable the **Enforce " +"HTTPS** setting: go to **Settings → Pages** and check **Enforce HTTPS**. " +"Then re-run the workflow to re-deploy your site. Alternatively, you can " +"use the workflow's ``siteurl`` and ``feed_domain`` settings." +msgstr "" +"要想解决这一问题,需要为站点所在仓库开启 **强制使用HTTPS** :点击 **Settings → Pages** 并在其中勾选 " +"**Enforce HTTPS** ,接着再重新执行工作流以重新部署站点。也可以尝试通过配置 ``siteurl`` 与 " +"``feed_domain`` 解决问题。" + +#: ../../tips.rst:311 e69189ef4a8440fb8940d8012b4f19d6 +msgid "" +"GitHub Pages will display the custom 404 page described above, as noted " +"in the relevant `GitHub docs " +"`_." +msgstr "" +"如果按前述进行配置,GitHub Pages是能够正确显示自定义的404页面的,相关内容在 `GitHub的文档中 " +"`_ 也有提到。" + +#: ../../tips.rst:315 1b8c2457f44a4d61a033363830b8bd90 +msgid "Update your site on each commit" +msgstr "在每次commit后都更新站点" + +#: ../../tips.rst:317 476dbdb670924c02a962e78d6a7854c1 +msgid "" +"To automatically update your Pelican site on each commit, you can create " +"a post-commit hook. For example, you can add the following to " +"``.git/hooks/post-commit``::" +msgstr "" +"要想在每次commit后自动更新Pelican站点,你可以创建一个post-commit钩子。例如,可以将下面的内容保存为 " +"``.git/hooks/post-commit`` :" + +#: ../../tips.rst:324 36dc5f05eaf84573acada36c59d8d2fc +msgid "Copy static files to the root of your site" +msgstr "将静态文件拷贝到站点根目录" + +#: ../../tips.rst:326 4a0722ad68e944ee80e6378259cc1dd6 +msgid "" +"To use a `custom domain `_ with GitHub Pages, you need to put the " +"domain of your site (e.g., ``blog.example.com``) inside a ``CNAME`` file " +"at the root of your site. To do this, create the ``content/extra/`` " +"directory and add a ``CNAME`` file to it. Then use the ``STATIC_PATHS`` " +"setting to tell Pelican to copy this file to your output directory. For " +"example::" +msgstr "" +"要将 `自定义域名 `_ 与GitHub Pages一起使用,需要将站点的域名(例如 ``blog.example.com`` " +")添加到站点根目录的 ``CNAME`` 文件中。为此,请创建 ``content/extra/`` 目录,并在里面添加一个 ``CNAME`` " +"文件。然后使用Pelican的 ``STATIC_PATHS`` 来告诉Pelican将此文件复制到输出目录:" + +#: ../../tips.rst:337 8ad906848762400d9e2462034d151a16 +msgid "Note: use forward slashes, ``/``, even on Windows." +msgstr "请注意:务必使用正斜杠 ``/`` ,在Windows上也是。" + +#: ../../tips.rst:339 7b109f4944064382babc9158567c8e82 +msgid "" +"You can also use the ``EXTRA_PATH_METADATA`` mechanism to place a " +"``favicon.ico`` or ``robots.txt`` at the root of any site." +msgstr "" +"利用 ``EXTRA_PATH_METADATA`` 机制,你可以将 ``favicon.ico`` 或 ``robots.txt`` " +"也拷贝到站点的根目录下。" + +#: ../../tips.rst:343 678eea0644b5400496ad9173d05368d5 +msgid "How to add YouTube or Vimeo Videos" +msgstr "如何添加YouTube或Vimeo视频" + +#: ../../tips.rst:345 ca57b327dd6b432d82cdc91193bde6bb +msgid "" +"The easiest way is to paste the embed code of the video from these sites " +"directly into your source content." +msgstr "最简单的方法是将这些网站的视频嵌入代码直接粘贴到您的源内容文件中。" + +#: ../../tips.rst:348 0a4f27e2edbe494ab52f73595646986e +msgid "" +"Alternatively, you can also use Pelican plugins like ``liquid_tags``, " +"``pelican_youtube``, or ``pelican_vimeo`` to embed videos in your " +"content." +msgstr "" +"或者,您还可以使用例如 ``liquid_tags`` 、``pelican_youtube`` 或 ``pelican_vimeo`` " +"等Pelican插件将视频嵌入。" + +#: ../../tips.rst:351 e73517b72da347738421784b776b1f1c +msgid "" +"Moreover, markup languages like reST and Markdown have plugins that let " +"you embed videos in the markup. You can use `reST video directive " +"`_ for reST or `mdx_video plugin " +"`_ for Markdown." +msgstr "" +"此外,像reST和 Markdown这样的标记语言都有对应插件可以让你在其中嵌入视频。可以使用 `reST的视频指令 " +"`_ 或者 `Markdown的mdx_video插件 " +"`_ 。" + +#: ../../tips.rst:358 b9d27cda716048b2ab7c13646d7faf09 +msgid "Develop Locally Using SSL" +msgstr "在本地使用SSL进行开发" + +#: ../../tips.rst:360 50df9ec072aa47eabbae132fd8f5cb68 +msgid "Here's how you can set up your local pelican server to support SSL." +msgstr "以下描述了如何在本地Pelican服务器上配置SSL。" + +#: ../../tips.rst:362 9b5045375a874c4d9c29f7109f05c539 +msgid "" +"First, create a self-signed certificate and key using ``openssl`` (this " +"creates ``cert.pem`` and ``key.pem``)::" +msgstr "首先,通过 ``openssl`` 创建自签名的证书和密钥,这会生成 ``cert.pem`` 和 ``key.pem`` 文件:" + +#: ../../tips.rst:366 2f1cfa536fc540f69d671f8a118769d7 +msgid "" +"And use this command to launch the server (the server starts within your " +"``output`` directory)::" +msgstr "接着使用下面的命令来开启服务器(此服务器会在 ``output`` 目录下开启):" + +#: ../../tips.rst:370 029ea2b0e4fe4b0f814158ae33e3a8ff +msgid "If you are using ``develop-server.sh``, add this to the top::" +msgstr "如果你使用的是 ``develop-server.sh`` 脚本,在脚本的开头添加:" + +#: ../../tips.rst:375 c2784fdd9fdb433799d57f903d0e49d8 +msgid "and modify the ``pelican.server`` line as follows::" +msgstr "然后修改按照下述修改 ``pelican.server`` 一行:" + +#~ msgid "" +#~ "To publish a Pelican site in the" +#~ " form of User Pages, you need " +#~ "to *push* the content of the " +#~ "``output`` dir generated by Pelican to" +#~ " the ``master`` branch of your " +#~ "``.github.io`` repository on GitHub." +#~ msgstr "" + +#~ msgid "" +#~ "The ``git push`` command pushes the " +#~ "local ``gh-pages`` branch (freshly " +#~ "updated by the ``ghp-import`` command)" +#~ " to the ``elemoine.github.io`` repository's " +#~ "``master`` branch on GitHub." +#~ msgstr "" + +#~ msgid "" +#~ "Now you can push the whole project" +#~ " ``.github.io`` to the master " +#~ "branch of your GitHub repository::" +#~ msgstr "" + +#~ msgid "" +#~ "Pelican-powered sites can be published" +#~ " to GitHub Pages via a `custom " +#~ "workflow " +#~ "`_." +#~ " To use it:" +#~ msgstr "" + +#~ msgid "" +#~ "You may want to replace the " +#~ "``@master`` with the ID of a " +#~ "specific commit in this repo in " +#~ "order to pin the version of the" +#~ " reusable workflow that you're using: " +#~ "``uses: " +#~ "getpelican/pelican/.github/workflows/github_pages.yml@``." +#~ " If you do this you might want" +#~ " to get Dependabot to send you " +#~ "automated pull requests to update that" +#~ " commit ID whenever new versions of" +#~ " this workflow are published, like " +#~ "so:" +#~ msgstr "" diff --git a/docs/plugins.rst b/docs/plugins.rst index 22e1bcc6..58eee16b 100644 --- a/docs/plugins.rst +++ b/docs/plugins.rst @@ -94,12 +94,14 @@ which you map the signals to your plugin logic. Let's take a simple example:: your ``register`` callable or they will be garbage-collected before the signal is emitted. -If multiple plugins connect to the same signal, plugins will be executed in the -order they are connected. With ``PLUGINS`` setting, order will be as defined in -the setting. If you rely on auto-discovered namespace plugins, no ``PLUGINS`` -setting, they will be connected in the same order they are discovered (same -order as ``pelican-plugins`` output). If you want to specify the order -explicitly, disable auto-discovery by defining ``PLUGINS`` in the desired order. +If multiple plugins connect to the same signal, plugins will be invoked in the +order they are registered. When the ``PLUGINS`` setting is defined, plugin +invocation order will be the order in which the plugins are listed in the +``PLUGINS`` setting. If you rely on auto-discovered namespace plugins and have +no ``PLUGINS`` setting defined, plugins will be invoked in the same order that +they are discovered (the same order as listed in the output of the +``pelican-plugins`` command). If you want to specify the order explicitly, +disable auto-discovery by defining ``PLUGINS`` in the desired order. Namespace plugin structure -------------------------- diff --git a/docs/settings.rst b/docs/settings.rst index e9edffde..67d1080f 100644 --- a/docs/settings.rst +++ b/docs/settings.rst @@ -28,7 +28,7 @@ Environment variables can also be used here but must be escaped appropriately:: Settings are configured in the form of a Python module (a file). There is an `example settings file -`_ +`_ available for reference. To see a list of current settings in your environment, including both default @@ -54,40 +54,41 @@ Here is a list of settings for Pelican: Basic settings ============== -.. data:: USE_FOLDER_AS_CATEGORY = True +.. data:: USE_FOLDER_AS_CATEGORY When you don't specify a category in your post metadata, set this setting to ``True``, and organize your articles in subfolders, the subfolder will become the category of your post. If set to ``False``, ``DEFAULT_CATEGORY`` - will be used as a fallback. + will be used as a fallback. The default is ``True``. -.. data:: DEFAULT_CATEGORY = 'misc' +.. data:: DEFAULT_CATEGORY - The default category to fall back on. + The default category to fall back on. The default is ``'misc'``. -.. data:: DISPLAY_PAGES_ON_MENU = True +.. data:: DISPLAY_PAGES_ON_MENU Whether to display pages on the menu of the template. Templates may or may - not honor this setting. + not honor this setting. The default is ``True``. -.. data:: DISPLAY_CATEGORIES_ON_MENU = True +.. data:: DISPLAY_CATEGORIES_ON_MENU Whether to display categories on the menu of the template. Templates may or - not honor this setting. + not honor this setting. The default is ``True``. -.. data:: DOCUTILS_SETTINGS = {} +.. data:: DOCUTILS_SETTINGS Extra configuration settings for the docutils publisher (applicable only to reStructuredText). See `Docutils Configuration`_ settings for more details. + The default is ``{}`` with no extra configuration settings. -.. data:: DELETE_OUTPUT_DIRECTORY = False +.. data:: DELETE_OUTPUT_DIRECTORY Delete the output directory, and **all** of its contents, before generating new files. This can be useful in preventing older, unnecessary files from persisting in your output. However, **this is a destructive setting and - should be handled with extreme care.** + should be handled with extreme care.** The default is ``False``. -.. data:: OUTPUT_RETENTION = [] +.. data:: OUTPUT_RETENTION A list of filenames that should be retained and not deleted from the output directory. One use case would be the preservation of version control data. @@ -96,13 +97,16 @@ Basic settings OUTPUT_RETENTION = [".hg", ".git", ".bzr"] -.. data:: JINJA_ENVIRONMENT = {'trim_blocks': True, 'lstrip_blocks': True} + The default is ``[]``. + +.. data:: JINJA_ENVIRONMENT A dictionary of custom Jinja2 environment variables you want to use. This also includes a list of extensions you may want to include. See `Jinja - Environment documentation`_. + Environment documentation`_. The default is + ``{'extensions': [], 'trim_blocks': True, 'lstrip_blocks': True}``. -.. data:: JINJA_FILTERS = {} +.. data:: JINJA_FILTERS A dictionary of custom Jinja2 filters you want to use. The dictionary should map the filtername to the filter function. @@ -115,20 +119,22 @@ Basic settings from custom_filter import urlencode_filter JINJA_FILTERS = {'urlencode': urlencode_filter} - See: `Jinja custom filters documentation`_. + See: `Jinja custom filters documentation`_. The default is ``{}``. -.. data:: JINJA_GLOBALS = {} +.. data:: JINJA_GLOBALS A dictionary of custom objects to map into the Jinja2 global environment namespace. The dictionary should map the global name to the global - variable/function. See: `Jinja global namespace documentation`_. + variable/function. See: `Jinja global namespace documentation`_. The + default is ``{}``. -.. data:: JINJA_TESTS = {} +.. data:: JINJA_TESTS A dictionary of custom Jinja2 tests you want to use. The dictionary should map test names to test functions. See: `Jinja custom tests documentation`_. + The default is ``{}``. -.. data:: LOG_FILTER = [] +.. data:: LOG_FILTER A list of tuples containing the logging level (up to ``warning``) and the message to be ignored. @@ -137,7 +143,9 @@ Basic settings LOG_FILTER = [(logging.WARN, 'TAG_SAVE_AS is set to False')] -.. data:: READERS = {} + The default is ``[]``. + +.. data:: READERS A dictionary of file extensions / Reader classes for Pelican to process or ignore. @@ -150,14 +158,22 @@ Basic settings READERS = {'foo': FooReader} -.. data:: IGNORE_FILES = ['.#*'] + The default is ``{}``. - A list of glob patterns. Files and directories matching any of these - patterns will be ignored by the processor. For example, the default - ``['.#*']`` will ignore emacs lock files, and ``['__pycache__']`` would - ignore Python 3's bytecode caches. +.. data:: IGNORE_FILES -.. data:: MARKDOWN = {...} + A list of Unix glob patterns. Files and directories matching any of these patterns + or any of the commonly hidden files and directories set by ``watchfiles.DefaultFilter`` + will be ignored by the processor. For example, the default ``['**/.*']`` will + ignore "hidden" files and directories, and ``['__pycache__']`` would ignore + Python 3's bytecode caches. + + For a full list of the commonly hidden files set by ``watchfiles.DefaultFilter``, + please refer to the `watchfiles documentation`_. + + The default is ``['**/.*']``. + +.. data:: MARKDOWN Extra configuration settings for the Markdown processor. Refer to the Python Markdown documentation's `Options section @@ -165,7 +181,7 @@ Basic settings list of supported options. The ``extensions`` option will be automatically computed from the ``extension_configs`` option. - Defaults to:: + The default is:: MARKDOWN = { 'extension_configs': { @@ -180,57 +196,63 @@ Basic settings The dictionary defined in your settings file will replace this default one. -.. data:: OUTPUT_PATH = 'output/' +.. data:: OUTPUT_PATH Where to output the generated files. This should correspond to your web server's virtual host root directory. + The default is ``'output'``. + .. data:: PATH Path to content directory to be processed by Pelican. If undefined, and content path is not specified via an argument to the ``pelican`` command, - Pelican will use the current working directory. + Pelican will default to ``'.'``, the current working directory. -.. data:: PAGE_PATHS = ['pages'] +.. data:: PAGE_PATHS A list of directories and files to look at for pages, relative to ``PATH``. + The default is ``['pages']``. -.. data:: PAGE_EXCLUDES = [] +.. data:: PAGE_EXCLUDES A list of directories to exclude when looking for pages in addition to - ``ARTICLE_PATHS``. + ``ARTICLE_PATHS``. The default is ``[]``. -.. data:: ARTICLE_PATHS = [''] +.. data:: ARTICLE_PATHS A list of directories and files to look at for articles, relative to - ``PATH``. + ``PATH``. The default is ``['']``. -.. data:: ARTICLE_EXCLUDES = [] +.. data:: ARTICLE_EXCLUDES A list of directories to exclude when looking for articles in addition to - ``PAGE_PATHS``. + ``PAGE_PATHS``. The default is ``[]``. -.. data:: OUTPUT_SOURCES = False +.. data:: OUTPUT_SOURCES Set to True if you want to copy the articles and pages in their original format (e.g. Markdown or reStructuredText) to the specified ``OUTPUT_PATH``. + The default is ``False``. -.. data:: OUTPUT_SOURCES_EXTENSION = '.text' +.. data:: OUTPUT_SOURCES_EXTENSION Controls the extension that will be used by the SourcesGenerator. Defaults - to ``.text``. If not a valid string the default value will be used. + to ``.text``. If not a valid string the default value will be used. The + default is ``'.text'``. -.. data:: PLUGINS = None +.. data:: PLUGINS - The list of plugins to load. See :ref:`plugins`. + The list of plugins to load. See :ref:`plugins`. The default is ``None``. -.. data:: PLUGIN_PATHS = [] +.. data:: PLUGIN_PATHS - A list of directories where to look for plugins. See :ref:`plugins`. + A list of directories where to look for plugins. See :ref:`plugins`. The + default is ``[]``. -.. data:: SITENAME = 'A Pelican Blog' +.. data:: SITENAME - Your site name + Your site's name. The default is ``'A Pelican Blog'``. .. data:: SITEURL @@ -241,56 +263,68 @@ Basic settings domain, with no trailing slash at the end. Example: ``SITEURL = 'https://example.com'`` -.. data:: STATIC_PATHS = ['images'] + The default is ``''``, the blank string. + +.. data:: STATIC_PATHS A list of directories (relative to ``PATH``) in which to look for static files. Such files will be copied to the output directory without modification. Articles, pages, and other content source files will normally be skipped, so it is safe for a directory to appear both here and in ``PAGE_PATHS`` or ``ARTICLE_PATHS``. Pelican's default settings include the - "images" directory here. + "images" directory here. The default is ``['images']``. -.. data:: STATIC_EXCLUDES = [] +.. data:: STATIC_EXCLUDES - A list of directories to exclude when looking for static files. + A list of directories to exclude when looking for static files. The default + is ``[]``. -.. data:: STATIC_EXCLUDE_SOURCES = True +.. data:: STATIC_EXCLUDE_SOURCES If set to False, content source files will not be skipped when copying files found in ``STATIC_PATHS``. This setting is for backward compatibility with Pelican releases before version 3.5. It has no effect unless ``STATIC_PATHS`` contains a directory that is also in ``ARTICLE_PATHS`` or ``PAGE_PATHS``. If you are trying to publish your site's source files, - consider using the ``OUTPUT_SOURCES`` setting instead. + consider using the ``OUTPUT_SOURCES`` setting instead. The default is + ``True``. -.. data:: STATIC_CREATE_LINKS = False +.. data:: STATIC_CREATE_LINKS Create links instead of copying files. If the content and output directories are on the same device, then create hard links. Falls back to symbolic links if the output directory is on a different filesystem. If symlinks are created, don't forget to add the ``-L`` or ``--copy-links`` option to rsync - when uploading your site. + when uploading your site. The default is ``False``. -.. data:: STATIC_CHECK_IF_MODIFIED = False +.. data:: STATIC_CHECK_IF_MODIFIED If set to ``True``, and ``STATIC_CREATE_LINKS`` is ``False``, compare mtimes of content and output files, and only copy content files that are newer than - existing output files. + existing output files. The default is ``False``. -.. data:: TYPOGRIFY = False +.. data:: TYPOGRIFY - If set to True, several typographical improvements will be incorporated into + If set to ``True``, several typographical improvements will be incorporated into the generated HTML via the `Typogrify `_ library, which can be installed - via: ``python -m pip install typogrify`` + via: ``python -m pip install typogrify``. The default is ``False``. -.. data:: TYPOGRIFY_IGNORE_TAGS = [] +.. data:: TYPOGRIFY_IGNORE_TAGS A list of tags for Typogrify to ignore. By default Typogrify will ignore ``pre`` and ``code`` tags. This requires that Typogrify version 2.0.4 or - later is installed + later is installed. The default is ``[]``. -.. data:: TYPOGRIFY_DASHES = 'default' +.. data:: TYPOGRIFY_OMIT_FILTERS + + A list of Typogrify filters to skip. Allowed values are: ``'amp'``, + ``'smartypants'``, ``'caps'``, ``'initial_quotes'``, ``'widont'``. By + default, no filter is omitted (in other words, all filters get applied). This + setting requires that Typogrify version 2.1.0 or later is installed. The + default is ``[]``. + +.. data:: TYPOGRIFY_DASHES This setting controls how Typogrify sets up the Smartypants filter to interpret multiple dash/hyphen/minus characters. A single ASCII dash @@ -299,57 +333,72 @@ Basic settings ``oldschool`` setting renders both en-dashes and em-dashes when it sees two (``--``) and three (``---``) hyphen characters, respectively. The ``oldschool_inverted`` setting turns two hyphens into an em-dash and three - hyphens into an en-dash. + hyphens into an en-dash. The default is ``'default'``. -.. data:: SUMMARY_MAX_LENGTH = 50 +.. data:: SUMMARY_MAX_LENGTH When creating a short summary of an article, this will be the default length (measured in words) of the text created. This only applies if your content does not otherwise specify a summary. Setting to ``None`` will cause the - summary to be a copy of the original content. + summary to be a copy of the original content. The default is ``50``. -.. data:: SUMMARY_END_SUFFIX = '…' +.. data:: SUMMARY_MAX_PARAGRAPHS + + When creating a short summary of an article, this will be the number of + paragraphs to use as the summary. This only applies if your content + does not otherwise specify a summary. Setting to ``None`` will cause the + summary to use the whole text (up to ``SUMMARY_MAX_LENGTH``) instead of just + the first N paragraphs. The default is ``None``. + +.. data:: SUMMARY_END_SUFFIX When creating a short summary of an article and the result was truncated to match the required word length, this will be used as the truncation suffix. + The default is ``'…'``. -.. data:: WITH_FUTURE_DATES = True +.. data:: WITH_FUTURE_DATES If disabled, content with dates in the future will get a default status of - ``draft``. See :ref:`reading_only_modified_content` for caveats. + ``draft``. See :ref:`reading_only_modified_content` for caveats. The default + is ``True``. -.. data:: INTRASITE_LINK_REGEX = '[{|](?P.*?)[|}]' +.. data:: INTRASITE_LINK_REGEX Regular expression that is used to parse internal links. Default syntax when linking to internal files, tags, etc., is to enclose the identifier, say ``filename``, in ``{}`` or ``||``. Identifier between ``{`` and ``}`` goes into the ``what`` capturing group. For details see - :ref:`ref-linking-to-internal-content`. + :ref:`ref-linking-to-internal-content`. The default is + ``'[{|](?P.*?)[|}]'``. -.. data:: PYGMENTS_RST_OPTIONS = [] +.. data:: PYGMENTS_RST_OPTIONS A list of default Pygments settings for your reStructuredText code blocks. - See :ref:`internal_pygments_options` for a list of supported options. + See :ref:`internal_pygments_options` for a list of supported options. The + default is ``{}``. -.. data:: CACHE_CONTENT = False +.. data:: CACHE_CONTENT If ``True``, saves content in caches. See - :ref:`reading_only_modified_content` for details about caching. + :ref:`reading_only_modified_content` for details about caching. The default + is ``False``. -.. data:: CONTENT_CACHING_LAYER = 'reader' +.. data:: CONTENT_CACHING_LAYER If set to ``'reader'``, save only the raw content and metadata returned by - readers. If set to ``'generator'``, save processed content objects. + readers. If set to ``'generator'``, save processed content objects. The + default is ``'reader'``. -.. data:: CACHE_PATH = 'cache' +.. data:: CACHE_PATH - Directory in which to store cache files. + Directory in which to store cache files. The default is ``'cache'``. -.. data:: GZIP_CACHE = True +.. data:: GZIP_CACHE - If ``True``, use gzip to (de)compress the cache files. + If ``True``, use gzip to (de)compress the cache files. The default is + ``True``. -.. data:: CHECK_MODIFIED_METHOD = 'mtime' +.. data:: CHECK_MODIFIED_METHOD Controls how files are checked for modifications. @@ -358,23 +407,25 @@ Basic settings - If set to a name of a function provided by the ``hashlib`` module, e.g. ``'md5'``, the file hash is checked. -.. data:: LOAD_CONTENT_CACHE = False + The default is ``'mtime'``. - If ``True``, load unmodified content from caches. +.. data:: LOAD_CONTENT_CACHE -.. data:: FORMATTED_FIELDS = ['summary'] + If ``True``, load unmodified content from caches. The default is ``False``. + +.. data:: FORMATTED_FIELDS A list of metadata fields containing reST/Markdown content to be parsed and - translated to HTML. + translated to HTML. The default is ``['summary']``. -.. data:: PORT = 8000 +.. data:: PORT The TCP port to serve content from the output folder via HTTP when pelican - is run with --listen + is run with ``--listen``. The default is ``8000``. -.. data:: BIND = '' +.. data:: BIND - The IP to which to bind the HTTP server. + The IP to which to bind the HTTP server. The default is ``'127.0.0.1'``. .. _url-settings: @@ -407,7 +458,7 @@ If you don't want that flexibility and instead prefer that your generated output paths mirror your source content's filesystem path hierarchy, try the following settings:: - PATH_METADATA = '(?P.*)\..*' + PATH_METADATA = r'(?P.*)\..*' ARTICLE_URL = ARTICLE_SAVE_AS = PAGE_URL = PAGE_SAVE_AS = '{path_no_ext}.html' Otherwise, you can use a variety of file metadata attributes within URL-related @@ -440,105 +491,113 @@ This would save your articles into something like .. _Python datetime documentation: https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior -.. data:: RELATIVE_URLS = False +.. data:: RELATIVE_URLS Defines whether Pelican should use document-relative URLs or not. Only set this to ``True`` when developing/testing and only if you fully understand - the effect it can have on links/feeds. + the effect it can have on links/feeds. The default is ``False``. -.. data:: ARTICLE_URL = '{slug}.html' +.. data:: ARTICLE_URL - The URL to refer to an article. + The URL to refer to an article. The default is ``'{slug}.html'``. -.. data:: ARTICLE_SAVE_AS = '{slug}.html' +.. data:: ARTICLE_SAVE_AS - The place where we will save an article. + The place where we will save an article. The default is ``'{slug}.html'``. -.. data:: ARTICLE_LANG_URL = '{slug}-{lang}.html' +.. data:: ARTICLE_LANG_URL The URL to refer to an article which doesn't use the default language. + The default is ``'{slug}-{lang}.html``. -.. data:: ARTICLE_LANG_SAVE_AS = '{slug}-{lang}.html' +.. data:: ARTICLE_LANG_SAVE_AS The place where we will save an article which doesn't use the default - language. + language. The default is ``'{slug}-{lang}.html'``. -.. data:: DRAFT_URL = 'drafts/{slug}.html' +.. data:: DRAFT_URL - The URL to refer to an article draft. + The URL to refer to an article draft. The default is + ``'drafts/{slug}.html'``. -.. data:: DRAFT_SAVE_AS = 'drafts/{slug}.html' +.. data:: DRAFT_SAVE_AS - The place where we will save an article draft. + The place where we will save an article draft. The default is ``'drafts/{slug}.html'``. -.. data:: DRAFT_LANG_URL = 'drafts/{slug}-{lang}.html' +.. data:: DRAFT_LANG_URL The URL to refer to an article draft which doesn't use the default language. + The default is ``'drafts/{slug}-{lang}.html'``. -.. data:: DRAFT_LANG_SAVE_AS = 'drafts/{slug}-{lang}.html' +.. data:: DRAFT_LANG_SAVE_AS The place where we will save an article draft which doesn't use the default - language. + language. The default is ``'drafts/{slug}-{lang}.html'``. -.. data:: PAGE_URL = 'pages/{slug}.html' +.. data:: PAGE_URL - The URL we will use to link to a page. + The URL we will use to link to a page. The default is + ``'pages/{slug}.html'``. -.. data:: PAGE_SAVE_AS = 'pages/{slug}.html' +.. data:: PAGE_SAVE_AS The location we will save the page. This value has to be the same as - PAGE_URL or you need to use a rewrite in your server config. + PAGE_URL or you need to use a rewrite in your server config. The default + is ``'pages/{slug}.html'``. -.. data:: PAGE_LANG_URL = 'pages/{slug}-{lang}.html' +.. data:: PAGE_LANG_URL The URL we will use to link to a page which doesn't use the default - language. + language. The default is ``'pages/{slug}-{lang}.html'``. -.. data:: PAGE_LANG_SAVE_AS = 'pages/{slug}-{lang}.html' +.. data:: PAGE_LANG_SAVE_AS The location we will save the page which doesn't use the default language. + The default is ``'pages/{slug}-{lang}.html'``. -.. data:: DRAFT_PAGE_URL = 'drafts/pages/{slug}.html' +.. data:: DRAFT_PAGE_URL - The URL used to link to a page draft. + The URL used to link to a page draft. The default is + ``'drafts/pages/{slug}.html'``. -.. data:: DRAFT_PAGE_SAVE_AS = 'drafts/pages/{slug}.html' +.. data:: DRAFT_PAGE_SAVE_AS - The actual location a page draft is saved at. + The actual location a page draft is saved at. The default is + ``'drafts/pages/{slug}.html'``. -.. data:: DRAFT_PAGE_LANG_URL = 'drafts/pages/{slug}-{lang}.html' +.. data:: DRAFT_PAGE_LANG_URL The URL used to link to a page draft which doesn't use the default - language. + language. The default is ``'drafts/pages/{slug}-{lang}.html'``. -.. data:: DRAFT_PAGE_LANG_SAVE_AS = 'drafts/pages/{slug}-{lang}.html' +.. data:: DRAFT_PAGE_LANG_SAVE_AS The actual location a page draft which doesn't use the default language is - saved at. + saved at. The default is ``'drafts/pages/{slug}-{lang}.html'``. -.. data:: AUTHOR_URL = 'author/{slug}.html' +.. data:: AUTHOR_URL - The URL to use for an author. + The URL to use for an author. The default is ``'author/{slug}.html'``. -.. data:: AUTHOR_SAVE_AS = 'author/{slug}.html' +.. data:: AUTHOR_SAVE_AS - The location to save an author. + The location to save an author. The default is ``'author/{slug}.html'``. -.. data:: CATEGORY_URL = 'category/{slug}.html' +.. data:: CATEGORY_URL - The URL to use for a category. + The URL to use for a category. The default is ``'category/{slug}.html'``. -.. data:: CATEGORY_SAVE_AS = 'category/{slug}.html' +.. data:: CATEGORY_SAVE_AS - The location to save a category. + The location to save a category. The default is ``'category/{slug}.html'``. -.. data:: TAG_URL = 'tag/{slug}.html' +.. data:: TAG_URL - The URL to use for a tag. + The URL to use for a tag. The default is ``'tag/{slug}.html'``. -.. data:: TAG_SAVE_AS = 'tag/{slug}.html' +.. data:: TAG_SAVE_AS - The location to save the tag page. + The location to save the tag page. The default is ``'tag/{slug}.html'``. .. note:: @@ -571,85 +630,81 @@ through the URLs ``posts/2011/`` and ``posts/2011/Aug/``, respectively. This way a reader can remove a portion of your URL and automatically arrive at an appropriate archive of posts, without having to specify a page name. -.. data:: YEAR_ARCHIVE_SAVE_AS = '' +.. data:: YEAR_ARCHIVE_SAVE_AS - The location to save per-year archives of your posts. + The location to save per-year archives of your posts. The default is ``''``. -.. data:: YEAR_ARCHIVE_URL = '' +.. data:: YEAR_ARCHIVE_URL The URL to use for per-year archives of your posts. You should set this if - you enable per-year archives. + you enable per-year archives. The default is ``''``. -.. data:: MONTH_ARCHIVE_SAVE_AS = '' +.. data:: MONTH_ARCHIVE_SAVE_AS - The location to save per-month archives of your posts. + The location to save per-month archives of your posts. The default is + ``''``. -.. data:: MONTH_ARCHIVE_URL = '' +.. data:: MONTH_ARCHIVE_URL The URL to use for per-month archives of your posts. You should set this if - you enable per-month archives. + you enable per-month archives. The default is ``''``. -.. data:: DAY_ARCHIVE_SAVE_AS = '' +.. data:: DAY_ARCHIVE_SAVE_AS - The location to save per-day archives of your posts. + The location to save per-day archives of your posts. The default is ``''``. -.. data:: DAY_ARCHIVE_URL = '' +.. data:: DAY_ARCHIVE_URL The URL to use for per-day archives of your posts. You should set this if - you enable per-day archives. + you enable per-day archives. The default is ``''``. ``DIRECT_TEMPLATES`` work a bit differently than noted above. Only the ``_SAVE_AS`` settings are available, but it is available for any direct template. -.. data:: ARCHIVES_SAVE_AS = 'archives.html' +.. data:: ARCHIVES_SAVE_AS - The location to save the article archives page. + The location to save the article archives page. The default is ``'archives.html'``. -.. data:: AUTHORS_SAVE_AS = 'authors.html' +.. data:: AUTHORS_SAVE_AS - The location to save the author list. + The location to save the author list. The default is ``'authors.html'``. -.. data:: CATEGORIES_SAVE_AS = 'categories.html' +.. data:: CATEGORIES_SAVE_AS - The location to save the category list. + The location to save the category list. The default is ``'categories.html'``. -.. data:: TAGS_SAVE_AS = 'tags.html' +.. data:: TAGS_SAVE_AS - The location to save the tag list. + The location to save the tag list. The default is ``'tags.html'``. -.. data:: INDEX_SAVE_AS = 'index.html' +.. data:: INDEX_SAVE_AS - The location to save the list of all articles. + The location to save the list of all articles. The default is ``'index.html'``. URLs for direct template pages are theme-dependent. Some themes use corresponding ``*_URL`` setting as string, while others hard-code them: ``'archives.html'``, ``'authors.html'``, ``'categories.html'``, ``'tags.html'``. -.. data:: SLUGIFY_SOURCE = 'title' +.. data:: SLUGIFY_SOURCE Specifies from where you want the slug to be automatically generated. Can be set to ``title`` to use the "Title:" metadata tag or ``basename`` to use the - article's file name when creating the slug. + article's file name when creating the slug. The default is ``'title'``. -.. data:: SLUGIFY_USE_UNICODE = False +.. data:: SLUGIFY_USE_UNICODE Allow Unicode characters in slugs. Set ``True`` to keep Unicode characters in auto-generated slugs. Otherwise, Unicode characters will be replaced - with ASCII equivalents. + with ASCII equivalents. The default is ``False``. -.. data:: SLUGIFY_PRESERVE_CASE = False +.. data:: SLUGIFY_PRESERVE_CASE Preserve uppercase characters in slugs. Set ``True`` to keep uppercase - characters from ``SLUGIFY_SOURCE`` as-is. + characters from ``SLUGIFY_SOURCE`` as-is. The default is ``False``. -.. data:: SLUG_REGEX_SUBSTITUTIONS = [ - (r'[^\\w\\s-]', ''), # remove non-alphabetical/whitespace/'-' chars - (r'(?u)\\A\\s*', ''), # strip leading whitespace - (r'(?u)\\s*\\Z', ''), # strip trailing whitespace - (r'[-\\s]+', '-'), # reduce multiple whitespace or '-' to single '-' - ] +.. data:: SLUG_REGEX_SUBSTITUTIONS Regex substitutions to make when generating slugs of articles and pages. Specified as a list of pairs of ``(from, to)`` which are applied in order, @@ -657,21 +712,29 @@ corresponding ``*_URL`` setting as string, while others hard-code them: non-alphanumeric characters and converting internal whitespace to dashes. Apart from these substitutions, slugs are always converted to lowercase ascii characters and leading and trailing whitespace is stripped. Useful for - backward compatibility with existing URLs. + backward compatibility with existing URLs. The default is:: -.. data:: AUTHOR_REGEX_SUBSTITUTIONS = SLUG_REGEX_SUBSTITUTIONS + [ + (r'[^\w\s-]', ''), # remove non-alphabetical/whitespace/'-' chars + (r'(?u)\A\s*', ''), # strip leading whitespace + (r'(?u)\s*\Z', ''), # strip trailing whitespace + (r'[-\s]+', '-'), # reduce multiple whitespace or '-' to single '-' + ] - Regex substitutions for author slugs. Defaults to +.. data:: AUTHOR_REGEX_SUBSTITUTIONS + + Regex substitutions for author slugs. The default is ``SLUG_REGEX_SUBSTITUTIONS``. -.. data:: CATEGORY_REGEX_SUBSTITUTIONS = SLUG_REGEX_SUBSTITUTIONS +.. data:: CATEGORY_REGEX_SUBSTITUTIONS - Regex substitutions for category slugs. Defaults to + Regex substitutions for category slugs. The default is ``SLUG_REGEX_SUBSTITUTIONS``. -.. data:: TAG_REGEX_SUBSTITUTIONS = SLUG_REGEX_SUBSTITUTIONS +.. data:: TAG_REGEX_SUBSTITUTIONS - Regex substitutions for tag slugs. Defaults to ``SLUG_REGEX_SUBSTITUTIONS``. + Regex substitutions for tag slugs. The default is + ``SLUG_REGEX_SUBSTITUTIONS``. Time and Date ============= @@ -691,20 +754,20 @@ Time and Date .. _the wikipedia page: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones -.. data:: DEFAULT_DATE = None +.. data:: DEFAULT_DATE The default date you want to use. If ``'fs'``, Pelican will use the file system timestamp information (mtime) if it can't get date information from the metadata. If given any other string, it will be parsed by the same method as article metadata. If set to a tuple object, the default datetime object will instead be generated by passing the tuple to the - ``datetime.datetime`` constructor. + ``datetime.datetime`` constructor. The default is ``None``. -.. data:: DEFAULT_DATE_FORMAT = '%a %d %B %Y' +.. data:: DEFAULT_DATE_FORMAT - The default date format you want to use. + The default date format you want to use. The default is ``'%a %d %B %Y'``. -.. data:: DATE_FORMATS = {} +.. data:: DATE_FORMATS If you manage multiple languages, you can set the date formatting here. @@ -744,9 +807,11 @@ Time and Date 'jp': ('jpn','%Y-%m-%d(%a)'), } + The default is ``{}``. + .. data:: LOCALE - Change the locale [#]_. A list of locales can be provided here or a single + Change the locale. A list of locales can be provided here or a single string representing one locale. When providing a list, all the locales will be tried until one works. @@ -754,17 +819,15 @@ Time and Date .. parsed-literal:: - LOCALE = ('usa', 'jpn', # On Windows + LOCALE = ['usa', 'jpn', # On Windows 'en_US', 'ja_JP' # On Unix/Linux - ) + ] For a list of available locales refer to `locales on Windows`_ or on Unix/Linux, use the ``locale -a`` command; see manpage - `locale(1)`_ for more information. + `locale(1)`_ for more information. The default is the system locale. -.. [#] Default is the system locale. - .. _Jinja custom filters documentation: https://jinja.palletsprojects.com/en/latest/api/#custom-filters .. _Jinja global namespace documentation: https://jinja.palletsprojects.com/en/latest/api/#the-global-namespace .. _Jinja custom tests documentation: https://jinja.palletsprojects.com/en/latest/api/#custom-tests @@ -779,7 +842,7 @@ Time and Date Template pages ============== -.. data:: TEMPLATE_PAGES = None +.. data:: TEMPLATE_PAGES A mapping containing template pages that will be rendered with the blog entries. @@ -795,11 +858,14 @@ Template pages 'src/resume.html': 'dest/resume.html', 'src/contact.html': 'dest/contact.html'} -.. data:: TEMPLATE_EXTENSIONS = ['.html'] + The default is ``{}``. + +.. data:: TEMPLATE_EXTENSIONS The extensions to use when looking up template files from template names. + The default is ``['.html']``. -.. data:: DIRECT_TEMPLATES = ['index', 'authors', 'categories', 'tags', 'archives'] +.. data:: DIRECT_TEMPLATES List of templates that are used directly to render content. Typically direct templates are used to generate index pages for collections of content (e.g., @@ -809,19 +875,21 @@ Template pages ``DIRECT_TEMPLATES`` are searched for over paths maintained in ``THEME_TEMPLATES_OVERRIDES``. + The default is ``['index', 'tags', 'categories', 'authors', 'archives']``. Metadata ======== .. data:: AUTHOR - Default author (usually your name). + Default author (usually your name). The default is ``None``, which removes the byline. -.. data:: DEFAULT_METADATA = {} +.. data:: DEFAULT_METADATA - The default metadata you want to use for all articles and pages. + The default metadata you want to use for all articles and pages. The default + is ``{}``. -.. data:: FILENAME_METADATA = r'(?P\\d{4}-\\d{2}-\\d{2}).*' +.. data:: FILENAME_METADATA The regexp that will be used to extract any metadata from the filename. All named groups that are matched will be set in the metadata object. The @@ -831,14 +899,14 @@ Metadata FILENAME_METADATA = r'(?P\d{4}-\d{2}-\d{2})_(?P.*)' - See also ``SLUGIFY_SOURCE``. + See also ``SLUGIFY_SOURCE``. The default is ``r'(?P\d{4}-\d{2}-\d{2}).*'``. -.. data:: PATH_METADATA = '' +.. data:: PATH_METADATA Like ``FILENAME_METADATA``, but parsed from a page's full path relative to - the content source directory. + the content source directory. The default is ``''``. -.. data:: EXTRA_PATH_METADATA = {} +.. data:: EXTRA_PATH_METADATA Extra metadata dictionaries keyed by relative path. Relative paths require correct OS-specific directory separators (i.e. / in UNIX and \\ in Windows) @@ -884,6 +952,8 @@ file: .. _group name notation: https://docs.python.org/3/library/re.html#regular-expression-syntax + The default is ``{}``. + Feed settings ============= @@ -895,118 +965,127 @@ Pelican generates category feeds as well as feeds for all your articles. It does not generate feeds for tags by default, but it is possible to do so using the ``TAG_FEED_ATOM`` and ``TAG_FEED_RSS`` settings: -.. data:: FEED_DOMAIN = None, i.e. base URL is "/" +.. data:: FEED_DOMAIN The domain prepended to feed URLs. Since feed URLs should always be absolute, it is highly recommended to define this (e.g., - "https://feeds.example.com"). If you have already explicitly defined SITEURL - (see above) and want to use the same domain for your feeds, you can just - set: ``FEED_DOMAIN = SITEURL``. + "https://feeds.example.com"). The default is ``SITEURL``. -.. data:: FEED_ATOM = None, i.e. no Atom feed +.. data:: FEED_ATOM - The location to save the Atom feed. + The location to save the Atom feed. The default is ``None``, for no Atom + feed. -.. data:: FEED_ATOM_URL = None +.. data:: FEED_ATOM_URL Relative URL of the Atom feed. If not set, ``FEED_ATOM`` is used both for - save location and URL. + save location and URL. The default is ``None``. -.. data:: FEED_RSS = None, i.e. no RSS +.. data:: FEED_RSS - The location to save the RSS feed. + The location to save the RSS feed. The default is ``None``, for no RSS feed. -.. data:: FEED_RSS_URL = None +.. data:: FEED_RSS_URL Relative URL of the RSS feed. If not set, ``FEED_RSS`` is used both for save - location and URL. + location and URL. The default is ``None``. -.. data:: FEED_ALL_ATOM = 'feeds/all.atom.xml' +.. data:: FEED_ALL_ATOM The location to save the all-posts Atom feed: this feed will contain all - posts regardless of their language. + posts regardless of their language. The default is ``'feeds/all.atom.xml'``. -.. data:: FEED_ALL_ATOM_URL = None +.. data:: FEED_ALL_ATOM_URL Relative URL of the all-posts Atom feed. If not set, ``FEED_ALL_ATOM`` is - used both for save location and URL. + used both for save location and URL. The default is ``None``. -.. data:: FEED_ALL_RSS = None, i.e. no all-posts RSS +.. data:: FEED_ALL_RSS The location to save the the all-posts RSS feed: this feed will contain all - posts regardless of their language. + posts regardless of their language. The default is ``None``, for no + all-posts RSS feed. -.. data:: FEED_ALL_RSS_URL = None +.. data:: FEED_ALL_RSS_URL Relative URL of the all-posts RSS feed. If not set, ``FEED_ALL_RSS`` is used - both for save location and URL. + both for save location and URL. The default is ``None``. -.. data:: CATEGORY_FEED_ATOM = 'feeds/{slug}.atom.xml' +.. data:: CATEGORY_FEED_ATOM - The location to save the category Atom feeds. [2]_ + The location to save the category Atom feeds. [2]_ The default is + ``'feeds/{slug}.atom.xml'``. -.. data:: CATEGORY_FEED_ATOM_URL = None +.. data:: CATEGORY_FEED_ATOM_URL Relative URL of the category Atom feeds, including the ``{slug}`` placeholder. [2]_ If not set, ``CATEGORY_FEED_ATOM`` is used both for save - location and URL. + location and URL. The default is ``None``. -.. data:: CATEGORY_FEED_RSS = None, i.e. no RSS +.. data:: CATEGORY_FEED_RSS The location to save the category RSS feeds, including the ``{slug}`` - placeholder. [2]_ + placeholder. [2]_ The default is ``None``, for no RSS feed. -.. data:: CATEGORY_FEED_RSS_URL = None +.. data:: CATEGORY_FEED_RSS_URL Relative URL of the category RSS feeds, including the ``{slug}`` placeholder. [2]_ If not set, ``CATEGORY_FEED_RSS`` is used both for save - location and URL. + location and URL. The default is ``None``. -.. data:: AUTHOR_FEED_ATOM = 'feeds/{slug}.atom.xml' +.. data:: AUTHOR_FEED_ATOM - The location to save the author Atom feeds. [2]_ + The location to save the author Atom feeds. [2]_ The default is + ``'feeds/{slug}.atom.xml'``. -.. data:: AUTHOR_FEED_ATOM_URL = None +.. data:: AUTHOR_FEED_ATOM_URL Relative URL of the author Atom feeds, including the ``{slug}`` placeholder. [2]_ If not set, ``AUTHOR_FEED_ATOM`` is used both for save location and - URL. + URL. The default is ``None`` (not set). -.. data:: AUTHOR_FEED_RSS = 'feeds/{slug}.rss.xml' +.. data:: AUTHOR_FEED_RSS - The location to save the author RSS feeds. [2]_ + The location to save the author RSS feeds. [2]_ The default is + ``'feeds/{slug}.rss.xml'``. -.. data:: AUTHOR_FEED_RSS_URL = None +.. data:: AUTHOR_FEED_RSS_URL Relative URL of the author RSS feeds, including the ``{slug}`` placeholder. [2]_ If not set, ``AUTHOR_FEED_RSS`` is used both for save location and URL. + The default is ``None``. -.. data:: TAG_FEED_ATOM = None, i.e. no tag feed +.. data:: TAG_FEED_ATOM The location to save the tag Atom feed, including the ``{slug}`` - placeholder. [2]_ + placeholder. [2]_ The default is ``None``, for no tag feed. -.. data:: TAG_FEED_ATOM_URL = None +.. data:: TAG_FEED_ATOM_URL Relative URL of the tag Atom feed, including the ``{slug}`` placeholder. - [2]_ + [2]_ The default is ``None``. -.. data:: TAG_FEED_RSS = None, i.e. no RSS tag feed +.. data:: TAG_FEED_RSS Relative URL to output the tag RSS feed, including the ``{slug}`` placeholder. If not set, ``TAG_FEED_RSS`` is used both for save location and - URL. + URL. The default is ``None``, for no tag feed. -.. data:: FEED_MAX_ITEMS = 100 +.. data:: FEED_MAX_ITEMS Maximum number of items allowed in a feed. Setting to ``None`` will cause the - feed to contains every article. 100 if not specified. + feed to contains every article. 100 if not specified. The default is ``100``. -.. data:: RSS_FEED_SUMMARY_ONLY = True +.. data:: RSS_FEED_SUMMARY_ONLY Only include item summaries in the ``description`` tag of RSS feeds. If set to ``False``, the full content will be included instead. This setting - doesn't affect Atom feeds, only RSS ones. + doesn't affect Atom feeds, only RSS ones. The default is ``True``. + +.. data:: FEED_APPEND_REF + + If set to ``True``, ``?ref=feed`` will be appended to links in generated + feeds for the purpose of referrer tracking. The default is ``False``. If you don't want to generate some or any of these feeds, set the above variables to ``None``. @@ -1024,27 +1103,32 @@ paginating this list. You can use the following settings to configure the pagination. -.. data:: DEFAULT_ORPHANS = 0 +.. data:: DEFAULT_ORPHANS The minimum number of articles allowed on the last page. Use this when you - don't want the last page to only contain a handful of articles. + don't want the last page to only contain a handful of articles. The default + is ``0``. -.. data:: DEFAULT_PAGINATION = False +.. data:: DEFAULT_PAGINATION The maximum number of articles to include on a page, not including orphans. - False to disable pagination. + False to disable pagination. The default is ``False``. -.. data:: PAGINATED_TEMPLATES = {'index': None, 'tag': None, 'category': None, 'author': None} +.. data:: PAGINATED_TEMPLATES The templates to use pagination with, and the number of articles to include on a page. If this value is ``None``, it defaults to ``DEFAULT_PAGINATION``. + The default is ``{'index': None, 'tag': None, 'category': None, 'author': None}``. -.. data:: PAGINATION_PATTERNS = ( - (1, '{name}{extension}', '{name}{extension}'), - (2, '{name}{number}{extension}', '{name}{number}{extension}'), - ) +.. data:: PAGINATION_PATTERNS - A set of patterns that are used to determine advanced pagination output. + A set of patterns that are used to determine advanced pagination output. The + default is:: + + ( + (1, '{name}{extension}', '{name}{extension}'), + (2, '{name}{number}{extension}', '{name}{number}{extension}'), + ) Using Pagination Patterns @@ -1084,59 +1168,62 @@ Translations Pelican offers a way to translate articles. See the :doc:`Content ` section for more information. -.. data:: DEFAULT_LANG = 'en' +.. data:: DEFAULT_LANG - The default language to use. + The default language to use. The default is ``'en'``. -.. data:: ARTICLE_TRANSLATION_ID = 'slug' +.. data:: ARTICLE_TRANSLATION_ID The metadata attribute(s) used to identify which articles are translations of one another. May be a string or a collection of strings. Set to ``None`` - or ``False`` to disable the identification of translations. + or ``False`` to disable the identification of translations. The default is + ``'slug'``. -.. data:: PAGE_TRANSLATION_ID = 'slug' +.. data:: PAGE_TRANSLATION_ID The metadata attribute(s) used to identify which pages are translations of one another. May be a string or a collection of strings. Set to ``None`` or - ``False`` to disable the identification of translations. + ``False`` to disable the identification of translations. The default is + ``'slug'``. -.. data:: TRANSLATION_FEED_ATOM = 'feeds/all-{lang}.atom.xml' +.. data:: TRANSLATION_FEED_ATOM - The location to save the Atom feed for translations. [3]_ + The location to save the Atom feed for translations. [3]_ The default is + ``'feeds/all-{lang}.atom.xml'``. -.. data:: TRANSLATION_FEED_ATOM_URL = None +.. data:: TRANSLATION_FEED_ATOM_URL Relative URL of the Atom feed for translations, including the ``{lang}`` placeholder. [3]_ If not set, ``TRANSLATION_FEED_ATOM`` is used both for - save location and URL. + save location and URL. The default is ``None``. -.. data:: TRANSLATION_FEED_RSS = None, i.e. no RSS +.. data:: TRANSLATION_FEED_RSS - Where to put the RSS feed for translations. + Where to put the RSS feed for translations. The default is ``None``, + meaning no RSS feed. -.. data:: TRANSLATION_FEED_RSS_URL = None +.. data:: TRANSLATION_FEED_RSS_URL Relative URL of the RSS feed for translations, including the ``{lang}`` placeholder. [3]_ If not set, ``TRANSLATION_FEED_RSS`` is used both for save - location and URL. + location and URL. The default is ``None``. .. [3] {lang} is the language code - Ordering content ================ -.. data:: NEWEST_FIRST_ARCHIVES = True +.. data:: NEWEST_FIRST_ARCHIVES Order archives by newest first by date. (False: orders by date with older - articles first.) + articles first.) The default is ``True``. -.. data:: REVERSE_CATEGORY_ORDER = False +.. data:: REVERSE_CATEGORY_ORDER Reverse the category order. (True: lists by reverse alphabetical order; - default lists alphabetically.) + default lists alphabetically.) The default is ``False``. -.. data:: ARTICLE_ORDER_BY = 'reversed-date' +.. data:: ARTICLE_ORDER_BY Defines how the articles (``articles_page.object_list`` in the template) are sorted. Valid options are: metadata as a string (use ``reversed-`` prefix @@ -1144,13 +1231,14 @@ Ordering content the basename of the file (without path), or a custom function to extract the sorting key from articles. Using a value of ``'date'`` will sort articles in chronological order, while the default value, ``'reversed-date'``, will sort - articles by date in reverse order (i.e., newest article comes first). + articles by date in reverse order (i.e., newest article comes first). The + default is ``'reversed-date'``. -.. data:: PAGE_ORDER_BY = 'basename' +.. data:: PAGE_ORDER_BY Defines how the pages (``pages`` variable in the template) are sorted. Options are same as ``ARTICLE_ORDER_BY``. The default value, ``'basename'`` - will sort pages by their basename. + will sort pages by their basename. The default is ``'basename'``. .. _settings/themes: @@ -1166,27 +1254,28 @@ themes. Theme to use to produce the output. Can be a relative or absolute path to a theme folder, or the name of a default theme or a theme installed via - :doc:`pelican-themes` (see below). + :doc:`pelican-themes` (see below). The default theme is "notmyidea". -.. data:: THEME_STATIC_DIR = 'theme' +.. data:: THEME_STATIC_DIR Destination directory in the output path where Pelican will place the files - collected from `THEME_STATIC_PATHS`. Default is `theme`. + collected from `THEME_STATIC_PATHS`. Default is `theme`. The default is + ``'theme'``. -.. data:: THEME_STATIC_PATHS = ['static'] +.. data:: THEME_STATIC_PATHS Static theme paths you want to copy. Default value is `static`, but if your theme has other static paths, you can put them here. If files or directories with the same names are included in the paths defined in this settings, they - will be progressively overwritten. + will be progressively overwritten. The default is ``['static']``. -.. data:: THEME_TEMPLATES_OVERRIDES = [] +.. data:: THEME_TEMPLATES_OVERRIDES A list of paths you want Jinja2 to search for templates before searching the theme's ``templates/`` directory. Allows for overriding individual theme template files without having to fork an existing theme. Jinja2 searches in the following order: files in ``THEME_TEMPLATES_OVERRIDES`` first, then the - theme's ``templates/``. + theme's ``templates/``. The default is ``[]``. You can also extend templates from the theme using the ``{% extends %}`` directive utilizing the ``!theme`` prefix as shown in the following example: @@ -1195,9 +1284,9 @@ themes. {% extends '!theme/article.html' %} -.. data:: CSS_FILE = 'main.css' +.. data:: CSS_FILE - Specify the CSS file you want to load. + Specify the CSS file you want to load. The default is ``'main.css'``. By default, two themes are available. You can specify them using the ``THEME`` setting or by passing the ``-t`` option to the ``pelican`` command: @@ -1228,24 +1317,24 @@ The built-in ``simple`` theme can be customized using the following settings. .. data:: STYLESHEET_URL - The URL of the stylesheet to use. + The URL of the stylesheet to use. The default is ``None``. The built-in ``notmyidea`` theme can make good use of the following settings. Feel free to use them in your themes as well. .. data:: SITESUBTITLE - A subtitle to appear in the header. + A subtitle to appear in the header. The default is ``None``. .. data:: DISQUS_SITENAME Pelican can handle Disqus comments. Specify the Disqus sitename identifier - here. + here. The default is ``None``. .. data:: GITHUB_URL Your GitHub URL (if you have one). It will then use this information to - create a GitHub ribbon. + create a GitHub ribbon. The default is ``None``. .. data:: ANALYTICS @@ -1261,33 +1350,38 @@ Feel free to use them in your themes as well. """ + The default is ``None``. + .. data:: MENUITEMS A list of tuples (Title, URL) for additional menu items to appear at the - beginning of the main menu. + beginning of the main menu. The default is ``None``. .. data:: LINKS - A list of tuples (Title, URL) for links to appear on the header. + A list of tuples (Title, URL) for links to appear on the header. The + default is ``None``. .. data:: SOCIAL - A list of tuples (Title, URL) to appear in the "social" section. + A list of tuples (Title, URL) to appear in the "social" section. The + default is ``None``. .. data:: TWITTER_USERNAME Allows for adding a button to articles to encourage others to tweet about - them. Add your Twitter username if you want this button to appear. + them. Add your Twitter username if you want this button to appear. The + default is ``None``. .. data:: LINKS_WIDGET_NAME Allows override of the name of the links widget. If not specified, defaults - to "links". + to "links". The default is ``None``. .. data:: SOCIAL_WIDGET_NAME Allows override of the name of the "social" widget. If not specified, - defaults to "social". + defaults to "social". The default is ``None``. In addition, you can use the "wide" version of the ``notmyidea`` theme by adding the following to your configuration:: @@ -1403,3 +1497,4 @@ Example settings .. _Jinja Environment documentation: https://jinja.palletsprojects.com/en/latest/api/#jinja2.Environment .. _Docutils Configuration: http://docutils.sourceforge.net/docs/user/config.html +.. _`watchfiles documentation`: https://watchfiles.helpmanual.io/api/filters/#watchfiles.DefaultFilter.ignore_dirs diff --git a/docs/themes.rst b/docs/themes.rst index 2e01ec8e..ace5dcb9 100644 --- a/docs/themes.rst +++ b/docs/themes.rst @@ -17,7 +17,7 @@ To generate its HTML output, Pelican uses the `Jinja `_ templating engine due to its flexibility and straightforward syntax. If you want to create your own theme, feel free to take inspiration from the `"simple" theme -`_. +`_. To generate your site using a theme you have created (or downloaded manually and then modified), you can specify that theme via the ``-t`` flag:: @@ -368,7 +368,7 @@ period_num A tuple of the form (``year``, ``month``, ``day``), You can see an example of how to use `period` in the `"simple" theme period_archives.html template -`_. +`_. .. _period_archives_variable: diff --git a/docs/tips.rst b/docs/tips.rst index 904e5ee7..4df20ae3 100644 --- a/docs/tips.rst +++ b/docs/tips.rst @@ -89,18 +89,18 @@ Publishing a User Site to GitHub Pages from a Branch ---------------------------------------------------- To publish a Pelican site in the form of User Pages, you need to *push* the -content of the ``output`` dir generated by Pelican to the ``master`` branch of +content of the ``output`` dir generated by Pelican to the ``main`` branch of your ``.github.io`` repository on GitHub. Again, you can take advantage of ``ghp-import``:: $ pelican content -o output -s pelicanconf.py $ ghp-import output -b gh-pages - $ git push git@github.com:elemoine/elemoine.github.io.git gh-pages:master + $ git push git@github.com:elemoine/elemoine.github.io.git gh-pages:main The ``git push`` command pushes the local ``gh-pages`` branch (freshly updated by the ``ghp-import`` command) to the ``elemoine.github.io`` repository's -``master`` branch on GitHub. +``main`` branch on GitHub. .. note:: @@ -116,18 +116,19 @@ inside the ``Pelican`` folder you can run:: $ pelican content -o .. -s pelicanconf.py -Now you can push the whole project ``.github.io`` to the master +Now you can push the whole project ``.github.io`` to the main branch of your GitHub repository:: - $ git push origin master + $ git push origin main (assuming origin is set to your remote repository). Publishing to GitHub Pages Using a Custom GitHub Actions Workflow ----------------------------------------------------------------- -Pelican comes with a `custom workflow `_ -for publishing a Pelican site. To use it: +Pelican-powered sites can be published to GitHub Pages via a `custom workflow +`_. +To use it: 1. Enable GitHub Pages in your repo: go to **Settings → Pages** and choose **GitHub Actions** for the **Source** setting. @@ -143,7 +144,7 @@ for publishing a Pelican site. To use it: workflow_dispatch: jobs: deploy: - uses: "getpelican/pelican/.github/workflows/github_pages.yml@master" + uses: "getpelican/pelican/.github/workflows/github_pages.yml@main" permissions: contents: "read" pages: "write" @@ -151,6 +152,25 @@ for publishing a Pelican site. To use it: with: settings: "publishconf.py" + You may want to replace the ``@main`` with the ID of a specific commit in + this repo in order to pin the version of the reusable workflow that you're using: + ``uses: getpelican/pelican/.github/workflows/github_pages.yml@``. + If you do this you might want to get Dependabot to send you automated pull + requests to update that commit ID whenever new versions of this workflow are + published, like so: + + .. code-block:: yaml + + # .github/dependabot.yml + version: 2 + updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "monthly" + + See `GitHub's docs about using Dependabot to keep your actions up to date `_. + 3. Go to the **Actions** tab in your repo (``https://github.com///actions``) and you should see a **Deploy to GitHub Pages** action running. @@ -162,8 +182,8 @@ for publishing a Pelican site. To use it: Notes: -* You don't need to set ``SITEURL`` in your Pelican settings: the workflow will - set it for you +* You don't need to set ``SITEURL`` or ``FEED_DOMAIN`` in your Pelican + settings: the workflow will set them correctly for you * You don't need to commit your ``--output`` / ``OUTPUT_PATH`` directory (``output/``) to git: the workflow will run ``pelican`` to build the output @@ -173,36 +193,117 @@ See `GitHub's docs about reusable workflows )") + signals.all_generators_finalized.send(generators) + + # update links in the summary, etc for p in generators: if hasattr(p, "refresh_metadata_intersite_links"): p.refresh_metadata_intersite_links() - signals.all_generators_finalized.send(generators) - writer = self._get_writer() for p in generators: @@ -183,15 +194,7 @@ class Pelican: ) console.print( - "Done: Processed {}, {}, {}, {}, {} and {} in {:.2f} seconds.".format( - pluralized_articles, - pluralized_drafts, - pluralized_hidden_articles, - pluralized_pages, - pluralized_hidden_pages, - pluralized_draft_pages, - time.time() - start_time, - ) + f"Done: Processed {pluralized_articles}, {pluralized_drafts}, {pluralized_hidden_articles}, {pluralized_pages}, {pluralized_hidden_pages} and {pluralized_draft_pages} in {time.time() - start_time:.2f} seconds." ) def _get_generator_classes(self): @@ -249,6 +252,7 @@ class Pelican: class PrintSettings(argparse.Action): def __call__(self, parser, namespace, values, option_string): + del option_string # Unused argument init_logging(name=__name__) try: @@ -284,6 +288,7 @@ class PrintSettings(argparse.Action): class ParseOverrides(argparse.Action): def __call__(self, parser, namespace, values, option_string=None): + del parser, option_string # Unused arguments overrides = {} for item in values: try: @@ -292,7 +297,7 @@ class ParseOverrides(argparse.Action): raise ValueError( "Extra settings must be specified as KEY=VALUE pairs " f"but you specified {item}" - ) + ) from None try: overrides[k] = json.loads(v) except json.decoder.JSONDecodeError: @@ -303,10 +308,13 @@ class ParseOverrides(argparse.Action): "Use -e KEY='\"string\"' to specify a string value; " "-e KEY=null to specify None; " "-e KEY=false (or true) to specify False (or True)." - ) + ) from None setattr(namespace, self.dest, overrides) +LOG_HANDLERS = {"plain": None, "rich": DEFAULT_LOG_HANDLER} + + def parse_arguments(argv=None): parser = argparse.ArgumentParser( description="A tool to generate a static blog, " @@ -344,8 +352,8 @@ def parse_arguments(argv=None): "--settings", dest="settings", help="The settings of the application, this is " - "automatically set to {} if a file exists with this " - "name.".format(DEFAULT_CONFIG_NAME), + f"automatically set to {DEFAULT_CONFIG_NAME} if a file exists with this " + "name.", ) parser.add_argument( @@ -396,8 +404,7 @@ def parse_arguments(argv=None): "--autoreload", dest="autoreload", action="store_true", - help="Relaunch pelican each time a modification occurs" - " on the content files.", + help="Relaunch pelican each time a modification occurs on the content files.", ) parser.add_argument( @@ -415,7 +422,7 @@ def parse_arguments(argv=None): "--relative-urls", dest="relative_paths", action="store_true", - help="Use relative urls in output, " "useful for site development", + help="Use relative urls in output, useful for site development", ) parser.add_argument( @@ -431,7 +438,7 @@ def parse_arguments(argv=None): "--ignore-cache", action="store_true", dest="ignore_cache", - help="Ignore content cache " "from previous runs by not loading cache files.", + help="Ignore content cache from previous runs by not loading cache files.", ) parser.add_argument( @@ -440,8 +447,17 @@ def parse_arguments(argv=None): choices=("errors", "warnings"), default="", help=( - "Exit the program with non-zero status if any " - "errors/warnings encountered." + "Exit the program with non-zero status if any errors/warnings encountered." + ), + ) + + parser.add_argument( + "--log-handler", + default="rich", + choices=LOG_HANDLERS, + help=( + "Which handler to use to format log messages. " + "The `rich` handler prints output in columns." ), ) @@ -475,7 +491,7 @@ def parse_arguments(argv=None): "-b", "--bind", dest="bind", - help="IP to bind to when serving files via HTTP " "(default: 127.0.0.1)", + help="IP to bind to when serving files via HTTP (default: 127.0.0.1)", ) parser.add_argument( @@ -558,7 +574,7 @@ def autoreload(args, excqueue=None): try: pelican.run() - changed_files = wait_for_changes(args.settings, Readers, settings) + changed_files = wait_for_changes(args.settings, settings) changed_files = {c[1] for c in changed_files} if settings_file in changed_files: @@ -621,6 +637,7 @@ def main(argv=None): level=args.verbosity, fatal=args.fatal, name=__name__, + handler=LOG_HANDLERS[args.log_handler], logs_dedup_min_level=logs_dedup_min_level, ) diff --git a/pelican/__main__.py b/pelican/__main__.py index 17aead3b..41a1f712 100644 --- a/pelican/__main__.py +++ b/pelican/__main__.py @@ -4,6 +4,5 @@ python -m pelican module entry point to run via python -m from . import main - if __name__ == "__main__": main() diff --git a/pelican/cache.py b/pelican/cache.py index d1f8550e..8bd34268 100644 --- a/pelican/cache.py +++ b/pelican/cache.py @@ -1,3 +1,4 @@ +import gzip import hashlib import logging import os @@ -22,8 +23,6 @@ class FileDataCacher: self._cache_path = os.path.join(self.settings["CACHE_PATH"], cache_name) self._cache_data_policy = caching_policy if self.settings["GZIP_CACHE"]: - import gzip - self._cache_open = gzip.open else: self._cache_open = open diff --git a/pelican/contents.py b/pelican/contents.py index 474e5bbf..a06a1a6a 100644 --- a/pelican/contents.py +++ b/pelican/contents.py @@ -4,9 +4,9 @@ import locale import logging import os import re -from datetime import timezone from html import unescape -from urllib.parse import unquote, urljoin, urlparse, urlunparse +from typing import Any, Optional +from urllib.parse import ParseResult, unquote, urljoin, urlparse, urlunparse try: from zoneinfo import ZoneInfo @@ -15,7 +15,10 @@ except ModuleNotFoundError: from pelican.plugins import signals -from pelican.settings import DEFAULT_CONFIG +from pelican.settings import DEFAULT_CONFIG, Settings + +# Import these so that they're available when you import from pelican.contents. +from pelican.urlwrappers import Author, Category, Tag, URLWrapper # NOQA from pelican.utils import ( deprecated_attribute, memoized, @@ -24,12 +27,10 @@ from pelican.utils import ( sanitised_join, set_date_tzinfo, slugify, + truncate_html_paragraphs, truncate_html_words, ) -# Import these so that they're available when you import from pelican.contents. -from pelican.urlwrappers import Author, Category, Tag, URLWrapper # NOQA - logger = logging.getLogger(__name__) @@ -44,12 +45,20 @@ class Content: """ + default_template: Optional[str] = None + mandatory_properties: tuple[str, ...] = () + @deprecated_attribute(old="filename", new="source_path", since=(3, 2, 0)) def filename(): return None def __init__( - self, content, metadata=None, settings=None, source_path=None, context=None + self, + content: str, + metadata: Optional[dict[str, Any]] = None, + settings: Optional[Settings] = None, + source_path: Optional[str] = None, + context: Optional[dict[Any, Any]] = None, ): if metadata is None: metadata = {} @@ -63,7 +72,7 @@ class Content: self._context = context self.translations = [] - local_metadata = dict() + local_metadata = {} local_metadata.update(metadata) # set metadata as attributes @@ -156,10 +165,10 @@ class Content: signals.content_object_init.send(self) - def __str__(self): + def __str__(self) -> str: return self.source_path or repr(self) - def _has_valid_mandatory_properties(self): + def _has_valid_mandatory_properties(self) -> bool: """Test mandatory properties are set.""" for prop in self.mandatory_properties: if not hasattr(self, prop): @@ -169,7 +178,7 @@ class Content: return False return True - def _has_valid_save_as(self): + def _has_valid_save_as(self) -> bool: """Return true if save_as doesn't write outside output path, false otherwise.""" try: @@ -190,7 +199,7 @@ class Content: return True - def _has_valid_status(self): + def _has_valid_status(self) -> bool: if hasattr(self, "allowed_statuses"): if self.status not in self.allowed_statuses: logger.error( @@ -204,7 +213,7 @@ class Content: # if undefined we allow all return True - def is_valid(self): + def is_valid(self) -> bool: """Validate Content""" # Use all() to not short circuit and get results of all validations return all( @@ -216,7 +225,7 @@ class Content: ) @property - def url_format(self): + def url_format(self) -> dict[str, Any]: """Returns the URL, formatted with the proper values""" metadata = copy.copy(self.metadata) path = self.metadata.get("path", self.get_relative_source_path()) @@ -232,19 +241,19 @@ class Content: ) return metadata - def _expand_settings(self, key, klass=None): + def _expand_settings(self, key: str, klass: Optional[str] = None) -> str: if not klass: klass = self.__class__.__name__ fq_key = (f"{klass}_{key}").upper() return str(self.settings[fq_key]).format(**self.url_format) - def get_url_setting(self, key): + def get_url_setting(self, key: str) -> str: if hasattr(self, "override_" + key): return getattr(self, "override_" + key) - key = key if self.in_default_lang else "lang_%s" % key + key = key if self.in_default_lang else f"lang_{key}" return self._expand_settings(key) - def _link_replacer(self, siteurl, m): + def _link_replacer(self, siteurl: str, m: re.Match) -> str: what = m.group("what") value = urlparse(m.group("value")) path = value.path @@ -272,15 +281,15 @@ class Content: # XXX Put this in a different location. if what in {"filename", "static", "attach"}: - def _get_linked_content(key, url): + def _get_linked_content(key: str, url: ParseResult) -> Optional[Content]: nonlocal value - def _find_path(path): + def _find_path(path: str) -> Optional[Content]: if path.startswith("/"): path = path[1:] else: # relative to the source path of this content - path = self.get_relative_source_path( + path = self.get_relative_source_path( # type: ignore os.path.join(self.relative_dir, path) ) return self._context[key].get(path, None) @@ -324,7 +333,7 @@ class Content: linked_content = _get_linked_content(key, value) if linked_content: if what == "attach": - linked_content.attach_to(self) + linked_content.attach_to(self) # type: ignore origin = joiner(siteurl, linked_content.url) origin = origin.replace("\\", "/") # for Windows paths. else: @@ -333,8 +342,7 @@ class Content: value.geturl(), extra={ "limit_msg": ( - "Other resources were not found " - "and their urls not replaced" + "Other resources were not found and their urls not replaced" ) }, ) @@ -348,8 +356,9 @@ class Content: origin = joiner(siteurl, Author(path, self.settings).url) else: logger.warning( - "Replacement Indicator '%s' not recognized, " "skipping replacement", + "Replacement Indicator %r not recognized in %r, skipping replacement", what, + origin, ) # keep all other parts, such as query, fragment, etc. @@ -359,18 +368,18 @@ class Content: return "".join((m.group("markup"), m.group("quote"), origin, m.group("quote"))) - def _get_intrasite_link_regex(self): + def _get_intrasite_link_regex(self) -> re.Pattern: intrasite_link_regex = self.settings["INTRASITE_LINK_REGEX"] - regex = r""" + regex = rf""" (?P<[^\>]+ # match tag with all url-value attributes (?:href|src|poster|data|cite|formaction|action|content)\s*=\s*) (?P["\']) # require value to be quoted - (?P{}(?P.*?)) # the url value - (?P=quote)""".format(intrasite_link_regex) + (?P{intrasite_link_regex}(?P.*?)) # the url value + (?P=quote)""" return re.compile(regex, re.X) - def _update_content(self, content, siteurl): + def _update_content(self, content: str, siteurl: str) -> str: """Update the content attribute. Change all the relative paths of the content to relative paths @@ -386,7 +395,7 @@ class Content: hrefs = self._get_intrasite_link_regex() return hrefs.sub(lambda m: self._link_replacer(siteurl, m), content) - def get_static_links(self): + def get_static_links(self) -> set[str]: static_links = set() hrefs = self._get_intrasite_link_regex() for m in hrefs.finditer(self._content): @@ -402,15 +411,15 @@ class Content: path = self.get_relative_source_path( os.path.join(self.relative_dir, path) ) - path = path.replace("%20", " ") + path = path.replace("%20", " ") # type: ignore static_links.add(path) return static_links - def get_siteurl(self): + def get_siteurl(self) -> str: return self._context.get("localsiteurl", "") @memoized - def get_content(self, siteurl): + def get_content(self, siteurl: str) -> str: if hasattr(self, "_get_content"): content = self._get_content() else: @@ -418,11 +427,11 @@ class Content: return self._update_content(content, siteurl) @property - def content(self): + def content(self) -> str: return self.get_content(self.get_siteurl()) @memoized - def get_summary(self, siteurl): + def get_summary(self, _siteurl: str) -> str: """Returns the summary of an article. This is based on the summary metadata if set, otherwise truncate the @@ -431,20 +440,25 @@ class Content: if "summary" in self.metadata: return self.metadata["summary"] + content = self.content + max_paragraphs = self.settings.get("SUMMARY_MAX_PARAGRAPHS") + if max_paragraphs is not None: + content = truncate_html_paragraphs(self.content, max_paragraphs) + if self.settings["SUMMARY_MAX_LENGTH"] is None: - return self.content + return content return truncate_html_words( - self.content, + content, self.settings["SUMMARY_MAX_LENGTH"], self.settings["SUMMARY_END_SUFFIX"], ) @property - def summary(self): + def summary(self) -> str: return self.get_summary(self.get_siteurl()) - def _get_summary(self): + def _get_summary(self) -> str: """deprecated function to access summary""" logger.warning( @@ -454,34 +468,35 @@ class Content: return self.summary @summary.setter - def summary(self, value): + def summary(self, value: str): """Dummy function""" - pass @property - def status(self): + def status(self) -> str: return self._status @status.setter - def status(self, value): + def status(self, value: str) -> None: # TODO maybe typecheck self._status = value.lower() @property - def url(self): + def url(self) -> str: return self.get_url_setting("url") @property - def save_as(self): + def save_as(self) -> str: return self.get_url_setting("save_as") - def _get_template(self): + def _get_template(self) -> str: if hasattr(self, "template") and self.template is not None: return self.template else: return self.default_template - def get_relative_source_path(self, source_path=None): + def get_relative_source_path( + self, source_path: Optional[str] = None + ) -> Optional[str]: """Return the relative path (from the content path) to the given source_path. @@ -501,7 +516,7 @@ class Content: ) @property - def relative_dir(self): + def relative_dir(self) -> str: return posixize_path( os.path.dirname( os.path.relpath( @@ -511,7 +526,7 @@ class Content: ) ) - def refresh_metadata_intersite_links(self): + def refresh_metadata_intersite_links(self) -> None: for key in self.settings["FORMATTED_FIELDS"]: if key in self.metadata and key != "summary": value = self._update_content(self.metadata[key], self.get_siteurl()) @@ -519,29 +534,53 @@ class Content: setattr(self, key.lower(), value) # _summary is an internal variable that some plugins may be writing to, - # so ensure changes to it are picked up - if ( - "summary" in self.settings["FORMATTED_FIELDS"] - and "summary" in self.metadata - ): - self._summary = self._update_content(self._summary, self.get_siteurl()) - self.metadata["summary"] = self._summary + # so ensure changes to it are picked up, and write summary back to it + if "summary" in self.settings["FORMATTED_FIELDS"]: + if hasattr(self, "_summary"): + self.metadata["summary"] = self._summary + + if "summary" in self.metadata: + self.metadata["summary"] = self._update_content( + self.metadata["summary"], self.get_siteurl() + ) + self._summary = self.metadata["summary"] + + +class SkipStub(Content): + """Stub class representing content that should not be processed in any way.""" + + def __init__( + self, content, metadata=None, settings=None, source_path=None, context=None + ): + del content, metadata, settings, context # Unused arguments + self.source_path = source_path + + def is_valid(self): + return False + + @property + def content(self): + raise NotImplementedError("Stub content should not be read") + + @property + def save_as(self): + raise NotImplementedError("Stub content cannot be saved") class Page(Content): mandatory_properties = ("title",) - allowed_statuses = ("published", "hidden", "draft") + allowed_statuses = ("published", "hidden", "draft", "skip") default_status = "published" default_template = "page" - def _expand_settings(self, key): + def _expand_settings(self, key: str) -> str: klass = "draft_page" if self.status == "draft" else None return super()._expand_settings(key, klass) class Article(Content): mandatory_properties = ("title", "date", "category") - allowed_statuses = ("published", "hidden", "draft") + allowed_statuses = ("published", "hidden", "draft", "skip") default_status = "published" default_template = "article" @@ -553,7 +592,7 @@ class Article(Content): if self.date.tzinfo is None: now = datetime.datetime.now() else: - now = datetime.datetime.utcnow().replace(tzinfo=timezone.utc) + now = datetime.datetime.now(datetime.timezone.utc) if self.date > now: self.status = "draft" @@ -561,7 +600,7 @@ class Article(Content): if not hasattr(self, "date") and self.status == "draft": self.date = datetime.datetime.max.replace(tzinfo=self.timezone) - def _expand_settings(self, key): + def _expand_settings(self, key: str) -> str: klass = "draft" if self.status == "draft" else "article" return super()._expand_settings(key, klass) @@ -571,7 +610,7 @@ class Static(Content): default_status = "published" default_template = None - def __init__(self, *args, **kwargs): + def __init__(self, *args, **kwargs) -> None: super().__init__(*args, **kwargs) self._output_location_referenced = False @@ -588,18 +627,18 @@ class Static(Content): return None @property - def url(self): + def url(self) -> str: # Note when url has been referenced, so we can avoid overriding it. self._output_location_referenced = True return super().url @property - def save_as(self): + def save_as(self) -> str: # Note when save_as has been referenced, so we can avoid overriding it. self._output_location_referenced = True return super().save_as - def attach_to(self, content): + def attach_to(self, content: Content) -> None: """Override our output directory with that of the given content object.""" # Determine our file's new output path relative to the linking @@ -624,7 +663,7 @@ class Static(Content): new_url = path_to_url(new_save_as) - def _log_reason(reason): + def _log_reason(reason: str) -> None: logger.warning( "The {attach} link in %s cannot relocate " "%s because %s. Falling back to " diff --git a/pelican/generators.py b/pelican/generators.py index 3b5ca9e4..e04d1733 100644 --- a/pelican/generators.py +++ b/pelican/generators.py @@ -7,6 +7,7 @@ from collections import defaultdict from functools import partial from itertools import chain, groupby from operator import attrgetter +from typing import Optional from jinja2 import ( BaseLoader, @@ -18,7 +19,7 @@ from jinja2 import ( ) from pelican.cache import FileStampDataCacher -from pelican.contents import Article, Page, Static +from pelican.contents import Article, Page, SkipStub, Static from pelican.plugins import signals from pelican.plugins._utils import plugin_enabled from pelican.readers import Readers @@ -137,7 +138,7 @@ class Generator: def _include_path(self, path, extensions=None): """Inclusion logic for .get_files(), returns True/False - :param path: the path which might be including + :param path: potential path to include (relative to content root) :param extensions: the list of allowed extensions, or False if all extensions are allowed """ @@ -156,7 +157,9 @@ class Generator: return False - def get_files(self, paths, exclude=[], extensions=None): + def get_files( + self, paths, exclude: Optional[list[str]] = None, extensions=None + ) -> set[str]: """Return a list of files to use, based on rules :param paths: the list pf paths to search (relative to self.path) @@ -164,6 +167,8 @@ class Generator: :param extensions: the list of allowed extensions (if False, all extensions are allowed) """ + if exclude is None: + exclude = [] # backward compatibility for older generators if isinstance(paths, str): paths = [paths] @@ -248,6 +253,13 @@ class Generator: # return the name of the class for logging purposes return self.__class__.__name__ + def _check_disabled_readers(self, paths, exclude: Optional[list[str]]) -> None: + """Log warnings for files that would have been processed by disabled readers.""" + for fil in self.get_files( + paths, exclude=exclude, extensions=self.readers.disabled_extensions + ): + self.readers.check_file(fil) + class CachingGenerator(Generator, FileStampDataCacher): """Subclass of Generator and FileStampDataCacher classes @@ -284,6 +296,7 @@ class _FileLoader(BaseLoader): self.fullpath = os.path.join(basedir, path) def get_source(self, environment, template): + del environment # Unused argument if template != self.path or not os.path.exists(self.fullpath): raise TemplateNotFound(template) mtime = os.path.getmtime(self.fullpath) @@ -384,8 +397,8 @@ class ArticlesGenerator(CachingGenerator): str(self.settings["CATEGORY_FEED_ATOM"]).format(slug=cat.slug), self.settings.get( "CATEGORY_FEED_ATOM_URL", - str(self.settings["CATEGORY_FEED_ATOM"]).format(slug=cat.slug), - ), + str(self.settings["CATEGORY_FEED_ATOM"]), + ).format(slug=cat.slug), feed_title=cat.name, ) @@ -396,8 +409,8 @@ class ArticlesGenerator(CachingGenerator): str(self.settings["CATEGORY_FEED_RSS"]).format(slug=cat.slug), self.settings.get( "CATEGORY_FEED_RSS_URL", - str(self.settings["CATEGORY_FEED_RSS"]).format(slug=cat.slug), - ), + str(self.settings["CATEGORY_FEED_RSS"]), + ).format(slug=cat.slug), feed_title=cat.name, feed_type="rss", ) @@ -410,8 +423,8 @@ class ArticlesGenerator(CachingGenerator): str(self.settings["AUTHOR_FEED_ATOM"]).format(slug=auth.slug), self.settings.get( "AUTHOR_FEED_ATOM_URL", - str(self.settings["AUTHOR_FEED_ATOM"]).format(slug=auth.slug), - ), + str(self.settings["AUTHOR_FEED_ATOM"]), + ).format(slug=auth.slug), feed_title=auth.name, ) @@ -422,8 +435,8 @@ class ArticlesGenerator(CachingGenerator): str(self.settings["AUTHOR_FEED_RSS"]).format(slug=auth.slug), self.settings.get( "AUTHOR_FEED_RSS_URL", - str(self.settings["AUTHOR_FEED_RSS"]).format(slug=auth.slug), - ), + str(self.settings["AUTHOR_FEED_RSS"]), + ).format(slug=auth.slug), feed_title=auth.name, feed_type="rss", ) @@ -437,8 +450,8 @@ class ArticlesGenerator(CachingGenerator): str(self.settings["TAG_FEED_ATOM"]).format(slug=tag.slug), self.settings.get( "TAG_FEED_ATOM_URL", - str(self.settings["TAG_FEED_ATOM"]).format(slug=tag.slug), - ), + str(self.settings["TAG_FEED_ATOM"]), + ).format(slug=tag.slug), feed_title=tag.name, ) @@ -449,8 +462,8 @@ class ArticlesGenerator(CachingGenerator): str(self.settings["TAG_FEED_RSS"]).format(slug=tag.slug), self.settings.get( "TAG_FEED_RSS_URL", - str(self.settings["TAG_FEED_RSS"]).format(slug=tag.slug), - ), + str(self.settings["TAG_FEED_RSS"]), + ).format(slug=tag.slug), feed_title=tag.name, feed_type="rss", ) @@ -471,10 +484,8 @@ class ArticlesGenerator(CachingGenerator): str(self.settings["TRANSLATION_FEED_ATOM"]).format(lang=lang), self.settings.get( "TRANSLATION_FEED_ATOM_URL", - str(self.settings["TRANSLATION_FEED_ATOM"]).format( - lang=lang - ), - ), + str(self.settings["TRANSLATION_FEED_ATOM"]), + ).format(lang=lang), ) if self.settings.get("TRANSLATION_FEED_RSS"): writer.write_feed( @@ -537,9 +548,9 @@ class ArticlesGenerator(CachingGenerator): """Generate direct templates pages""" for template in self.settings["DIRECT_TEMPLATES"]: save_as = self.settings.get( - "%s_SAVE_AS" % template.upper(), "%s.html" % template + f"{template.upper()}_SAVE_AS", f"{template}.html" ) - url = self.settings.get("%s_URL" % template.upper(), "%s.html" % template) + url = self.settings.get(f"{template.upper()}_URL", f"{template}.html") if not save_as: continue @@ -643,6 +654,11 @@ class ArticlesGenerator(CachingGenerator): self.generate_authors(write) self.generate_drafts(write) + def check_disabled_readers(self) -> None: + self._check_disabled_readers( + self.settings["ARTICLE_PATHS"], exclude=self.settings["ARTICLE_EXCLUDES"] + ) + def generate_context(self): """Add the articles into the shared context""" @@ -675,6 +691,10 @@ class ArticlesGenerator(CachingGenerator): self._add_failed_source_path(f) continue + if isinstance(article, SkipStub): + logger.debug("Safely skipping %s", f) + continue + if not article.is_valid(): self._add_failed_source_path(f) continue @@ -687,6 +707,8 @@ class ArticlesGenerator(CachingGenerator): all_drafts.append(article) elif article.status == "hidden": hidden_articles.append(article) + elif article.status == "skip": + raise AssertionError("Documents with 'skip' status should be skipped") self.add_source_path(article) self.add_static_links(article) @@ -849,6 +871,11 @@ class PagesGenerator(CachingGenerator): super().__init__(*args, **kwargs) signals.page_generator_init.send(self) + def check_disabled_readers(self) -> None: + self._check_disabled_readers( + self.settings["PAGE_PATHS"], exclude=self.settings["PAGE_EXCLUDES"] + ) + def generate_context(self): all_pages = [] hidden_pages = [] @@ -879,6 +906,10 @@ class PagesGenerator(CachingGenerator): self._add_failed_source_path(f) continue + if isinstance(page, SkipStub): + logger.debug("Safely skipping %s", f) + continue + if not page.is_valid(): self._add_failed_source_path(f) continue @@ -891,6 +922,9 @@ class PagesGenerator(CachingGenerator): hidden_pages.append(page) elif page.status == "draft": draft_pages.append(page) + elif page.status == "skip": + raise AssertionError("Documents with 'skip' status should be skipped") + self.add_source_path(page) self.add_static_links(page) @@ -953,6 +987,11 @@ class StaticGenerator(Generator): self.fallback_to_symlinks = False signals.static_generator_init.send(self) + def check_disabled_readers(self) -> None: + self._check_disabled_readers( + self.settings["STATIC_PATHS"], exclude=self.settings["STATIC_EXCLUDES"] + ) + def generate_context(self): self.staticfiles = [] linked_files = set(self.context["static_links"]) @@ -984,6 +1023,7 @@ class StaticGenerator(Generator): signals.static_generator_finalized.send(self) def generate_output(self, writer): + del writer # Unused argument self._copy_paths( self.settings["THEME_STATIC_PATHS"], self.theme, @@ -1040,7 +1080,7 @@ class StaticGenerator(Generator): save_as = os.path.join(self.output_path, staticfile.save_as) s_mtime = os.path.getmtime(source_path) d_mtime = os.path.getmtime(save_as) - return s_mtime - d_mtime > 0.000001 + return s_mtime - d_mtime > 0.000001 # noqa: PLR2004 def _link_or_copy_staticfile(self, sc): if self.settings["STATIC_CREATE_LINKS"]: @@ -1070,7 +1110,7 @@ class StaticGenerator(Generator): except OSError as err: if err.errno == errno.EXDEV: # 18: Invalid cross-device link logger.debug( - "Cross-device links not valid. " "Creating symbolic links instead." + "Cross-device links not valid. Creating symbolic links instead." ) self.fallback_to_symlinks = True self._link_staticfile(sc) @@ -1093,6 +1133,7 @@ class SourceFileGenerator(Generator): copy(obj.source_path, dest) def generate_output(self, writer=None): + del writer # Unused argument logger.info("Generating source files...") for obj in chain(self.context["articles"], self.context["pages"]): self._create_source(obj) diff --git a/pelican/log.py b/pelican/log.py index 0d2b6a3f..27478d14 100644 --- a/pelican/log.py +++ b/pelican/log.py @@ -1,4 +1,5 @@ import logging +import warnings from collections import defaultdict from rich.console import Console @@ -85,13 +86,39 @@ class FatalLogger(LimitLogger): warnings_fatal = False errors_fatal = False - def warning(self, *args, **kwargs): - super().warning(*args, **kwargs) + def warning(self, *args, stacklevel=1, **kwargs): + """ + Displays a logging warning. + + Wrapping it here allows Pelican to filter warnings, and conditionally + make warnings fatal. + + Args: + stacklevel (int): the stacklevel that would be used to display the + calling location, except for this function. Adjusting the + stacklevel allows you to see the "true" calling location of the + warning, rather than this wrapper location. + """ + stacklevel += 1 + super().warning(*args, stacklevel=stacklevel, **kwargs) if FatalLogger.warnings_fatal: raise RuntimeError("Warning encountered") - def error(self, *args, **kwargs): - super().error(*args, **kwargs) + def error(self, *args, stacklevel=1, **kwargs): + """ + Displays a logging error. + + Wrapping it here allows Pelican to filter errors, and conditionally + make errors non-fatal. + + Args: + stacklevel (int): the stacklevel that would be used to display the + calling location, except for this function. Adjusting the + stacklevel allows you to see the "true" calling location of the + error, rather than this wrapper location. + """ + stacklevel += 1 + super().error(*args, stacklevel=stacklevel, **kwargs) if FatalLogger.errors_fatal: raise RuntimeError("Error encountered") @@ -100,11 +127,13 @@ logging.setLoggerClass(FatalLogger) # force root logger to be of our preferred class logging.getLogger().__class__ = FatalLogger +DEFAULT_LOG_HANDLER = RichHandler(console=console) + def init( level=None, fatal="", - handler=RichHandler(console=console), + handler=DEFAULT_LOG_HANDLER, name=None, logs_dedup_min_level=None, ): @@ -113,7 +142,10 @@ def init( LOG_FORMAT = "%(message)s" logging.basicConfig( - level=level, format=LOG_FORMAT, datefmt="[%H:%M:%S]", handlers=[handler] + level=level, + format=LOG_FORMAT, + datefmt="[%H:%M:%S]", + handlers=[handler] if handler else [], ) logger = logging.getLogger(name) @@ -125,8 +157,6 @@ def init( def log_warnings(): - import warnings - logging.captureWarnings(True) warnings.simplefilter("default", DeprecationWarning) init(logging.DEBUG, name="py.warnings") diff --git a/pelican/paginator.py b/pelican/paginator.py index e1d50881..9dcbb9d7 100644 --- a/pelican/paginator.py +++ b/pelican/paginator.py @@ -5,7 +5,7 @@ from collections import namedtuple from math import ceil logger = logging.getLogger(__name__) -PaginationRule = namedtuple( +PaginationRule = namedtuple( # noqa: PYI024 "PaginationRule", "min_page URL SAVE_AS", ) @@ -53,7 +53,7 @@ class Paginator: "Returns the total number of pages." if self._num_pages is None: hits = max(1, self.count - self.orphans) - self._num_pages = int(ceil(hits / (float(self.per_page) or 1))) + self._num_pages = ceil(hits / (float(self.per_page) or 1)) return self._num_pages num_pages = property(_get_num_pages) @@ -131,9 +131,8 @@ class Page: if not self.has_next(): rule = p break - else: - if p.min_page <= self.number: - rule = p + elif p.min_page <= self.number: + rule = p if not rule: return "" diff --git a/pelican/plugins/_utils.py b/pelican/plugins/_utils.py index 805ed049..e21201a7 100644 --- a/pelican/plugins/_utils.py +++ b/pelican/plugins/_utils.py @@ -6,7 +6,6 @@ import logging import pkgutil import sys - logger = logging.getLogger(__name__) @@ -20,7 +19,7 @@ def iter_namespace(ns_pkg): def get_namespace_plugins(ns_pkg=None): if ns_pkg is None: - import pelican.plugins as ns_pkg + import pelican.plugins as ns_pkg # noqa: PLC0415 return { name: importlib.import_module(name) @@ -30,7 +29,7 @@ def get_namespace_plugins(ns_pkg=None): def list_plugins(ns_pkg=None): - from pelican.log import init as init_logging + from pelican.log import init as init_logging # noqa: PLC0415 init_logging(logging.INFO) ns_plugins = get_namespace_plugins(ns_pkg) diff --git a/pelican/plugins/signals.py b/pelican/plugins/signals.py index 27177367..c36f595d 100644 --- a/pelican/plugins/signals.py +++ b/pelican/plugins/signals.py @@ -1,4 +1,4 @@ -from blinker import signal, Signal +from blinker import Signal, signal from ordered_set import OrderedSet # Signals will call functions in the order of connection, i.e. plugin order diff --git a/pelican/readers.py b/pelican/readers.py index 60b9765a..ca1b2393 100644 --- a/pelican/readers.py +++ b/pelican/readers.py @@ -15,14 +15,14 @@ from docutils.writers.html4css1 import HTMLTranslator, Writer from pelican import rstdirectives # NOQA from pelican.cache import FileStampDataCacher -from pelican.contents import Author, Category, Page, Tag +from pelican.contents import Author, Category, Page, SkipStub, Tag from pelican.plugins import signals -from pelican.utils import get_date, pelican_open, posixize_path +from pelican.utils import file_suffix, get_date, pelican_open, posixize_path try: from markdown import Markdown except ImportError: - Markdown = False # NOQA + Markdown = False # Metadata processors have no way to discard an unwanted value, so we have # them return this value instead to signal that it should be discarded later. @@ -45,15 +45,15 @@ DUPLICATES_DEFINITIONS_ALLOWED = { METADATA_PROCESSORS = { "tags": lambda x, y: ([Tag(tag, y) for tag in ensure_metadata_list(x)] or _DISCARD), - "date": lambda x, y: get_date(x.replace("_", " ")), - "modified": lambda x, y: get_date(x), - "status": lambda x, y: x.strip() or _DISCARD, + "date": lambda x, _y: get_date(x.replace("_", " ")), + "modified": lambda x, _y: get_date(x), + "status": lambda x, _y: x.strip() or _DISCARD, "category": lambda x, y: _process_if_nonempty(Category, x, y), "author": lambda x, y: _process_if_nonempty(Author, x, y), "authors": lambda x, y: ( [Author(author, y) for author in ensure_metadata_list(x)] or _DISCARD ), - "slug": lambda x, y: x.strip() or _DISCARD, + "slug": lambda x, _y: x.strip() or _DISCARD, } logger = logging.getLogger(__name__) @@ -121,10 +121,15 @@ class BaseReader: def read(self, source_path): "No-op parser" + del source_path # Unused argument content = None metadata = {} return content, metadata + def disabled_message(self) -> str: + """Message about why this plugin was disabled.""" + return "" + class _FieldBodyTranslator(HTMLTranslator): def __init__(self, document): @@ -161,6 +166,7 @@ class PelicanHTMLTranslator(HTMLTranslator): self.body.append(self.starttag(node, "abbr", "", **attrs)) def depart_abbreviation(self, node): + del node # Unused argument self.body.append("") def visit_image(self, node): @@ -199,7 +205,7 @@ class RstReader(BaseReader): self._language_code = lang_code else: logger.warning( - "Docutils has no localization for '%s'." " Using 'en' instead.", + "Docutils has no localization for '%s'. Using 'en' instead.", lang_code, ) self._language_code = "en" @@ -320,7 +326,7 @@ class MarkdownReader(BaseReader): elif not DUPLICATES_DEFINITIONS_ALLOWED.get(name, True): if len(value) > 1: logger.warning( - "Duplicate definition of `%s` " "for %s. Using first one.", + "Duplicate definition of `%s` for %s. Using first one.", name, self._source_path, ) @@ -347,6 +353,12 @@ class MarkdownReader(BaseReader): metadata = {} return content, metadata + def disabled_message(self) -> str: + return ( + "Could not import 'markdown.Markdown'. " + "Have you installed the 'markdown' package?" + ) + class HTMLReader(BaseReader): """Parses HTML files as input, looking for meta, title, and body tags""" @@ -508,17 +520,23 @@ class Readers(FileStampDataCacher): def __init__(self, settings=None, cache_name=""): self.settings = settings or {} self.readers = {} + self.disabled_readers = {} + # extension => reader for readers that are enabled self.reader_classes = {} + # extension => reader for readers that are not enabled + disabled_reader_classes = {} for cls in [BaseReader] + BaseReader.__subclasses__(): if not cls.enabled: logger.debug( "Missing dependencies for %s", ", ".join(cls.file_extensions) ) - continue for ext in cls.file_extensions: - self.reader_classes[ext] = cls + if cls.enabled: + self.reader_classes[ext] = cls + else: + disabled_reader_classes[ext] = cls if self.settings["READERS"]: self.reader_classes.update(self.settings["READERS"]) @@ -531,6 +549,9 @@ class Readers(FileStampDataCacher): self.readers[fmt] = reader_class(self.settings) + for fmt, reader_class in disabled_reader_classes.items(): + self.disabled_readers[fmt] = reader_class(self.settings) + # set up caching cache_this_level = ( cache_name != "" and self.settings["CONTENT_CACHING_LAYER"] == "reader" @@ -541,8 +562,13 @@ class Readers(FileStampDataCacher): @property def extensions(self): + """File extensions that will be processed by a reader.""" return self.readers.keys() + @property + def disabled_extensions(self): + return self.disabled_readers.keys() + def read_file( self, base_path, @@ -562,8 +588,7 @@ class Readers(FileStampDataCacher): logger.debug("Read file %s -> %s", source_path, content_class.__name__) if not fmt: - _, ext = os.path.splitext(os.path.basename(path)) - fmt = ext[1:] + fmt = file_suffix(path) if fmt not in self.readers: raise TypeError("Pelican does not know how to parse %s", path) @@ -607,8 +632,9 @@ class Readers(FileStampDataCacher): # eventually filter the content with typogrify if asked so if self.settings["TYPOGRIFY"]: - from typogrify.filters import typogrify - import smartypants + # typogrify is an optional feature, user may not have it installed + import smartypants # noqa: PLC0415 + from typogrify.filters import typogrify # noqa: PLC0415 typogrify_dashes = self.settings["TYPOGRIFY_DASHES"] if typogrify_dashes == "oldschool": @@ -625,11 +651,22 @@ class Readers(FileStampDataCacher): smartypants.Attr.default |= smartypants.Attr.w def typogrify_wrapper(text): - """Ensures ignore_tags feature is backward compatible""" + """Ensure compatibility with older versions of Typogrify. + + The 'TYPOGRIFY_IGNORE_TAGS' and/or 'TYPOGRIFY_OMIT_FILTERS' + settings will be ignored if the installed version of Typogrify + doesn't have the corresponding features.""" try: - return typogrify(text, self.settings["TYPOGRIFY_IGNORE_TAGS"]) + return typogrify( + text, + self.settings["TYPOGRIFY_IGNORE_TAGS"], + **dict.fromkeys(self.settings["TYPOGRIFY_OMIT_FILTERS"], False), + ) except TypeError: - return typogrify(text) + try: + typogrify(text, self.settings["TYPOGRIFY_IGNORE_TAGS"]) + except TypeError: + return typogrify(text) if content: content = typogrify_wrapper(content) @@ -646,6 +683,9 @@ class Readers(FileStampDataCacher): ) context_signal.send(context_sender, metadata=metadata) + if metadata.get("status") == "skip": + content_class = SkipStub + return content_class( content=content, metadata=metadata, @@ -654,6 +694,12 @@ class Readers(FileStampDataCacher): context=context, ) + def check_file(self, source_path: str) -> None: + """Log a warning if a file is processed by a disabled reader.""" + reader = self.disabled_readers.get(file_suffix(source_path), None) + if reader: + logger.warning(f"{source_path}: {reader.disabled_message()}") + def find_empty_alt(content, path): """Find images with empty alt diff --git a/pelican/rstdirectives.py b/pelican/rstdirectives.py index 0a549424..e45a0582 100644 --- a/pelican/rstdirectives.py +++ b/pelican/rstdirectives.py @@ -2,7 +2,6 @@ import re from docutils import nodes, utils from docutils.parsers.rst import Directive, directives, roles - from pygments import highlight from pygments.formatters import HtmlFormatter from pygments.lexers import TextLexer, get_lexer_by_name @@ -79,7 +78,8 @@ class abbreviation(nodes.Inline, nodes.TextElement): pass -def abbr_role(typ, rawtext, text, lineno, inliner, options={}, content=[]): +def abbr_role(typ, rawtext, text, lineno, inliner, options=None, content=None): + del typ, rawtext, lineno, inliner, options, content # Unused arguments text = utils.unescape(text) m = _abbr_re.search(text) if m is None: diff --git a/pelican/server.py b/pelican/server.py index 61729bf1..c4607e21 100644 --- a/pelican/server.py +++ b/pelican/server.py @@ -32,19 +32,18 @@ def parse_arguments(): "--cert", default="./cert.pem", nargs="?", - help="Path to certificate file. " + "Relative to current directory", + help="Path to certificate file. Relative to current directory", ) parser.add_argument( "--key", default="./key.pem", nargs="?", - help="Path to certificate key file. " + "Relative to current directory", + help="Path to certificate key file. Relative to current directory", ) parser.add_argument( "--path", default=".", - help="Path to pelican source directory to serve. " - + "Relative to current directory", + help="Path to pelican source directory to serve. Relative to current directory", ) return parser.parse_args() @@ -54,14 +53,12 @@ class ComplexHTTPRequestHandler(server.SimpleHTTPRequestHandler): extensions_map = { **server.SimpleHTTPRequestHandler.extensions_map, - **{ - # web fonts - ".oft": "font/oft", - ".sfnt": "font/sfnt", - ".ttf": "font/ttf", - ".woff": "font/woff", - ".woff2": "font/woff2", - }, + # web fonts + ".oft": "font/oft", + ".sfnt": "font/sfnt", + ".ttf": "font/ttf", + ".woff": "font/woff", + ".woff2": "font/woff2", } def translate_path(self, path): @@ -125,8 +122,8 @@ class ComplexHTTPRequestHandler(server.SimpleHTTPRequestHandler): return mimetype - def log_message(self, format, *args): - logger.info(format, *args) + def log_message(self, msg_format, *args): + logger.info(msg_format, *args) class RootedHTTPServer(server.HTTPServer): diff --git a/pelican/settings.py b/pelican/settings.py index 33ec210a..2f3f8fa1 100644 --- a/pelican/settings.py +++ b/pelican/settings.py @@ -8,11 +8,14 @@ import re import sys from os.path import isabs from pathlib import Path +from types import ModuleType +from typing import Any, Optional from pelican.log import LimitFilter +from pelican.paginator import PaginationRule -def load_source(name, path): +def load_source(name: str, path: str) -> ModuleType: spec = importlib.util.spec_from_file_location(name, path) mod = importlib.util.module_from_spec(spec) sys.modules[name] = mod @@ -22,6 +25,8 @@ def load_source(name, path): logger = logging.getLogger(__name__) +Settings = dict[str, Any] + DEFAULT_THEME = os.path.join( os.path.dirname(os.path.abspath(__file__)), "themes", "notmyidea" ) @@ -48,6 +53,7 @@ DEFAULT_CONFIG = { "TRANSLATION_FEED_ATOM": "feeds/all-{lang}.atom.xml", "FEED_MAX_ITEMS": 100, "RSS_FEED_SUMMARY_ONLY": True, + "FEED_APPEND_REF": False, "SITEURL": "", "SITENAME": "A Pelican Blog", "DISPLAY_PAGES_ON_MENU": True, @@ -139,11 +145,12 @@ DEFAULT_CONFIG = { "DEFAULT_ORPHANS": 0, "DEFAULT_METADATA": {}, "FILENAME_METADATA": r"(?P\d{4}-\d{2}-\d{2}).*", - "PATH_METADATA": "", + "PATH_METADATA": r"", "EXTRA_PATH_METADATA": {}, "ARTICLE_PERMALINK_STRUCTURE": "", "TYPOGRIFY": False, "TYPOGRIFY_IGNORE_TAGS": [], + "TYPOGRIFY_OMIT_FILTERS": [], "TYPOGRIFY_DASHES": "default", "SUMMARY_END_SUFFIX": "…", "SUMMARY_MAX_LENGTH": 50, @@ -152,7 +159,7 @@ DEFAULT_CONFIG = { "PYGMENTS_RST_OPTIONS": {}, "TEMPLATE_PAGES": {}, "TEMPLATE_EXTENSIONS": [".html"], - "IGNORE_FILES": [".#*"], + "IGNORE_FILES": ["**/.*"], "SLUG_REGEX_SUBSTITUTIONS": [ (r"[^\w\s-]", ""), # remove non-alphabetical/whitespace/'-' chars (r"(?u)\A\s*", ""), # strip leading whitespace @@ -177,7 +184,9 @@ DEFAULT_CONFIG = { PYGMENTS_RST_OPTIONS = None -def read_settings(path=None, override=None): +def read_settings( + path: Optional[str] = None, override: Optional[Settings] = None +) -> Settings: settings = override or {} if path: @@ -216,12 +225,12 @@ def read_settings(path=None, override=None): # parameters to docutils directive handlers, so we have to have a # variable here that we'll import from within Pygments.run (see # rstdirectives.py) to see what the user defaults were. - global PYGMENTS_RST_OPTIONS + global PYGMENTS_RST_OPTIONS # noqa: PLW0603 PYGMENTS_RST_OPTIONS = settings.get("PYGMENTS_RST_OPTIONS", None) return settings -def get_settings_from_module(module=None): +def get_settings_from_module(module: Optional[ModuleType] = None) -> Settings: """Loads settings from a module, returns a dictionary.""" context = {} @@ -230,7 +239,7 @@ def get_settings_from_module(module=None): return context -def get_settings_from_file(path): +def get_settings_from_file(path: str) -> Settings: """Loads settings from a file path, returning a dict.""" name, ext = os.path.splitext(os.path.basename(path)) @@ -238,7 +247,7 @@ def get_settings_from_file(path): return get_settings_from_module(module) -def get_jinja_environment(settings): +def get_jinja_environment(settings: Settings) -> Settings: """Sets the environment for Jinja""" jinja_env = settings.setdefault( @@ -253,23 +262,21 @@ def get_jinja_environment(settings): return settings -def _printf_s_to_format_field(printf_string, format_field): +def _printf_s_to_format_field(printf_string: str, format_field: str) -> str: """Tries to replace %s with {format_field} in the provided printf_string. Raises ValueError in case of failure. """ TEST_STRING = "PELICAN_PRINTF_S_DEPRECATION" expected = printf_string % TEST_STRING - result = printf_string.replace("{", "{{").replace("}", "}}") % "{{{}}}".format( - format_field - ) + result = printf_string.replace("{", "{{").replace("}", "}}") % f"{{{format_field}}}" if result.format(**{format_field: TEST_STRING}) != expected: raise ValueError(f"Failed to safely replace %s with {{{format_field}}}") return result -def handle_deprecated_settings(settings): +def handle_deprecated_settings(settings: Settings) -> Settings: """Converts deprecated settings and issues warnings. Issues an exception if both old and new setting is specified. """ @@ -314,13 +321,9 @@ def handle_deprecated_settings(settings): # EXTRA_TEMPLATES_PATHS -> THEME_TEMPLATES_OVERRIDES if "EXTRA_TEMPLATES_PATHS" in settings: logger.warning( - "EXTRA_TEMPLATES_PATHS is deprecated use " - "THEME_TEMPLATES_OVERRIDES instead." + "EXTRA_TEMPLATES_PATHS is deprecated use THEME_TEMPLATES_OVERRIDES instead." ) - if ( - "THEME_TEMPLATES_OVERRIDES" in settings - and settings["THEME_TEMPLATES_OVERRIDES"] - ): + if settings.get("THEME_TEMPLATES_OVERRIDES"): raise Exception( "Setting both EXTRA_TEMPLATES_PATHS and " "THEME_TEMPLATES_OVERRIDES is not permitted. Please move to " @@ -345,7 +348,7 @@ def handle_deprecated_settings(settings): "FILES_TO_COPY", "STATIC_PATHS and EXTRA_PATH_METADATA", "https://github.com/getpelican/pelican/" - "blob/master/docs/settings.rst#path-metadata", + "blob/main/docs/settings.rst#path-metadata", ), ]: if old in settings: @@ -405,7 +408,7 @@ def handle_deprecated_settings(settings): ) logger.warning(message) if old_values.get("SLUG"): - for f in {"CATEGORY", "TAG"}: + for f in ("CATEGORY", "TAG"): if old_values.get(f): old_values[f] = old_values["SLUG"] + old_values[f] old_values["AUTHOR"] = old_values.get("AUTHOR", []) @@ -445,13 +448,12 @@ def handle_deprecated_settings(settings): and not isinstance(settings[key], Path) and "%s" in settings[key] ): - logger.warning("%%s usage in %s is deprecated, use {lang} " "instead.", key) + logger.warning("%%s usage in %s is deprecated, use {lang} instead.", key) try: settings[key] = _printf_s_to_format_field(settings[key], "lang") except ValueError: logger.warning( - "Failed to convert %%s to {lang} for %s. " - "Falling back to default.", + "Failed to convert %%s to {lang} for %s. Falling back to default.", key, ) settings[key] = DEFAULT_CONFIG[key] @@ -468,13 +470,12 @@ def handle_deprecated_settings(settings): and not isinstance(settings[key], Path) and "%s" in settings[key] ): - logger.warning("%%s usage in %s is deprecated, use {slug} " "instead.", key) + logger.warning("%%s usage in %s is deprecated, use {slug} instead.", key) try: settings[key] = _printf_s_to_format_field(settings[key], "slug") except ValueError: logger.warning( - "Failed to convert %%s to {slug} for %s. " - "Falling back to default.", + "Failed to convert %%s to {slug} for %s. Falling back to default.", key, ) settings[key] = DEFAULT_CONFIG[key] @@ -566,7 +567,7 @@ def handle_deprecated_settings(settings): return settings -def configure_settings(settings): +def configure_settings(settings: Settings) -> Settings: """Provide optimizations, error checking, and warnings for the given settings. Also, specify the log messages to be ignored. @@ -589,7 +590,7 @@ def configure_settings(settings): if os.path.exists(theme_path): settings["THEME"] = theme_path else: - raise Exception("Could not find the theme %s" % settings["THEME"]) + raise Exception("Could not find the theme {}".format(settings["THEME"])) # standardize strings to lowercase strings for key in ["DEFAULT_LANG"]: @@ -611,8 +612,8 @@ def configure_settings(settings): ]: if key in settings and not isinstance(settings[key], types): value = settings.pop(key) - logger.warn( - "Detected misconfigured %s (%s), " "falling back to the default (%s)", + logger.warning( + "Detected misconfigured %s (%s), falling back to the default (%s)", key, value, DEFAULT_CONFIG[key], @@ -674,7 +675,7 @@ def configure_settings(settings): if any(settings.get(k) for k in feed_keys): if not settings.get("SITEURL"): logger.warning( - "Feeds generated without SITEURL set properly may" " not be valid" + "Feeds generated without SITEURL set properly may not be valid" ) if "TIMEZONE" not in settings: @@ -686,8 +687,6 @@ def configure_settings(settings): ) # fix up pagination rules - from pelican.paginator import PaginationRule - pagination_rules = [ PaginationRule(*r) for r in settings.get( diff --git a/pelican/tests/build_test/test_build_files.py b/pelican/tests/build_test/test_build_files.py index 9aad990d..c59d9235 100644 --- a/pelican/tests/build_test/test_build_files.py +++ b/pelican/tests/build_test/test_build_files.py @@ -1,10 +1,13 @@ -from re import match +import importlib.metadata import tarfile from pathlib import Path +from re import match from zipfile import ZipFile import pytest +version = importlib.metadata.version("pelican") + @pytest.mark.skipif( "not config.getoption('--check-build')", @@ -16,7 +19,7 @@ def test_wheel_contents(pytestconfig): that everything that is needed is included in the final build """ dist_folder = pytestconfig.getoption("--check-build") - wheels = Path(dist_folder).rglob("*.whl") + wheels = Path(dist_folder).rglob(f"pelican-{version}-py3-none-any.whl") for wheel_file in wheels: files_list = ZipFile(wheel_file).namelist() # Check if theme files are copied to wheel @@ -52,7 +55,7 @@ def test_sdist_contents(pytestconfig, expected_file): that everything that is needed is included in the final build. """ dist_folder = pytestconfig.getoption("--check-build") - sdist_files = Path(dist_folder).rglob("*.tar.gz") + sdist_files = Path(dist_folder).rglob(f"pelican-{version}.tar.gz") for dist in sdist_files: files_list = tarfile.open(dist, "r:gz").getnames() dir_matcher = "" @@ -61,6 +64,6 @@ def test_sdist_contents(pytestconfig, expected_file): filtered_values = [ path for path in files_list - if match(rf"^pelican-\d\.\d\.\d/{expected_file}{dir_matcher}$", path) + if match(rf"^pelican-{version}/{expected_file}{dir_matcher}$", path) ] assert len(filtered_values) > 0 diff --git a/pelican/tests/content/article_skip.md b/pelican/tests/content/article_skip.md new file mode 100644 index 00000000..02cd5a52 --- /dev/null +++ b/pelican/tests/content/article_skip.md @@ -0,0 +1,5 @@ +Title: Skipped article +Date: 2024-06-30 +Status: skip + +This content will not be rendered. diff --git a/pelican/tests/content/article_with_inline_svg.html b/pelican/tests/content/article_with_inline_svg.html index 07f97a8a..06725704 100644 --- a/pelican/tests/content/article_with_inline_svg.html +++ b/pelican/tests/content/article_with_inline_svg.html @@ -5,13 +5,13 @@ Ensure that the title attribute in an inline svg is not handled as an HTML title. - - A different title inside the inline SVG - - - - - + + A different title inside the inline SVG + + + + + diff --git a/pelican/tests/content/medium_post_content.txt b/pelican/tests/content/medium_post_content.txt new file mode 100644 index 00000000..5e21881c --- /dev/null +++ b/pelican/tests/content/medium_post_content.txt @@ -0,0 +1,4 @@ + +

Title header

A paragraph of content.

Paragraph number two.

A list:

  1. One.
  2. Two.
  3. Three.

A link: link text.

Header 2

A block quote:

quote words strong words

after blockquote

A figure caption.

A final note: Cross-Validated has sometimes been helpful.


Next: Next post +

+

By User Name on .

Canonical link

Exported from Medium on December 1, 2023.

diff --git a/pelican/tests/content/medium_posts/2017-04-21_-medium-post--d1bf01d62ba3.html b/pelican/tests/content/medium_posts/2017-04-21_-medium-post--d1bf01d62ba3.html new file mode 100644 index 00000000..6d28f1a2 --- /dev/null +++ b/pelican/tests/content/medium_posts/2017-04-21_-medium-post--d1bf01d62ba3.html @@ -0,0 +1,72 @@ +A title diff --git a/pelican/tests/default_conf.py b/pelican/tests/default_conf.py index 583c3253..c675d9ab 100644 --- a/pelican/tests/default_conf.py +++ b/pelican/tests/default_conf.py @@ -12,20 +12,20 @@ DEFAULT_PAGINATION = 2 FEED_RSS = "feeds/all.rss.xml" CATEGORY_FEED_RSS = "feeds/{slug}.rss.xml" -LINKS = ( +LINKS = [ ("Biologeek", "http://biologeek.org"), ("Filyb", "http://filyb.info/"), ("Libert-fr", "http://www.libert-fr.com"), ("N1k0", "http://prendreuncafe.com/blog/"), ("Tarek Ziadé", "http://ziade.org/blog"), ("Zubin Mithra", "http://zubin71.wordpress.com/"), -) +] -SOCIAL = ( +SOCIAL = [ ("twitter", "http://twitter.com/ametaireau"), ("lastfm", "http://lastfm.com/user/akounet"), ("github", "http://github.com/ametaireau"), -) +] # global metadata to all the contents DEFAULT_METADATA = {"yeah": "it is"} diff --git a/pelican/tests/output/basic/a-markdown-powered-article.html b/pelican/tests/output/basic/a-markdown-powered-article.html index 0098ccac..66136d87 100644 --- a/pelican/tests/output/basic/a-markdown-powered-article.html +++ b/pelican/tests/output/basic/a-markdown-powered-article.html @@ -1,68 +1,68 @@ - - - - - A markdown powered article - - - - + + + + + A markdown powered article + + + + - - -
-
-
-

- A markdown powered article

-
+ + +
+ -
-
-
+
+
+ -
+ +
+ - - - \ No newline at end of file + + diff --git a/pelican/tests/output/basic/archives.html b/pelican/tests/output/basic/archives.html index e3a6c7df..7aa6b263 100644 --- a/pelican/tests/output/basic/archives.html +++ b/pelican/tests/output/basic/archives.html @@ -1,70 +1,70 @@ - - - - - A Pelican Blog - - - + + + + + A Pelican Blog + + + - - -
-

Archives for A Pelican Blog

+ + +
+

Archives for A Pelican Blog

-
-
Fri 30 November 2012
-
FILENAME_METADATA example
-
Wed 29 February 2012
-
Second article
-
Wed 20 April 2011
-
A markdown powered article
-
Thu 17 February 2011
-
Article 1
-
Thu 17 February 2011
-
Article 2
-
Thu 17 February 2011
-
Article 3
-
Thu 02 December 2010
-
This is a super article !
-
Wed 20 October 2010
-
Oh yeah !
-
Fri 15 October 2010
-
Unbelievable !
-
Sun 14 March 2010
-
The baz tag
-
-
-
-
+
+ -
+ +
+ - - - \ No newline at end of file + + diff --git a/pelican/tests/output/basic/article-1.html b/pelican/tests/output/basic/article-1.html index 961ad390..4ec2a0e1 100644 --- a/pelican/tests/output/basic/article-1.html +++ b/pelican/tests/output/basic/article-1.html @@ -1,67 +1,67 @@ - - - - - Article 1 - - - - + + + + + Article 1 + + + + - - -
-
-
-

- Article 1

-
+ + +
+
+
+

+ Article 1

+
-
-
- - Published: Thu 17 February 2011 - +
+
+ + Published: Thu 17 February 2011 + -

In cat1.

+

In cat1.

-

Article 1

+

Article 1

-
+ -
-
-
-
+
+
+
+

social

+ -
-
+ + + - - - \ No newline at end of file + + diff --git a/pelican/tests/output/basic/article-2.html b/pelican/tests/output/basic/article-2.html index e5389d35..99819902 100644 --- a/pelican/tests/output/basic/article-2.html +++ b/pelican/tests/output/basic/article-2.html @@ -1,67 +1,67 @@ - - - - - Article 2 - - - - + + + + + Article 2 + + + + - - -
-
-
-

- Article 2

-
+ + +
+
+
+

+ Article 2

+
-
-
- - Published: Thu 17 February 2011 - +
+
+ + Published: Thu 17 February 2011 + -

In cat1.

+

In cat1.

-

Article 2

+

Article 2

-
+ -
-
-
-
+
+
+
+

social

+ -
-
+ + + - - - \ No newline at end of file + + diff --git a/pelican/tests/output/basic/article-3.html b/pelican/tests/output/basic/article-3.html index d23e5da2..596db91f 100644 --- a/pelican/tests/output/basic/article-3.html +++ b/pelican/tests/output/basic/article-3.html @@ -1,67 +1,67 @@ - - - - - Article 3 - - - - + + + + + Article 3 + + + + - - -
-
-
-

- Article 3

-
+ + +
+
+
+

+ Article 3

+
-
-
- - Published: Thu 17 February 2011 - +
+
+ + Published: Thu 17 February 2011 + -

In cat1.

+

In cat1.

-

Article 3

+

Article 3

-
+ -
-
-
-
+
+
+
+

social

+ -
-
+ + + - - - \ No newline at end of file + + diff --git a/pelican/tests/output/basic/author/alexis-metaireau.html b/pelican/tests/output/basic/author/alexis-metaireau.html index 12e05ec8..e4bde41d 100644 --- a/pelican/tests/output/basic/author/alexis-metaireau.html +++ b/pelican/tests/output/basic/author/alexis-metaireau.html @@ -1,112 +1,112 @@ - - - - - A Pelican Blog - Alexis Métaireau - - - + + + + + A Pelican Blog - Alexis Métaireau + + + - - + + - +

→ And now try with some utf8 hell: ééé

+ + +
-

Other articles

-
-
    +

    Other articles

    +
    +
      -
    1. -
      -

      Oh yeah !

      -
      +
    2. +
      +

      Oh yeah !

      +
      -
      -
      - - Published: Wed 20 October 2010 - +
      +
      -

      Why not ?

      -

      After all, why not ? It's pretty simple to do it, and it will allow me to write my blogposts in rst ! -YEAH !

      -alternate text -
      +
      +

      Why not ?

      +

      After all, why not ? It's pretty simple to do it, and it will allow me to write my blogposts in rst ! + YEAH !

      + alternate text +
      - read more -
      -
    3. -
    + read more + + +
-
-
-

social

- +
+
- - - \ No newline at end of file + + diff --git a/pelican/tests/output/basic/authors.html b/pelican/tests/output/basic/authors.html index cff1360b..27d10c2f 100644 --- a/pelican/tests/output/basic/authors.html +++ b/pelican/tests/output/basic/authors.html @@ -1,52 +1,52 @@ - - - - - A Pelican Blog - Authors - - - + + + + + A Pelican Blog - Authors + + + - - + + -
-

Authors on A Pelican Blog

- -
- -
-
-

social

+
+

Authors on A Pelican Blog

-
-
+ - + + + - - \ No newline at end of file + + + + diff --git a/pelican/tests/output/basic/categories.html b/pelican/tests/output/basic/categories.html index cc54f4a3..5c85b20e 100644 --- a/pelican/tests/output/basic/categories.html +++ b/pelican/tests/output/basic/categories.html @@ -1,55 +1,55 @@ - - - - - A Pelican Blog - Categories - - - + + + + + A Pelican Blog - Categories + + + - - + + -
-

Categories for A Pelican Blog

- -
- -
-
-

social

+
+

Categories for A Pelican Blog

-
-
+ - + + + - - \ No newline at end of file + + + + diff --git a/pelican/tests/output/basic/category/bar.html b/pelican/tests/output/basic/category/bar.html index 1f9c0d8d..e89375bf 100644 --- a/pelican/tests/output/basic/category/bar.html +++ b/pelican/tests/output/basic/category/bar.html @@ -1,68 +1,68 @@ - - - - - A Pelican Blog - bar - - - + + + + + A Pelican Blog - bar + + + - - + + - +
+
+

social

+ -
-
+ + + - - - \ No newline at end of file + + diff --git a/pelican/tests/output/basic/category/cat1.html b/pelican/tests/output/basic/category/cat1.html index ca47821b..6c0cd64c 100644 --- a/pelican/tests/output/basic/category/cat1.html +++ b/pelican/tests/output/basic/category/cat1.html @@ -1,125 +1,125 @@ - - - - - A Pelican Blog - cat1 - - - + + + + + A Pelican Blog - cat1 + + + - - + + -
-

Other articles

-
-
    +

    Other articles

    +
    +
      -
    1. -
    2. -
    3. -
      -

      Article 3

      -
      +
    4. +
      +

      Article 3

      +
      -
      -
      - - Published: Thu 17 February 2011 - +
      +
      + + Published: Thu 17 February 2011 + -

      In cat1.

      +

      In cat1.

      -

      Article 3

      +

      Article 3

      - read more -
      -
    5. -
    + read more + + +
-
-
-

social

- +
+
- - - \ No newline at end of file + + diff --git a/pelican/tests/output/basic/category/misc.html b/pelican/tests/output/basic/category/misc.html index 58490001..fa9eb563 100644 --- a/pelican/tests/output/basic/category/misc.html +++ b/pelican/tests/output/basic/category/misc.html @@ -1,136 +1,136 @@ - - - - - A Pelican Blog - misc - - - + + + + + A Pelican Blog - misc + + + - - + + -
-

Other articles

-
-
    +

    Other articles

    +
    +
      -
    1. -
    2. -
      -

      Unbelievable !

      -
      +
    3. +
      +

      Unbelievable !

      +
      -
      -