Прежде всего, позвольте мне пояснить, что ваш стек здесь разделен на 3:
- Back-end (Wordpress / PHP)
- Front-end (Html,JS, CSS)
- Algolia (Внешний API)
Итак, что происходит:
- Ваш сервер печатает HTML-страницу, запрошенную клиентомбраузер.
- На этой странице javascript выполняет запрос к API Algolia.
- Этот же javascript обновляет содержимое страницы в зависимости от ответа Algolia без перезагрузки страницы.
Это означает, что фоновое задание здесь останавливается на шаге 1, и вы не можете использовать php на шагах 2 и 3.
Хорошо, теперь есть несколько способов перевести динамический контент, поступающий изalgolia:
Решение 1
Лучшее решение
Если вы можете, вы можете использовать разные индексы Алголии для каждого языка при запуске InstantSearch Algolia.
Например:
...
const search = instantsearch({
appId: 'YOUR_API_ID',
apiKey: 'YOUR_API_KEY',
indexName: 'movies_en' // or 'movies__fr' or 'movies__es'
// Here you could make the indexName dynamic using a variable, like this:
// indexName: 'movies_' + currentLanguage
});
...
Теперь вам просто нужно напечатать правильный индекс дляправильный язык.
Решение 2
Более сложное, менее подходящее решение
Вы можете напечатать перевод JSON где-нибудь на своей странице (с помощью PHP, еслиВы не хотите)
<script>
window.algoliaTranslations: {
"Guardians of the Galaxy": {
"fr": "Gardiens de la Galaxie",
"es": "Guardianes de la Galaxia",
}
}
</script>
и переводите метку на лету
const currentLanguage = 'es'
search.addWidget(
instantsearch.widgets.hits({
container: '#hits',
hitsPerPage: 12,
templates: {
item: `
<label class="ais-RefinementList-label">
<input type="checkbox" class="ais-RefinementList-checkbox" value="{{label}}">
<span class="ais-RefinementList-labelText">{{label}}</span>
<span class="ais-RefinementList-count">{{count}}</span>
</label>
`,
},
transformData: hit => {
hit.label = window.algoliaTranslations[hit.label][currentLanguage]
return hit;
},
})
);
В решении 1 большая часть работы выполняется в Алголии, в то время как в решение 2 эта работа выполняется в php / javascript
Надеюсь, это поможет.