#6600·decap-cms

i18n: 本地化的 "slug" 字段值无法用作文件夹集合项的文件名

作者: brendanAx创建于 2022年11月20日更新于 2026年9月16日
标签type: bug

Describe the bug The ability to specify a collection item's filename via a "slug" field, described in the docs here, does not work as expected with i18n enabled: the filename will always be the default locale's slug field value.

For example, if the following page is saved: image The filename of both locales will be en-lorem.md: image This bug particularly affects projects using web frameworks which employ file-based routing (e.g. Astro, Next.js), as there may not be any viable workarounds without resorting to hardcoding the desired paths via server redirects, etc. To Reproduce (See example config added below)

  1. Add a folder collection with i18n option enabled.
  2. Add a slug field to the collection and reference the field in the collection's slug option: slug: {{fields.slug}}.
  3. Add top-level config for i18n with 2 locales, e.g. en & pt.
  4. Open the control panel, create a new page with distinct slug field values for each locale, e.g. en-lorem, pt-lorem.
  5. Publish the page.
  6. Check the saved filenames for the page. Expected behavior The values specified in the slug fields should be used as the filenames for their respective locales. E.g. for en, the filename should be en-lorem (working as expected), for pt, the filename should be pt-lorem (not working as expected). Applicable Versions:
  • Netlify CMS version: 2.10.192 CMS configuration
backend:
  name: git-gateway
  branch: master 
 
media_folder: "public/uploads" 
public_folder: "/uploads" 
 
editor:
  preview: false # we're going to hide the preview editor 
 
i18n:
  structure: multiple_folders 
  locales: [en, pt] 
  default_locale: en 
 
slug:
  encoding: "ascii" 
  clean_accents: true 
 
collections:
  - label: "Pages" 
    name: "pages" 
    folder: "/src/pages" 
    create: true 
    i18n: true 
    slug: "{{fields.slug}}" 
    fields: 
      - { 
          label: "Layout", 
          name: "layout", 
          widget: "hidden", 
          default: "/src/layouts/netlify_cms.astro", 
          i18n: duplicate, 
        } 
      - { label: "Title", name: "title", widget: "string", i18n: duplicate, } 
  - { label: "Blog", name: "blog", folder: "/src/blog", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "About", name: "about", folder: "/src/about", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Contact", name: "contact", folder: "/src/contact", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Privacy", name: "privacy", folder: "/src/privacy", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Terms", name: "terms", folder: "/src/terms", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Disclaimer", name: "disclaimer", folder: "/src/disclaimer", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "FAQ", name: "faq", folder: "/src/faq", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Gallery", name: "gallery", folder: "/src/gallery", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Portfolio", name: "portfolio", folder: "/src/portfolio", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Services", name: "services", folder: "/src/services", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Testimonials", name: "testimonials", folder: "/src/testimonials", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Team", name: "team", folder: "/src/team", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "News", name: "news", folder: "/src/news", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Events", name: "events", folder: "/src/events", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Contact", name: "contact", folder: "/src/contact", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Privacy", name: "privacy", folder: "/src/privacy", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Terms", name: "terms", folder: "/src/terms", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Disclaimer", name: "disclaimer", folder: "/src/disclaimer", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "FAQ", name: "faq", folder: "/src/faq", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Gallery", name: "gallery", folder: "/src/gallery", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Portfolio", name: "portfolio", folder: "/src/portfolio", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Services", name: "services", folder: "/src/services", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Testimonials", name: "testimonials", folder: "/src/testimonials", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Team", name: "team", folder: "/src/team", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "News", name: "news", folder: "/src/news", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Events", name: "events", folder: "/src/events", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Contact", name: "contact", folder: "/src/contact", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Privacy", name: "privacy", folder: "/src/privacy", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Terms", name: "terms", folder: "/src/terms", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Disclaimer", name: "disclaimer", folder: "/src/disclaimer", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "FAQ", name: "faq", folder: "/src/faq", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Gallery", name: "gallery", folder: "/src/gallery", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Portfolio", name: "portfolio", folder: "/src/portfolio", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Services", name: "services", folder: "/src/services", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Testimonials", name: "testimonials", folder: "/src/testimonials", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Team", name: "team", folder: "/src/team", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "News", name: "news", folder: "/src/news", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Events", name: "events", folder: "/src/events", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Contact", name: "contact", folder: "/src/contact", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Privacy", name: "privacy", folder: "/src/privacy", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Terms", name: "terms", folder: "/src/terms", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Disclaimer", name: "disclaimer", folder: "/src/disclaimer", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "FAQ", name: "faq", folder: "/src/faq", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Gallery", name: "gallery", folder: "/src/gallery", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Portfolio", name: "portfolio", folder: "/src/portfolio", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Services", name: "services", folder: "/src/services", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Testimonials", name: "testimonials", folder: "/src/testimonials", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Team", name: "team", folder: "/src/team", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "News", name: "news", folder: "/src/news", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Events", name: "events", folder: "/src/events", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Contact", name: "contact", folder: "/src/contact", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Privacy", name: "privacy", folder: "/src/privacy", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Terms", name: "terms", folder: "/src/terms", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Disclaimer", name: "disclaimer", folder: "/src/disclaimer", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "FAQ", name: "faq", folder: "/src/faq", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Gallery", name: "gallery", folder: "/src/gallery", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Portfolio", name: "portfolio", folder: "/src/portfolio", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Services", name: "services", folder: "/src/services", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Testimonials", name: "testimonials", folder: "/src/testimonials", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Team", name: "team", folder: "/src/team", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "News", name: "news", folder: "/src/news", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Events", name: "events", folder: "/src/events", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Contact", name: "contact", folder: "/src/contact", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Privacy", name: "privacy", folder: "/src/privacy", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Terms", name: "terms", folder: "/src/terms", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Disclaimer", name: "disclaimer", folder: "/src/disclaimer", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "FAQ", name: "faq", folder: "/src/faq", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Gallery", name: "gallery", folder: "/src/gallery", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Portfolio", name: "portfolio", folder: "/src/portfolio", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Services", name: "services", folder: "/src/services", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Testimonials", name: "testimonials", folder: "/src/testimonials", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Team", name: "team", folder: "/src/team", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "News", name: "news", folder: "/src/news", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Events", name: "events", folder: "/src/events", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Contact", name: "contact", folder: "/src/contact", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Privacy", name: "privacy", folder: "/src/privacy", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Terms", name: "terms", folder: "/src/terms", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Disclaimer", name: "disclaimer", folder: "/src/disclaimer", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "FAQ", name: "faq", folder: "/src/faq", create: true, i18n: true, slug: "{{fields.slug}}" } 
  - { label: "Gallery", name: "

内容来源: decaporg/decap-cms