|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Saigo 2:5020/400 23 Aug 2001 11:58:14 To : All Subject : Re: даты по-русски -------------------------------------------------------------------------------- > А можно полную спецификацию этих модификаторов сюда? Что-то мне эта идея > нравится. У меня есть тоже задачка где это надо, и тоже на Perl. > Особенно интересно, как ты собираешься бороться с тем, что в разных > языках предусмотрен разный набор форм слова. ну, в первом приближении так (не знаю только, возможно ли это): %a1 - среда %a2 - Среда %a3 - СРЕДА %a4 - ср %a5 - Ср %a6 - СР %b1 - август(а) %b2 - Август(а) %b3 - АВГУСТ(А) %b4 - авг %b5 - Авг %b6 - Авг окончания (а) ставяться, если в формате есть модификатор даты, иначе - без (а) > Кстати, по поводу strftime хочу сразу предупредить что на разных > системах формат %B работает по-разному в русской локали. > Hа solaris он говорит "январь", а на Linux - "января" хм, не знала. видимо, проверять, что выдано и исправлять на то, что надо > S>то есть я должна переопределить функцию POSIX::strftime? а как? > S>я думала, что надо написать функцию, на входе строка формата и сама дата, > S>потом эта строка разбирается в поисках каких-то моих модификаторов и если > S>они есть, в результирующую строку добавляется то или иное значение. а вот > S>как при этом сделать так, чтобы строка сначала обрабатывалась стандартным > S>strftime, а потом уже моя функция обрабатывала только те модификаторы, > Видимо, делать так > $format=~ s/мои формат/\037%m\037/ > $result= strftime($format, @date) > $result=~ s/\037(d+)\037/$recoder{$1}/ > где recoder - хэш отображающий номера месяцев в их названия в правильной > форме. я что-то видимо не поняла. пишу так: use Time::Local; use POSIX qw(strftime); %recorder = ( '01' => 'января', '02' => 'февраля', '03' => 'марта', '04' => 'апреля', '05' => 'мая', '06' => 'июня', '07' => 'июля', '08' => 'августа', '09' => 'сентября', '10' => 'октября', '11' => 'ноября', '12' => 'декабря'); @date=localtime; $format="%a %B %a1"; $format=~s/\037%a1\037/\037%m\037/; $result=strftime($format,@date); $result=~s/\037(d+)\037/$recoder{$1}/; не работает. подскажите, пожалуйста, где я ошибаюсь. Евгения --- ifmail v.2.15dev5 * Origin: Peterlink News System (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/207537f3edacb.html, оценка из 5, голосов 10
|