我有这部分功能,它给了我英文月份的名称。如何将它们翻译成我的当地语言(塞尔维亚语)?
$month_name = date('F', mktime(0, 0, 0, $i));
其中$i
是月份数(值 1 - 12)。另请参阅PHP:mktime。
我有这部分功能,它给了我英文月份的名称。如何将它们翻译成我的当地语言(塞尔维亚语)?
$month_name = date('F', mktime(0, 0, 0, $i));
其中$i
是月份数(值 1 - 12)。另请参阅PHP:mktime。
你应该使用setlocale()
:
setlocale(LC_TIME, 'fr_FR');
$month_name = date('F', mktime(0, 0, 0, $i));
在这种情况下,它将设置为法语。对于您的情况,它应该是以下之一:
sr_BA
- 塞尔维亚语(黑山)sr_CS
- 塞尔维亚语(塞尔维亚)sr_ME
- 塞尔维亚语(塞尔维亚和黑山)你应该使用setlocale()
and strftime()
:
setlocale(LC_TIME, 'sr_CS');
$month_name = strftime('%B', mktime(0, 0, 0, $i));
$format = new IntlDateFormatter('sr_CS', IntlDateFormatter::NONE,
IntlDateFormatter::NONE, NULL, NULL, "MMM");
$monthName = datefmt_format($format, mktime(0, 0, 0, $i));
对于所有与德语(和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ärz 2020”等正确显示。
这个问题询问如何获取月份列表,我只看到提示,而不是完整的代码答案,所以:
如果您有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
for en_GB
but leden
forcs_CZ
如果你想要所有字母小写 => 使用mb_strtolower($month_name);
- docs
如果你只想第一个字母是大写 =>
=> 使用mb_convert_case($month_name, MB_CASE_TITLE, 'UTF-8');
- docs
始终将mb_*
函数或其变体用于源自语言环境的字符串!
所以不,不要使用!ucfirst
在设置语言环境时传递编码是个好主意:
<?php
date_default_timezone_set('Europe/Belgrade');
setlocale(LC_TIME, array('sr_CS.UTF-8', 'sr.UTF-8'));