docusaurus/docs/ru/next/translation/index.html
Website Deployment Script 71d15dfa49 Deploy website
Deploy website version based on 6a511b805a
2020-07-20 15:05:28 +00:00

331 lines
No EOL
57 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html><html lang="ru"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Перевод и локализация · Docusaurus</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Docusaurus предоставляет функционал для удобного перевода текста с помощью [Crowdin](https://crowdin.com/). Файлы документации, написанные на английском языке, загружаются на Crowdin для перевода пользователями из сообщества. Страницы верхнего уровня, написанные на английском, могут быть переведены на другие языки, если вы обернете каждую строку, которую вы желаете перевести, в тег `&lt;translate&gt;`. Другие заголовки и метки также будут обнаружены и переведены должным образом."/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="ru"/><meta property="og:title" content="Перевод и локализация · Docusaurus"/><meta property="og:type" content="website"/><meta property="og:url" content="https://docusaurus.io/"/><meta property="og:description" content="Docusaurus предоставляет функционал для удобного перевода текста с помощью [Crowdin](https://crowdin.com/). Файлы документации, написанные на английском языке, загружаются на Crowdin для перевода пользователями из сообщества. Страницы верхнего уровня, написанные на английском, могут быть переведены на другие языки, если вы обернете каждую строку, которую вы желаете перевести, в тег `&lt;translate&gt;`. Другие заголовки и метки также будут обнаружены и переведены должным образом."/><meta property="og:image" content="https://docusaurus.io/img/docusaurus.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://docusaurus.io/img/docusaurus.png"/><link rel="shortcut icon" href="/img/docusaurus.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://docusaurus.io/blog/atom.xml" title="Docusaurus Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://docusaurus.io/blog/feed.xml" title="Docusaurus Blog RSS Feed"/><script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-44373548-31', 'auto');
ga('send', 'pageview');
</script><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/code-blocks-buttons.js"></script><script src="https://unpkg.com/vanilla-back-to-top@7.1.14/dist/vanilla-back-to-top.min.js"></script><script>
document.addEventListener('DOMContentLoaded', function() {
addBackToTop(
{"zIndex":100}
)
});
</script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/prism.css"/><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/ru"><img class="logo" src="/img/docusaurus.svg" alt="Docusaurus"/><h2 class="headerTitleWithLogo">Docusaurus</h2></a><a href="/ru/versions"><h3>next</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/ru/next/installation" target="_self">Документация</a></li><li class=""><a href="/docs/ru/next/tutorial-setup" target="_self">Руководство</a></li><li class=""><a href="/ru/users" target="_self">Пользователи</a></li><li class=""><a href="/blog/" target="_self">Блог</a></li><li class=""><a href="https://github.com/facebook/docusaurus" target="_blank">GitHub</a></li><span><li><a id="languages-menu" href="#"><img class="languages-icon" src="/img/language.svg" alt="Languages icon"/>Русский</a><div id="languages-dropdown" class="hide"><ul id="languages-dropdown-items"><li><a href="/docs/en/next/translation">English</a></li><li><a href="/docs/fr/next/translation">Français</a></li><li><a href="/docs/ko/next/translation">한국어</a></li><li><a href="/docs/pt-BR/next/translation">Português (Brasil)</a></li><li><a href="/docs/ro/next/translation">Română</a></li><li><a href="/docs/zh-CN/next/translation">简体中文</a></li><li><a href="https://crowdin.com/project/docusaurus" target="_blank" rel="noreferrer noopener">Помочь с переводом</a></li></ul></div></li><script>
const languagesMenuItem = document.getElementById("languages-menu");
const languagesDropDown = document.getElementById("languages-dropdown");
languagesMenuItem.addEventListener("click", function(event) {
event.preventDefault();
if (languagesDropDown.className == "hide") {
languagesDropDown.className = "visible";
} else {
languagesDropDown.className = "hide";
}
});
</script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i></i><span>Руководство</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Начало работы<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/ru/next/installation">Установка</a></li><li class="navListItem"><a class="navItem" href="/docs/ru/next/site-preparation">Настройка сайта</a></li><li class="navListItem"><a class="navItem" href="/docs/ru/next/site-creation">Создание вашего сайта</a></li><li class="navListItem"><a class="navItem" href="/docs/ru/next/publishing">Публикация вашего сайта</a></li><li class="navListItem"><a class="navItem" href="/docs/ru/next/docker">Docker</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Руководство<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/ru/next/adding-blog">Добавление блога</a></li><li class="navListItem"><a class="navItem" href="/docs/ru/next/custom-pages">Пользовательские страницы</a></li><li class="navListItem"><a class="navItem" href="/docs/ru/next/search">Включение поиска</a></li><li class="navListItem"><a class="navItem" href="/docs/ru/next/navigation">Навигация и боковые панели</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/ru/next/translation">Перевод и локализация</a></li><li class="navListItem"><a class="navItem" href="/docs/ru/next/versioning">Версионирование</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">API<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/ru/next/commands">Команды CLI</a></li><li class="navListItem"><a class="navItem" href="/docs/ru/next/doc-markdown">Особенности разметки Markdown в Docusaurus</a></li><li class="navListItem"><a class="navItem" href="/docs/ru/next/api-pages">Страницы и стили</a></li><li class="navListItem"><a class="navItem" href="/docs/ru/next/site-config">siteConfig.js</a></li></ul></div></div></section></div><script>
var coll = document.getElementsByClassName('collapsible');
var checkActiveCategory = true;
for (var i = 0; i < coll.length; i++) {
var links = coll[i].nextElementSibling.getElementsByTagName('*');
if (checkActiveCategory){
for (var j = 0; j < links.length; j++) {
if (links[j].classList.contains('navListItemActive')){
coll[i].nextElementSibling.classList.toggle('hide');
coll[i].childNodes[1].classList.toggle('rotate');
checkActiveCategory = false;
break;
}
}
}
coll[i].addEventListener('click', function() {
var arrow = this.childNodes[1];
arrow.classList.toggle('rotate');
var content = this.nextElementSibling;
content.classList.toggle('hide');
});
}
document.addEventListener('DOMContentLoaded', function() {
createToggler('#navToggler', '#docsNav', 'docsSliderActive');
createToggler('#tocToggler', 'body', 'tocActive');
var headings = document.querySelector('.toc-headings');
headings && headings.addEventListener('click', function(event) {
var el = event.target;
while(el !== headings){
if (el.tagName === 'A') {
document.body.classList.remove('tocActive');
break;
} else{
el = el.parentNode;
}
}
}, false);
function createToggler(togglerSelector, targetSelector, className) {
var toggler = document.querySelector(togglerSelector);
var target = document.querySelector(targetSelector);
if (!toggler) {
return;
}
toggler.onclick = function(event) {
event.preventDefault();
target.classList.toggle(className);
};
}
});
</script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/docusaurus/ru" target="_blank" rel="noreferrer noopener">Translate</a><h1 id="__docusaurus" class="postHeaderTitle">Перевод и локализация</h1></header><article><div><span><p>Docusaurus предоставляет функционал для удобного перевода текста с помощью <a href="https://crowdin.com/">Crowdin</a>. Файлы документации, написанные на английском языке, загружаются на Crowdin для перевода пользователями из сообщества. Страницы верхнего уровня, написанные на английском, могут быть переведены на другие языки, если вы обернете каждую строку, которую вы желаете перевести, в тег <code>&lt;translate&gt;</code>. Другие заголовки и метки также будут обнаружены и переведены должным образом.</p>
<h2><a class="anchor" aria-hidden="true" id="настройки-перевода-в-docusaurus"></a><a href="#настройки-перевода-в-docusaurus" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Настройки перевода в Docusaurus</h2>
<p>Чтобы создать примеры файлов для перевода с помощью Docusaurus, запустите сценарий <code>examples</code> с параметром командной строки <code>translations</code>:</p>
<pre><code class="hljs css language-bash">npm run examples translations
</code></pre>
<p>или</p>
<pre><code class="hljs css language-bash">yarn examples translations
</code></pre>
<p>В результате будут созданы следующие файлы:</p>
<pre><code class="hljs css language-bash">pages/en/<span class="hljs-built_in">help</span>-with-translations.js
languages.js
../crowdin.yaml
</code></pre>
<ul>
<li>Файл <code>pages/en/help-with-translations.js</code> содержит ту же страницу, что и созданную сценарием <code>examples</code>, но теперь он включает теги для перевода.</li>
</ul>
<blockquote>
<p>В общем случае, вы будете использовать файл <code>help-with-translations.js</code> как пример подключения функции перевода на другие ваши страницы, но не добавляйте его в свой репозиторий (т.е. вы можете удалить его). Тем не менее, если вы желаете добавить такую страницу на свой сайт и у вас её еще нет, вы можете переименовать файл в <code>help.js</code> и использовать его как отправную точку.</p>
</blockquote>
<ul>
<li><p>Файл <code>languages.js</code> указывает Docusaurus, какие языки вы желаете сделать доступными для своего сайта. По-умолчанию, мы ожидаем что английский язык подключен.</p></li>
<li><p>Файл <code>crowdin.yaml</code> используется для настройки интеграции с Crowdin, его следует переместить на один уровень выше в репозитории вашего проекта Docusaurus. Если ваш проект размещен в каталоге <code>/project/website</code>, то переместите <code>crowdin.yaml</code> в каталог <code>/project</code>.</p></li>
</ul>
<h2><a class="anchor" aria-hidden="true" id="перевод-уже-существующих-документов"></a><a href="#перевод-уже-существующих-документов" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Перевод уже существующих документов</h2>
<p>Ваши файлы документации (например, файлы <code>.md</code> расположенные в вашем каталоге <code>docs</code>) не нужно изменять или перемещать, чтобы они поддерживали перевод. Они будут загружены на Crowdin и переведены напрямую.</p>
<h2><a class="anchor" aria-hidden="true" id="подключение-перевода-на-страницах"></a><a href="#подключение-перевода-на-страницах" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Подключение перевода на страницах</h2>
<p>Вы можете настроить макет и конкретное содержимое таких страниц как главная страница или страница помощи.</p>
<p>Страницы с текстом, который вы желаете перевести, должны располагаться в каталоге <code>website/pages/en</code>.</p>
<p>Wrap strings that you want translated in a <code>&lt;translate&gt;</code> tag, and add the following <code>require</code> statement to the top of the file:</p>
<pre><code class="hljs css language-jsx"><span class="token operator">...</span>
<span class="token keyword">const</span> translate <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">'../../server/translate.js'</span><span class="token punctuation">)</span><span class="token punctuation">.</span>translate<span class="token punctuation">;</span>
<span class="token operator">...</span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>h2</span><span class="token punctuation">></span></span><span class="token plain-text">
</span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>translate</span><span class="token punctuation">></span></span><span class="token plain-text">This header will be translated</span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>translate</span><span class="token punctuation">></span></span><span class="token plain-text">
</span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>h2</span><span class="token punctuation">></span></span>
<span class="token operator">...</span>
</code></pre>
<p>Вы также можете добавить описание - необязательный атрибут desc, чтобы дать больше информации переводчику о том, как переводить строку:</p>
<pre><code class="hljs css language-jsx"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>p</span><span class="token punctuation">></span></span><span class="token plain-text">
</span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>translate</span> <span class="token attr-name">desc</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>flower, not verb<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token plain-text">Rose</span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>translate</span><span class="token punctuation">></span></span><span class="token plain-text">
</span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>p</span><span class="token punctuation">></span></span><span class="token plain-text">
</span></code></pre>
<blockquote>
<p>Тег <code>&lt;translate&gt;</code> в общем случае хорошо работает на чистых строках. Если у вас есть строка вида &quot;Docusaurus currently provides support to help your website use <a href="${siteConfig.baseUrl}${siteConfig.docsUrl}/${this.props.language}/translation.html">translations</a>&quot;, то обернув её целиком в тег <code>&amp;lt;translation&amp;gt;</code> вы столкнетесь с проблемами, т. к. строка содержит ссылки markdown и прочее. В этом случае вы можете либо не переводить такую строку, либо обернуть в тег <code>&amp;lt;translate&amp;gt;</code> её каждую чистую подстроку.</p>
</blockquote>
<h2><a class="anchor" aria-hidden="true" id="сбор-строк-для-перевода"></a><a href="#сбор-строк-для-перевода" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Сбор строк для перевода</h2>
<p>Строки на локализованных страницах должны быть извлечены и переданы в Crowdin.</p>
<p>Добавьте следующий сценарий в свой файл <code>website/package.json</code>, если его там еще нет:</p>
<pre><code class="hljs css language-js">{
...
<span class="hljs-string">"scripts"</span>: {
<span class="hljs-string">"write-translations"</span>: <span class="hljs-string">"docusaurus-write-translations"</span>
},
...
}
</code></pre>
<p>Выполнив этот сценарий вы получите файл <code>website/i18n/en.json</code>, содержащий все строки, которые будут переведены с английского на другие языки.</p>
<p>Сценарий добавит текст из следующих мест:</p>
<ul>
<li>строки <code>title</code> и <code>sidebar_label</code> в заголовках markdown в документе</li>
<li>наименования категорий из <code>sidebars.json</code></li>
<li>слоган из <code>siteConfig.js</code></li>
<li>строки <code>label</code> из ссылок в шапке страницы в <code>siteConfig.js</code></li>
<li>строки, обернутые в тег <code>&amp;lt;translate&amp;gt;</code> и любые <code>.js</code> файлы внутри каталога <code>pages</code></li>
</ul>
<h3><a class="anchor" aria-hidden="true" id="пользовательские-строки-перевода"></a><a href="#пользовательские-строки-перевода" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Пользовательские строки перевода</h3>
<p>Если вы желаете добавить дополнительные пользовательские строки перевода, или же переопределить любую строку, которая будет создана сценарием, создающим файл <code>website/i18n/en.json</code>, вы можете добавить файл <code>website/data/custom-translation-strings.json</code>. Содержимое файла должно иметь следующий вид:</p>
<pre><code class="hljs css language-json">{
<span class="hljs-attr">"localized-strings"</span>: {
<span class="hljs-attr">"docs"</span>: {
<span class="hljs-attr">"id"</span>: {
<span class="hljs-attr">"title"</span>: <span class="hljs-string">"string1"</span>,
<span class="hljs-attr">"sidebar_label"</span>: <span class="hljs-string">"string2"</span>
},
<span class="hljs-attr">"version-0.0.1-id"</span>: {
<span class="hljs-attr">"title"</span>: <span class="hljs-string">"string3"</span>,
<span class="hljs-attr">"sidebar_label"</span>: <span class="hljs-string">"string4"</span>
}
}
},
<span class="hljs-attr">"pages-strings"</span>: {
<span class="hljs-attr">"id3"</span>: <span class="hljs-string">"string3"</span>,
<span class="hljs-attr">"id4"</span>: <span class="hljs-string">"string4"</span>
}
}
</code></pre>
<p>где <code>localized-strings</code> представляют строки из содержимого вашей документации, а <code>pages-strings</code> - метаданные в вашей документации (например, заголовок, ссылки и прочее).</p>
<p>Вот пример:</p>
<pre><code class="hljs css language-json">{
<span class="hljs-attr">"_comment"</span>: <span class="hljs-string">"This file is used to provide custom strings for translations, including overriding defaults"</span>,
<span class="hljs-attr">"localized-strings"</span>: {
<span class="hljs-attr">"translation"</span>: <span class="hljs-string">"Translations and Localization"</span>
},
<span class="hljs-attr">"pages-strings"</span>: {
<span class="hljs-attr">"Help Translate|recruit community translators for your project"</span>: <span class="hljs-string">"Help Us Translate"</span>
}
}
</code></pre>
<p>Просмотрите созданный <code>website/i18n/en.json</code> для примера.</p>
<h2><a class="anchor" aria-hidden="true" id="как-переводить-строки"></a><a href="#как-переводить-строки" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Как переводить строки</h2>
<p>Docusaurus сам по себе не переводит что-либо с одного языка на другой. Instead, it integrates <a href="https://crowdin.com/">Crowdin</a> to upload translations and then download the appropriately translated files from Crowdin.</p>
<h2><a class="anchor" aria-hidden="true" id="как-docusaurus-использует-переводы-строк"></a><a href="#как-docusaurus-использует-переводы-строк" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Как Docusaurus использует переводы строк</h2>
<p>Этот раздел предоставляет информацию о том, как работают переводы в Docusaurus.</p>
<h3><a class="anchor" aria-hidden="true" id="строки"></a><a href="#строки" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Строки</h3>
<p>Сайт на Docusaurus содержит множество строк, используемых на всем его протяжении, требующих локализации. Однако, поддержание списка таких строк на всем сайте может быть трудоемким. Docusaurus упрощает этот процесс, централизуя строки.</p>
<p>Панель навигации в шапке страницы, например, может содержать ссылки &quot;Home&quot; или &quot;Blog&quot;. Эти и другие строки, найденные в шапке страницы и в боковых панелях извлекаются и помещаются в <code>i18n/en.json</code>. Когда ваши файлы будут переведены, скажем на Испанский, файл <code>i18n/es-ES.json</code> будет загружен из Crowdin. Затем, когда страницы на испанском будут созданы, Docusaurus заменит английские версии соответствующих строк на переведенные строки из соответствующих файлов с локализованными строками (например, на сайте с подключенной испанской версией 'Help' превратится в 'Ayuda').</p>
<h3><a class="anchor" aria-hidden="true" id="файлы-markdown"></a><a href="#файлы-markdown" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Файлы Markdown</h3>
<p>Переведенные версии файлов документации загружаются и собираются с помощью соответствующего шаблона макета.</p>
<h3><a class="anchor" aria-hidden="true" id="другие-страницы"></a><a href="#другие-страницы" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Другие страницы</h3>
<p>Для других страниц, Docusaurus автоматически преобразует все теги <code>&amp;lt;translate&amp;gt;</code>, которые найдет в вызовах функций и вернет переведенные строки из соответствующего файла <em><code>locale.json</code></em>.</p>
<h2><a class="anchor" aria-hidden="true" id="crowdin"></a><a href="#crowdin" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Crowdin</h2>
<p>Crowdin это компания, предоставляющая услуги перевода. Для проектов с открытым исходным кодом, Crowdin предоставляет свободные переводы строк.</p>
<p>Создайте свой проект по переводу текста на <a href="https://crowdin.com/">Crowdin</a>. You can use <a href="https://support.crowdin.com/translation-process-overview/">Crowdin's guides</a> to learn more about the translations workflow. <em>Мы предполагаем, что вы не выбрали и не включили &quot;English&quot; как язык для перевода для предотвращения создания файлов локализации <code>en-US</code>, так как это может привести к коллизии.</em></p>
<blockquote>
<p>Убедитесь, что в настройках Crowdin в разделе «Переводы» для «Duplicate Strings» установлено значение <a href="https://support.crowdin.com/api/create-project/">«Hide - все дубликаты будут иметь одинаковый перевод» </a>. Этот параметр гарантирует, что идентичные строки в разных версиях имеют один и тот же перевод.</p>
</blockquote>
<p>В вашем проекте должен быть сгенерированный файл <code>crowdin.yaml</code>. Если вы запустите <code>yarn examples translations</code> или <code>npm run examples translations</code>, этот файл будет создан для вас на том же уровне что и каталог <code>website</code>.</p>
<blockquote>
<p>Вам будет нужно установить интерфейс командной строки <code>crowdin</code>. Пожалуйста, следуйте <a href="https://support.crowdin.com/cli-tool/">инструкциям по установке</a>.</p>
</blockquote>
<p>Пример ниже может быть автоматически создан с помощью Docusaurus cli при вызове сценария <code>examples</code>. Он должен быть размещен в корневом каталоге вашего проекта для настройки того как файлы будут загружены/скачены.</p>
<p>Ниже представлен пример конфигурации Crowdin для следующих языков: немецкий, испанский, французский, японский, корейский, индонезийский, бразильский португальский, китайский упрощенный и китайский традиционный языки.</p>
<pre><code class="hljs css language-yaml"><span class="hljs-attr">project_identifier_env:</span> <span class="hljs-string">CROWDIN_DOCUSAURUS_PROJECT_ID</span>
<span class="hljs-attr">api_key_env:</span> <span class="hljs-string">CROWDIN_DOCUSAURUS_API_KEY</span>
<span class="hljs-attr">base_path:</span> <span class="hljs-string">'./'</span>
<span class="hljs-attr">preserve_hierarchy:</span> <span class="hljs-literal">true</span>
<span class="hljs-attr">files:</span>
<span class="hljs-bullet">-</span> <span class="hljs-attr">source:</span> <span class="hljs-string">'/docs/**/*.md'</span>
<span class="hljs-attr">translation:</span> <span class="hljs-string">'/website/translated_docs/%locale%/**/%original_file_name%'</span>
<span class="hljs-attr">languages_mapping:</span> <span class="hljs-meta">&amp;anchor</span>
<span class="hljs-attr">locale:</span>
<span class="hljs-attr">'de':</span> <span class="hljs-string">'de'</span>
<span class="hljs-attr">'es-ES':</span> <span class="hljs-string">'es-ES'</span>
<span class="hljs-attr">'fr':</span> <span class="hljs-string">'fr'</span>
<span class="hljs-attr">'ja':</span> <span class="hljs-string">'ja'</span>
<span class="hljs-attr">'ko':</span> <span class="hljs-string">'ko'</span>
<span class="hljs-attr">'mr':</span> <span class="hljs-string">'mr-IN'</span>
<span class="hljs-attr">'pt-BR':</span> <span class="hljs-string">'pt-BR'</span>
<span class="hljs-attr">'zh-CN':</span> <span class="hljs-string">'zh-CN'</span>
<span class="hljs-attr">'zh-TW':</span> <span class="hljs-string">'zh-TW'</span>
</code></pre>
<p>Вы можете посмотреть <a href="https://support.crowdin.com/configuration-file/">здесь</a> как настроить свой файл <code>crowdin.yaml</code>.</p>
<h3><a class="anchor" aria-hidden="true" id="настройка-сценариев-crowdin"></a><a href="#настройка-сценариев-crowdin" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Настройка сценариев Crowdin</h3>
<p>Вы, вероятно, можете пожелать вручную синхронизировать свои файлы с Crowdin. В процессе синхронизации будут скачены все файлы markdown из <code>/docs</code> так же, как и строки для перевода из <code>website/i18n/en.json</code>. (Эти строки могут быть созданы, если вы запустите <code>yarn write-translations</code>.)</p>
<p>Вы можете указать следующие сценарии в своем файле <code>package.json</code> для запуска Crowdin вручную.</p>
<pre><code class="hljs css language-js"><span class="hljs-string">"scripts"</span>: {
<span class="hljs-string">"crowdin-upload"</span>: <span class="hljs-string">"crowdin --config ../crowdin.yaml upload sources --auto-update -b master"</span>,
<span class="hljs-string">"crowdin-download"</span>: <span class="hljs-string">"crowdin --config ../crowdin.yaml download -b master"</span>
},
</code></pre>
<h3><a class="anchor" aria-hidden="true" id="ручная-синхронизация-файлов"></a><a href="#ручная-синхронизация-файлов" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Ручная синхронизация файлов</h3>
<p>You will always want to upload your markdown files and translatable strings first and download the translations section. Для этого выполните команды в следующем порядке:</p>
<pre><code class="hljs css language-bash">CROWDIN_DOCUSAURUS_PROJECT_ID=YOUR_CROWDIN_PROJECT_ID CROWDIN_DOCUSAURUS_API_KEY=YOUR_CROWDIN_API_KEY yarn run crowdin-upload
CROWDIN_DOCUSAURUS_PROJECT_ID=YOUR_CROWDIN_PROJECT_ID CROWDIN_DOCUSAURUS_API_KEY=YOUR_CROWDIN_API_KEY yarn run crowdin-download
</code></pre>
<blockquote>
<p><code>YOUR_CROWDIN_PROJECT_ID</code> это наименование вашего проекта на Crowdin. Например, для <a href="https://crowdin.com/project/docusaurus/">https://crowdin.com/project/docusaurus/</a>, эта переменная должна быть равна <code>docusaurus</code>. <code>YOUR_CROWDIN_API_KEY</code> это уникальный ключ, выполняет схожие с паролем функции. Вы можете обнаружить вкладку <code>API</code> на странице настроек <code>Settings</code> вашего проекта на Crowdin.</p>
<p>Для этих команд требуется установить переменные окружения со значениями id и api key вашего проекта на Crowdin (<code>CROWDIN_PROJECT_ID</code>, <code>CROWDIN_API_KEY</code>). Вы можете указывать их непосредственно при вызове команд, как было сделано выше, или добавить их на постоянной основе в <code>.bashrc</code> или <code>.bash_profile</code>.</p>
<p>Если вы запускаете больше одного локализованного проекта Docusaurus на своем компьютере, вам следует изменить наименование переменных окружения на что-нибудь уникальное (<code>CROWDIN_PROJECTNAME_PROJECT_ID</code>, <code>CROWDIN_PROJECTNAME_API_KEY</code>).</p>
<p>Поскольку файлы создаются автоматически, вам не нужно сохранять что-либо в каталоге <code>website/i18n</code> или <code>website/translated_docs</code> как часть своего репозитория. Так что вы можете добавить <code>website/i18n/*</code> и <code>website/translated_docs</code> в <code>.gitignore</code>.</p>
</blockquote>
<h3><a class="anchor" aria-hidden="true" id="автоматическая-синхронизация-с-помощью-circleci"></a><a href="#автоматическая-синхронизация-с-помощью-circleci" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Автоматическая синхронизация с помощью CircleCI</h3>
<p>Вы можете автоматизировать загрузку и скачивание переводов для своих файлов, используя сервис непрерывной интеграции <a href="https://circleci.com">CircleCI</a>.</p>
<p>В первую очередь, измените файл <code>.circleci/config.yml</code> в каталоге своего проекта, чтобы включить шаги загрузки файлов на английском языке и скачивания переведенных файлов с помощью Crowdin CLI. Вот пример файла <code>.circleci/config.yml</code>:</p>
<pre><code class="hljs css language-yaml"><span class="hljs-comment"># Если вам нужно запустить circle непосредственно на коммитах в master, вы можете раскомментировать этот фрагмент</span>
<span class="hljs-comment"># а также раскомментировать filters: *filter-only-master в самом низу</span>
<span class="hljs-comment">#</span>
<span class="hljs-comment"># aliases:</span>
<span class="hljs-comment"># - &amp;filter-only-master</span>
<span class="hljs-comment"># branches:</span>
<span class="hljs-comment"># only:</span>
<span class="hljs-comment"># - master</span>
<span class="hljs-attr">version:</span> <span class="hljs-number">2</span>
<span class="hljs-attr">jobs:</span>
<span class="hljs-attr">deploy-website:</span>
<span class="hljs-attr">docker:</span>
<span class="hljs-comment"># укажите версию для установки здесь</span>
<span class="hljs-bullet">-</span> <span class="hljs-attr">image:</span> <span class="hljs-string">circleci/node:8.11.1</span>
<span class="hljs-attr">steps:</span>
<span class="hljs-bullet">-</span> <span class="hljs-string">checkout</span>
<span class="hljs-bullet">-</span> <span class="hljs-attr">run:</span>
<span class="hljs-attr">name:</span> <span class="hljs-string">Deploying</span> <span class="hljs-string">to</span> <span class="hljs-string">GitHub</span> <span class="hljs-string">Pages</span>
<span class="hljs-attr">command:</span> <span class="hljs-string">|
git config --global user.email "&lt;GITHUB_USERNAME&gt;@users.noreply.github.com"
git config --global user.name "&lt;YOUR_NAME&gt;"
echo "machine github.com login &lt;GITHUB_USERNAME&gt; password $GITHUB_TOKEN" &gt; ~/.netrc
# установка Docusaurus и создание файла со строками на английском
- cd website &amp;&amp; yarn install &amp;&amp; yarn run write-translations &amp;&amp; cd ..
# установка crowdin
- sudo apt-get install default-jre
- wget https://artifacts.crowdin.com/repo/deb/crowdin.deb -O crowdin.deb
- sudo dpkg -i crowdin.deb
# загрузка/скачивание переводов
- crowdin --config crowdin.yaml upload sources --auto-update -b master
- crowdin --config crowdin.yaml download -b master
# сборка и публикация сайта
cd website &amp;&amp; GIT_USER=&lt;GIT_USER&gt; yarn run publish-gh-pages
</span>
<span class="hljs-attr">workflows:</span>
<span class="hljs-attr">version:</span> <span class="hljs-number">2</span>
<span class="hljs-attr">build_and_deploy:</span>
<span class="hljs-attr">jobs:</span>
<span class="hljs-bullet">-</span> <span class="hljs-attr">deploy-website:</span>
<span class="hljs-comment"># filters: *filter-only-master</span>
</code></pre>
<p>Команда <code>crowdin</code> использует файл <code>crowdin.yaml</code>, созданный сценарием <code>examples</code>. Он должен быть размещен в каталоге вашего проекта для настройки того как файлы будут загружены/скачены.</p>
<p>Обратите внимание, что в файле <code>crowdin.yaml</code>, <code>CROWDIN_PROJECT_ID</code> и <code>CROWDIN_API_KEY</code> являются переменными окружения, установленными в Circle для вашего проекта Crowdin. Они могут быть обнаружены в настройках вашего проекта Crowdin.</p>
<p>Теперь Circle поможет вам автоматически получить переводы перед сборкой вашего сайта. Файл <code>crowdin.yaml</code> будет использован для определения местоположения загруженных файлов - переведенные документы будут скопированы в <code>website/translation_docs/</code>, а переведенных версии строк из файла <code>i18n/en.json</code> в <code>i18n/${language}.json</code>.</p>
<p>Если вы желаете использовать Crowdin локально на своей машине, вы можете установить <a href="https://support.crowdin.com/cli-tool/">инструмент Crowdin CLI</a> и запустить те же команды, что указаны в файле <code>circle.yaml</code>. Единственная различие состоит в том, что вы должны установить значения <code>project_identifier</code> и <code>api_key</code> в файле <code>crowdin.yaml</code>, так как у вас не будет настроенных переменных окружения из Circle.</p>
<h2><a class="anchor" aria-hidden="true" id="версионирование-и-перевод"></a><a href="#версионирование-и-перевод" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Версионирование и перевод</h2>
<p>Если вы желаете получить перевод для разных версий своей документации, добавьте следующий раздел в конец вашего файла <code>crowdin.yaml</code>:</p>
<pre><code class="hljs css language-yaml"> <span class="hljs-bullet">-</span>
<span class="hljs-attr">source:</span> <span class="hljs-string">'/website/versioned_docs/**/*.md'</span>
<span class="hljs-attr">translation:</span> <span class="hljs-string">'/website/translated_docs/%locale%/**/%original_file_name%'</span>
<span class="hljs-attr">languages_mapping:</span> <span class="hljs-meta">*anchor</span>
</code></pre>
<p>Переведенные и версионированные документы будут размещены в каталоге <code>website/translated_docs/${language}/${version}/</code>.</p>
</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ru/next/navigation"><span class="arrow-prev"></span><span>Навигация и боковые панели</span></a><a class="docs-next button" href="/docs/ru/next/versioning"><span>Версионирование</span><span class="arrow-next"></span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#настройки-перевода-в-docusaurus">Настройки перевода в Docusaurus</a></li><li><a href="#перевод-уже-существующих-документов">Перевод уже существующих документов</a></li><li><a href="#подключение-перевода-на-страницах">Подключение перевода на страницах</a></li><li><a href="#сбор-строк-для-перевода">Сбор строк для перевода</a><ul class="toc-headings"><li><a href="#пользовательские-строки-перевода">Пользовательские строки перевода</a></li></ul></li><li><a href="#как-переводить-строки">Как переводить строки</a></li><li><a href="#как-docusaurus-использует-переводы-строк">Как Docusaurus использует переводы строк</a><ul class="toc-headings"><li><a href="#строки">Строки</a></li><li><a href="#файлы-markdown">Файлы Markdown</a></li><li><a href="#другие-страницы">Другие страницы</a></li></ul></li><li><a href="#crowdin">Crowdin</a><ul class="toc-headings"><li><a href="#настройка-сценариев-crowdin">Настройка сценариев Crowdin</a></li><li><a href="#ручная-синхронизация-файлов">Ручная синхронизация файлов</a></li><li><a href="#автоматическая-синхронизация-с-помощью-circleci">Автоматическая синхронизация с помощью CircleCI</a></li></ul></li><li><a href="#версионирование-и-перевод">Версионирование и перевод</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/docusaurus_monochrome.svg" alt="Docusaurus" width="66" height="58"/></a><div class="footerSection"><h5>Docs</h5><a href="
/docs/ru/installation">Getting Started</a><a href="
/docs/ru/versioning">Versioning</a><a href="
/docs/ru/translation">Localization</a><a href="
/docs/ru/search">Adding Search</a></div><div class="footerSection"><h5>Community</h5><a href="/ru/help">Help</a><a href="/ru/users">User Showcase</a><a href="/ru/about-slash">About</a></div><div class="footerSection"><h5>Legal</h5><a href="https://opensource.facebook.com/legal/privacy/" target="_blank" rel="noreferrer noopener">Privacy</a><a href="https://opensource.facebook.com/legal/terms/" target="_blank" rel="noreferrer noopener">Terms</a></div><div class="footerSection"><h5>Social</h5><div class="social"><a class="github-button" href="https://github.com/facebook/docusaurus" data-count-href="https://github.com/facebook/docusaurus/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">docusaurus</a></div><div class="social"><a href="https://twitter.com/docusaurus" class="twitter-follow-button">Follow @docusaurus</a></div><div class="social"><div class="fb-like" data-href="https://docusaurus.io" data-colorscheme="dark" data-layout="standard" data-share="true" data-width="225" data-show-faces="false"></div></div></div></section><a href="https://opensource.facebook.com/" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Facebook Open Source" width="170" height="45"/></a><section class="copyright"><span>Copyright © 2020 Facebook Inc.</span> Landing images by <a href="https://undraw.co/">unDraw</a>.</section></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.fbAsyncInit = function() {FB.init({appId:'199138890728411',xfbml:true,version:'v2.7'});};(function(d, s, id){var js, fjs = d.getElementsByTagName(s)[0];if (d.getElementById(id)) {return;}js = d.createElement(s); js.id = id;js.src = '//connect.facebook.net/en_US/sdk.js';fjs.parentNode.insertBefore(js, fjs);}(document, 'script','facebook-jssdk'));
</script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter-wjs'));</script><script>
document.addEventListener('keyup', function(e) {
if (e.target !== document.body) {
return;
}
// keyCode for '/' (slash)
if (e.keyCode === 191) {
const search = document.getElementById('search_input_react');
search && search.focus();
}
});
</script><script>
var search = docsearch({
apiKey: '3eb9507824b8be89e7a199ecaa1a9d2c',
indexName: 'docusaurus',
inputSelector: '#search_input_react',
algoliaOptions: {"facetFilters":["language:ru","version:next"]}
});
</script></body></html>