3

我在我的项目中使用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_TIMEde_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 已实施并发布为版本 1.0.12

4

1 回答 1

0

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

就像是: $event->start_time->formatLocalized(trans('general.date_format'))

于 2015-11-25T15:20:28.887 回答