PHP的多语言日期:HOWTO?(Php multilanguage date: howto?)

2019-06-25 23:53发布

诺塔:这不是一个重复的翻译多语言网站PHP日期() 。 我读过它!

对不起,我首先要解释一下我的框架是如何工作的,这样你就可以准确地掌握在我的问题是:

这里是我的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.phpcache.fr.php
  • cache.us.php你有这样一行: $thanks_for_the_fish = "Thanks for the fish"
  • 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"
  • 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
    */
}

......我说,阿拉伯,因为我需要它迟早,同为中国普通话。 我所有的其他的翻译问题都解决了,但是这一个!

任何的想法?

Answer 1:

对于国际化的任务,我会强烈建议使用PHP 国际扩展。 它包含几类常见的国际任务,如日期/时间格式,数字格式,字符串音译等等。 具体而言, IntlDateFormatter类能够格式化(和解析)日期时间为任何可用的区域设置。



Answer 2:

以下是我已经做到了:它似乎没有其他比做一个开关,分别处理每种语言的可能性:


下面是在我的缓存:

$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;
}


Answer 3:

你一个简单的方法,检查出来也许它帮助你https://github.com/LeonardoCaitano/MyDateTime



文章来源: Php multilanguage date: howto?