如何在 FreeBSD 上设置 PHP 语言环境?
How to set PHP locale on FreeBSD?
我在 FreeBSD 服务器 11.3-RELEASE-p7 上使用 Wordpress 5.2.4 安装。在我的网站上,我需要从存储在 MySQL 数据库中的某些日期输出工作日的德语名称。从数据库中检索值并将其转换为工作日的名称没有问题,对于英语来说。日期格式本身没有问题(从 YYYY-MM-DD 到 DD.MM.YYYY)。
问题
如前所述,我无法更改用于输出工作日名称的语言。
我试过的
我已经尝试了从 google 搜索中弹出的各种解决方案。包括在常规 -> 设置中更改 Wordpress 安装的语言设置(这对 ofc 没有帮助)。这只是我希望使用的一些字符串:
foreach($result_dates as $date){
setlocale(LC_TIME, 'de_DE.utf8'); //'de_DE@euro', 'de_DE', 'deu_deu',
setlocale(LC_ALL, 'de_DE.utf8'); //'de_DE@euro', 'de_DE', 'deu_deu',
$day = strftime("%A", strtotime($date->start_date));
$date_formatted = date("d.m.Y", strtotime($date->start_date));
echo '
<div class="row">
<div class="col-sm-12 col-12">
<h3> <span id="day-long">' . $day . '</span>, <span id="day-short">' . strftime($date_formatted) . '</span></h3>
</div>
</div> ...';
}
使用建议的方法我 运行 以下命令,输出令人困惑:
echo setlocale(LC_ALL, 0); // output: C
...和...
echo setlocale(LC_ALL, NULL); //output: C
$locale_info = localeconv();
print_r($locale_info); //output: Array ( [decimal_point] => . [thousands_sep] => [int_curr_symbol] => [currency_symbol] => [mon_decimal_point] => [mon_thousands_sep] => [positive_sign] => [negative_sign] => [int_frac_digits] => 127 [frac_digits] => 127 [p_cs_precedes] => 127 [p_sep_by_space] => 127 [n_cs_precedes] => 127 [n_sep_by_space] => 127 [p_sign_posn] => 127 [n_sign_posn] => 127 [grouping] => Array ( [0] => 127 ) [mon_grouping] => Array ( [0] => 127 ) )
我在找什么?
我想要一个简单的工作解决方案,将 setlocale()
与 strftime()
结合使用。当然可以使用数组比较和 str_replace()
进行手动翻译。但我敢肯定,没有这些变通解决方案也是可能的。
@nbari 的提示为我指明了正确的方向。激活 ssh-access 并下载 putty 后,我 运行 在 CLI 上执行以下命令:
locale -a
该命令返回了所有已安装语言包的列表。德语是预装的,但不是 de_DE.utf8
它被称为 de_DE.UTF8
(注意编码上的大写)。这对我来说是固定的。谢谢!
我在 FreeBSD 服务器 11.3-RELEASE-p7 上使用 Wordpress 5.2.4 安装。在我的网站上,我需要从存储在 MySQL 数据库中的某些日期输出工作日的德语名称。从数据库中检索值并将其转换为工作日的名称没有问题,对于英语来说。日期格式本身没有问题(从 YYYY-MM-DD 到 DD.MM.YYYY)。
问题
如前所述,我无法更改用于输出工作日名称的语言。
我试过的
我已经尝试了从 google 搜索中弹出的各种解决方案。包括在常规 -> 设置中更改 Wordpress 安装的语言设置(这对 ofc 没有帮助)。这只是我希望使用的一些字符串:
foreach($result_dates as $date){
setlocale(LC_TIME, 'de_DE.utf8'); //'de_DE@euro', 'de_DE', 'deu_deu',
setlocale(LC_ALL, 'de_DE.utf8'); //'de_DE@euro', 'de_DE', 'deu_deu',
$day = strftime("%A", strtotime($date->start_date));
$date_formatted = date("d.m.Y", strtotime($date->start_date));
echo '
<div class="row">
<div class="col-sm-12 col-12">
<h3> <span id="day-long">' . $day . '</span>, <span id="day-short">' . strftime($date_formatted) . '</span></h3>
</div>
</div> ...';
}
使用建议的方法我 运行 以下命令,输出令人困惑:
echo setlocale(LC_ALL, 0); // output: C
...和...
echo setlocale(LC_ALL, NULL); //output: C
$locale_info = localeconv();
print_r($locale_info); //output: Array ( [decimal_point] => . [thousands_sep] => [int_curr_symbol] => [currency_symbol] => [mon_decimal_point] => [mon_thousands_sep] => [positive_sign] => [negative_sign] => [int_frac_digits] => 127 [frac_digits] => 127 [p_cs_precedes] => 127 [p_sep_by_space] => 127 [n_cs_precedes] => 127 [n_sep_by_space] => 127 [p_sign_posn] => 127 [n_sign_posn] => 127 [grouping] => Array ( [0] => 127 ) [mon_grouping] => Array ( [0] => 127 ) )
我在找什么?
我想要一个简单的工作解决方案,将 setlocale()
与 strftime()
结合使用。当然可以使用数组比较和 str_replace()
进行手动翻译。但我敢肯定,没有这些变通解决方案也是可能的。
@nbari 的提示为我指明了正确的方向。激活 ssh-access 并下载 putty 后,我 运行 在 CLI 上执行以下命令:
locale -a
该命令返回了所有已安装语言包的列表。德语是预装的,但不是 de_DE.utf8
它被称为 de_DE.UTF8
(注意编码上的大写)。这对我来说是固定的。谢谢!