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

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

Nucleus CMS RuSupport _ Локализация Nucleus _ Перевод Дней и Месяцев

Автор: Relaks Apr 1 2007, 10:41 AM

Всю тему (скин) перевел, а вот дни и месяца не знаю как. У меня стоят еще два плагина это Часы и Календарь, их тоже нужно перевести. Прошу рассказать как это сделать. unsure.gif

Автор: Suvoroff Apr 1 2007, 12:09 PM

Дни и месяцы перводятся настройкой локали (в шаблонах)
Настройки зависят от хостинга (кстати говоря, на многих иностранных хостингах перевести не удастся).
Для русского языка в большинстве случаев подходит
ru_RU.CP1251 (иногда просто ru_RU)

Автор: Supermonster Apr 13 2007, 04:45 AM

ЦИТАТА(Suvoroff @ Apr 1 2007, 12:09 PM) *
Дни и месяцы перводятся настройкой локали (в шаблонах)
Настройки зависят от хостинга (кстати говоря, на многих иностранных хостингах перевести не удастся).
Для русского языка в большинстве случаев подходит
ru_RU.CP1251 (иногда просто ru_RU)


Можно подробнее: что за локаль, в каких шаблонах, куда подходит ru_RU.CP1251?
Спасибо.

Автор: Suvoroff Apr 13 2007, 06:19 PM

Админка - Шаблоны
Что не понятно?
Что значит куда подходит?

Автор: buzia Oct 5 2010, 12:50 PM

ЦИТАТА(Suvoroff @ Apr 1 2007, 02:09 PM) *
Дни и месяцы перводятся настройкой локали (в шаблонах)
Настройки зависят от хостинга (кстати говоря, на многих иностранных хостингах перевести не удастся).
Для русского языка в большинстве случаев подходит
ru_RU.CP1251 (иногда просто ru_RU)



Мне к сожалению не повезло smile.gif

Чтоб народ не наступал на те же грабли, расскажу чего нарыл и как справился с задачей.

Нижеописанное справедливо для Nucleus v3.51 (скорее всего и любых других версий)

Во первых, отмечу, что у меня Nucleus в UTF-8 (+ Unix хостинг), по этому и locale будет ru_RU.UTF-8.
Использую дефолтный скин (желтенький такой)))

