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:
The filename of both locales will be en-lorem.md:
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)
- Add a folder collection with
i18noption enabled. - Add a
slugfield to the collection and reference the field in the collection'sslugoption:slug: {{fields.slug}}. - Add top-level config for i18n with 2 locales, e.g.
en&pt. - Open the control panel, create a new page with distinct slug field values for each locale, e.g.
en-lorem,pt-lorem. - Publish the page.
- Check the saved filenames for the page.
Expected behavior
The values specified in the
slugfields should be used as the filenames for their respective locales. E.g. foren, the filename should been-lorem(working as expected), forpt, the filename should bept-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