Руссификация ArticleMS или как не попасть на мои "грабли"

12
-Mouse-
На сайте с 26.03.2007
Offline
108
4615

Захотелось установить мне именно этот движок. Очень понравился. Но заставить его нормально отображать русские слова - для меня стало проблемой. Нашел уже готовый продукт, но не хотел выкидывать 50уе всего лишь за перевод (сама CMS бесплатная), учитывая, что мне надо не так много переделать. Поэтому полез общаться с разработчиками.

Здесь я не буду рассказывать как перевести эту CMS - вы сами легко сможете это сделать путем перевода слов в файлах данной цмс-ки. Я больше хочу поделится опытом, чтобы вы не напоролись на мои же грабли с русской кодировкой. Данная инструкция не предусматривает решение проблемы с RSS и корректного русского языка при модерировании статьи ее авторами. Моя задача была сделать возможным добавлять и редактировать статьи как администратору так и модератору. Правила моего сайта запрещают добавление статьи пользователями. Но думаю, изучив мои грабли, вы без проблем доделаете остальное и поделитесь также со всеми как и я. ;)

1. Установили. Думаю проблем ни у кого не возникнет. Далее, не пытаясь добавить статьи делаем все до последнего пункта.

2. Русские символы в админке:

Заходим в папку admin. Открываем на редактирование файл admin.php и вставляем после

<title>'.$this->sitename.' Admin</title>
(35-я строка) строку:
<META http-equiv="Content-Type" content="text/html; charset=windows-1251">

3. Русские символы для посетителей:

Заходим в админку цмс-ки "Admin Control Panel". Переключаемся на закладку "Templates".

Нажимаем на "Header". Далее после

<title>$this->title</title>
вставляем строку:
<META http-equiv="Content-Type" content="text/html; charset=windows-1251">

4. Решение проблемы с Mod rewrite. Для начала откройте файл .htaccess и впишите в него: AddDefaultCharset windows-1251. Далее открываем в корне сайта файл core.php, находим ф-цию function generateUrl($title) и меняем ее целиком с ее кодом примерно на такую:


