Версия для печати

Нажмите сюда для просмотра этой темы в обычном формате

Nucleus CMS RuSupport _ Основные вопросы _ UTF-8 в Nucleus CMS

Автор: Ruzzz Nov 21 2006, 10:11 AM

Зачем это нада? Да потому что более универсально, "по стандарту", решаются проблемы с доступом к страничке не "нашими"(людьми, прогами smile.gif )!


UTF-8 - Вообще хочу собрать все что нужно знать о кодировке в Nucleus CMS!

Вот что я имею на данный момент!

- Вообще будет правильно сказать, что вся инфа выдаваемая на русском должна быть в UTF-8
ВОТ ЭТО ВАЖНО, УЗНАТЬ ЧТО ГДЕ КОГДА ВЫДАЕТСЯ НА РУССКОМ
СКИН
ЯЗЫКОВОЙ ФАЙЛ
ВОЗМОЖНО PHP ВЫДАЕТ ЧТО-ТО ЛОКАЛИЗОВАННОЕ (ДАТА - МЕСЯЦ???)

- Сюда внести "прикол" с NOTIFICATION.php
- если хотим, чтобы наш сайт отсылал (нам же) письма-"уведомления" (например после добавления комментария) в определённой кодировке, то её (эту кодировку) нужно указать здесь! Искать в конце файла строку:
@mail($address, $title, $message , "From: ". $from . "\nContent-Type: text/plain; charset=utf-8");

- Далее в файлах скина (как правило в head.inc - вообще там где строится "заголовок" выдаваемом страницы) есть строчка <meta http-equiv=content-type content="text/html; charset=!!!НУЖНАЯ_КОДИРОВКА!!!">
где !!!НУЖНАЯ_КОДИРОВКА!!! может быть например: windows-1251, utf-8. В обычном случае, для поддержки русского нам нужна первая, но для перевода в UTF-8, конечно же вторая.

- Файл "ЯЗЫКОВОЙ", его нужно перевести в нужную кодировку.(UTF-8)

- Плагины, которые локализовали, ТАКЖЕ необходимо перевести в нужную кодировку.(UTF-8)

- Далее БД говорилось в статье (21/07: Nucleus CMS в кодировке UTF-8) на сайте http://www.nucleus.NET.ru/ о переводе всей БАЗЫ в UTF-8. Кстати вопрос, если заранее все (что именно? smile.gif ) сделать, то тогда и переводить БД не нужно будет?
Вот статья(не вся, только, то что важно сейчас):
1) Для начала нужно сделать дамп базы данных. Можно воспользоваться PhpMyAdmin, если база небольшая, либо другими скриптами, которые позволяют сохранить дамп базы, сохранив его на сервере.
2) После того, как дамп будет у вас «на руках», его нужно сохранить в кодировке UTF-8. Сделать это можно даже обычным «Блокнотом», опять же, если размер базы небольшой (у меня «Блокнот» загибался на файлах более 5мб). Сохранять в UTF-8 нужно без сигнатуры.
3) Таким же образом, как и конвертировалась база данных, нужно перевести в UTF-8 все файлы в папке скина.
4) Затем нужно загрузить а папку /nucleus/language/ русский языковой файл в кодировке UTF-8.
5) Далее идём в тот же PhpMyAdmin, выполняем SQL-запрос сконвертированным дампом. После успешно выполненного запроса нужно открыть таблицу «nucleus_config». Затем найти в ней ячейку «Language» и изменить её значение на «russian-utf8».
6) Зайти в админку и проверить, всё ли правильно работает smile.gif

Пятый пункт! Откуда берется значение котрое пишется в БД? То есть, я хочу узнать как сделать, чтобы не исправлять в БД, но что бы это значение "само" писалось туда уже в этом виде! (Надеюсь смог донести свои мысли smile.gif )

