proffitraff
Всем привет. Не знаю точно в какой раздел лучше, заранее прошу прощения, если не туда...
Дано: мультияз-сидж на СмартСЖ, кат-ии переведены внутри смарта, а остальная часть (названия меню, пагинация, общие слова какие-то и т.п.) подгружается через внешний .txt файл. Так вот, на некоторых языках всплыла такая вот проблем - у первого символа бьется кодировка. Именно первый символ и только из моего .txt файла (т.е. в категориях, например, не замечено). Выглядит вот так: prnt.sc/hpga8n
только на хинди, арабском, китайском и корейском языках. Остальные нормально. Кручу-верчу, не пойму в чем проблема... Кодировка в файлах UTF-8 (без BOM и с ним пробовал - без разницы). Знакомый админ крутил настройки сервака - безрезультатно. Если бы всё криво выводилось (из базы смарта и из моего файла), то понятно, что где-то глобальная ошибка, а тут только несколько языков и именно первый символ... Есть какие-то мысли, куда следует посмотреть и что попробовать?
ps: Пока нашел временное решение - отбил первый символ пробелом. Выглядит нормально (не бьётся ничего), но впереди пробел (внешне не заметно, но в коде видно).
Dx
Перенеси суть txt в темплейт смарта и подключай на нужных страницах
Перевод меню сайта ( i18 )
Довольно просто сделать перевод меню сайта (те ссылок типа Most Popular, Order By date и прочее) на другие языки.
1. Делаем кастом темплейт например languages в котором будет код слов
<?php
$my_keywords['en'] = array(
'most_popular' => 'Most popular',
'order_by_date' => 'Order By Date',
и так далее
);
$my_keywords['ru'] = array(
'most_popular' => 'Самые популярные',
'order_by_date' => 'Сортировать по дате',
и так далее
);
$my_keywords['de'] = array(
'most_popular' => 'Populärste',
'order_by_date' => 'Sortiert nach Datum',
и так далее
);
и так далее сколько угодно языков
далее 2 варианта подставления языка:
по языку браузера
if (strstr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 'ru')) {
$lang = $my_keywords['ru'];
} elseif (strstr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 'de')) {
$lang = $my_keywords['de'];
} else $lang = $my_keywords['en'];
или по geo_ip
if ($_SERVER['GEOIP_COUNTRY_CODE'] =='RU') {
$lang = $my_keywords['ru'];
} elseif ($_SERVER['GEOIP_COUNTRY_CODE'] =='DE') {
$lang = $my_keywords['de'];
} else $lang = $my_keywords['en'];
надеюсь в обоих примерах понятно как добавить больше языков
и в конце темпелйта
if ($_GET['force_lng'] and isset($my_keywords[$_GET['force_lng']])) {
setcookie('force_lng', $_GET['force_lng'], time() + 86400);
$lang = $my_keywords[$_GET['force_lng']];
} elseif ($_COOKIE['force_lng'] and isset($my_keywords[$_COOKIE['force_lng']])){
$lang = $my_keywords[$_COOKIE['force_lng']];
}
Все, конец темплейта
2. во всех темплейтах где надо будут разные языки инклудим этот созданный темплейт
<!--INCLUDE_TEMPLATE_languages-->
3. В темпелейтах соответствующие слова заменяем на переменные, например
Most popular меняем на <?=$lang['most_popular']?>
Order By Date меняем на <?=$lang['order_by_date']?>
и так далее
с этого момента у вас уже должны быть разные описания для разных языков
4. даем юзеру возможность переключить язык “насильно”
для этого ставим линку вида
http://domain/?force_lng=de (и тп нужных язык в зависимости от массива ваших языков в $my_keywords['de'])
Все.