Laravel:如何在刀片和控制器中使用短变量名与语言文件

时间:2018-04-06 13:42:46

标签: php laravel

我知道如何使用语言文件:

/resources/lang/en/account/login.php     

return [
    'text_login' => 'Login',
    'text_register' => 'Register',
    'error_login' => 'These credentials do not match our records.',
];

/resources/lang/zh-tw/account/login.php     

return [
    'text_login' => '登入',
    'text_register' => '註冊',
    'error_login' => '帳號或密碼輸入錯誤',
];

/resources/views/welcome.blade.php



<a href="{{ route('login') }}">{{ __('account/login.text_login') }}</a>
<a href="{{ route('register') }}">{{ __('account/login.text_register') }}</a>
&#13;
&#13;
&#13;

这很有效。但是太久了,我希望缩短它 改变这个

{{ __('account/login.text_login') }}  

{{ $text_login }}  

是否可以这样做?

1 个答案:

答案 0 :(得分:0)

我有一个解决方案 在每种语言中,我都有子文件夹和文件。

/resources/lang/en  
  common.php  
  /catalog
    category.php
    product.php
    attribute.php
    option.php
  ...

的common.php

<?php

return [
  'text_yes' => 'Yes',
  'text_no' => 'No',
  'text_enabled' => 'Enabled',
  'text_disabled' => 'Disabled',
  'text_none' => ' --- None --- ',
  'text_select' => ' --- Please Select --- ',
  'text_select_all' => 'Select All',
  'text_unselect_all' => 'Unselect All',
  'text_default' => ' <b>(Default)</b>',
  'text_close' => 'Close',
  'text_pagination' => 'Showing %d to %d of %d (%d Pages)',
  'text_loading' => 'Loading....',
  'text_no_results' => 'No results!',
  'text_confirm' => 'Are you sure?',
  'text_home' => 'Home',
];

category.php

<?php

return [
    'heading_title' => 'Categories',

    'text_list' => 'Category List',
    'text_edit' => 'Edit Category',
    'text_repaire' => 'Repaire Category',
    'text_copy' => 'Copy Category',

    'column_name' => 'Name',
    'column_parent_name' => 'Parent Category',
];

在CategoryController中,

//Language
$langs = Lang::get('common');
foreach ($langs as $key => $value) {
  $data[$key] = $value;
}

$langs = Lang::get('category');
foreach ($langs as $key => $value) {
  $data[$key] = $value;
}

//breadcomb
$data['breadcumbs'][] = array(
  'text' => $data['text_home'],
  'href' => route('admin.dashboard'),
);

$data['breadcumbs'][] = array(
  'text' => $data['heading_title'],
  'href' => route('admin.category.index'),
);

我认为我的想法太棒了!

但仍有问题。例如,关键text_pagination需要参数:firstItem,lastItem,totals,它由laravel分页类生成。

如果我在控制器功能的乞讨时加载语言文件,则没有$ categories-&gt; firstItem,$ categories-&gt; lastItem让我使用sprintf。 $ categories将在稍后生成。

如果语言文件放在底部,有时我们需要在此之前使用语言变量,如验证错误消息。

编辑: 把语言文件放在乞讨时应该没问题。稍后重置text_pagination:

$data['text_pagination'] = sprintf($data['text_pagination'],   
  $categories->firstItem(), 
  $categories->lastItem(), 
  $categories->total(), 
  $categories->lastPage() );