PHP日期 - 以当地语言获取月份名称

时间:2012-12-12 17:44:01

标签: php date localization

我有这部分功能,它给出了英文月份的名称。我怎样才能将它们翻译成我的当地语言(塞尔维亚语)?

$month_name = date('F', mktime(0, 0, 0, $i));

6 个答案:

答案 0 :(得分:24)

您应该使用setlocale()

setlocale(LC_TIME, 'fr_FR');
$month_name = date('F', mktime(0, 0, 0, $i));

在这种情况下,它会将其设置为法语。对于您的情况,它应该是以下之一:

  1. sr_BA - 塞尔维亚语(黑山)
  2. sr_CS - 塞尔维亚语(塞尔维亚)
  3. sr_ME - 塞尔维亚语(塞尔维亚和黑山)

答案 1 :(得分:16)

您应该使用setlocale()strftime()

setlocale(LC_TIME, 'sr_CS');
$month_name = strftime('%B', mktime(0, 0, 0, $i));

答案 2 :(得分:5)

对于所有使用德语(和de_DE)感到困扰的人,请确保您使用的语言代码正确。登录到服务器并运行locale -a以查看所有可用服务器的列表。对我来说,它显示:

C
C.UTF-8
de_AT.utf8
de_BE.utf8
de_CH.utf8
de_DE.utf8
de_LI.utf8
de_LU.utf8
...

您需要使用其中一种代码。

然后您可以使用:

date_default_timezone_set('Europe/Berlin');
setlocale(LC_ALL, 'de_DE.utf8');
$date_now = date('Y-m-d');
$month_available = strftime('%B %Y', strtotime($date_now));
$month_next = strftime('%B %Y', strtotime($date_now.' +1 month'));

和“März2020”等正确显示。

答案 3 :(得分:3)

以下是IntlDateFormatter

的示例
SELECT actionType FROM actions WHERE clientId = @clientId

答案 4 :(得分:2)

在设置区域设置时传递编码是个好主意:

 <?php    
 date_default_timezone_set('Europe/Belgrade');
 setlocale(LC_TIME, array('sr_CS.UTF-8', 'sr.UTF-8'));

答案 5 :(得分:2)

这个问题问的是如何获取月份列表,我只看到提示,没有完整的代码答案所以:

如果您有 IntlDateFormatter 可用 - 在大多数情况下都可用,您可以在给定的语言环境中创建一个格式化程序,并重复向它推送一个仅基于月数创建的日期

// or any other locales like pl_PL, cs_CZ, fr_FR, zh, zh_Hans, ...
$locale = 'en_GB';
$dateFormatter = new IntlDateFormatter(
    $locale,
    IntlDateFormatter::LONG, // date type
    IntlDateFormatter::NONE  // time type
);
$dateFormatter->setPattern('LLLL'); // full month name with NO DECLENSION ;-)
$months_locale = [];
for ($month_number = 1; $month_number <= 12; ++$month_number) {
    $months_locale[] = $dateFormatter->format(
        // 'n' => month number with no leading zeros
        DateTime::createFromFormat('n', (string)$month_number)
    );
}
// test output
echo "<pre>";
var_dump($months_locale);
echo "</pre>";

注意: LLLL 处理不下降,但它不处理第一个字母的小写/大写,如果语言有诸如此类。
很好的例子是,您可以为 January 获得 en_GB,但为 leden 获得 cs_CZ
如果你想要所有字母小写 => 使用 mb_strtolower($month_name); - docs
如果你只想第一个字母大写 =>
=> 使用 mb_convert_case($month_name, MB_CASE_TITLE, 'UTF-8'); - docs

对于源自区域设置的字符串,始终使用 mb_* 函数或其变体!

所以不,不要使用 ucfirst