在 Laravel 5.x 中组织 trans() 本地化文件的好策略有哪些?

2024-01-12

这是一个关于方法论和建议实践的问题。我知道它并没有严格依附于框架,甚至不是 PHP,答案可能是“这取决于你”。但我关心的是最佳实践和方法,因为通常存在针对特定环境的最佳方法。

我想知道哪些是最佳实践键命名为了trans()的函数Laravel 5.1 ?

考虑到内置的 Laravel 翻译存储在数组中,我关心的是哪种雇佣体系可以让我实现以下目标:

一致性:所以我尽量减少使用不同单词表达相同含义的可能性,或者创建许多不同的键最终具有相同的翻译(如常见单词)。

可重用性:所以我最小化整体翻译文件的大小并尽可能少地翻译,并保持灵活性。

可读性:因此,即使缺乏翻译价值,翻译人员也可以识别密钥的用途。

组织:这样开发人员可以轻松记住完整的密钥路径并尽量减少每次检查翻译文件。


举个例子,假设我想为管理配置文件的用户模型更新命名一个成功警报。可能的方法是:

trans('manager.user.update.alert.sucess')

trans('alerts.success.manager.user.update')

trans('manager.user.alert.update.success')

trans('alert.the_user_was_updated_successfully')

Update

到 2016 年 11 月,看起来Laravel 5.4 引入了基于 JSON 的翻译机制 https://laravel-news.com/2016/11/json-based-translations/这可能会简化翻译文件。尽管如此,关心智能文件结构和组织良好的文本是一个优势。


我的建议是使用 Laravel 中的参数化翻译选项。

我建议有这样的结构:

对于通用且可重复使用的内容:

trans('messages.alerts.update.success', ['item' => 'User']);   // results in: 'User has successfully been updated'
trans('messages.alerts.update.success.default');               // results in: 'Updated was successfull.'

对于与特定领域/问题严格相关的内容...(在本例中为经理):

trans('manager.alerts.update.user.success');   // results in: 'User has successfully been updated'

or

trans('manager.alerts.update.success', ['item' => 'User']);   // results in: 'User has successfully been updated'
trans('manager.alerts.update.success.default');               // results in: 'Updated was successfull.'

我们的想法是,对于经理特定的某些内容(例如更新成功消息可能与其他更新成功消息不同),您应该从特定的内容开始,例如:manager.alerts...。 在通用情况下(同一消息可以在多个用例中使用),您应该从通用的东西开始,例如messages.alerts.update....

命名如trans('alert.the_user_was_updated_successfully')我认为应该避免,因为当您想更改消息时可能会遇到大问题。键仍然反映旧值,而值将是新值。

关于您的目标:

一致性 and 可重用性:一定量的内容会重复。这是无法避免的。然而,可以通过构建内容并使用包含常见单词和短语的文件(例如)来最小化这个问题。 commons.words commons.phrases 或 2 个包含几个类别的文件(单词和短语)。例子:commons.time.day , commons.hello_world ...

可读性:这将是一个问题,除非您向翻译人员提供一个已经包含所有值的文件(采用他/她可以翻译的默认语言或起始语言)。我真的不明白为什么你没有最初的翻译/内容。

组织:您必须尝试像开发人员一样思考。如果您想找到特定的东西,您会思考并尝试在该特定主题下找到一些东西(manager.alerts....在这种情况下) 但如果您正在搜索更通用的东西,您更有可能搜索通用的东西(messages.alerts....在这种情况下)