- Поиск по "utf-8" нашел файлы:
\nucleus\documentation\history.html
\nucleus\libs\globalfunctions.php
\nucleus\libs\NOTIFICATION.php
\nucleus\libs\xmlrpc.inc.php
\nucleus\xmlrpc\server.php

С первым понятно просто нам рассказывают. Про второй говорилось выше. Третий - там в коде учитывается кодировка, то есть идет какая-то проверка, ну насколько я понял нам это не важно (? или я не прав ?). Про четвертый и пятый - испоьзуется для доступа к блогу через специальные программы-блогеры (? или я не прав ? В смысле, не только для этого?). Какая между ними зависимость? Тот файл, что в LIBS (четвертый) нужен наверное для работы "движка". А пятый для уведомления этих самых програм, что ли. Это мои предположения, исправте меня, или я бы сказал напишите правильно об этом! КСТАТИ, ИЗ-ЗА ЭТИХ САМЫХ ПРОГРАМ-БЛОГЕРОВ Я И ПОДНЯЛ ТЕМУ UTF-8!!! Можно ли как-нибудь заставить эти программы понимать windows-1251?

- Еще момент с названиями месяцев, после перевода "всего" в UTF-8(по статье - смотри выше), у меня появилась проблема - локализованные названия месяцев продолжали "выдаваться" в windows-1251, почему??? Что-то не исправил? У меня кстати стояло все локализовано под windows-1251, до того как я перешел на utf-8! (может в этом загвоздка). А может нужно как-то настроить PHP? Если дело в PHP, то как быть на сервере хостера? О чем просить? Или это можна самому поправить - указав какую-то дерективу, где-то smile.gif ?

- Вообще сказать бы по PHP CSS HTML - по теме кодировок! Ну что бы учитывать это! Вдруг кому плагин или скин попадется какой-то, где это надо учесть(подправить) иначе "глючить" кодировки будут. Я думаю знающему, это не составит труда. Прошу не посылать за документацией! smile.gif

- Статья на сайте (Пользователи радуют интересными вопросами. Русские имена.) http://www.nucleus.COM.ru

Такой вопрос. как сделать чтобы могли люди регитсья с русскими именами?

1. Открываем файл ..nucleus/libs/globalfunctions.php
2. Строка примерно 750, ищем код:

function isValidShortName($name) { return eregi('^[a-z0-9]+$', $name); }
function isValidDisplayName($name) { return eregi('^[a-z0-9]+[a-z0-9 ]*[a-z0-9]+$', $name); }
function isValidCategoryName($name) { return 1; }
function isValidTemplateName($name) { return eregi('^[a-z0-9/]+$', $name); }
function isValidSkinName($name) { return eregi('^[a-z0-9/]+$', $name); }

и меняем на:

function isValidShortName($name) { return eregi('^[ёЁа-яА-Яa-zA-Za-z0-9]+$', $name); }
function isValidDisplayName($name) { return eregi('^[ёЁа-яА-Яa-z0-9]+[ёЁа-яА-Яa-z0-9 ]*[ёЁа-яА-Яa-z0-9]+$', $name); }
function isValidCategoryName($name) { return 1; }
function isValidTemplateName($name) { return eregi('^[ёЁа-яА-Яa-z0-9/]+$', $name); }
function isValidSkinName($name) { return eregi('^[ёЁа-яА-Яa-z0-9/]+$', $name); }

Как это связать с UTF-8???

- Статья на сайте (Оптимизируем комментарии для русского языка..) http://www.nucleus.COM.ru

Этот небольшой хак позволит избежать неприятностей с комментариями при использовании русского языка (которым собственно мы и собираемся пользоваться )
В стандартной версии Nucleus максимальное количество символов в одном слове комментария – 90. Только вот разработчики забыли упомянуть, что ограничение работает, только в том случае если мы оставляем комментарии на английском языке (латинским набором символов). А также проходят и символы из серии @#$%^&*(). Будем исправлять

