Laravel 8 同一页面同时使用两种及以上多语言翻译如何实现?
Laravel 8 同页面多语言翻译同时展示实现方案
以下3种方案可根据你的使用场景选择:
方案1:直接使用trans()/__()助手指定locale(适合少量翻译调用场景)
Laravel自带的翻译助手函数支持第三个参数手动指定目标语言,无需修改全局locale配置,示例用法:
<!-- Blade模板中直接调用 --> <div class="bilingual-item"> <span class="en">{{ __('messages.welcome', [], 'en') }}</span> <span class="zh">{{ __('messages.welcome', [], 'zh-CN') }}</span> </div>
对应翻译文件需要提前放在resources/lang/en/messages.php、resources/lang/zh-CN/messages.php路径下配置好对应key即可。
方案2:封装多语言翻译助手函数(适合批量多语言调用场景)
如果页面大量位置需要同时输出多语言,可以自定义全局助手函数减少重复代码:
- 新建
app/Helpers/translation.php文件,写入以下代码:
<?php if (!function_exists('multi_trans')) { /** * 同时获取指定多个语言的翻译内容 * @param string $key 翻译键名 * @param array $locales 目标语言列表,默认取中英双语 * @param array $replace 占位符替换参数 * @return array 按语言为key的翻译结果数组 */ function multi_trans(string $key, array $locales = ['en', 'zh-CN'], array $replace = []): array { $result = []; foreach ($locales as $locale) { $result[$locale] = __($key, $replace, $locale); } return $result; } }
- 在
composer.json的autoload.files配置项中加入助手文件路径:
"autoload": { "files": [ "app/Helpers/translation.php" ] }
- 执行
composer dump-autoload加载助手文件 - 调用示例:
@php $titleTrans = multi_trans('product.name') @endphp <div class="bilingual-title"> <h2>{{ $titleTrans['en'] }}</h2> <h3>{{ $titleTrans['zh-CN'] }}</h3> </div>
方案3:自定义Blade指令(适合高频多语言对照展示场景)
如果全站多处需要做双语/多语言对照展示,可以扩展Blade指令简化模板写法:
在app/Providers/AppServiceProvider.php的boot方法中注册指令:
use Illuminate\Support\Facades\Blade; public function boot() { Blade::directive('multiLang', function ($expression) { $params = explode(',', $expression, 2); $key = trim($params[0]); $locales = isset($params[1]) ? trim($params[1]) : "['en', 'zh-CN']"; return "<?php foreach ({$locales} as \$locale): ?> <span class=\"lang-{{ \$locale }}\">{{ __({$key}, [], \$locale) }}</span> <?php endforeach; ?>"; }); }
模板中直接调用即可自动输出所有指定语言的翻译:
<!-- 默认输出中英双语 --> <div class="bilingual-content"> @multiLang('product.desc') </div> <!-- 自定义输出指定3种语言 --> <div class="multilingual-content"> @multiLang('product.desc', ['zh-CN', 'en', 'ja']) </div>
内容的提问来源于stack exchange,提问作者royallife
相关产品推荐
相关产品推荐

