Заставить ваш сайт говорить с вашими пользователями на их языке — непростая задача.
Некоторые недооценивают его, хотя там особо ничего не нужно делать: взять локаль/предпочитаемый язык пользователя, получить файл с вашим переводом, выполнить синтаксический анализ и настройку.
Звучит прямолинейно, и это так. В современном мире библиотек представлений, полноценных фреймворков, удобных инструментов, которые помогают, это то, что действительно повышает ваш опыт.
https://github.com/cristianbote/react-translate-json
«Этот сайт нужно перевести»
Я впервые столкнулся с требованием «этот сайт нужно перевести» несколько лет назад, когда работал над сайтом на AngularJS. Во время гугления я наткнулся на пакет angular-translate для Pascal, и это открыло мне глаза: простой, понятный API и действительно хорошо документированный.
Вы не могли просить больше, чем это. У вас есть ключи, вы установили свою локаль, и вы можете напрямую использовать ее через конвейеры или простые директивы.
Моя версия
Использование его в AngularJS было прекрасным, потому что я не нашел ничего более полезного, чем то, что он предлагал, но отказ от AngularJS оставил пробел в моих повседневных потребностях в переводе. Поэтому я пытался воссоздать его всякий раз, когда мне нужна была эта парадигма; следовательно, в реакции.
Итак, давайте немного поговорим о том, что здесь происходит на самом деле.
Сначала импортируйте нужную функцию и компонент. Звоните setConfig
с pathPrefix
в свою папку с переводами. По умолчанию это ищет файлы .json
, но вы можете указать расширение, если это не JSON. Допустим, вы обслуживаете все свои статические ресурсы из CDN, тогда вы легко можете получить следующее:
На самом деле здесь все идет, пока браузер может это запросить.
Во-вторых, вам нужно использовать <TranslateComponent />
, чтобы получить значение. Это прокси-компонент, который не имеет никакого следа в DOM и может использоваться либо через render
, либо просто позволить ему отображать текст внутри диапазона.
Хорошо, но мне нужно параметризовать значения
Я полностью понимаю. У кого есть статические переводы? Никто, вот кто. Как и в Паскале, вы можете использовать рули, {{myProp}}
, внутри ваших значений.
Любые вопросы?
Расширенное использование
Итак, у вас может быть некоторая настройка, где, скажем, ваши переводы генерируются динамически с помощью более сложного вызова. Это могло случиться. Пока на выходе есть объект с ключами и значениями, все в порядке. Вы можете сделать:
По сути, вам не нужны никакие обозначения локали или статические файлы. Метод setConfig
, все, что он делает, это гарантирует наличие вызываемой конечной точки, которая может/должна вернуть некоторый JSON.
Другое использование, которое может оказаться полезным, — это метод «translate».
Окончание
Суть в том, что этот пакет предназначен для реагирования, но может использоваться в любой другой среде или контексте.
Так что, надеюсь, это привлекло ваше внимание, и вы дадите ему шанс. Вы можете найти код на github, npm и yarn. Если у вас есть какие-либо улучшения, я более чем рад их видеть.
https://github.com/cristianbote/react-translate-json
Дайте мне знать, что вы думаете, и похлопайте, не так ли?
Ваше здоровье!