Php多语言日期:如何?
注:这不是一个复制品。我读过了 很抱歉,我首先要解释一下我的框架是如何工作的,这样您才能准确地理解我的问题所在: 下面是我的Php代码的工作原理(大致原理)。让我们以想要查看URLPhp多语言日期:如何?,php,datetime,translation,Php,Datetime,Translation,注:这不是一个复制品。我读过了 很抱歉,我首先要解释一下我的框架是如何工作的,这样您才能准确地理解我的问题所在: 下面是我的Php代码的工作原理(大致原理)。让我们以想要查看URLhttp://myweb.com/valid.php: 在文件valid.php中,代码包含正确的类定义,然后创建一个对象并调用显示页面的函数display() 在文件valid.php中,当创建对象时,它分析主机,主机中有语言(http://us.myweb.com/,http://cn.myweb.com/,ht
http://myweb.com/valid.php
:
- 在文件
中,代码包含正确的类定义,然后创建一个对象并调用显示页面的函数valid.php
display()
- 在文件
中,当创建对象时,它分析主机,主机中有语言(valid.php
http://
us
,.myweb.com/
http://
cn
,.myweb.com/
http://
fr
),默认语言(如果找不到)为英语.myweb.com/
- 然后我加载一个缓存的Php文件,其中的是翻译。这是一个
对象,简称翻译
$t
- 从现在起,每当我需要翻译,我都会做一些事情,比如
$t->get('my_string')
- 两种语言文件:
和cache.us.php
cache.fr.php
- 在
中,您有这样一行代码:cache.us.php
$thankforthefish=“thankforthefish”
- 在
中有这样一行:cache.fr.php
$谢谢你的鱼=“Merci pour le poisson”
- 我构建我的页面,包括正确的语言文件,然后调用
,并将其翻译$t->get('Thank_for the_fish')
- 在
:cache.us.php
$short\u date\u format=“m/d/Y,H:i”
- 在
:cache.fr.php
$short\u date\u format=“d/m/YáH:i”
- 在
:cache.fr.php
$long\u date\u format=“%s,%d%s%d”
- 然后是所有的日子:
,$sunday=“dimanche”
等等$monday=“lundi”
- 然后在我的翻译代码中:
有什么想法吗?我是这样做的:除了切换并分别处理每种语言之外,似乎没有其他可能:
以下是我缓存中的内容:
$this->jour_dimanche = dimanche
$this->jour_lundi = lundi
$this->jour_mardi = mardi
$this->jour_mercredi = mercredi
$this->jour_jeudi = jeudi
$this->jour_vendredi = vendredi
$this->jour_samedi = samedi
$this->mois_janvier = janvier
$this->mois_fevrier = février
$this->mois_mars = mars
$this->mois_avril = avril
$this->mois_mai = mai
$this->mois_juin = juin
$this->mois_juillet = juillet
$this->mois_aout = août
$this->mois_septembre = septembre
$this->mois_octobre = octobre
$this->mois_novembre = novembre
$this->mois_decembre = décembre
// long date format = 'day, (month number) (month) (year)'
// '%s, %d %s %d' => 'Mardi, 2 juillet 2012'
$this->date_format_long = %\s, j %\s Y à H:i
…和我的Php代码:
public function translateDate($date_time, $first_upcase=true)
{
switch ($this->_trad->getLang()) {
/* TODO: all other languages */
case 'us':
case 'ar':
case 'es':
case 'cn':
throw new Exception("not handled yet");
break;
default:
/* default = french */
$day = $this->_trad->get(
self::$_TabStrDaysOfWeek[ $date_time->format('w') ]
);
$month = $this->_trad->get(
self::$_TabStrMonths[ $date_time->format('j') ]
);
$ret = sprintf(
$date_time->format(
$this->_trad->get('date_format_long')
),
$day,
$month
);
if ($first_upcase) {
$ret = ucfirst($ret);
}
break;
}
return $ret;
}
对于国际化任务,我强烈建议使用PHP扩展。它包含几个用于常见国际化任务的类,如日期/时间格式、数字格式、字符串音译等。具体来说,类
能够格式化(和解析)任何可用区域设置的日期时间。一个简单的解决方案,请查看,也许它对您有帮助
你应该把工作日的名字分开,翻译成长日期字符串。比如2006年9月1日的
$french_monday';
如果是这样,你会怎么处理英语?阿拉伯语?普通话?对不起,我有点匆忙,所以我可能跳过了一些重要的部分,但是有没有理由不使用PHPintl
扩展?该类似乎完全符合您的需要。非常感谢您的建议可能是一个有效的选项,我可以请您写一个详细的答案,以便我可以检查它是否有效,以帮助社区吗?非常感谢!非常感谢,我已经安装了此扩展,我将修改我的多语言类以使用此功能强大的工具。
public function translateDate($date_time, $first_upcase=true)
{
switch ($this->_trad->getLang()) {
/* TODO: all other languages */
case 'us':
case 'ar':
case 'es':
case 'cn':
throw new Exception("not handled yet");
break;
default:
/* default = french */
$day = $this->_trad->get(
self::$_TabStrDaysOfWeek[ $date_time->format('w') ]
);
$month = $this->_trad->get(
self::$_TabStrMonths[ $date_time->format('j') ]
);
$ret = sprintf(
$date_time->format(
$this->_trad->get('date_format_long')
),
$day,
$month
);
if ($first_upcase) {
$ret = ucfirst($ret);
}
break;
}
return $ret;
}