注意:这不是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)类似乎正是你所需要的。 –