为多语言网站翻译 PHP date()

2022-08-30 21:51:33

我正在尝试创建PHP内部date()函数的条件转换。是否可以以某种方式重新定义内部变量 - 例如 - date('M'),date('y')等,以便在此测试的基础上将不同的字符串馈送到PHP函数的其余部分:

if (ICL_LANGUAGE_CODE == 'fr') { }

以下是我用于日期模块的代码的工作示例。由于定义中包含许多变量,因此在 PHP 的第一个变量中条件地重新定义变量非常重要,以避免在每个键内重新定义变量 100 次或更多次。$datedate()

if($start <= $end):
    if($start == $end):
        //Month Day, Year
        $date =  date('F', $start).' '.date('j',$start).', '.date('Y', $start);
    else:
        if($start_year == $end_year):
            if($start_month == $end_month):

                //Month Day - Day, Year
                $date = date('F', $start).' '.date('j',$start).' - '.date('j', $end).', '.date('Y', $start);
            else:
                //Month Day - Month Day, Year
                $date =  date('F', $start).' '.date('j',$start).' - '.date('F', $end).' '.date('j', $end).', '.date('Y', $start);
            endif;
        else:
            //Month Day, Year - Month Day, Year
            $date =  date('F', $start).' '.date('j',$start).', '.date('Y', $start).' - '.date('F', $end).' '.date('j', $end).', '.date('Y', $end);
        endif;
    endif;
endif;

答案 1

每当您需要根据区域设置操作日期/时间戳时,都应使用 strftime

switch ($lang) {
    case 'en':
        setlocale(LC_TIME, 'en_CA.UTF-8');
        echo strftime("%B %e, %G");
        break;
    case 'fr':
        setlocale(LC_TIME, 'fr_CA.UTF-8');
        echo strftime("%e %B %G");
        break;
}

结果:

February 11, 2011  // en
11 février 2011    // fr

当然,您需要在系统上安装语言环境。在 Ubuntu 中,每个示例:

bash-4.1$ sudo locale-gen fr_CA.UTF-8

2022年5月编辑

strftime()自 PHP 8.1.0 起已弃用

这是你应该怎么做的:

$fmt = datefmt_create(
    'pt_BR', // The output language.
    \IntlDateFormatter::FULL,
    \IntlDateFormatter::FULL,
    pattern: "cccc, d 'de' LLLL 'de' YYYY" // The output formatting.
);
$input = strtotime('20-06-2022');
$output = datefmt_format($fmt, $input);

var_dump($output); // Outputs "segunda-feira, 20 de junho de 2022".

至于使用:strtotime()

  • 斜杠 (/) 表示美式 M/D/Y 格式;
  • 短划线 (-) 用于欧洲 D-M-Y 格式和
  • 句点 (.) 用于 ISO Y.M.D 格式。

在我的示例中,我使用的是欧洲日-月-年格式。

单击此处查看 如何设置 参数值的格式。$patterndatefmt_create()

您必须安装 intl 包:

$ sudo apt install php8.1-intl

将位更改为您正在使用的php版本。8.1


答案 2
    $date =  date('F', $start).' '.date('j',$start).', '.date('Y', $start);

这是一种相当痛苦的方式。中的格式字符串不必是单个字符。这条线可以简化为date()

$date = date('F j Y');

鉴于此,你可以有一个简单的

switch($whats_my_locale) {
    case 'FR':
       $format = 'date format characters for a french date';
       break
    case 'EN' :
       $format = 'format chars for english date'
       break
    case etc....
    default:
       $format = 'default date format string here';
}

$local_date_string = date($format, $start);

然后你走了。


推荐