PHP工作日和月份的翻译

时间:2015-12-25 18:32:57

标签: php date for-loop momentjs

将PHP工作日和月份翻译成本地语言的想法?我有脚本打印下周5周的工作日,我希望他们用其他语言。

$timestamp = strtotime('next Monday');
for ($i = 0; $i < 35; $i++) {
    echo strftime('%A', $timestamp)." ";
    $timestamp = strtotime('+1 day', $timestamp);
}

是否有任何良好的集成,例如用PHP和moment.js?我看过Use PHP's date() formats in moment.js GitHub fightbulc/moment.php ,但我不明白如何使用它们。

提前谢谢。

3 个答案:

答案 0 :(得分:6)

我认为你在寻找的是

check this,如果您愿意,请check this also

<强>更新

setlocale(LC_TIME, "fi");
echo utf8_encode(strftime('%A'));

<强> RESULT

perjantaina

这是给你们礼物的ISO语言代码

See This

答案 1 :(得分:3)

您可以使用IntlDateFormatter,如下所示:

$fmt = new IntlDateFormatter('fin', IntlDateFormatter::FULL,
              IntlDateFormatter::NONE, null, null, "cccc"); 
$timestamp = strtotime('next Monday');
echo $fmt->format($timestamp);

输出:

  

maanantai

根据语法上下文,您可能需要“eeee”作为最后一个参数而不是“cccc”:

  

maanantaina

答案 2 :(得分:3)

我做了以下工作,实际上将月份和工作日与任何语言(安装在服务器上)进行了翻译。

即使认为这个话题早已得到回答,我也会发布它,因为它可能对某些人有所帮助。

使用setlocale(),但也重置;所以它不会弄乱你的其余代码。

您可以使用以下功能:

weekdayToEnglish($locale,$weekday,$short)
weekdayFromEnglish($locale,$weekday,$short)
monthToEnglish( $locale,$month,$short)
monthFromEnglish($locale,$month,$short)

$ locale 是您在setlocale()中使用的语言,取决于您的服务器,大多数情况类似于'fr_FR';

$ weekday $ month 要翻译的工作日的名称

(可选) $ short 如果为true,则给出(本地化)短符号(如Thu代替星期四或10月而不是Octobre)

代码:

function weekdayToEnglish($locale,$weekday,$short=false) {
    return dateElementToEnglish($locale, $weekday, $short ? "%a" : "%A",
                                $short? "D" : "l", 'tm_wday', "Sunday +" ," days") ;
}

function weekdayFromEnglish($locale,$weekday,$short=false) {
    return dateElementFromEnglish($locale, $weekday, $short?"%a":"%A");
}

function monthToEnglish( $locale,$month,$short=false) {
    return dateElementToEnglish($locale, $month, $short ? "%b" : "%B",
                                $short ? "M" : "F", 'tm_mon', "January+" ," months") ;
}

function monthFromEnglish($locale,$month,$short=false) {
    return dateElementFromEnglish($locale, $month, $short ? "%b" : "%B");
}

function dateElementToEnglish($locale, $text, $strfTimeformat, $dateFormat,
                              $dateArrayIndex, $strToTimePrefix, $strToTimeSuffix) {
    $saveLocale = setlocale(LC_TIME,0);setlocale(LC_TIME,$locale);
    $translateToNr = strptime($text, $strfTimeformat)[$dateArrayIndex] ;
    $readDate = strtotime($strToTimePrefix . $translateToNr . $strToTimeSuffix);
    $translation = date($dateFormat, $readDate);
    setlocale(LC_TIME,$saveLocale);
    return $translation;
}

function dateElementFromEnglish($locale,$text,$strfTimeformat) {
    $saveLocale = setlocale(LC_TIME,0);setlocale(LC_TIME,$locale);
    $translation = strftime($strfTimeformat,strtotime($text));
    setlocale(LC_TIME,$saveLocale);
    return $translation;
}

例如:

echo weekdayToEnglish("nl_NL","vrijdag")."<br>";
echo weekdayFromEnglish("fi_FI","Monday")."<br>";
echo weekdayToEnglish("nl_NL","wo", true)."<br>";
echo weekdayFromEnglish("de_DE","Thu", true)."<br>";
echo weekdayFromEnglish("fr_FR",weekdayToEnglish("nl_NL","zaterdag"))."<br>";
echo monthFromEnglish("de_DE", "March")."<br>";
echo monthFromEnglish("fr_FR", "February", true)."<br>";
echo monthToEnglish("fr_FR", "avril")."<br>";
echo monthToEnglish("fi_FI", "joulukuu", true)."<br>";

将屈服:

Friday
maanantai
Wed
Do
samedi
März
févr.
April
Dec