首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正在翻译多语言站点的PHP date()

正在翻译多语言站点的PHP date()
EN

Stack Overflow用户
提问于 2011-02-12 10:05:05
回答 4查看 31.5K关注 0票数 17

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

代码语言:javascript
复制
if (ICL_LANGUAGE_CODE == 'fr') { }

下面是我用于dates模块的代码的一个工作示例。由于$date是使用此定义中包含的许多变量定义的,因此首先在PHP的date()中有条件地重新定义这些变量是很重要的,这样可以避免在每个键中重新定义该变量100次或更多次。

代码语言:javascript
复制
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;
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-02-12 12:54:51

每当需要根据语言环境操作日期/时间戳时,都应该使用strftime

代码语言:javascript
复制
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;
}

结果:

代码语言:javascript
复制
February 11, 2011  // en
11 février 2011    // fr

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

代码语言:javascript
复制
bash-4.1$ sudo locale-gen fr_CA.UTF-8
票数 34
EN

Stack Overflow用户

发布于 2011-02-12 10:09:23

代码语言:javascript
复制
    $date =  date('F', $start).' '.date('j',$start).', '.date('Y', $start);

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

代码语言:javascript
复制
$date = date('F j Y');

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

代码语言:javascript
复制
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);

你就可以走了。

票数 8
EN

Stack Overflow用户

发布于 2011-02-12 10:12:42

我相信你已经做到了,但你有没有考虑过只使用数值?

此外,如果你真的使用它们,请记住美国有月/天,与英国和其他国家相反。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4975854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档