dictionary.js

什么是 dictionary.js 文件?它是如何使用的?

简介

dictionary.js 是一个由 Lingo.dev 编译器 在构建时生成的文件。它以一种可以在运行时高效加载的格式存储应用程序的翻译内容。

注意:dictionary.js 文件的所有更改都应提交到代码库中。

示例文件

以下是一个(非常简化的)dictionary.js 文件示例:

export default {
  version: 0.1,
  files: {
    "components/hero.tsx": {
      entries: {
        "3/declaration/body/0/argument/1/1": {
          content: {
            en: "Welcome to our app",
            es: "Bienvenido a nuestra aplicación",
          },
          hash: "a1b2c3d4e5f6...",
        },
      },
    },
  },
};

有关可用属性的完整描述,请参阅 Schema Properties

文件位置

默认情况下,dictionary.js 文件会输出到相对于编译器配置(例如 vite.config.ts 文件)位置的 src/lingo 目录中。

要了解如何自定义此位置,请参阅 Compiler Options

加载字典

lingo.dev 包提供了多个 loadDictionary 函数。这些函数负责根据当前 locale cookie 的值加载用户当前语言环境的字典。

每种函数变体都适用于不同的环境。以下是使用客户端版本函数的示例:

<LingoProviderWrapper loadDictionary={(locale) => loadDictionary(locale)}>
  <App />
</LingoProviderWrapper>

您应该仅使用提供的函数来加载字典,而不是尝试手动加载字典。

编辑字典

尽管 dictionary.js 文件是自动生成的,但它是可编辑的。例如,您可以通过 编辑翻译内容 手动更改翻译。

不过,如果源内容发生更改,手动编辑将被覆盖,因此通常更可维护的方式是使用 data-lingo-override 属性。

架构属性

本节描述了 dictionary.js 文件中包含的所有属性。

version

用于兼容性检查和未来迁移的架构版本标识符。

  • 类型: number
  • 必需:

files

组织所有翻译条目并按其源文件路径分类的容器对象。每个键表示从源根目录的相对路径(例如,"components/hero.tsx""pages/home.jsx")。

  • 类型: object
  • 必需:

files[filePath].entries

特定源文件中发现的所有翻译条目的容器。每个键是一个基于 AST 的标识符,用于唯一标识文件中的可翻译内容。

  • 类型: object
  • 必需:

files[filePath].entries[astKey].content

将区域标识符映射到其对应的翻译字符串。包含项目中所有配置区域的翻译。

  • 类型: object
  • 必需:

files[filePath].entries[astKey].hash

用于变更检测和缓存失效的原始源内容的 SHA-256 哈希值。当源内容发生变化时,此哈希值也会变化,从而触发条目的重新翻译。

  • 类型: string
  • 必需: