我的代码:
setlocale(LC_TIME, 'ca_ES');
echo strftime("%#d %B", strtotime($ticket->date_created));
输出如下内容:
28 August
而不是我的期望:
28 Agost
我期待“Agost”,因为那是加泰罗尼亚语(通过setlocale()
设置)。
setlocale
和strftime
应该如何运作?
仅供参考:我的本地开发机器是Windows 7,设置为locale:en-PH
答案 0 :(得分:18)
Windows上的区域设置名称不同。看起来它违反了英语。
尝试全长名称(您可以尝试几个,它会选择第一个找到的):
setlocale(LC_TIME, 'ca_ES', 'Catalan_Spain', 'Catalan');
您可以查看此表格,这可能会有所帮助:http://docs.moodle.org/dev/Table_of_locales
答案 1 :(得分:4)
在Ubuntu 14.04上setlocale(LC_TIME, 'de_DE.UTF8');
为我提供了获得德语月份格式/名称的技巧:)
答案 2 :(得分:2)
strftime
提供日期格式的本地化版本。如果您收到意外结果,很可能您所期望的本地化版本不在您的系统上。
我没有使用Windows的经验,但在我的Debian Linux服务器上,我必须安装我想要的本地化字符串。
答案 3 :(得分:1)
On Debian 9 setlocale(LC_TIME, 'fr_FR.UTF8');
为我做了一个很好的法语格式日/月显示工作。确保按以下顺序安装语言环境:
apt-get install locales
dpkg-reconfigure locales
答案 4 :(得分:1)
您需要在服务器中安装所需的语言环境。
locale -a
sudo locale-gen ca_ES
sudo update-locale
sudo service apache2 restart
就是这样!
答案 5 :(得分:0)
对于像我这样的所有人,由于服务器的限制,仍然无法使strftime
功能...不完美但是有效。
$months[1] = "gennaio";
$months[2] = "febbraio";
$months[3] = "marzo";
$months[4] = "aprile";
$months[5] = "maggio";
$months[6] = "giugno";
$months[7] = "luglio";
$months[8] = "agosto";
$months[9] = "settembre";
$months[10] = "ottobre";
$months[11] = "novembre";
$months[12] = "dicembre";
// giorni
$weekdays[0] = "domenica";
$weekdays[1] = "lunedì";
$weekdays[2] = "martedì";
$weekdays[3] = "mercoledì";
$weekdays[4] = "giovedì";
$weekdays[5] = "venerdì";
$weekdays[6] = "sabato";
function strftimeIta($format, $timestamp){
global $weekdays, $months;
preg_match_all('/%([a-zA-Z])/', $format, $results);
$originals = $results[0];
$factors = $results[1];
foreach($factors as $key=>$factor){
switch($factor){
case 'a':
/*** Abbreviated textual representation of the day ***/
$n = date('w', $timestamp); // number of the weekday (0 for sunday, 6 for saturday);
$replace = ucfirst($weekdays[$n]);
$replace = substr($replace, 0, 3);
break;
case 'A':
/*** Full textual representation of the day ***/
$n = date('w', $timestamp); // number of the weekday (0 for sunday, 6 for saturday);
$replace = ucfirst($weekdays[$n]);
break;
case 'h':
case 'b':
/*** Abbreviated month name ***/
$n = date('n', $timestamp); // Numeric representation of a month, without leading zeros
$replace = ucfirst($months[$n]);
$replace = substr($replace, 0, 3);
break;
case 'B':
/*** Full month name ***/
$n = date('n', $timestamp); // Numeric representation of a month, without leading zeros
$replace = ucfirst($months[$n]);
break;
default:
/*** Use standard strftime function ***/
$replace = strftime("%".$factor, $timestamp);
break;
}
$search = $originals[$key];
$format = str_replace($search, $replace, $format);
}
return $format;
}
答案 6 :(得分:0)
我知道这是一个老问题,但我认为无论如何我都会做出贡献。
如果您可以通过SSH连接到您正在处理的服务器,请写下:locale -a
然后您可以看到您的可用语言环境。如果您的语言未列出,则需要安装。
对我来说,我看到了我要找的那个:nb_NO.utf8
在列表中,所以我写下了它的编写方式:setlocale( LC_ALL, 'nb_NO.utf8' )
这对我有用。