Содержимое этой страницы было переведено с помощью ИИ.
Смотреть последнюю версию оригинального контента на английскомНачало работы с декларацией вашего контента
Расширения файлов
По умолчанию Intlayer отслеживает все файлы с следующими расширениями для деклараций контента:
- .content.json
- .content.ts
- .content.tsx
- .content.js
- .content.jsx
- .content.mjs
- .content.mjx
- .content.cjs
- .content.cjx
Приложение будет искать файлы, соответствующие шаблону ./src/**/*.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx} по умолчанию.
Эти стандартные расширения подходят для большинства приложений. Однако, если у вас есть специфические требования, обратитесь к руководству по настройке расширений контента для инструкций по их управлению.
Для полного списка опций конфигурации посетите документацию по конфигурации.
Объявление вашего контента
Создавайте и управляйте вашими словарями:
import { t, enu, cond, nest, md, type Dictionary } from "intlayer";
interface Content {
imbricatedContent: {
imbricatedContent2: {
stringContent: string;
numberContent: number;
booleanContent: boolean;
javaScriptContent: string;
};
};
multilingualContent: string;
quantityContent: string;
conditionalContent: string;
externalContent: string;
insertionContent: string;
fileContent: string;
nestedContent: any;
markdownContent: any;
jsxContent: any;
}
export default {
key: "page",
content: {
imbricatedContent: {
imbricatedContent2: {
stringContent: "Привет, мир",
numberContent: 123,
booleanContent: true,
javaScriptContent: `${process.env.NODE_ENV}`,
},
},
multilingualContent: t({
en: "English content",
"en-GB": "English content (UK)",
fr: "French content",
es: "Spanish content",
ru: "Русский контент",
}),
quantityContent: enu({
"<-1": "Меньше минус одной машины",
"-1": "Минус одна машина",
"0": "Нет машин",
"1": "Одна машина",
">5": "Несколько машин",
">19": "Много машин",
}),
conditionalContent: cond({
true: "Валидация включена",
false: "Валидация отключена",
}),
nestedContent: nest(
"navbar", // Ключ словаря для вложения
"login.button" // [Необязательно] Путь к контенту для вложения
),
externalContent: fetch("https://example.com").then((res) => res.json())
markdownContent: md("# Пример Markdown"),
/*
* Доступно только с использованием `react-intlayer` или `next-intlayer`
*/
jsxContent: <h1>Мой заголовок</h1>,
},
} satisfies Dictionary<Content>; // [необязательно] Dictionary является обобщением и позволяет усилить форматирование вашего словаря
Вложение функций
Вы можете без проблем вкладывать функции в другие.
Пример:
import { t, enu, cond, nest, md, type Dictionary } from "intlayer";
const getName = async () => "Иван Иванов";
export default {
key: "page",
content: {
// `getIntlayer('page','ru').hiMessage` возвращает `['Привет', ' ', 'Иван Иванов']`
hiMessage: [
t({
en: "Hi",
fr: "Salut",
es: "Hola",
ru: "Привет",
}),
" ",
getName(),
],
// Составной контент, включающий условие, перечисление и многоязычный контент
// `getIntlayer('page','ru').advancedContent(true)(10) возвращает 'Найдено несколько элементов'`
advancedContent: cond({
true: enu({
"0": t({
en: "No items found",
fr: "Aucun article trouvé",
es: "No se encontraron artículos",
ru: "Элементы не найдены",
}),
"1": t({
en: "One item found",
fr: "Un article trouvé",
es: "Se encontró un artículo",
ru: "Найден один элемент",
}),
">1": t({
en: "Multiple items found",
fr: "Plusieurs articles trouvés",
es: "Se encontraron múltiples artículos",
ru: "Найдено несколько элементов",
}),
}),
false: t({
en: "No valid data available",
fr: "Aucune donnée valide disponible",
es: "No hay datos válidos disponibles",
ru: "Нет доступных данных",
}),
}),
},
} satisfies Dictionary;
Если у вас есть идея по улучшению этой документации, не стесняйтесь внести свой вклад, подав запрос на вытягивание на GitHub.
Ссылка на документацию GitHub