2011-02-12 130 views
8

我试图创建PHP内部日期()函数的条件翻译。是否有可能以某种方式重新定义内部变量 - 例如 - 日期(“M”),日期(“Y”)等,使得不同的字符串被送入PHP函数的本试验的基础上,余数为:为多语言网站翻译PHP日期()

if (ICL_LANGUAGE_CODE == 'fr') { } 

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

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; 

回答

21

每当你需要根据区域来操纵日期/时间戳,应该使用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 
8
$date = date('F', $start).' '.date('j',$start).', '.date('Y', $start); 

这是一个相当痛苦的方式去了解。 date()中的格式字符串不一定是单个字符。这条线可以减少到

​​

的,而且是,你可以有一个简单的

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); 

和您去。

+0

这看起来不错,我的问题是 - 在`格式='日期格式字符... fr'的上下文中,这些变量(例如'm','d ','M')等正在重新定义为法语? – Brian 2011-02-12 02:17:11

+0

而我的致歉很密! :( – Brian 2011-02-12 02:17:28

+0

'date()`手册页(http://php.net/date)表示在非英文日期使用`setlocale()`和`strftime()`,但基本上应用相同的格式字符串规则那里 - 它不一定是一个字符,它可以是一串格式化字符。 – 2011-02-12 02:21:53

0

我相信你有,但你有没有考虑过只使用数值?另外,如果你确实使用了它们,请记住美国有几个月/天,与英国和其他国家相反。