Laravel语言文件中的继承

问题描述 投票:1回答:3

我需要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上为post实体创建一个新文件,但我不想将entity.php文件中的所有文本复制到新文件中。我只需要为新实体更改create消息。跟随之类的事情。

<?php

return [

    // Inherit the rest of texts from entity.php
    'create' => 'Create a new Blog Post',

];

反正有没有实现这个目标?先谢谢大家。

php laravel laravel-5.5
3个回答
1
投票

如果你坚持在你的语言文件中有类似继承行为的东西,那么我想到的第一个解决方案是使用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',
];)

玩得开心 :)


0
投票

你可以create a new helper

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

然后像这样使用它:

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

0
投票

另一种方法是创建一个为元素分组标签的文件,而不是使用大量单独的语言文件。例如,整个应用程序的所有按钮标签都可以存储在/resources/lang/en/buttons.php的文件中。您只需要更仔细地选择标签。 buttons.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>
© www.soinside.com 2019 - 2024. All rights reserved.