Помощь - Поиск - Пользователи - Календарь
Полная версия: Перевод Дней и Месяцев
Nucleus CMS RuSupport > Пользователям Nucleus > Локализация Nucleus
Relaks
Всю тему (скин) перевел, а вот дни и месяца не знаю как. У меня стоят еще два плагина это Часы и Календарь, их тоже нужно перевести. Прошу рассказать как это сделать. unsure.gif
Suvoroff
Дни и месяцы перводятся настройкой локали (в шаблонах)
Настройки зависят от хостинга (кстати говоря, на многих иностранных хостингах перевести не удастся).
Для русского языка в большинстве случаев подходит
ru_RU.CP1251 (иногда просто ru_RU)
Supermonster
ЦИТАТА(Suvoroff @ Apr 1 2007, 12:09 PM) *
Дни и месяцы перводятся настройкой локали (в шаблонах)
Настройки зависят от хостинга (кстати говоря, на многих иностранных хостингах перевести не удастся).
Для русского языка в большинстве случаев подходит
ru_RU.CP1251 (иногда просто ru_RU)


Можно подробнее: что за локаль, в каких шаблонах, куда подходит ru_RU.CP1251?
Спасибо.
Suvoroff
Админка - Шаблоны
Что не понятно?
Что значит куда подходит?
buzia
ЦИТАТА(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
buzia, спасибо за подробные инструкции!
buzia
Всегда пожалуйста smile.gif
dariushbabri
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 طراحی سایت
alirezares
i have same problems sad.gif
سئو
sitesazan
How do I implement Farsi Calendar? Is there a plugin?

طراحی سایت
طراحی وب سایت
Это "текстовая" версия, возможен просмотр только основного контента. Для просмотра полной версии этой страницы, пожалуйста нажмите сюда.
Invision Power Board © 2001-2018 Invision Power Services, Inc.