2011-09-27 51 views
4

我正在一個網站上工作,我的客戶來自俄羅斯。他說這個消息的月份翻譯是錯誤的。錯誤的月份名稱俄文

例如,九月:

  • 我得到這個從PHP:Сентябрь
  • ,這從他身上:Сентября

如何我可以覆蓋這個?

說明: 使用區域ru_RU時,輸出的月份的名稱將是俄語。但根據我的客戶,月份的名稱是錯誤的。我不會說俄語,所以我不知道他是對還是錯

我剛纔看到,如果我將這個日期:8th of September 2011翻譯成俄語,它將如下所示:8 сентября 2011See the translation

所以解決這個問題的方法很可能是重寫日期格式。

我還沒有解決這個問題;顯然這是一個錯誤/缺失的功能,因爲俄羅斯先進的declensions。我需要的日期格式不存在。我認爲這會影響strftime和PHP date()

有人可以驗證這一點嗎?

+0

你是什麼意思「我從PHP如果PHP將Сентябрь寫入頁面,用戶將看到Сентябрь。它不會奇蹟般地轉換爲Сентября。另外,Google Translate還說http://translate.google.de/?hl=de#ru|en|% D0%A1%D0%B5%D0%BD%D1%82%D1%8F%D0%B1%D1%80%D1%8C%0A。澄清問題 – Gordon

+0

使用語言環境ru_RU時,輸出月份的名稱將是俄語。但根據我的客戶,月份的名稱是錯誤的。我不會說俄語,所以我不知道他是對還是錯。 – Patrik

+0

您可以使用switch語句來回顯正確的月份。 – Mob

回答

2

我知道現在已經太晚了,但希望能節省一些時間。

俄語被認爲是世界上最難的語言。在這種情況下,正確的變體絕對是Сентября。你可以說'那是現在的九月',這將是'那是現在的'現在'。但是如果你指的是像'明天是9月6日'這樣的日期,那麼在俄羅斯這將變成'明天是6Сентября'。更改語言環境ru_RU顯然不知道這一點,所以這裏是一個簡單的解決方案,以完成這一任務:

(假設$日期是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]; 
} 
1

如果你的客戶真的想要「Сентября」,那麼一個簡單的str_replace()就可以完成這項工作。

如果你顯示月份名稱,請嘗試:

str_replace("Сентябрь", "Сентября", $month); 
+0

一個很好的解決方案。然而,當答案發布時,九月底即將到來,OP可能會發布關於октябрь/октября(十月)的另一個問題:))jk –

1

你可以把一個簡單的if語句覆蓋月份名稱:

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

// Normal if 
if ($month_name == "Сентябрь") 
{ 
    echo "Сентября"; 
} 
else 
{ 
    echo $month_name; 
} 
0

@ tsabz的答案可能是解決方案,因爲錯誤在PHP內部。那或者俄羅斯有某種方言需要改變。

對tspo3實現@ tsabz的答案需要你xclassing 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; 
    } 

} 
0

我知道這是一個有點晚,但其他人也可能會遇到這個問題,所以可能仍值得回答。 @hraban的答案最接近解釋它,所有其他答案只提供(部分不滿意)的解決方法:

php和客戶都是正確的!

問題是您的客戶期望所有格情況下的月份名稱(可能是所有月份名稱),請參見this page

您使用的是不尊重的俄語語法:-(這是不幸:-(這樣一個棘手的事情的字符串格式化,你將不得不做一些落實解決辦法,如由他人提供。

1

太晚了我知道,但你可以使用日期格式化程序與「LLLL」這是一個獨立的月份名稱,只是想分享我剛剛找到的一條信息:)