Перевод

Языком по умолчанию для NocoBase является английский. В настоящее время основное приложение поддерживает английский, итальянский, нидерландский, упрощенный китайский и японский языки. Мы искренне приглашаем вас внести вклад в переводы для дополнительных языков, чтобы пользователи по всему миру могли пользоваться еще более удобным NocoBase-опытом.


I. Системная локализация

1. Перевод системного интерфейса и плагинов

1.1 Область перевода

Это относится только к локализации системного интерфейса NocoBase и плагинов и не охватывает другие пользовательские материалы (например, таблицы данных или блоки Markdown).

bbb6e0b44aeg

20250319220127

1.2 Обзор содержимого локализации

Для управления содержимым локализаций NocoBase использует Git. Основной репозиторий: https://github.com/nocobase/nocobase/tree/main/locales

Каждый язык представлен JSON-файлом, названным в соответствии с его языковым кодом (например, de-DE.json, fr-FR.json). Структура файла организована по модулям плагинов: для хранения переводов используются пары ключ-значение. Например:

{
  // Клиентский плагин
  "@nocobase/client": {
    "(Fields only)": "(Fields only)",
    "12 hour": "12 hour",
    "24 hour": "24 hour"
    // ...другие пары ключ-значение
  },
  "@nocobase/plugin-acl": {
    // Пары ключ-значение для этого плагина
  }
  // ...другие плагины
}

При переводе постепенно приводите структуру к формату, похожему на следующий:

{
  // Клиентский плагин 
  "@nocobase/client": {
    "(Fields only)": "(Fields only - translated)",
    "12 hour": "12 hour - translated",
    "24 hour": "24 hour - translated"
    // ...другие пары ключ-значение
  },
  "@nocobase/plugin-acl": {
    // Пары ключ-значение для этого плагина 
  }
  // ...другие плагины
}

1.3 Тестирование и синхронизация переводов

  • После завершения перевода протестируйте и проверьте, что все тексты отображаются корректно. Мы также выпустили плагин для валидации переводов — найдите Тест локализации в маркетплейсе плагинов. 20250422233152 После установки скопируйте JSON-содержимое из соответствующего файла локализации в репозитории git, вставьте его внутрь и нажмите OK, чтобы проверить, эффективен ли перевод. 20250422233950

  • После отправки системные скрипты автоматически синхронизируют содержимое локализации с репозиторием кода.

1.4 Локализационный плагин NocoBase 2.0

Примечание (Note): Этот раздел находится в разработке. Локализационный плагин для NocoBase 2.0 имеет некоторые отличия от версии 1.x. Подробности будут добавлены в будущем обновлении.

II. Локализация документации (NocoBase 2.0)

Документация для NocoBase 2.0 ведется в новой структуре. Исходные файлы документации находятся в основном репозитории NocoBase:

https://github.com/nocobase/nocobase/tree/next/docs

2.1 Структура документации

Документация использует Rspress как генератор статического сайта и поддерживает 22 языка. Структура организована следующим образом:

docs/
├── docs/
│   ├── en/                    # Английский (исходный язык)
│   ├── cn/                    # Упрощенный китайский
│   ├── ja/                    # Японский
│   ├── ko/                    # Корейский
│   ├── de/                    # Немецкий
│   ├── fr/                    # Французский
│   ├── es/                    # Испанский
│   ├── pt/                    # Португальский
│   ├── ru/                    # Русский
│   ├── it/                    # Итальянский
│   ├── tr/                    # Турецкий
│   ├── uk/                    # Украинский
│   ├── vi/                    # Вьетнамский
│   ├── id/                    # Индонезийский
│   ├── th/                    # Тайский
│   ├── pl/                    # Польский
│   ├── nl/                    # Нидерландский
│   ├── cs/                    # Чешский
│   ├── ar/                    # Арабский
│   ├── he/                    # Иврит
│   ├── hi/                    # Хинди
│   ├── sv/                    # Шведский
│   └── public/                # Общие ресурсы (изображения и т. д.)
├── theme/                     # Пользовательская тема
├── rspress.config.ts          # Конфигурация Rspress
└── package.json

