0

我在 Laravel 5.3(使用 php 7)的本地化方面有点挣扎。Laravel 5.3 中默认的本地化文件格式是使用括号,如下例所示:

return [
'footer.contact.email'   => 'Email:',
]

这就是我在我的应用程序中一直使用的,并且运行良好。但现在我正在尝试使用一些包来帮助翻译,例如:

但它们都以“旧”laravel 4.x 数组格式生成本地化文件。例如

return array(
  'footer' => array(
    'contact' => array(
      'email' => 'Email:',
    ),
   ), 
);

据我了解,我的 laravel 5.3 应用程序中的这种本地化文件格式应该没有问题,但是它总是抛出异常:

[2016-12-02 13:26:01] local.ERROR: ErrorException: htmlspecialchars() expects parameter 1 to be string, array given in C:\100_source_code\consulting_platform_laravel\maingig\vendor\laravel\framework\src\Illuminate\Support\helpers.php:519
Stack trace:
#0 C:\100_source_code\consulting_platform_laravel\maingig\vendor\sentry\sentry\lib\Raven\Breadcrumbs\ErrorHandler.php(36): Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(2, 'htmlspecialchar...', 'C:\\100_source_c...', 519, Array)

我真的不明白为什么这种格式不适用于我的应用程序。我敢打赌,我错过了一些微不足道的事情,但是非常欢迎任何帮助!

谢谢,

基督教

4

1 回答 1

1

经过几个小时的单步调试代码后,我找到了问题的根源。

例如,我在原始 lang 文件中得到了这些:

'footer.subscribe'   => 'SUBSCRIBE TO OUR NEWSLETTER',
'footer.subscribe.intro'   => 'Be the first to know about our latest news...',
'footer.subscribe.privacy'   => 'Privacy Policy',
'footer.subscribe.tos'   => 'Terms of Service',
'footer.subscribe.tac'   => 'Terms and Conditions',

当我尝试使用原始问题中提到的两个软件包时,它们产生了以下输出:

'footer' => 
  array (
    'subscribe' => 
    array (
      'intro' => 'TODO: intro',
      'privacy' => 'TODO: privacy',
      'tos' => 'TODO: tos',
      'tac' => 'TODO: tac',
    ),
  ),

如您所见,生成的文件删除了文本的值,footer.subscribe在这种情况下只保留了子元素、介绍、隐私、tos 和 tas。因此,请求trans('footer.subscribe')返回一个数组而不是文本。

现在我知道了,我将更改原始翻译文件的格式!

C。

于 2016-12-02T16:44:45.087 回答