function generateUrl($title){
$title = trim($title);
$title = str_replace(',',' ',$title);
$title = str_replace('\'','',$title);
$title = str_replace('(',' ',$title);
$title = str_replace(')',' ',$title);
$title = str_replace('?','',$title);
$title = str_replace('!','',$title);
$title = str_replace('`','',$title);
$title = str_replace(' : ','-',$title);
$title = str_replace(': ','-',$title);
$title = str_replace(' :','-',$title);
$title = str_replace(':','-',$title);
$title = str_replace('’','',$title);
$title = str_replace('"','',$title);
$title = str_replace('“','',$title);
$title = str_replace('“','',$title);
$title = str_replace('“','',$title);
$title = str_replace('”','',$title);
$title = str_replace('”','',$title);
$title = str_replace('—','-',$title);
$title = str_replace('–','-',$title);


$title = str_replace('А','A',$title);
$title = str_replace('а','a',$title);
$title = str_replace('Б','B',$title);
$title = str_replace('б','b',$title);
$title = str_replace('В','V',$title);
$title = str_replace('в','v',$title);
$title = str_replace('Г','G',$title);
$title = str_replace('г','g',$title);
$title = str_replace('Д','D',$title);
$title = str_replace('д','d',$title);
$title = str_replace('Е','E',$title);
$title = str_replace('е','e',$title);
$title = str_replace('Ё','E',$title);
$title = str_replace('ё','e',$title);
$title = str_replace('Ж','Zh',$title);
$title = str_replace('ж','zh',$title);
$title = str_replace('З','Z',$title);
$title = str_replace('з','z',$title);
$title = str_replace('И','I',$title);
$title = str_replace('и','i',$title);
$title = str_replace('Й','I',$title);
$title = str_replace('й','i',$title);
$title = str_replace('К','K',$title);
$title = str_replace('к','k',$title);
$title = str_replace('Л','L',$title);
$title = str_replace('л','l',$title);
$title = str_replace('М','M',$title);
$title = str_replace('м','m',$title);
$title = str_replace('Н','N',$title);
$title = str_replace('н','n',$title);
$title = str_replace('О','O',$title);
$title = str_replace('о','o',$title);
$title = str_replace('П','P',$title);
$title = str_replace('п','p',$title);
$title = str_replace('Р','R',$title);
$title = str_replace('р','r',$title);
$title = str_replace('С','S',$title);
$title = str_replace('с','s',$title);
$title = str_replace('Т','T',$title);
$title = str_replace('т','t',$title);
$title = str_replace('У','U',$title);
$title = str_replace('у','u',$title);
$title = str_replace('Ф','F',$title);
$title = str_replace('ф','f',$title);
$title = str_replace('Х','H',$title);
$title = str_replace('х','h',$title);
$title = str_replace('Ц','Ts',$title);
$title = str_replace('ц','ts',$title);
$title = str_replace('Ч','Ch',$title);
$title = str_replace('ч','ch',$title);
$title = str_replace('Ш','Sh',$title);
$title = str_replace('ш','sh',$title);
$title = str_replace('Щ','Sh',$title);
$title = str_replace('щ','sh',$title);
$title = str_replace('Ь','',$title);
$title = str_replace('ь','',$title);
$title = str_replace('Ъ','',$title);
$title = str_replace('ъ','',$title);
$title = str_replace('Э','E',$title);
$title = str_replace('э','e',$title);
$title = str_replace('Ю','Yu',$title);
$title = str_replace('ю','yu',$title);
$title = str_replace('Я','Ya',$title);
$title = str_replace('я','ya',$title);

$title = str_replace('&',' and ',$title);
$title = str_replace(' ',' ',$title);
$title = str_replace(' ',' ',$title);
$title = str_replace(' ',' ',$title);
$title = str_replace(' ',' ',$title);
$title = str_replace('....',' ',$title);
$title = str_replace('...',' ',$title);
$title = str_replace('..',' ',$title);
$title = str_replace('…',' ',$title);
$title = str_replace(' - ',' ',$title);
$title = str_replace('--',' ',$title);

$title = str_replace('/',' ',$title);
$title = str_replace('\\',' ',$title);
$title = str_replace(' ',' ',$title);
$title = str_replace(' ',' ',$title);
$title = str_replace(' ',' ',$title);
$title = str_replace(' ',' ',$title);

$title = trim($title);

if (substr($title, -1,1) == '.'){
$title = substr($title, 0, strlen($title)-1);
}

$title = trim($title);
return $this->customurlencode($title);
}

И так что у нас вышло:

- Без проблем отображаются русские буквы для посетителей. Причем можно использовать русские название статей и тд.

- Mod_rewrite нормально помогает скрипту строить путь к мнимому html файлу, в котором русские буквы будут заменены на аналогичные английские по звучанию.

- Вы и модераторы спокойно сможете просматривать и редактировать статьи.

- Вы можете без проблем русифицировать как и админку так и сам сайт. (админка, меню и прочие пункты).

Продолжение "возможно" следует ... ;)

P.S. Надеюсь действительно это поможет комуто а не набьют меня по "лицу" :smoke:

Кряква
На сайте с 16.12.2006
Offline
5
#1

Спасибо за подробное обьяснение ! очень пригодилось!

-Mouse-
На сайте с 26.03.2007
Offline
108
#2

Одна мелкая ошибочка (видно закралась при копировании):

В списке пропущена буква "Ы", поэтому вставьте след. строки:

$title = str_replace('ы','i',$title);

$title = str_replace('Ы','i',$title);

Модераторов хотел бы попросить, если возможно, внести изменения в первый пост.

Также данный движок не выдает метатеги по умолчанию, но по нижеуказанной ссылке очень подробно написано как заставить его это делать :-)

http://www.articletrader.com/wiki/index.php/Meta_Tags

И еще одно, что заметил:

В Templates (в админке) при написании русских слов вываливаются иероглифы при след. открытие на редактирование. При этом на самом сайте эти слова отображаются нормально. Обойти можно очень легко: Создаете в разделе "Blocks" новый блок, с нужным текстом на русском языке. А в шаблоне (template) используете только имя блока, например: $Blocks->MyRusText

P.S. Если у когото будут вопросы - пишите в приват. Также выслушаю новые наработки или идеи по этому поводу 🚬

