Laravel Laravel
  • 前言

    • 发行说明
    • 升级向导
    • 贡献导引
    • API 文档
  • 入门指南

    • 安装
    • 配置
    • 文件夹结构
    • Homestead
    • Valet
  • 架构思想

    • 请求生命周期
    • 服务容器
    • 服务提供者
    • Facades:门面
    • Contracts:契约
  • 基础功能

    • 路由
    • 中间件
    • CSRF 保护
    • 控制器
    • 请求
    • 响应
    • 视图
    • Session
    • 表单验证
    • 错误 & 日志
  • 前端开发

    • Blade 模板
    • 本地化
    • 前端脚手架
    • 编译资源
  • 安全

    • 身份认证
    • API 身份认证
    • 授权
    • 加密
    • 哈希
    • 重置密码
  • 深入话题

    • Artisan 命令行
    • 广播
    • 缓存
    • 集合
    • 事件
    • 文件存储
    • 辅助函数
    • Mail
    • 消息通知
    • 扩展包开发
    • 队列
    • 任务调度
  • 数据库

    • 快速入门
    • 查询构造器
    • 分页
    • 数据库迁移
    • 数据填充
    • Redis
  • Eloquent ORM

    • 快速入门
    • 关联关系
    • Eloquent 集合
    • 修改器
    • 序列化
  • 测试

    • 快速入门
    • HTTP 测试
    • 浏览器测试
    • 数据库测试
    • 测试模拟器Mocking
  • 官方扩展包

    • Cashier
    • Envoy部署工具
    • PassportOAuth 认证
    • Scout全文搜索
    • Socialite社会化登录
Icon

提示 您正在浏览旧版本的 Laravel 的文档. 请考虑将你的项目升级到 Laravel 11.x.

4 1

本地化
5.4
8.x 7.x 6.x 5.8 5.7 5.6 5.5 5.4 5.3 5.2 5.1

Laravel 5.4 中文文档 /

未匹配的标注
本文档最新版为 8.x,旧版本可能放弃维护,推荐阅读最新版!

Laravel 的本地化功能

  • 简介
  • 定义翻译语句
    • 使用短键
    • 使用翻译语句作为键
  • 提取翻译语句
    • 翻译语句中的参数替换
    • 复数
  • 重写扩展包的语言包

简介

Laravel 的本地化功能提供方便的方法来获取多语言的字符串,让你的网站可以简单的支持多语言。

语言包存放在 resources/lang 目录下的文件里。在此目录中应该有应用对应支持的语言并将其对应到每一个子目录:

/resources
    /lang
        /en
            messages.php
        /es
            messages.php

语言包简单地返回键值和字符串数组,例如:

<?php

return [
    'welcome' => 'Welcome to our application'
];

切换语言

应用的默认语言保存在 config/app.php 配置文件中。当然,你可以根据需求自由的修改当前设置,可以使用 App facade 的 setLocale 方法动态地更改现有语言:

Route::get('welcome/{locale}', function ($locale) {
    App::setLocale($locale);

    //
});

你也可以设置 「备用语言」 ,它将会在当现有语言没有指定语句时被使用。就像默认语言那样,备用语言也可以在 config/app.php 配置文件设置:

'fallback_locale' => 'en',

指定当前语言

你可以使用 App facade 的 getLocale 及 isLocale 方法指定当前的语言环境或者检验当前语言是否是给定的值:

$locale = App::getLocale();

if (App::isLocale('en')) {
    //
}

定义翻译语句

使用短键

通常,语言包存放在 resources/lang 目录下的文件里。在此目录中应该有应用对应支持的语言并将其对应到每一个子目录:

/resources
    /lang
        /en
            messages.php
        /es
            messages.php

语言包简单地返回键值和字符串数组,例如:

<?php

// resources/lang/en/messages.php

return [
    'welcome' => 'Welcome to our application'
];

使用翻译语句作为键

对于有大量翻译需求的应用, 如果每一句翻译语句都使用 「短键」 来定义,那么当你在视图中尝试去引用这些 「短键」 的时候,很容易变得混乱,分不清哪个对应哪个。因此,Laravel 也提供支持使用 「默认语言」 的翻译语句作为键,来定义其他语言的翻译语句。

使用翻译语句作为键的语言包需要在 resources/lang 目录下保存为 JSON 文件。例如,如果你的应用中有西班牙语的语言包,你应该新建一个 resources/lang/es.json 文件:

