You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Symfony 4中如何将月份数字转换为土耳其语月份名称

在Symfony 4中实现日期月份转土耳其语名称的解决方案

嘿,看你正在从零开始用Symfony 4做带截止日期的待办事项列表,还在纠结怎么把日期里的月份数字转成土耳其语名称对吧?结合你给出的现有代码,我给你几个实用的解决方案:

方法1:借助PHP strftime函数(利用已设置的locale)

你已经在代码里加了setlocale(LC_TIME, "tr_TR");,这步很关键,它告诉PHP要使用土耳其语的本地化规则。接下来就可以用strftime来格式化日期,它会自动输出土耳其语的月份名称。

在Twig模板中直接渲染

如果是在模板里展示Task的截止日期,可以这么写:

{{ task.deadline|date('d') }} {{ task.deadline|strftime('%B') }} {{ task.deadline|date('Y') }}

%B会根据你设置的locale输出完整的月份名称,比如对应1月就会显示Ocak。

在控制器中预处理后传给模板

要是你想在控制器里先处理好日期再传给模板,可以这样写:

// 假设你已经获取了Task实体的deadline字段
$timestamp = $task->getDeadline()->getTimestamp();
$formattedDate = strftime('%d %B %Y', $timestamp);
// 把$formattedDate传给模板

⚠️ 注意:确保你的服务器已经安装了土耳其语本地化包,如果是Linux系统,可以通过sudo locale-gen tr_TR.UTF-8命令来安装,不然strftime可能还是会输出英文月份。

方法2:用Symfony自带的localizeddateTwig过滤器

如果你希望整个应用的日期显示都统一用土耳其语,可以先在配置里设置默认locale:
打开config/packages/translation.yaml,修改成这样:

framework:
    default_locale: 'tr'
    translator:
        default_path: '%kernel.project_dir%/translations'
        fallbacks:
            - 'en'

然后在Twig模板里直接使用localizeddate过滤器:

{{ task.deadline|localizeddate('long', 'none', 'tr') }}

这个过滤器的三个参数分别是:日期格式(long会显示完整的月份名称)、时间格式(none表示不显示时间)、语言代码(这里指定土耳其语)。这样就能直接输出类似15 Ocak 2025的日期了。

方法3:自定义Twig过滤器(完全自主控制)

如果上面的方法都不符合你的需求,比如不想依赖服务器locale设置,那可以自己写一个Twig过滤器来手动映射土耳其语月份:

  1. 先创建过滤器类:
// src/Twig/MonthNameExtension.php
namespace App\Twig;

use Twig\Extension\AbstractExtension;
use Twig\TwigFilter;

class MonthNameExtension extends AbstractExtension
{
    public function getFilters()
    {
        return [
            new TwigFilter('turkish_month', [$this, 'getTurkishMonthName']),
        ];
    }

    public function getTurkishMonthName(\DateTimeInterface $date)
    {
        // 土耳其语月份名称映射
        $turkishMonths = [
            1 => 'Ocak',
            2 => 'Şubat',
            3 => 'Mart',
            4 => 'Nisan',
            5 => 'Mayıs',
            6 => 'Haziran',
            7 => 'Temmuz',
            8 => 'Ağustos',
            9 => 'Eylül',
            10 => 'Ekim',
            11 => 'Kasım',
            12 => 'Aralık',
        ];
        return $turkishMonths[$date->format('n')];
    }
}
  1. 然后在Twig模板里使用这个过滤器:
{{ task.deadline|date('d') }} {{ task.deadline|turkish_month }} {{ task.deadline|date('Y') }}

这种方法完全不需要依赖服务器的本地化配置,所有月份名称都是你自己定义的,灵活性拉满。


内容的提问来源于stack exchange,提问作者Alp Sukuf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 02:27:34