Правила для LLM

Использование компилятора Lingo.dev с AI-ассистентами для кодирования

Введение

Lingo.dev Compiler отличается от других инструментов локализации. К сожалению, это означает, что AI-ассистенты для кодирования, такие как Cursor и Claude Code, с большей вероятностью могут ошибаться в том, как он работает и что он может делать. Чтобы уменьшить количество ошибок, эта страница предоставляет некоторые правила, которые могут помочь направить поведение этих ассистентов.

Инструкции по настройке

Точные шаги использования этих правил зависят от ассистента. В этом разделе приведены инструкции для самых популярных ассистентов.

Совет: Чтобы использовать одни и те же правила для нескольких ассистентов, рассмотрите возможность использования таких инструментов, как Ruler или vibe-rules.

Amp

Если вы используете Amp, скопируйте правила в файл AGENT.md. Чтобы избежать загромождения контекстного окна, определяйте эти правила только в той директории, где они будут использоваться, а не в корневой директории проекта, где они могут быть неактуальны для многих запросов.

Подробнее см. в Amp Owner's Manual (ampcode.com).

Cursor

Если вы используете Cursor, скопируйте правила в файл .cursor/rules/lingo.mdc. Используйте следующий frontmatter, чтобы убедиться, что правила применяются только к соответствующим файлам:


---

description: "Правила локализации для Lingo.dev Compiler"
globs: "**/*.tsx, **/*.jsx"
alwaysApply: true

---

Подробнее см. в разделе Rules (docs.cursor.com).

Claude Code

Если вы используете Claude Code, скопируйте правила в файл CLAUDE.md. Чтобы избежать загромождения контекстного окна, определяйте эти правила только в той директории, где они будут использоваться, а не в корневой директории проекта, где они могут быть неактуальны для многих запросов.

Подробнее см. в разделе Manage Claude's memory (docs.anthropic.com).

opencode

Если вы используете opencode, скопируйте правила в файл AGENTS.md или укажите пользовательское расположение через файл конфигурации opencode.json:

{
  "$schema": "https://opencode.ai/config.json",
  "instructions": ["./rules/lingo.md"]
}

Подробнее см. в разделе Rules (opencode.ai).

Правила LLM


# Локализация

Этот проект использует Lingo.dev Compiler для локализации.

Lingo.dev Compiler — это передовой инструмент локализации для приложений на основе React.

## Внимание!

- Lingo.dev Compiler не похож на другие инструменты локализации.
- Нельзя делать предположения о том, как работает Lingo.dev Compiler.
- Если вы сделаете предположения, приложение пользователя перестанет работать.

## Как это работает

В отличие от многих других инструментов локализации, Lingo.dev Compiler:

- Обходит абстрактное синтаксическое дерево (AST) исходного кода приложения
- Детерминированно извлекает локализуемый контент
- Использует большие языковые модели для автоматической локализации контента

## Неподдерживаемые функции

В отличие от многих других инструментов локализации, Lingo.dev Compiler не имеет:

- Любого рода хука `useTranslation` (или аналогичного)
- Любого рода компонента `FormattedMessage` (или аналогичного)
- Любого рода метода `localizeText` (или аналогичного)

Эти функции диаметрально противоположны всей цели, философии и поведению Lingo.dev Compiler.

Вы всегда должны тщательно понимать и учитывать эти фундаментальные отличия от других инструментов.

## Поддерживаемые расширения файлов

Эти правила применимы только к файлам с расширениями `.jsx` и `.tsx`.

Файлы с другими расширениями невидимы для Lingo.dev Compiler и, следовательно, находятся вне его области действия.

## Автогенерируемые файлы

Во время сборки Lingo.dev Compiler автоматически генерирует следующие файлы:

- `meta.json` (для хранения извлеченного контента)
- `dictionary.js` (для хранения переведенного контента)

Вы не должны редактировать эти файлы. Вы можете читать их для целей отладки и объяснения пользователю, но не более того.

