Как можно реализовать переключение языков на сайте?
добрый день! как можно реализовать переключение языков на сайте?
многосайтовость на сайте. второй сайт с другим языком находится в папке. созданы инфоблоки, где таже информация только на англ языке.
как можно например находясь на стр "о нас" русской версии сайта и нажав на кнопку в шапке сайта "en" попадать на стр "о нас" только на англ языке? разве что прописать условиями разные ссылки у кнопки "en" в шапке, в зависимости от того на какой странице находимся? или есть другой вариант?
На примере битрикса не уверен, но на примере другой CMS с инфоблочной системой -
В компоненте продублировать поля с суффиком fieldName_en, или другим.
Регистрируем поддомен en, направляем его на основной сайт, далее пишем небольшой функционал на проверку, поддомен ли открыт или нет, если поддомен, то в шаблоне к оригинальному названию поля в массиве добавляем приставку _en - т.е. приставку взятую из названия поддомена.
Таким способом получаем класс, который работает с любым кол-вом языков.
Один минус, что больше чем с двумя языками замучаешься поля копировать.
Для статических элементов создать другой компонент, где будет элемент на русском и на английском, а потом все по той же схеме сравнения домен или поддомен подключать нужное поле компонента, т.е. либо русское, либо какое-то еще
symply_rabbit дорогой пользователь, настоятельно рекомендуем еще раз обратить самое пристальное внимание на п. 3.1 регламента работы сервиса (и, в особенности, на его последний абзац). В противном случае, ваши вопросы будут удаляться по причине тег-спама, а систематические нарушения приведут к блокировке учетной записи.
Как в итоге реализовал я. на англ версии сайта я пользовался яндекс переводчиком. следующим образом:
$yt_api_key = "trnsl.1.1.20180322T131312Z.6a3b0ee1dac1f14f.00102a819f45021b036f28a0f734506499c76ade"; // Получить тут: https://tech.yandex.ru/keys/get/?service=trnsl
$yt_lang = "ru-en"; // Перевод с русского на английский
$yt_text = $yourtext; // Здесь либо ваш текст либо переменная в которой содержится текст
$yt_text = urlencode($yt_text);
$yt_link = "https://translate.yandex.net/api/v1.5/tr.json/translate?key=".$yt_api_key."&text=".$yt_text."&lang=".$yt_lang;
/* или через форматирование строки:
$yt_link = "https://translate.yandex.net/api/v1.5/tr.json/translate?key=%s&text=%s&lang=%s";
$yt_link = sprintf($yt_link, $yt_api_key, $yt_text, $yt_lang);
*/
$result = file_get_contents($yt_link); // получаем данные в JSON: {"code":200,"lang":"ru-en","text":["Sneakers basketball"]}
$result = json_decode($result, true); // Преобразуем в массив
$en_test = $result['text'][0]; // Получаем переведенный текст
echo $en_test;
Далее мне нужно было реализовать переключение. как я писал в условии - на русской версии стр "о нас" кликаешь на кнопку "en" и тебя переводит на ту же страницу только англ версии сайта, тоже самое с товаром, кликаешь на эту кнопку на странице товара урл которой например /catalog/glasses/sunglasses/e25/ и тебя перекидывает на /en/catalog/glasses/sunglasses/e25/, я реализовал следующим образом:
С одной стороны статья хорошая. С другой она скорее про двуязычность, а не многоязычность, потому что продвигаемый механизм дублирования, может быть и может работать для 2 языков, но когда их становится 15 все становится грустно. Еще хуже становится когда ты думал, что у тебя есть только языки, а у тебя есть еще и регионы и они не совпадают, потому что Украина это один регион и два языка, один из которых общий с Россией, а UK и США это два региона с общим языком. А акции и спецпредложения это не вопрос языков, а вопрос регионов...
Там единственный варик, то что в статье названо "Наивный программист", но реализовано не наивным способом описанным там, а непосредственно на уровне модели. И да - для этого придется написать собственную модель поверх Bitrix-API.