{
    "I love programming.": "Me encanta la programación."
}

获取翻译语句

你可以使用 __ 辅助函数来获取翻译语句,__ 方法接受文件名和键值作为其第一个参数。例如,让我们提取 resources/lang/messages.php 中的 welcome :

echo __('messages.welcome');

echo __('I love programming.');

当然,如果你使用 Blade 模板引擎, 那么你可以在视图文件中使用 {{ }} 语法或者使用 @lang 指令来输出语句:

{{ __('messages.welcome') }}

@lang('messages.welcome')

如果指定的语句不存在,__ 方法则会简单的返回这个键名。所以,如果上述示例中的键不存在,那么 __ 方法则会返回 messages.welcome 。

翻译语句中的参数替换

如果需要,你也可以在翻译语句中定义占位符。所有的占位符都使用的 : 开头。例如,你可以自定义一则欢迎消息的占位符:

'welcome' => 'Welcome, :name',

你可以在 __ 方法中传递一个数组作为第二个参数,它会将数组的值替换到语言内容的占位符中:

echo __('messages.welcome', ['name' => 'dayle']);

如果你的占位符中包含了首字母大写或者全体大写,翻译过来的内容也会相应的做相应的处理:

'welcome' => 'Welcome, :NAME', // Welcome, DAYLE
'goodbye' => 'Goodbye, :Name', // Goodbye, Dayle

复数

复数是个复杂的问题,不同语言对于复数有不同的规则。使用管道符 | ,可以区分单复数字符串格式:

'apples' => 'There is one apple|There are many apples',

你甚至可以创建使用更复杂的复数规则,例如根据数量的范围不同来指定不同翻译语句:

'apples' => '{0} There are none|[1,19] There are some|[20,*] There are many',

当你定义完复数语句条件的时候,你可以使用 trans_choice 方法来设置「总数」以获取符合对应条件的复数翻译语句。例如,在这个例子中,设置「总数」为 10 ,符合数量范围 1 至 19,所以会得到 There are some 这条复数语句:

echo trans_choice('messages.apples', 10);

重写扩展包的语言包

部分扩展包带有自己的语言包,你可以通过在 resources/lang/vendor/{package}/{locale} 放置文件来重写它们,而不是直接修改扩展包的核心文件。

例如,你需要重写 skyrim/hearthfire 扩展包的英文语言包 messages.php ,则需要把文件放置在 resources/lang/vendor/hearthfire/en/messages.php 。在这个文件中定义你想要重写的翻译语句,所有没有重写的语句将会加载扩展包的语言包中原来的语句。


上一篇 下一篇

成为Laravel合作伙伴

Laravel Partners是提供一流Laravel开发和咨询服务的精英商店。我们每个合作伙伴都可以帮助您制定一个精美,结构完善的项目.

我们的伙伴
Laravel
亮点
  • Our Team
  • 发布说明
  • 入门
  • 路由
  • Blade 模板
  • 身份验证
  • 用户授权
  • Artisan 控制台
  • 数据库
  • Eloquent ORM
  • 测试
资源
  • Laravel Bootcamp
  • Laracasts
  • Laravel News
  • Laracon
  • Laracon EU
  • Laracon India
  • Jobs
  • Forums
  • Trademark
  • 版本发布时间
  • 包开发
  • 命令行应用
  • TALL stack全栈开发
  • Blade UI Kit
  • 前端资源构建
伙伴
  • WebReinvent
  • Vehikl
  • Tighten
  • 64 Robots
  • Active Logic
  • Byte 5
  • Curotec
  • Cyber-Duck
  • DevSquad
  • Jump24
  • Kirschbaum
生态系统
  • Cashier
  • Dusk
  • Echo
  • Envoyer
  • Forge
  • Horizon
  • Nova
  • Octane
  • Sail
  • Sanctum
  • Scout
  • Spark
  • Telescope
  • Valet
  • Vapor

Laravel是一个具有表达力,优雅语法的Web应用程序框架。我们认为,发展必须是一种令人愉悦的创造力,才能真正实现。Laravel试图通过减轻大多数Web项目中使用的常见任务来减轻开发的痛苦.

Laravel是Taylor Otwell的商标.
Copyright © 2011-2025 Laravel中文网 LLC.

  • Twitter
  • GitHub
  • Discord
Laravel 全栈开发网 推荐使用阿里云 按Ctrl+D试试