注意:這不是Translating PHP date() for Multilingual Site的重複。我讀過它了!Php多語言日期:howto?
對不起,我首先要解釋一下我的框架是如何工作的,這樣你就可以理解恰恰是我的問題是:
這裏是我的PHP代碼是如何工作的(粗略的原則)。讓我們用一個例子人誰願意看到的網址http://myweb.com/valid.php
:
- 文件
valid.php
代碼中包含正確的類定義,然後創建一個對象,並調用函數display()
它顯示的頁面。 - 文件
valid.php
,當創建對象,分析了主機,在主機有語言(http://
us
.myweb.com/
,http://
cn
.myweb.com/
,http://
fr
.myweb.com/
...)和默認語言(如果沒有找到)是英語 - 然後我加載一個緩存的PHP文件,其中是翻譯。這是一個
translation
對象,那我打電話$t
短 - ,從現在起,每當我想要一個翻譯,我只是做這樣的事情
$t->get('my_string')
。
讓我們用2種語言文件的示例:
- 2種語言文件:
cache.us.php
和cache.fr.php
- 在
cache.us.php
你有這樣一行:$thanks_for_the_fish = "Thanks for the fish"
。 - in
cache.fr.php
你有這樣一行:$thanks_for_the_fish = "Merci pour le poisson"
。 - 我構建了我的頁面,包含正確的語言文件,然後調用
$t->get('thanks_for_the_fish')
並將其翻譯。
現在我的問題來自日期格式。 短日期格式它不是一個問題:
- 在
cache.us.php
:$short_date_format = "m/d/Y, H:i"
。 - in
cache.fr.php
:$short_date_format = "d/m/Y à H:i"
。
但隨着長日期格式,我只是工作的法國和我喜歡的東西開始:
- 在
cache.fr.php
:$long_date_format = "%s, %d %s %d"
。 - 然後所有的日子:
$sunday = "dimanche"
,$monday = "lundi"
等 - 然後在我的翻譯代碼:
像這樣的東西(請仔細閱讀代碼中的註釋,我的問題是它!):
static private $_TabStrDaysOfWeek = array(
0 => 'sunday',
1 => 'monday',
...,
6 => 'saturday'
);
public function translateDate($date_time)
{
$long_day = $this->tr->get(
$this->_TabStrDaysOfWeek[ $date_time->format('w') ]
);
/*
here's where I'm stuck:
what could be the code to be able to display:
- english:
Monday, 1st September 2006
Tuesday, 2nd September 2006
Wednesday, 3rd September 2006
Thursday, 4th September 2006
- french:
Lundi, 1 septembre 2006
Mardi, 2 septembre 2006
Mercredi, 3 septembre 2006
Jeudi, 4 septembre 2006
- arabian!!:
1 - Don't know
2 - Don't know
3 - Don't know
4 - Don't know
*/
}
...而且我說阿拉伯語,因爲我遲早需要它,普通話也一樣。 我的所有其他翻譯問題都解決了,但這一個!
有什麼想法?
你應該保持平日名及翻譯,並把它們在長日期字符串。例如'$ french_monday。',2006年1月1日';' – egis
如果是這樣,那麼您會如何處理英文?阿拉伯?漢語普通話? –
對不起,我有點匆忙,所以也許我跳過了一些重要的部分,但是有沒有理由不使用PHP的'intl'擴展名? [IntlDateFormatter](http://www.php.net/manual/en/class.intldateformatter.php)類似乎正是你所需要的。 –