2.2 Рабочий процесс перевода

  1. Синхронизация с английским исходником: Все переводы должны основываться на английской документации (docs/en/). Когда английская документация обновляется, переводы также должны быть обновлены соответствующим образом.

  2. Стратегия веток:

    • Используйте ветку develop или next как ориентир для актуального английского контента
    • Создайте вашу ветку перевода на основе целевой ветки
  3. Структура файлов: Каждый каталог языка должен зеркалировать структуру каталогов английского варианта. Например:

    docs/en/get-started/index.md    →    docs/ja/get-started/index.md
    docs/en/api/acl/acl.md          →    docs/ja/api/acl/acl.md

2.3 Внесение переводов

  1. Сделайте форк репозитория: https://github.com/nocobase/nocobase
  2. Склонируйте ваш форк и переключитесь на ветку develop или next
  3. Перейдите в каталог docs/docs/
  4. Найдите каталог языка, для которого хотите внести вклад (например, ja/ для японского)
  5. Переведите markdown-файлы, сохранив ту же структуру файлов, что и в английской версии
  6. Проверьте изменения локально:
    cd docs
    yarn install
    yarn dev
  7. Отправьте Pull Request в основной репозиторий

2.4 Рекомендации по переводам

  • Сохраняйте единое форматирование: поддерживайте ту же структуру markdown, заголовки, блоки кода и ссылки, что и в источнике
  • Сохраняйте frontmatter: не меняйте YAML frontmatter в начале файлов, если он не содержит текст, который можно переводить
  • Ссылки на изображения: используйте те же пути к изображениям из docs/public/ — изображения общие для всех языков
  • Внутренние ссылки: обновляйте внутренние ссылки, чтобы они указывали на правильный путь к языку
  • Примеры кода: как правило, примеры кода не следует переводить, но комментарии внутри кода можно переводить

2.5 Настройка навигации

Структура навигации для каждого языка задается в файлах _nav.json и _meta.json в каждом каталоге языка. При добавлении новых страниц или разделов обязательно обновляйте эти конфигурационные файлы.

III. Локализация сайта

Страницы сайта и все материалы хранятся в: https://github.com/nocobase/website

3.1 Начало работы и справочные ресурсы

При добавлении нового языка обратитесь к существующим страницам языков:

Website Localization Diagram

Глобальные изменения стилей находятся по адресу:

Global Style Diagram

Локализация глобальных компонентов сайта доступна по адресу: https://github.com/nocobase/website/tree/main/src/components

Website Components Diagram

3.2 Структура контента и метод локализации

Мы используем смешанный подход к управлению контентом. Контент и ресурсы на английском, китайском и японском языках регулярно синхронизируются из системы CMS и перезаписываются, тогда как для остальных языков можно редактировать файлы локально напрямую. Локальный контент хранится в каталоге content и организован следующим образом:

/content
  /articles        # Статьи блога
    /article-slug
      index.md     # Английский контент (по умолчанию)
      index.cn.md  # Китайский контент
      index.ja.md  # Японский контент
      metadata.json # Метаданные и другие свойства локализации
  /tutorials       # Руководства
  /releases        # Информация о релизах
  /pages           # Некоторые статические страницы
  /categories      # Информация о категориях
    /article-categories.json  # Список категорий статей
    /category-slug            # Детали отдельной категории
      /category.json
  /tags            # Информация о тегах
    /article-tags.json        # Список тегов статей
    /release-tags.json        # Список тегов релизов
    /tag-slug                 # Детали отдельного тега
      /tag.json
  /help-center     # Контент центра помощи
    /help-center-tree.json    # Структура навигации центра помощи
  ....

3.3 Рекомендации по переводу контента

  • О переводе Markdown-содержимого
  1. Создайте новый файл языка на основе файла по умолчанию (например, index.md -> index.fr.md)
  2. Добавьте локализованные свойства в соответствующие поля в JSON-файле
  3. Сохраняйте единообразие структуры файлов, ссылок и ссылок на изображения
  • О переводе JSON-контента (JSON Content Translation) Многие метаданные контента хранятся в JSON-файлах, которые обычно содержат многоязычные поля:
{
  "id": 123,
  "title": "English Title",       // Заголовок на английском (по умолчанию)
  "title_cn": "中文标题",          // Заголовок на китайском
  "title_ja": "日本語タイトル",    // Заголовок на японском
  "description": "English description",
  "description_cn": "中文描述",
  "description_ja": "日本語の説明",
  "slug": "article-slug",         // Путь URL (обычно не переводится)
  "status": "published",
  "publishedAt": "2025-03-19T12:00:00Z"
}