D
На сайте с 14.01.2007
Offline
153
#3

симпотичней было бы все replace заменить на :

$rus=array("А","Б","В".....);

$eng=array("A","B","V"....);

$title = str_replace($rus,$eng,$title);

только массивы должны быть одинаковы по размеру

П.С. интересно, что-же анониму здесь не понравилось?

-Mouse-
На сайте с 26.03.2007
Offline
108
#4

Тоже интересно. Видимо мода такая или нам это не понять. 😕

А может просто я зря вообще этот топик писал 😕

D
На сайте с 14.01.2007
Offline
153
#5
-Mouse-:
Тоже интересно. Видимо мода такая или нам это не понять. 😕
А может просто я зря вообще этот топик писал 😕

не важно. все replace можно заменить по-идее на это. только там непонятно с последними блоками, где много пробелов. я оставил как есть.

$ss=array(',','\'','(',')','?','!','`',' : ',': ',' :',':','’','"','“','“','“','”','”','—','–','&',' ','...','..','…',' - ','--','/','\\');

$ssu=array('','' ,' ' ,' ' ,'' ,'' ,'' ,'-' ,'-' ,'-' ,'-' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'-' ,'-',' and ' ,' ' ,' ' ,' ' ,' ' ,' ' ,' ' ,' ' ,' ');

$rus=array('А','а','Б','б','В','в','Г','г','Д','д','Е','е','Ё','ё','Ж','ж','З','з','И','и','Й','й','К','к','Л','л','М','м','Н','н','О','о','П','п','Р','р','С','с','Т','т','У','у','Ф','ф','Х','х','Ц','ц','Ч','ч','Ш','ш','Щ','щ','Ь','ь','Ъ','ъ','Э','э','Ю','ю','Я','я');
$eng=array('A' ,'a' ,'B' ,'b' ,'V' ,'v' ,'G' ,'g' ,'D' ,'d' ,'E' ,'e' ,'E' ,'e' ,'Zh' ,'zh' ,'Z' ,'z' ,'I' ,'i' ,'I' ,'i' ,'K' ,'k' ,'L' ,'l' ,'M' ,'m' ,'N' ,'n' ,'O' ,'o' ,'P' ,'p' ,'R' ,'r' ,'S' ,'s' ,'T' ,'t' ,'U' ,'u' ,'F' ,'f' ,'H' ,'h' ,'Ts' ,'ts' ,'Ch' ,'ch' ,'Sh' ,'sh' ,'Sh' ,'sh' ,'' ,'' ,'' ,'' ,'E' ,'e' ,'Yu' ,'yu' ,'Ya' ,'ya' );

$title = str_replace( $ss, $ssu,$title);
$title = str_replace( $rus, $eng,$title);
Кряква
На сайте с 16.12.2006
Offline
5
#6

Сапсибо за ссылку буду изучать - как раз зашла с вопросом по каракулям после редактирования

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

ПС

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

Кряква
На сайте с 16.12.2006
Offline
5
#7

ссылка в на разработчиков редактируется тут

Admin -> Templates -> Main и в самом низу шаблона

T8
На сайте с 23.02.2007
Offline
29
#8
-Mouse-:

И еще одно, что заметил:
В Templates (в админке) при написании русских слов вываливаются иероглифы при след. открытие на редактирование. При этом на самом сайте эти слова отображаются нормально. Обойти можно очень легко: Создаете в разделе "Blocks" новый блок, с нужным текстом на русском языке. А в шаблоне (template) используете только имя блока, например: $Blocks->MyRusText

данная проблема устраняется путем замены во всех php скриптах

функции htmlentities на htmlspecialchars

Andreyka
На сайте с 19.02.2005
Offline
822
#9
Кряква:
ссылка в на разработчиков редактируется тут

Admin -> Templates -> Main и в самом низу шаблона

Перед тем как ее менять желательно почитать лицензионное соглашение ;)

Не стоит плодить сущности без необходимости
Кряква
На сайте с 16.12.2006
Offline
5
#10

хм не настолько сильна в англ (( - если не затруднит подскажите я не собираюсь убирать ссылку максимум что это noindex nofollow - насколько я поняла это можно ?

живая ссылка для людей останется

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий