构建网站翻译文件

2024-04-22

我在建立网站时多次遇到这个问题。 我将以使用 PHP 和 Laravel 为例进行解释,但这个问题在多个平台中都很常见。 这已经在几个问题中得到了解决(post1 https://stackoverflow.com/questions/31785471/which-are-the-suggested-key-naming-strategies-for-trans-in-laravel/33650126#33650126, post2 https://stackoverflow.com/questions/7507640/translate-website-into-different-language?rq=1,post3 https://stackoverflow.com/questions/10852817/best-way-to-translate-a-website?rq=1, post4 https://stackoverflow.com/questions/954160/php-how-to-translate-a-website-into-multiple-languages?rq=1和其他一些)但这些帖子并没有真正得到很好的答案。

问题是:在语言文件中构建翻译内容的最佳方法是什么?

我目前正在使用 Laravel (我没有提及版本,因为两者拉拉维尔 4 http://laravel.com/docs/4.2/localization and 拉拉维尔 5 http://laravel.com/docs/5.0/localization具有类似的本地化功能,至少对于本主题的目的而言足够相似)。

本地化构建跨语言文件(en、es、de、fr...)的内容,其中可以有多个 .php 文件,其中包含返回多级字典结构的 return 语句。

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

这些文件包含如下内容:

<?php    
return [

    'example1' => 'example message for value exaple-key',
    'example2' => [
        'sub-example' => 'example message for example1.sub.example',
    ],    
];

调用它是通过执行以下操作来完成的:

//Laravel 5    
trans('messages.example1'); //outputs 'example message for value exaple-key'
trans('messages.example2.sub-example'); //outputs 'example message for example1.sub.example'

//Laravel 4   
Lang::get('messages.example1'); //outputs 'example message for value exaple-key'
Lang::get('messages.example2.sub-example'); //outputs 'example message for example1.sub.example'

我想到了几种分组方法:

  1. 按网站内容

    例子:homepage.php, page1.php, page2.php...

  2. 按逻辑域:

    例子:auth.php, validation.php, pagination.php...

  3. by html:

    例子:buttons.php, popup_messages.php, form_data.php...

  4. 直接翻译:

    例子:simple_words.php, phrases.php...并且包含类似内容'password-to-short' => 'your password is to long'

  5. 前面提到的一些混合/组合

所有这些都有一些明显的优点和缺点,我不会尝试详细说明,但5th选项很可能是最好的解决方案,但仍然存在一个问题,即在哪里划清界限,以尽量减少短语和内容的重复。

另一个问题就是如何解决某些情况下首字母大写、其他情况下首字母小写以及末尾标点符号的问题。

我对这个问题进行了研究,但没有明确的指南和/或好的例子可供学习。

欢迎所有意见。


我倾向于将 Laravel 应用程序中的功能分组为独立的“组件”。例如,我最近一直在为应用程序开发电子邮件活动功能,因此将服务提供者类、模型、服务类放在以下文件夹中:应用程序/电子邮件.

考虑到这一点,我以类似的方式组织我的翻译。因此,即使在这个项目中我们不翻译字符串,如果我们是的话我会创建一个资源/资产/lang/en/email.php文件,并将电子邮件组件的翻译字符串放入其中。

所以在另一个项目中,我的目录结构可能如下所示:

  • /resources
    • /lang
      • /en
        • auth.php
        • 电子邮件.php
        • 事件.php
        • news.php
        • 分页.php
        • 密码.php
        • 验证.php

希望这可以帮助。

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

构建网站翻译文件 的相关文章

  • 连接错误 - SQLSTATE[HY000] [2002] 操作超时

    我在从 Windows 2008 R2 应用程序服务器连接到也在 Windows 2008 R2 上运行的 MySQL 服务器时遇到问题 Laravel 应用程序报告错误 exception PDOException with messag
  • PHP 准备语句转义的清晰性

    我知道这是一个非常受欢迎的问题 并且已经研究了很多小时 我仍然对明确的答案有点不确定 我不是 PHP 专业人士 并且已经自学了一段时间 我最近刚刚了解 MYSQLi 准备好的语句 已经习惯了旧的做法 我的主要问题是试图找到关于在使用准备好的
  • openssl_pkey_get_public 未打开公钥,“无起始行”错误

    当生成公钥然后用函数读取它时openssl pkey get public publicKeyResource bool false 和消息 错误 0906D06C PEM 例程 PEM read bio 无起始行 privateKey o
  • 如何在 PHP 中检查特定类型的对象

    我有一种方法 它接受 PDO 对象作为参数 允许用户使用现有连接 而不是打开新连接的方法 并节省资源 public static function databaseConnect pdo null 我知道is object 检查参数是否是一
  • PHP数组删除重复的键值并仅显示一个

    Array 0 gt Array user id gt 78 post id gt 3 post user added id gt 2 1 gt Array user id gt 76 post id gt 8 post user adde
  • CodeIgniter:将参数从视图传递到控制器?

    编辑 现在使用下面的代码 我不确定如何正确打印书签和标签 我对 CI 完全陌生 最近遇到了障碍 我非常不确定如何将函数参数从视图文件传递到控制器 以便我可以在函数上使用它 我在视图上有一个 foreach 循环 遍历函数 get lates
  • 如何正确转义 mysql“搜索/喜欢”查询?

    Summary 我目前正在使用 search field LIKE this gt db gt escape like str search string 逃避动态创建的搜索查询 创建的 SQL 语句结果不会产生任何错误 也不会产生任何结果
  • 内存泄漏?!在“array_map”中使用“create_function”时,垃圾收集器是否正确?

    我在 StackOverflow 上找到了以下解决方案 从对象数组中获取特定对象属性的数组 PHP 从对象数组中提取属性 https stackoverflow com questions 1118994 php extracting a
  • 如何在 PHP 中检查不完整的 POST 请求

    当连接速度较慢的远程 Web 客户端无法发送完整的 POST 请求时 我遇到了问题multipart form data内容 但 PHP 仍然使用部分接收到的数据来填充 POST大批 结果一个值 POST数组可能不完整 并且可能会丢失更多值
  • 使用 Doctrine2 时的多重歧视级别

    我正在使用 Doctrine2 来管理我的模型 如下 有一个抽象概念Content与复合模式Gallery 也是一个抽象概念Media从中Video and Image继承 我的选择是添加鉴别器Content and Media表以便区分G
  • PHP DOMDocument 中 XML 内 HTML 表的 Xpath 查询

    我有一个具有以下树结构的 XML 文件
  • CakePHP 后退和前进按钮没有布局

    我们正在 CakePHP 中构建一个大型 CMS 并集成了 Croogo 安装 我们最近遇到了一个问题 当用户单击back在浏览器中 或forward按钮 您最终得到的是使用以下命令的视图 ctp 文件blank布局 所以没有样式 js 等
  • 如何删除空 html 标签(其中包含空格和/或其 html 代码)

    需要 preg replace 的正则表达式 这个问题没有在 另一个问题 中得到回答 因为并非我要删除的所有标签都不为空 我不仅要从 HTML 结构中删除空标签 还要删除包含换行符以及空格和 或其 html 代码的标签 可能的代码是 删除匹
  • 对同一域发出 get 请求,出现 CORS 错误

    在浏览器扩展中 这是我的 ajax 调用 var xhr new XMLHttpRequest xhr open GET window location href true xhr responseType arraybuffer xhr
  • WordPress 标头位置重定向

    WordPress 遇到问题 我想将页面重定向到文件夹 php adminpage php 内的特定 php 文件 SESSION变量等于 1 假设会话变量为 1 但浏览器返回 Not Found 有什么办法让它发挥作用吗 更新 已解决 使
  • 解决多个 jQuery 文件之间的冲突

    我的项目中有多个 jquery 文件 我正在使用jquery1 4 2使用facebox 但我也需要原型和scriptacolous脚本 我用过 jQuery noconflict 在我的代码中 但它不起作用 这是网址http mlep c
  • 使用 Assetic PHP 通过 RVM 安装后 Sass 损坏

    我正在尝试设置 Assetic PHP 资源编译器 并且它可以与 CoffeeScript Stylus 和 Less 一起使用 所有 NPM 包都运行良好 然而 对于 Sass 我遇到了问题 以下是我到目前为止所采取的步骤 我安装了 RV
  • AngularJS + Laravel 5 身份验证

    在使用 AngularJS 构建 SPA 时 我想在 AngularJS 网站中实现用户身份验证 但是 我不知道从哪里开始以及最佳实践是什么 基本上我有一个确定可以担任一个或多个角色 我寻找了一些例子 这样我就可以对如何正确处理这个问题有一
  • PHP日期时间“下周星期三”给我星期一

    我正在尝试使用以下方法获取下周星期三的日期new DateTime next week wednesday 然而 它返回2016 12 19 00 00 00 000000今天是星期一 为什么会这样呢 如何得到正确的结果 我尝试在在线 PH
  • 限制 WooCommerce 上的域名注册

    如何限制用户电子邮件对 WooCommerce 注册中特定域的访问 我发现这段代码可以做到这一点 但由于某种原因它在 WooCommerce 注册表单上不起作用 如果我进入 WP 登录页面 它就会起作用 任何帮助表示赞赏 function

随机推荐

  • Angular UI Bootstrap Popover - 如何添加关闭按钮

    我有一个表格 每个单元格都有一个弹出窗口 如下例所示 对弹出窗口的调用 td td
  • 使用额外模块构建 opencv 错误 ocv_download

    我尝试使用 Extramodules 构建 openCV 如果我尝试使用 cmake 配置项目文件 Windows 10 上的 vc14 x32 则会出现错误 opencv contrib master modules xfeatures2
  • Angular 4显示当前时间

    在 Angular 4 变化检测系统中显示当前时间的正确 规范 方法是什么 问题如下 根据定义 当前时间每时每刻都在不断变化 但 Angular 4 变更检测系统无法检测到它 因此 我认为有必要明确调用ChangeDetectorRef d
  • 如何忽略 Rails 中特定操作的真实性令牌?

    当我不想检查真实性令牌的特定操作时 如何告诉 Rails 跳过检查它 轨道 5 2 您可以使用相同的skip before action https api rubyonrails org classes ActionController
  • C# OpenFileDialog 非模态可能

    是否可以创建 拥有非模式 net OpenFileDialog 我在主对话框中有一个 UI 元素 始终需要可供用户按下 No 打开文件对话框 http msdn microsoft com en us library system wind
  • 领域未获取数据

    我在使用领域时遇到问题 findAll 和 findAllAsync 不会从领域返回任何数据 我正在像这样从主线程更新领域对象 public void updatePhoto final int ticketID realm beginTr
  • 合并多列上的两个 pandas 数据框

    我有两个数据框 gt gt gt df1 Output col1 col2 col3 col4 a abc 10 str1 b abc 20 str2 c def 20 str2 d abc 30 str2 gt gt gt df2 Out
  • Spring boot 2.0.2,使用Spring数据如何从实体验证中获取消息

    我正在构建一个 Spring Boot 2 0 2 Web 服务 实体中有许多我不想为空的字段 当尝试保留具有无效字段的实体时 如何从该特定字段获取消息 例如 我有一个实体 Entity Table name users public cl
  • 嵌入资源名称

    在C 中 嵌入资源名称的默认行为是这样的
  • 重定向后执行函数 - javascript

    好的 我的页面 MyPage 上有一个简单的按钮 可以淡出当前 div fade 1 并淡入另一个 div fade 2 我现在意识到 我可能想直接从其他地方转到该页面 淡出 2 我可以通过以下方式重定向我的页面window locatio
  • NodeJS Mongoose 总是返回一个空数组

    我尝试过使用find and findOne并且两者都没有返回文件 find返回一个空数组findOne正在返回null err在这两种情况下null以及 这是我的连接 function connectToDB mongoose conne
  • 有没有一种优雅的方法可以在 Django 管理中为 M2M 字段设置 list_filter ?

    如果我有一个披萨模型和一个浇头模型 它们之间有 m2m 是否有一些快速优雅的方法可以为它们中的任何一个添加到管理列表页面 为包含特定浇头 包含的所有浇头的所有比萨饼添加列表过滤器在某个披萨里 内置的 list filter 不支持 m2m
  • 重命名 cassandra 1.2 中的键空间和列族

    如何在 cassandra 1 2 中重命名键空间和列族 我知道不再支持 cassandra cli 重命名 api 如何在 Cassandra 中重命名键空间 https stackoverflow com questions 76491
  • 谷歌地图响应式调整大小

    我试图让谷歌地图响应并调整大小 同时在窗口调整大小时保持其中心 我阅读了其他堆栈问题 例如 响应式谷歌地图 https stackoverflow com questions 15421369 responsive google map a
  • 自动缩放但仍处理 WM_DPICHANGED

    我在使用 C 编写的非常复杂的 WinForms 应用程序时遇到了一些问题 我希望应用程序在 DPI 更改时让 Windows 自动缩放 但我仍然需要挂钩 WM DPICHANGED 事件才能缩放一些自定义绘制的文本 困境是 如果我让应用程
  • 在 R 中将因子矩阵转换为二进制(指标)矩阵的最有效方法

    我可以想到几种方法来转换这种类型的矩阵 数据框 dat data frame x1 rep c a b 100 x2 rep c x y 100 head dat x1 x2 1 a x 2 b y 3 a x 4 b y 5 a x 6
  • 为 Vim 命令行创建一个映射,在插入寄存器之前转义寄存器的内容

    假设我有一个这样的文档 并且我想搜索所有出现的 URL Vim resources http example com search q vim q q http example com search q vim 我不想完整地输入它 所以我将
  • 分配后变量的值未更新

    var a 2 var b a console log b 2 a 5 console log b 2 问 为什么即使为变量 a 分配了不同的值 变量 b 的值仍为 2 console log b 回报2因为当您访问原始类型时 您直接处理它
  • pytorch 中的 keras.layers.Masking 相当于什么?

    我有时间序列序列 我需要通过将零填充到矩阵中并在 keras 中使用 keras layers Masking 来将序列的长度固定为一个数字 我可以忽略这些填充的零以进行进一步的计算 我想知道它怎么可能在 Pytorch 中完成 要么我需要
  • 构建网站翻译文件

    我在建立网站时多次遇到这个问题 我将以使用 PHP 和 Laravel 为例进行解释 但这个问题在多个平台中都很常见 这已经在几个问题中得到了解决 post1 https stackoverflow com questions 317854