Локаль устанавливается на выбор:
1. в начале обработки php скрипта (например, в файле config.php, как сделал я)
2. в конкретном месте вывода в шаблоне а админке (для вывода Архива блога) благодаря встроенной в Nucleus функции (переменной) <%archivedate%> (см хелп у себя на сайте documentation/help.html#skinvar-archivedate )

Второй вариант подходит только если хочется сменить вывод даты только в конкретном месте.
Вдоволь наигравшись со вторым вариантом, посмотрев на результаты, понял что не катит, т.к. локаль выставляется, но в силу русско-морфологических причин получается следующее: "5 октября 2010", что вполне нормально, но как только тыкаешь на архив за месяц (где дата выводится без числа, т.е. "месяц год"), видишь неадекватную надпись "Архив за октября 2010" ("Архив за" переводится в шаблоне в админке), что совсем не катит.

Замечание: если у вас месяцы показываются не русскими буквами, значит локаль выбрана неверно, дерзайте, эксперементируйте. Далеенаписаное имеет смысл, если вы видите русские буквы в названии месяцев.

Бороться решил кардинально, используя способ 1, т.к. текстовые месяцы выводятся в некоторых местах.

0. Сделал бэкап smile.gif

1. Открыл config.php
Перед строками

CODE
// include libs
include($DIR_LIBS.'globalfunctions.php');


2. вставляю строку
CODE
setlocale(LC_TIME,'ru_RU.UTF-8');


сохраняю, закрываю.

3. Открываю /nucleus/libs/ACTIONS.php (НЕ ACTION.php)
нахожу комментарий

CODE
* %archivedate(locale,date format)%


далее функция

CODE
function parse_archivedate($locale = '-def-')


4. в этой функции нахожу строчку

CODE
} elseif ($d == 0 && $m !=0) {


5. под ней вместо

CODE
$format = '%B %Y';


пишу

CODE
$format = '%Y';


6. нахожу строчку

CODE
echo strftime($format,mktime(0,0,0,$m?$m:1,$d?$d:1,$y));


вместо нее пишу

CODE

if($d == 0 && $m !=0)
{
$russian_month_array=array("январь","февраль","март","апрель","май","июнь","июль","август","сентябрь","октябрь","ноябрь","декабрь");
$russian_month=$russian_month_array[$m-1];

echo $russian_month." ".strftime($format,mktime(0,0,0,$m?$m:1,$d?$d:1,$y));
}else{
echo strftime($format,mktime(0,0,0,$m?$m:1,$d?$d:1,$y));
}


Все. Теперь на странице архива за месяц пишется "Архив за октябрь 2010".

"За месяц" отметил жирным, т.к. есть еще и страница "Список архивов", на которой написано "Список архивов по месяцам" (и снова: перевел в шаблоне).
Сейчас, если открыть эту страницу, то будет написано примерно следующее:

"Список архивов по месяцам
октября, 2010
сентября, 2010",

где "октября" и "сентября" являются ссылками на страницу с архивом, которую я уже поправил.

Для правки открыл BLOG.php

1. ищу строку

CODE
echo strftime($temp,$current->itime);


2. вместо неё пишу

CODE

$date_html=strftime($temp,$current->itime);

if($date_html=str_replace("Архив за января,","Архив за январь,",$date_html)){
$date_html=str_replace(">января, 2010<",">январь, 2010<",$date_html);
}
if($date_html=str_replace("Архив за февраля,","Архив за февраль,",$date_html)){
$date_html=str_replace(">февраля, 2010<",">февраль, 2010<",$date_html);
}
if($date_html=str_replace("Архив за марта,","Архив за март,",$date_html)){
$date_html=str_replace(">марта, 2010<",">март, 2010<",$date_html);
}
if($date_html=str_replace("Архив за апреля,","Архив за апрель,",$date_html)){
$date_html=str_replace(">апреля, 2010<",">апрель, 2010<",$date_html);
}
if($date_html=str_replace("Архив за мая,","Архив за май,",$date_html)){
$date_html=str_replace(">мая, 2010<",">май, 2010<",$date_html);
}
if($date_html=str_replace("Архив за июня,","Архив за июнь,",$date_html)){
$date_html=str_replace(">июня, 2010<",">июнь, 2010<",$date_html);
}
if($date_html=str_replace("Архив за июля,","Архив за июль,",$date_html)){
$date_html=str_replace(">июля, 2010<",">июль, 2010<",$date_html);
}
if($date_html=str_replace("Архив за августа,","Архив за август,",$date_html)){
$date_html=str_replace(">августа, 2010<",">август, 2010<",$date_html);
}
if($date_html=str_replace("Архив за сентября,","Архив за сентябрь,",$date_html)){
$date_html=str_replace(">сентября, 2010<",">сентябрь, 2010<",$date_html);
}
if($date_html=str_replace("Архив за октября,","Архив за октябрь,",$date_html)){
$date_html=str_replace(">октября, 2010<",">октябрь, 2010<",$date_html);
}
if($date_html=str_replace("Архив за ноября,","Архив за ноябрь,",$date_html)){
$date_html=str_replace(">ноября, 2010<",">ноябрь, 2010<",$date_html);
}
if($date_html=str_replace("Архив за декабря,","Архив за декабрь,",$date_html)){
$date_html=str_replace(">декабря, 2010<",">декабрь, 2010<",$date_html);
}

echo $date_html;


Да, очень некрасиво. Кому важна эстетика. можете написать цикл с 2-мя массивами - мне ща лень smile.gif

Теперь видим долгожданную картину:

"
Список архивов по месяцам
октябрь, 2010
сентябрь, 2010
"

Также я установил себе плагин NP_Calendar, который также неадекватно себя вел. Правил так:

1. Открыл NP_Calendar.php

2. ищу строчки (примерно строка 224)

CODE
// draw header
$currentdate = getDate();
if ($next_month > $currentdate['mon'] && $year == $currentdate['year']) {
$future = false;
} else {
$future = true;
}


3. после них пишу

CODE
$russian_month_array=array("Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь");
$russian_month=$russian_month_array[$date['mon']-1];


4. далее ищу строчку

CODE
<a href="<?php echo createArchiveLink($blogid, strftime('%Y-%m',$timestamp))?>"><?php echo strftime('%B %Y',$timestamp)?></a>


5. вместо неё пишу
CODE
<a href="<?php echo createArchiveLink($blogid, strftime('%Y-%m',$timestamp))?>"><?php echo $russian_month." ".strftime('%Y',$timestamp)?></a>


Ну вот собственно и всё, теперь всё показывается как надо.

Не претендую на HOW TO, но полезным, надеюсь, будет smile.gif

Автор: Suvoroff Oct 6 2010, 12:07 PM

buzia, спасибо за подробные инструкции!

Автор: buzia Oct 8 2010, 06:21 AM

Всегда пожалуйста smile.gif

Автор: dariushbabri Dec 3 2017, 07:53 AM

The whole topic (skin) translated, but the days and months I do not know how. I have two more plug-ins that are Clock and Calendar, they also need to be translated. Please tell me how to do thi http://gowebsite.ir

Автор: alirezares Feb 3 2018, 01:25 PM

i have same problems sad.gif
http://nitaco.ir/seo/

Автор: sitesazan Apr 8 2018, 08:51 AM

How do I implement Farsi Calendar? Is there a plugin?

https://www.sitesazan.net/
https://www.sitesazan.net/

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