Master-X
Форум | Новости | Статьи
Главная » Форум » CJs » 
Тема: Мультияз, кодировка
цитата
19/12/17 в 11:19
 proffitraff
Всем привет. Не знаю точно в какой раздел лучше, заранее прошу прощения, если не туда...
Дано: мультияз-сидж на СмартСЖ, кат-ии переведены внутри смарта, а остальная часть (названия меню, пагинация, общие слова какие-то и т.п.) подгружается через внешний .txt файл. Так вот, на некоторых языках всплыла такая вот проблем - у первого символа бьется кодировка. Именно первый символ и только из моего .txt файла (т.е. в категориях, например, не замечено). Выглядит вот так: prnt.sc/hpga8n
только на хинди, арабском, китайском и корейском языках. Остальные нормально. Кручу-верчу, не пойму в чем проблема... Кодировка в файлах UTF-8 (без BOM и с ним пробовал - без разницы). Знакомый админ крутил настройки сервака - безрезультатно. Если бы всё криво выводилось (из базы смарта и из моего файла), то понятно, что где-то глобальная ошибка, а тут только несколько языков и именно первый символ... Есть какие-то мысли, куда следует посмотреть и что попробовать?

ps: Пока нашел временное решение - отбил первый символ пробелом. Выглядит нормально (не бьётся ничего), но впереди пробел (внешне не заметно, но в коде видно).
цитата
19/12/17 в 13:25
 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&#228;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']];
}

Все, конец темплейта icon_smile.gif
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'])
Все.
цитата
20/12/17 в 01:25
 cyberdream3
Оффтопик: как же эту матрицу из 1го пункта кумарно делать, куча работы руками icon_confused.gif
цитата
20/12/17 в 11:22
 Dx
вот описание и решение твоей проблемы, затуп в ucfirst скорее всего
цитата
20/12/17 в 18:20
 proffitraff
Dx: Да, спасибо, это видел. Но по-идее была бы проблема со всеми языками? А у меня только с четырьмя из 2. Странно.
цитата
21/12/17 в 12:46
 ibiz
proffitraff писал:
хинди, арабском, китайском и корейском языках


а чем переведены внутри смарта?
вообще имеет смысл лепить на сайт кривой гугл-транслейт азиатских языков?


Эта страница в полной версии