【问题标题】:Carbon with Laravellocalization not using correct locale带有 Laravel 本地化的 Carbon 未使用正确的语言环境
【发布时间】:2023-03-21 19:32:01
【问题描述】:

我在我的项目中使用 mcamara/laravel-localization ,但遇到了 Carbon 无法识别语言环境的问题。当我使用

$event->start_time->formatLocalized('%A %d %B %Y')

它总是显示英文格式,即使我在尝试时得到“de”

App::getLocale()

显然这是因为 carbon 使用操作系统的语言环境,而我的操作系统有 'de_DE.utf8',所以除非我这样做

setlocale(LC_TIME, 'de_DE.utf8')

它不起作用。我显然不能这样使用,因为我使用多种语言。

  • 选项 1(坏而简单,但有效):

在 routes.php(或其他地方)中定义以下内容

if(App::getLocale()=="de")
    setlocale(LC_TIME, 'de_DE.utf8');
else if(App::getLocale()=="hr")
    setlocale(LC_TIME, 'hr_HR.utf8');
else 
    setlocale(LC_TIME, 'en_EN.utf8');
  • 选项 2(长期且可能更好的解决方案?感觉正确)

因为我在 routes.php 中定义了这个

'prefix' => LaravelLocalization::setLocale(),

我可以扩展 setLocale() 以将 LC_TIME 设置为 de_DE 或其他任何内容。但要做到这一点,我需要将 add 'regional' 从

扩展到 config/laravellocalization.php
'de' => ['name' => 'German','script' => 'Latn', 'native' => 'Deutsch'],

'de' => ['regional' => 'de_DE.utf8', 'name' => 'German','script' => 'Latn', 'native' => 'Deutsch'],

我还需要在 LaravelLocalization.php 中创建这样的方法(显然我会扩展类)

public function getCurrentLocaleRegional()
{
    return $this->supportedLocales[ $this->getCurrentLocale() ][ 'regional' ];
}

现在我想知道,哪种方式更好?或者,这个问题是否有其他(更简单的)解决方案?

我正在开发 Ubuntu 15.10,以防万一

---------编辑---------

对于阅读本文的任何人,选项 2 是 implemented 并作为版本 1.0.12 发布

【问题讨论】:

    标签: php laravel laravel-5.1 php-carbon laravel-localization


    【解决方案1】:

    您始终可以在 lang 文件中创建一个键来告诉 Carbon 如何编写格式。

    类似: $event->start_time->formatLocalized(trans('general.date_format'))

    【讨论】:

    • 但此解决方案将在 25.11.2015 和 11/25/2015 之间更改,但不会更改月份或日期名称。但仍然是一个很好的解决方案,谢谢
    猜你喜欢
    • 2015-12-09
    • 1970-01-01
    • 2022-11-13
    • 2018-08-10
    • 2019-01-29
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多