如何关闭Nuxt Content中的文件夹音译功能?
解决Nuxt 3 Content模块文件夹名称被音译的问题
使用Nuxt 3 Content模块获取/content/目录结构时,非拉丁字符的文件夹名会被自动音译为拉丁字符(比如俄语文件夹名"Базовая грамматика"被转为"Bazovaya Grammatika"),而Markdown文件的名称则保持原样。以下是几种可行的解决方法:
方法一:手动为文件夹添加配置文件
这是最直接且官方推荐的方式,给每个需要保留原名称的文件夹创建_dir.yml文件,在文件中指定原始名称作为title:
title: "Базовая грамматика"
之后通过fetchContentNavigation获取导航数据时,该文件夹的title就会使用你配置的原始名称,而非音译结果。
方法二:自定义导航生成逻辑(批量处理场景)
如果有大量文件夹需要处理,不想逐个配置_dir.yml,可以通过读取本地文件系统的方式获取原始文件夹名,自定义生成导航结构。
例如创建server端接口server/api/navigation.ts:
import { readdirSync, statSync } from 'fs' import { join } from 'path' export default defineEventHandler(async () => { const lessonsRoot = join(process.cwd(), 'content', 'lessons') const navigation = [] const traverse = (currentDir, basePath = '/lessons/') => { const entries = readdirSync(currentDir) entries.forEach(entry => { const fullPath = join(currentDir, entry) const stats = statSync(fullPath) if (stats.isDirectory()) { // 生成和Content模块一致的路径格式,同时保留原始文件夹名作为title const slugifiedName = entry.toLowerCase().replace(/\s+/g, '-') const navItem = { title: entry, _path: `${basePath}${slugifiedName}`, children: [] } navigation.push(navItem) traverse(fullPath, `${basePath}${slugifiedName}/`) } }) } traverse(lessonsRoot) return navigation })
然后在页面中调用该接口获取导航:
const { data: navigation } = await useAsyncData('home', () => $fetch('/api/navigation'))
方法三:通过自定义Schema修改默认行为
可以在content/schema.yml中定义文件夹的默认title规则,让Content模块直接使用原始文件夹名作为title:
dir: fields: title: type: string default: (dir) => dir.name
注意:该方法需要对应Nuxt Content v2及以上版本,部分旧版本可能不支持这种schema写法。
补充说明
之前尝试的transpile: false配置无效,是因为该配置用于控制Nuxt的代码转译逻辑,和Content模块处理文件夹名称的音译行为完全无关,因此无法解决当前问题。
内容的提问来源于stack exchange,提问作者Victor
相关产品推荐
相关产品推荐

