Расширенное использование
Работа с языками, пишущимися справа налево
TacoTranslate упрощает поддержку языков, читаемых справа налево (RTL), таких как арабский и иврит, в ваших React-приложениях. Правильная обработка таких языков обеспечивает корректное отображение контента для пользователей, читающих справа налево.
import {useTacoTranslate} from 'tacotranslate/react';
function Document() {
const {locale, isRightToLeft} = useTacoTranslate();
return (
<html lang={locale} dir={isRightToLeft ? 'rtl' : 'ltr'}>
<body>
// ...
</body>
</html>
);
}Вы также можете использовать предоставленную функцию isRightToLeftLocaleCode для проверки текущего языка вне React.
import {isRightToLeftLocaleCode} from 'tacotranslate';
function foo(locale = 'es') {
const direction = isRightToLeftLocaleCode(locale) ? 'rtl' : 'ltr';
// ...
}Отключение перевода
Чтобы отключить перевод отдельных частей строки или гарантировать, что определённые сегменты будут сохранены как есть, вы можете использовать тройные квадратные скобки. Эта функция полезна для сохранения исходного формата имён, технических терминов или любого другого содержимого, которое не должно переводиться.
import {Translate} from 'tacotranslate/react';
function Component() {
return (
<Translate string="Hello, [[[TacoTranslate]]]!" />
);
}В этом примере слово “TacoTranslate” останется без изменений в переводе.
Несколько провайдеров TacoTranslate
Мы настоятельно рекомендуем использовать несколько TacoTranslate провайдеров в вашем приложении. Это полезно для организации ваших переводов и строк по разным источникам, например для шапки, футера или отдельных разделов.
Вы можете подробнее узнать об использовании origins здесь.
Провайдеры TacoTranslate наследуют настройки от любого родительского провайдера, поэтому вам не придется повторять другие настройки.
import createTacoTranslateClient from 'tacotranslate';
import {TacoTranslate} from 'tacotranslate/react';
const tacoTranslateClient = createTacoTranslateClient({apiKey: 'YOUR_API_KEY'});
function Header() {
return (
<TacoTranslate origin="header">
// ...
</TacoTranslate>
);
}
function Menu() {
return (
<TacoTranslate origin="menu">
// ...
</TacoTranslate>
);
}
export default function App() {
return (
<TacoTranslate client={tacoTranslateClient} origin="page" locale="es">
<Header />
<Menu />
</TacoTranslate>
);
}Переопределение источника или локали
В дополнение к использованию нескольких TacoTranslate провайдеров, вы также можете переопределить и origin, и locale на уровнях компонента Translate и хука useTranslation.
import {Translate, useTranslation} from 'tacotranslate/react';
function Greeting() {
const spanishHello = useTranslation('Hello!', {locale: 'es'});
return (
<>
{spanishHello}
<Translate string="What’s up?" origin="greeting" />
</>
);
}Обработка загрузки
При смене языка на стороне клиента загрузка переводов может занять некоторое время в зависимости от соединения пользователя. Вы можете отобразить индикатор загрузки, чтобы улучшить пользовательский опыт, предоставляя визуальную обратную связь во время переключения.
import {useTacoTranslate} from 'tacotranslate/react';
function Component() {
const {isLoading} = useTacoTranslate();
return (
isLoading ? 'Translations are loading...' : null
);
}Плюрализация
Рекомендуется использовать следующий подход для корректной обработки форм числа и отображения меток, зависящих от количества, в разных языках:
import {Translate, useLocale} from 'tacotranslate/react';
function PhotoCount() {
const locale = useLocale();
const count = 1;
return count === 0 ? (
<Translate string="You have no photos." />
) : count === 1 ? (
<Translate string="You have 1 photo." />
) : (
<Translate
string="You have {{count}} photos."
variables={{count: count.toLocaleString(locale)}}
/>
);
}Несколько языков
Чтобы поддерживать несколько языков одновременно в одном приложении, вы можете использовать несколько провайдеров TacoTranslate с различными locale значениями, как показано ниже:
Вы также можете переопределять locale на уровне компонента или хука.
import createTacoTranslateClient from 'tacotranslate';
import {TacoTranslate, Translate} from 'tacotranslate/react';
const tacoTranslateClient = createTacoTranslateClient({apiKey: 'YOUR_API_KEY'});
function Spanish() {
return (
<TacoTranslate locale="es">
<Translate string="Hello, world in Spanish!" />
</TacoTranslate>
);
}
function Norwegian() {
return (
<TacoTranslate locale="no">
<Translate string="Hello, world in Norwegian!" />
</TacoTranslate>
);
}
export default function App() {
return (
<TacoTranslate client={tacoTranslateClient} origin="page" locale="es">
<Spanish />
<Norwegian />
</TacoTranslate>
);
}Использование идентификаторов переводов
Вы можете добавить id к компоненту Translate для обработки различных переводов или значений одной и той же строки. Это особенно полезно, когда один и тот же текст требует разных переводов в зависимости от контекста. Присваивая уникальные идентификаторы, вы обеспечиваете, что каждый экземпляр строки переводится точно в соответствии с её конкретным значением.
import {Translate} from 'tacotranslate/react';
function Header() {
return (
<Translate id="header" string="Login" />
);
}
function Footer() {
return (
<Translate id="footer" string="Login" />
);
}Например, вход в шапке может переводиться как “Iniciar sesión”, а вход в подвале — как “Acceder” на испанский.