Открываем файл в текстовом редакторе …/nucleus/libs/COMMENTS.php
Строка 228:
if (eregi('[a-zA-Z0-9|\.,;:!\?=\/\\]{90,90}',$comment['body']) != false)

Меняем на:
if (eregi('[Ёёа-яА-Яa-zA-Z0-9|\.~!@#$%^&*()_+"№\'\}\{\[,;:!\?=\/\\]{50,50}',$comment['body']) != false)

Также, я сократил максимальное количество символов до 50 (по-моему, этого вполне достаточно). Конечно, этот хак не исключает возможности использования разных хитроумных символов, но от шутников, пожалуй, спасет

Примечание.
Для тех, кто не понял, зачем это делать. Если не запретить длинные слова в комментариях, то пользователи смогут вводить большое количество символов без пробелов, что при отображении на сайте будет очень сильно влиять на дизайн (появиться бесконечная нижняя полоса прокрутки).

Если кто-то заметил здесь ошибку, дайте мне знать.


Как это связать с UTF-8???

- Вообще где в движке есть "места", в которых прийдется что-то исправлять??? А может при использовании UTF-8 уже не нада будет исправлять???

- Если не устанавливать никаких языковых пакетов, а оставить как-есть, сразу после установки! При добавлении записи на руском языке - каждый символ автоматически переводится в Привет - это слово ПРИВЕТ! Может это выход!!!??? ... Проверил - НЕТ! Блогер програма - читая-понимает, а вот при отсылке проблема, она же не конвертирует в "этот"(�NNNN) формат, а отправляет в UTF-8!

- Как в НЕ локализованном варианте заставить выдавать русские месяцы? Это зависит от PHP или где-то хранится? (например в языковом файле) Если в шаблоне задать формат даты (там так же как и в PHP, да? То есть "движок" это не обрабатывает, а просто "использует" как есть, то есть подставляет для обработки PHP-движком ?) Так вот, если в шаблоне задать формат даты, то он же не берется из языкового пакета? или как? php ,берет его то сервака? если так как указать PHP в какой кодировке брать?

- Какие проблемы с кодировками могут быть на серверах! (Апач например!) На серверах хостера? Как это можна исправить? О чем просить хостера?

- Что дает нам англо-язычная литература? Форум, документация?

- Так, нашел в файле языкового пакета:
define('_CHARSET', 'windows-1251');

---

Я плоховато знаю английский, и PHP могу понять только как программист знающий другие языки! smile.gif
Прошу прошения если что-то не так! Хотел собрать всю доступную мне инфу!
Ну вообщем на англо- я еще буду искать, думаю разберусь, ну и на вашу помощь рассчитываю?

Вообщем давайте вместе составим "РУКОВОДСТВО", что-то типа "UTF-8 в Nucleus CMS"

Автор: Suvoroff Nov 21 2006, 08:43 PM

По этой теме есть руководство от товарища саахова. думаю он не будет против если я размещу его здесь:


Проблема с кодировкой возникает тогда, когда обнаруживается, что некоторые посетители сайта пользуются западными сервисами, которые кроме UTF-8 ничего не понимают. Либо, когда надоело пользоваться браузером для добавления/редактирования сообщений, и захотелось все делать специальным блоггинг-редактором. Как бы там ни было, перевести Nucleus CMS в международную кодировку не составит большого труда, нужно выполнить всего несколько простых действий:


Для начала нужно сделать дамп базы данных. Можно воспользоваться PhpMyAdmin, если база небольшая, либо другими скриптами, которые позволяют сохранить дамп базы, сохранив его на сервере.
После того, как дамп будет у вас «на руках», его нужно сохранить в кодировке UTF-8. Сделать это можно даже обычным «Блокнотом», опять же, если размер базы небольшой (у меня «Блокнот» загибался на файлах более 5мб). Сохранять в UTF-8 нужно без сигнатуры.
Таким же образом, как и конвертировалась база данных, нужно перевести в UTF-8 все файлы в папке скина.
Затем нужно загрузить а папку /nucleus/language/ русский языковой файл в кодировке UTF-8.
Далее идём в тот же PhpMyAdmin, выполняем SQL-запрос сконвертированным дампом. После успешно выполненного запроса нужно открыть таблицу «nucleus_config». Затем найти в ней ячейку «Language» и изменить её значение на «russian-utf8».
Зайти в админку и проверить, всё ли правильно работает smile.gif