我有类似的问题并发布了question https://stackoverflow.com/questions/33549409/structuring-website-translation-files关于它。 不幸的是,人们对这个主题也没有太多兴趣。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Laravel 5.x 中组织 trans() 本地化文件的好策略有哪些? 的相关文章

  • 为什么 Composer 降级了我的包?

    php composer phar update这样做了 删除了 2 3 0 软件包并安装了整个 2 2 5 Zend Framework php composer phar update Loading composer reposito
  • Magento - 自定义支付模块

    这是一个非常普遍的问题 但这里是 我正在尝试在 Magento 中创建一个自定义支付模块 我创建了一个 常规 模块 可以连接到 Magento 事件 观察者模型 但是我如何告诉 Magento 将模块视为支付模块 以便它显示在管理后端和结账
  • 无法显示 Laravel 欢迎页面

    我的服务器位于 DigitalOcean 云上 我正在使用 Ubuntu 和 Apache Web 服务器 我的家用计算机运行的是 Windows 7 我使用 putty 作为终端 遵循所有指示https laracasts com ser
  • 如何将 php curl 中的 cookie 获取到变量中

    因此 其他公司的一些人认为 如果不使用soap xml rpc rest 或任何其他合理的通信协议 而是将所有响应作为cookie 嵌入标头中 那就太棒了 我需要从这个卷曲响应中将这些 cookie 作为数组取出 如果我不得不为此浪费大量的
  • 基于mysql表中唯一电子邮件地址的唯一代码?

    我有一个 mysql 表 它将存储用户电子邮件地址 每个地址都是唯一的 并且是主字段 和时间戳 我添加了另一列名为 unique code varchar 64 utf8 unicode ci 我非常感谢您提供的帮助 a 生成5位字母数字代
  • laravel 中的 jwt 中的“无法从请求中解析令牌”

    我面临着 无法从请求中解析令牌 Laravel 中的 JWT 错误 我在 localhost Windows 7 中的 Xampp 中尝试了相同的代码 它正在工作 但在服务器上它不起作用 我已经通过了 授权 标头中的令牌也发生了变化 hta
  • 在 PHP 应用程序中实现插件的设计模式

    对于如何在 PHP 应用程序中实现插件有共识吗 我已经调查过观察者模式 http devzone zend com 1732 implementing the observer pattern with splobserver and sp
  • Magento - 从观察者方法重定向客户

    在本次活动中checkout cart add product complete 我希望客户被重定向到外部网页http www example com 为此 我使用这段代码 它根本不起作用 public function moduleMet
  • 使用哪个正则表达式将此字符串转换为数组?

    从 mysql 中的地理空间列我得到以下字符串值 我想将其转换为数组 最终目标是将其转换为 geoJSON POLYGON 4 885838 52 388063 4 891061 52 388381 4 890973 52 382909 该
  • 第一个选项为空的选择框

    如何将选择框中的第一个选项设置为空值 我正在从数据库获取数据 我想将选项默认设置为 请选择一个选项 我找到 default gt Please select 不适用于 HTML5 必需属性 这确实有效 listOfValues 1 gt C
  • ResourceBundle 返回 NULL,没有引发任何错误

    对于国际化数据 与 ResourceBundle来自 PHP 的 intl 扩展的类 我运行了扩展 PHP 5 3 4 Windows 并使用以下命令创建了一个 dat 文件ICU 数据库定制器 http apps icu project
  • 如果我们的应用程序位于反向代理后面,如何获取访问者的真实 IP?

    我正在使用 Siteground 的基于 nginx 的动态缓存反向代理 它使用它来服务请求和静态文件 我想获取访问者的 IP 地址 但我无法获取任何内容 甚至没有显示任何内容print r SERVER 这是我尝试过的 hostname
  • 当控制器类扩展父控制器时,为什么我们仍然需要父构造函数?

    我是 CodeIgniter 和 OOP 的初学者 我正在读一页 CI 教程here http ellislab com codeigniter user guide tutorial news section html 我发现了一些让我产
  • 如何从表中选择所有偶数 id?

    我想从 MySQL 数据库的表中选择所有甚至帖子 ID 然后显示它们 我还想获取所有带有奇怪 id 的帖子并将它们显示在其他地方 我想使用 PHP 来完成此操作 因为这是我使用的服务器端语言 或者 我是否必须选择所有帖子 然后使用 Java
  • 无法使用模式 r: fopen(): AWS Elastic Beanstalk 打开

    错误 无法使用模式 r fopen 打开 文件名不能为空当我尝试上传较大的文件 超过 5MB 时 我不断收到此错误 我已将 PHP 应用程序上传到 AWS Elastic Beanstalk 并将文件上传到 AWS S3 我的代码中甚至没有
  • Laravel + AngularJS Nginx 路由

    我有以下问题 我需要配置Nginx 这样在任何URL用户访问时 它都会保留uri 例如domain com some url 但仅传递给 laravel 并让 Angular 处理路由 Route get function return v
  • 提交前验证表单(比检查空字段更复杂)

    我有一个包含时间输入的表单 具体来说 开放时间和结束时间 当按下提交按钮时 它会转到一个 php 页面 其中这些输入将添加到数据库中 在允许提交表单之前我想检查一些事情 例如 我想确保开始时间早于 小于 结束时间 这是表格 Opens
  • Yii2 Rest - 自定义操作和 OPTIONS 方法

    我在 UsersController 类中执行以下操作 login 路由操作时遇到问题 public function actionLogin data Yii app gt getRequest gt getBodyParams mode
  • 使用 jquery 和 php 测试表单输入是否为 1 或 2 位整数

    我有一个表单 其中有五个字段全部设置为 maxlength 2 基本上 我希望唯一可以输入的值是一位或两位整数 因为在将值存储在数据库中之前对这些字段执行计算 是否有任何 jquery 不允许用户输入不是整数的值 另外 用 jquery 和
  • 显示产品中的类别名称和类别 ID - Laravel

    我已经找到了这个答案 但它对我不起作用 Laravel 按 id 显示类别 https stackoverflow com questions 39222584 laravel displaying categories by id 我无法

随机推荐