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