dcat-admin

dcat-admin


多语言

<h1>多语言</h1> <p>在<code>Dcat Admin</code>中使用多语言翻译非常方便,数据表格、数据表单、数据详情和模型树的字段都支持自动读取语言包翻译,具体可参考<a href="model-grid-trans.md">表格字段翻译</a>、<a href="model-form-trans.md">表单字段翻译</a>、<a href="model-show-trans.md">数据详情字段翻译</a>。</p> <h2>语言包文件</h2> <p>语言包文件类型大概如下</p> <pre><code class="language-bash">resources/lang ├── ... └── en ├── admin.php # 系统内容语言包,包括菜单标题翻译等都在里面 ├── global.php # 控制器公共语言包 ├── {xxx}.php # 控制器语言包,一个控制器对应一个语言包 └── ... </code></pre> <p>控制器语言包名称需要与控制器名相对应,例如控制器名<code>UserProfileController</code>,则对应的语言包为<code>resources/lang/{当前语言}/user-profile.php</code>(需要转化为小写中划线风格)。</p> <h2>控制器语言包内容格式</h2> <p>控制器语言包(包括<code>global.php</code>)中的内容分为三个类别:</p> <ul> <li><code>fields</code> 数据字段的翻译,这个类别下放置数据字段的翻译</li> <li><code>labels</code> 自定义内容翻译,这个类别下是对数据字段外的内容翻译,可以是任何自定义内容</li> <li><code>options</code> 枚举选项翻译</li> </ul> <p>下面是例子:</p> <p>假设控制器语言包<code>user-profile.php</code>内容如下:</p> <pre><code class="language-php">&amp;lt;?php return [ 'labels' =&amp;gt; [ 'UserProfile' =&amp;gt; '用户中心', 'list' =&amp;gt; '列表', 'pagination' =&amp;gt; [ 'range' =&amp;gt; '从 :first 到 :last ,总共 :total 条', ], ], 'fields' =&amp;gt; [ 'name' =&amp;gt; '名称', 'published' =&amp;gt; '发布', 'author' =&amp;gt; '作者', 'status' =&amp;gt; '状态', ], 'options' =&amp;gt; [ 'status' =&amp;gt; [ 0 =&amp;gt; '未激活', 1 =&amp;gt; '已激活', ], ], ];</code></pre> <p>则语言包可以这么使用</p> <pre><code class="language-php">class UserProfileController extend AdminController { public function title() { // labels翻译示例,最终翻译成 “用户中心” return admin_trans_label('UserProfile'); } // fields和options翻译示例 public function grid() { $grid = new Grid(new UserProfile()); // 显示调用语言包翻译,这里会把 “name” 字段翻译成 “名称” $grid-&amp;gt;name(admin_trans_field('name')); // 隐式使用语言包翻译,“author” 字段会自动翻译成 “作者” $grid-&amp;gt;author; // 调用options翻译 $grid-&amp;gt;status()-&amp;gt;using(admin_trans('user-profile.options.status')); return $grid; } }</code></pre> <h2>使用</h2> <h3>admin_trans_field</h3> <p>这个函数用于翻译<code>fields</code>类别下内容,会自动找对应控制器下的翻译文件,如果翻译不存在会去找<code>global.php</code>中的翻译。</p> <pre><code class="language-php">admin_trans_field('name');</code></pre> <h3>admin_trans_label</h3> <p>这个函数用于翻译<code>labels</code>类别下内容,会自动找对应控制器下的翻译文件,如果翻译不存在会去找<code>global.php</code>中的翻译。</p> <pre><code class="language-php">admin_trans_label('Posts'); admin_trans_label('pagination.range', ['first' =&amp;gt; 1, 'last' =&amp;gt; 1, 'total' =&amp;gt; 0]);</code></pre> <h3>admin_trans_option</h3> <p>这个函数用于翻译<code>options</code>类别下内容,会自动找对应控制器下的翻译文件,如果翻译不存在会去找<code>global.php</code>中的翻译。</p> <pre><code class="language-php">admin_trans_option(1, 'status');</code></pre> <h3>admin_trans</h3> <p>此方法与<code>Laravel</code>框架自带的<code>trans</code>方法用法没有区别,唯一的区别是:当翻译的内容找不到时,会去<code>global.php</code>中再找一次。</p> <pre><code class="language-php">// 先去 user.php 中找 first_name 的翻译,如果找不到会去 global.php 中找 admin_trans('user.first_name');</code></pre> <h2>公共翻译文件</h2> <p>所有常用的翻译都可以放在<code>resources/lang/{当前语言}/global.php</code>中,当控制器翻译文件不存在时会读取公共翻译文件翻译。</p> <pre><code class="language-php">&amp;lt;?php return [ 'fields' =&amp;gt; [ 'id' =&amp;gt; 'ID', 'name' =&amp;gt; '名称', 'username' =&amp;gt; '用户名', 'email' =&amp;gt; '邮箱', 'password' =&amp;gt; '密码', ], 'labels' =&amp;gt; [ 'list' =&amp;gt; '列表', 'edit' =&amp;gt; '编辑', 'detail' =&amp;gt; '详细', 'create' =&amp;gt; '创建', 'root' =&amp;gt; '顶级', 'scaffold' =&amp;gt; '代码生成器', ], 'options' =&amp;gt; [ ], ];</code></pre> <h2>默认面包屑翻译</h2> <p>例如你的访问路径是<code>/admin/my-users</code>,控制器是<code>MyUserController</code>,那么则可以在控制器对应的翻译文件中加上</p> <pre><code class="language-php">return [ 'labels' =&amp;gt; [ 'my-users' =&amp;gt; '用户', ], ... ];</code></pre>

页面列表

ITEM_HTML