Laravel语言文件中的继承



我需要为我的语言文件提供一个分层结构。想象一下,我有以下语言文件用于/resources/lang/en/entity.php

<?php
return [
    'show' => 'Show Item',
    'view' => 'View Item',
    'edit' => 'Edit Item',
    'create' => 'Create a new Item',
];

现在我需要在/resources/lang/en/post 处为发布实体创建一个新文件.php但我不想将所有文本从实体.php文件复制到新文件中。我只需要更改新实体create消息。类似以下内容。

<?php
return [
    // Inherit the rest of texts from entity.php
    'create' => 'Create a new Blog Post',
];

有没有办法做到这一点?提前谢谢大家。

如果您坚持在语言文件中具有类似继承行为的东西,那么我想到的第一个解决方案是使用array_merge方法:

// entity.php
return [
    'show' => 'Show Item',
    'view' => 'View Item',
    'edit' => 'Edit Item',
    'create' => 'Create a new Item',
];
// post.php
$terms = (include 'entity.php')
return array_merge($terms, [
    'create' => 'Create a new Blog Post',
];)

玩得开心:)

您可以为此创建一个新的帮助程序:

function translate($trans, $fallback) {
    return __($trans) === $trans ? __($fallback . '.' . explode('.', $trans)[1]) : __($trans);
}

然后像这样使用它:

translate('post.create', 'entity');

与其拥有大量单独的语言文件,另一种方法是创建一个对元素标签进行分组的文件。例如,整个应用程序的所有按钮标签都可以存储在/resources/lang/en/button 的文件中.php 您只需要更加小心地选择标签即可。按钮的内容.php可以是

<?php
return [
    'show_item' => 'Show Item',
    'view_item' => 'View Item',
    'edit_item' => 'Edit Item',
    'create_new_item' => 'Create a new Item',
    'create_new_blog_post' => 'Create a new Blog Post',
    //add all labels here
];

然后,如果您需要网站上的任何位置的按钮标签,则可以从buttons.php文件中获取它。例如,您的显示项目按钮将是

<button type="button">{{ __('buttons.show_item') }}</button>

最新更新