После таких несложных действий ваш сайт будет работать в кодировке UTF-8. Если лень возиться (хотя тут делать особенно нечего), а нужно всего лишь предоставить пользователям возможность читать фиды в западных RSS-читалках (Google Reader, AOL RSS, MSN RSS и т.д.), то можно воспользоваться сервисом Feedburner, который не только автоматически сконвертирует ваш RSS в UTF-8, но и подсчитает, сколько человек вас читает (роботы на отдельном счету). Сервис на английском языке, но даже при малейшем его знании легко понять, что к чему.

Автор: saj Nov 22 2006, 03:54 PM

Цитата
ВОЗМОЖНО PHP ВЫДАЕТ ЧТО-ТО ЛОКАЛИЗОВАННОЕ (ДАТА - МЕСЯЦ???)

Да, дата. Локаль устанавливается в шаблонах ru, ru_ru, ru_RU и т.п. Но если локаль на сервере не установлена, то ничего не получится smile.gif Хотя для utf возможно что-то по другому.

Цитата
- Файл "ЯЗЫКОВОЙ", его нужно перевести в нужную кодировку.(UTF-8)

Сохранить в utf и заменить define('_CHARSET', 'windows-1251'); на utf. У Саахова есть файлы в win и в utf. Но это легко сделать и самому smile.gif

Цитата
- Плагины, которые локализовали, ТАКЖЕ необходимо перевести в нужную кодировку.(UTF-8)

Таких не очень много smile.gif В общем случае тоже достаточно просто сохранить в utf.

Цитата
- Далее БД говорилось в статье (21/07: Nucleus CMS в кодировке UTF-8) на сайте http://www.nucleus.NET.ru/ о переводе всей БАЗЫ в UTF-8. Кстати вопрос, если заранее все (что именно? ) сделать, то тогда и переводить БД не нужно будет?

Изначально установить ланг-файл в utf, настроить скин под utf. И пользоваться smile.gif

Цитата
Пятый пункт! Откуда берется значение котрое пишется в БД? То есть, я хочу узнать как сделать, чтобы не исправлять в БД, но что бы это значение "само" писалось туда уже в этом виде! (Надеюсь смог донести свои мысли )

Понятно. Делать это нах нужно. Значение (в примере, russian-utf8) берется из названия ланг-файла - назвал его fuck, зашел в админку, указал в настройках что язык будет fuck и в данной ячейке будет fuck smile.gif Надеюсь, смог донести smile.gif

Цитата
- Статья на сайте (Пользователи радуют интересными вопросами. Русские имена.) http://www.nucleus.COM.ru
Как это связать с UTF-8???

Имхо просто делать это в utf

Цитата
- Статья на сайте (Оптимизируем комментарии для русского языка..) http://www.nucleus.COM.ru
Как это связать с UTF-8???

Аналогично.

Цитата
- Что дает нам англо-язычная литература? Форум, документация?

smile.gif

Автор: Ruzzz Dec 1 2006, 03:41 AM

Огромное спасибо!

Автор: saahov Dec 2 2006, 09:17 AM

Цитата
По этой теме есть руководство от товарища саахова. думаю он не будет против если я размещу его здесь

Я не против, но можно было бы и ссылочку поставить wink.gif

Вообще забавно, посетители спрашивают об одном и том же http://nucleus.net.ru/forum/viewtopic.php?id=164, и здесь, везде получают ответы, причём иногда даже спасибо не говорят.

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)