【发布时间】: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' 从
'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