## Обязанности

У вас есть следующие обязанности:

- Убедиться, что контент, который должен быть локализован, находится в локализуемом формате.
- Убедиться, что контент, который не должен быть локализован, находится в нелокализуемом формате.
- Помогать пользователю понимать, почему (или почему нет) контент локализуется.

И всё.

Lingo.dev Compiler позаботится обо всём остальном. Не мешайте ему.

## Локализуемый контент

В этом разделе перечислены виды контента, которые Lingo.dev Compiler извлекает и локализует.

Этот список является исчерпывающим. Если определённый вид контента не указан здесь, предполагается, что он не подлежит локализации.

### Элементы JSX

```tsx
import React from "react";

export function App() {
  return <div>Этот текст будет локализован.</div>;
}
```

### Фрагменты JSX

#### Синтаксис 1

```tsx
import React from "react";

export function App() {
  return <React.Fragment>Этот текст будет локализован.</React.Fragment>;
}
```

#### Синтаксис 2

```tsx
import { Fragment } from "react";

export function App() {
  return <Fragment>Этот текст будет локализован.</Fragment>;
}
```

#### Синтаксис 3

```tsx
import React from "react";

export function App() {
  return <>Этот текст будет локализован.</>;
}
```

### Условные элементы или фрагменты

```tsx
import React, { Fragment, useState } from "react";

export function App() {
  const [isVisible, setIsVisible] = useState(false);

  return (
    <>
      {isVisible && <div>Этот текст будет локализован.</div>}
      {isVisible && (
        <React.Fragment>Этот текст будет локализован.</React.Fragment>
      )}
      {isVisible && <Fragment>Этот текст будет локализован.</Fragment>}
      {isVisible && <>Этот текст будет локализован.</>}
    </>
  );
}
```

### Значения атрибута `alt`

```tsx
import React from "react";

export function App() {
  return <img src="/logo.png" alt="Этот текст будет локализован" />;
}
```

### Значения атрибута `aria-label`

```tsx
import React from "react";

export function App() {
  return <button aria-label="Этот текст будет локализован">×</button>;
}
```

### Значения атрибута `label`

```tsx
import React from "react";

export function App() {
  return (
    <select>
      <option value="option1" label="Этот текст будет локализован">
        Этот текст будет локализован
      </option>
      <option value="option2" label="Этот текст будет локализован">
        Этот текст будет локализован
      </option>
    </select>
  );
}
```

### Значения атрибута `placeholder`

```tsx
import React from "react";

export function App() {
  return <input placeholder="Этот текст будет локализован" />;
}
```

### Значения атрибута `title`

```tsx
import React from "react";

export function App() {
  return <button title="Этот текст будет локализован">Отправить</button>;
}
```

## Нелокализуемый контент

В этом разделе перечислены типы контента, которые компилятор Lingo.dev не извлекает и не локализует.

В отличие от списка "Локализуемый контент", этот список не является исчерпывающим.

### Атрибуты `data-`

```tsx
import React from "react";

export function App() {
  return <div data-testid="Этот текст не будет локализован">Контент</div>;
}
```

### Строковые литералы

```tsx
import React from "react";

const exampleText = "Этот текст не будет локализован.";

export function App() {
  return <div>{exampleText}</div>;
}
```

### Шаблонные литералы

```tsx
import React from "react";

const exampleText = `Этот текст не будет локализован.`;

export function App() {
  return <div>{exampleText}</div>;
}
```

### Условные строки

```tsx
import { Fragment, useState } from "react";

export function App() {
  const [isVisible, setIsVisible] = useState(false);

  return <>{isVisible && "Этот текст не будет локализован."}</>;
}
```

## Ограничения

- Не локализуйте контент самостоятельно.
- Не загружайте локализованный контент в приложение явно.
- Не придумывайте React-хуки (например, `useTranslation`).
- Не придумывайте React-компоненты (например, `FormattedMessage`).
- Не придумывайте методы (например, `localizeText`).