Примечания к переводу:

  1. Соглашение об именовании полей: Поля перевода обычно используют формат {original_field}_{language_code}

    • Например: title_fr (французский заголовок), description_de (немецкое описание)
  2. При добавлении нового языка:

    • Добавьте соответствующую версию с суффиксом языка для каждого поля, которое нужно перевести
    • Не изменяйте исходные значения полей (например, title, description и т.д.), так как они служат контентом языка по умолчанию (английский)
  3. Механизм синхронизации с CMS:

    • Система CMS периодически обновляет контент на английском, китайском и японском языках
    • Система будет обновлять/перезаписывать контент только для этих трех языков (некоторые свойства в JSON) и не удалит поля языков, добавленные другими участниками
    • Например: если вы добавили французский перевод (title_fr), синхронизация CMS не повлияет на это поле

3.4 Настройка поддержки нового языка

Чтобы добавить поддержку нового языка, нужно изменить конфигурацию SUPPORTED_LANGUAGES в файле src/utils/index.ts:

export const SUPPORTED_LANGUAGES = {
  en: {
    code: 'en',
    locale: 'en-US',
    name: 'English',
    default: true
  },
  cn: {
    code: 'cn',
    locale: 'zh-CN',
    name: 'Chinese'
  },
  ja: {
    code: 'ja',
    locale: 'ja-JP',
    name: 'Japanese'
  },
  // Пример добавления нового языка:
  fr: {
    code: 'fr',
    locale: 'fr-FR',
    name: 'French'
  }
};

3.5 Файлы макетов и стили

Для каждого языка нужны соответствующие файлы макета:

  1. Создайте новый файл макета (например, для французского создайте src/layouts/BaseFR.astro)
  2. Можно скопировать существующий файл макета (например, BaseEN.astro) и перевести его
  3. Файл макета содержит переводы для глобальных элементов, таких как меню навигации, футеры и т.д.
  4. Обязательно обновите конфигурацию переключателя языка, чтобы корректно переключаться на вновь добавленный язык

3.6 Создание каталогов страниц для языка

Создайте отдельные каталоги страниц для нового языка:

  1. Создайте папку с названием, соответствующим коду языка, в каталоге src (например, src/fr/)
  2. Скопируйте структуру страниц из других каталогов языка (например, src/en/)
  3. Обновите содержимое страниц, переведя заголовки, описания и текст на целевой язык
  4. Убедитесь, что страницы используют правильный компонент макета (например, .layout: '@/layouts/BaseFR.astro')

3.7 Локализация компонентов

Некоторые общие компоненты тоже нуждаются в переводе:

  1. Проверьте компоненты в каталоге src/components/
  2. Обратите особое внимание на компоненты с фиксированным текстом (например, панели навигации, футеры и т.д.)
  3. Компоненты могут использовать условный рендеринг, чтобы отображать контент на разных языках:
{Astro.url.pathname.startsWith('/en') && <p>English content</p>}
{Astro.url.pathname.startsWith('/cn') && <p>中文内容</p>}
{Astro.url.pathname.startsWith('/fr') && <p>Contenu français</p>}

3.8 Проверка и валидация

После завершения перевода проведите тщательное тестирование:

  1. Запустите сайт локально (обычно используя yarn dev)
  2. Проверьте, как отображаются все страницы на новом языке
  3. Убедитесь, что переключение языка работает корректно
  4. Проверьте, что все ссылки указывают на страницы нужной языковой версии
  5. Проверьте адаптивность, чтобы переведенный текст не ломал дизайн страниц

IV. Как начать переводить

Если вы хотите внести вклад в перевод нового языка для NocoBase, выполните следующие шаги:

КомпонентРепозиторийВеткаПримечания
Системный интерфейсhttps://github.com/nocobase/nocobase/tree/main/localesmainJSON-файлы локали
Документация (2.0)https://github.com/nocobase/nocobasedevelop / nextкаталог docs/docs/<lang>/
Сайтhttps://github.com/nocobase/websitemainсм. раздел III

После завершения перевода отправьте Pull Request в NocoBase. Новые языки появятся в системной конфигурации, что позволит выбрать, какие языки отображать.

Enabled Languages Diagram

Документация NocoBase 1.x

Чтобы ознакомиться с руководством по переводу для NocoBase 1.x, перейдите по:

https://docs.nocobase.com/welcome/community/translations