Неверное название месяца на русском - PullRequest
4 голосов
/ 27 сентября 2011

Я работаю над сайтом, и мой клиент из России. Он сказал, что перевод новостей в новостях неверен.

Например, сентябрь:

  • Я получаю это от php: Сентябрь
  • и это от него: Сентября

Как мне перезаписать это?

Разъяснение: При использовании локали ru_RU название месяца будет русским. Но, по словам моего клиента, название месяца неверно. Я не говорю по-русски, поэтому понятия не имею, прав он или нет

Я только что видел, что если я переведу дату с этого: 8th of September 2011 на русский язык, это будет выглядеть так: 8 сентября 2011. см. Перевод .

Таким образом, решением проблемы, вероятно, было бы переписать формат даты.

Я еще не исправил это; по-видимому, это ошибка / отсутствующая функция из-за заблаговременных склонений русских. И нужный мне формат даты не существует. Я думаю, что это влияет на strftime и PHP date().

Может кто-нибудь это проверить?

Ответы [ 6 ]

3 голосов
/ 02 февраля 2012

Я знаю, что уже слишком поздно, но надеюсь, что это сэкономит кому-то время.

Русский язык считается самым сложным в мире.В этом случае правильным вариантом будет определенно Сентября.Вы можете сказать: «Это сентябрь сейчас», что будет «Это сейчас Сенбярь».Но если вы говорите о дате, такой как «Завтра 6 сентября», то на русском языке это изменится на «Завтра 6 сентября». Смена языка на ru_RU, очевидно, не знает этого, поэтому вот простое решение:выполнить эту задачу:

(Предположим, $ date в формате dmY)

function russianDate($date){
    $date=explode(".", $date);
    switch ($date[1]){
        case 1: $m='января'; break;
        case 2: $m='февраля'; break;
        case 3: $m='марта'; break;
        case 4: $m='апреля'; break;
        case 5: $m='мая'; break;
        case 6: $m='июня'; break;
        case 7: $m='июля'; break;
        case 8: $m='августа'; break;
        case 9: $m='сентября'; break;
        case 10: $m='октября'; break;
        case 11: $m='ноября'; break;
        case 12: $m='декабря'; break;
    }
    return $date[0].' '.$m.' '.$date[2];
}
2 голосов
/ 11 октября 2016

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

1 голос
/ 27 сентября 2011

Вы можете вставить простой оператор if, чтобы переопределить название месяца:

// Shorthand if
echo $month_name == "Сентябрь" ? "Сентября" : $month_name;

или

// Normal if
if ($month_name == "Сентябрь")
{
   echo "Сентября";
}
else
{
   echo $month_name;
}
1 голос
/ 27 сентября 2011

Если ваш клиент действительно хочет "Сентября", тогда простая str_replace () сделает эту работу.

Где отображаются названия месяцев, попробуйте:

str_replace("Сентябрь", "Сентября", $month);
0 голосов
/ 14 апреля 2015

Я знаю, что это немного позже, но другие могут также столкнуться с этим вопросом, так что, возможно, все же стоит ответить. Ответ от @hraban наиболее близок к объяснению, все остальные ответы предоставляют (частично неудовлетворительно) обходные пути:

И php, и клиент правы!

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

Используемый вами форматировщик строк не соответствует русской грамматике :-( Это, к сожалению, сложная вещь :-( Таким образом, вам придется реализовать какой-то обходной путь, как это предусмотрено другими.

0 голосов
/ 27 сентября 2011

@ ответ tsabz, вероятно, является решением, потому что ошибка внутри PHP.Это или есть какой-то диалект в России, который должен быть установлен вместо этого.

Для реализации ответа @ tsabz в Typo3 требуется классификация tslib_content (т. Е. Tslib_cObj).Это можно сделать, добавив к вам следующую строку typo3conf/localconf.php или, что еще лучше, в пользовательском расширении внутри typo3conf/ext/your_ext/ext_localconf.php:

$GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['tslib/class.tslib_content.php']                  = PATH_typo3conf.'ext/your_ext/xclass/class.ux_tslib_content.php';

Затем создайте файл typo3conf/ext/your_ext/xclass/class.ux_tslib_content.php и введите следующее:

<?php
class ux_tslib_cObj extends tslib_cObj {
    /**
     * date
     * Will return a formatted date based on configuration given according to PHP date/gmdate properties
     * Will return gmdate when the property GMT returns true
     *
     * @param   string      Input value undergoing processing in this function.
     * @param   array       stdWrap properties for date.
     * @return  string      The processed input value
     */
    public function stdWrap_date($content = '', $conf = array()) {
        $content = parent::stdWrap_date($content, $conf);
        $content = str_replace("Сентябрь", "Сентября", $content);
        return $content;
    }

}
...