Gettext 或数据库翻译

2023-11-27

哪个更好:

  1. gettext
  2. 基于自定义MySQL+缓存的功能

Gettext 是一种内置功能,因此我认为它已针对性能进行了调整。使用 poedit 是一种痛苦,而且不可能向任何客户展示。

自定义功能允许简单的翻译界面。但可能对 php/db 使用量很大。

我想,你什么时候会使用哪一个?


本地化很困难。这真的很难。这不仅仅是"pairs of words" => "Wortpaare",它比这复杂得多。大多数人在查看 gettext 和 go 时忘记了什么“呃,丑”是本地化process比实现的技术细节重要得多。这是因为实际的翻译人员通常不是程序员,甚至可能不是内部人员。这会导致比您想象的更多的头痛。 gettext 确实很旧,经过了实际测试,并且背后有一个巨大的工具链,经过调整以支持此过程。如果你想做好国际化和本地化,你需要一个强大的系统。 gettext 就是这样,并且得到了广泛工具的支持。您的自制翻译系统™ 不会。

首先,你需要一个强大的系统extract可翻译的字符串。如果无法自动且可重复地从源代码中提取可翻译的字符串,那么您要为每个要翻译的新字符串进行大量的工作。在 gettext 中,xgettext这样做。

接下来,您需要一个工具来将提取的字符串与现有的翻译同步,从而不会丢失任何翻译,并且如果可能的话,仅保留稍有更改的翻译。在 gettext 中,msgmerge这样做。

接下来,您需要一种向字符串添加额外信息的方法。您希望能够按类别、“领域”和上下文对它们进行分组,您可能希望向源代码中添加翻译者的注释,并且您可能希望翻译者能够向翻译添加注释。 gettext 支持这一切。

接下来,您需要一种能够得到各种工具良好支持的文件格式,因为您可能会将文件发送到中国并在那里进行翻译。您可能将它们发送给外部翻译人员的原因也是您需要一个良好的同步工具来合并更改的原因,因为这可能是一个非常异步的过程。 PO 文件得到了很好的支持,因为 gettext 太老了。有许多开源和商业工具可以根据您的具体需求在多个级别上支持本地化过程。

不要低估本地化的任务,选择一个非常适合该流程的工具并学习它。 gettext 是一个很棒的工具,尽管诚然不是对初学者最友好的。

对于它的价值,这里是我的 Twig gettext 扩展,这使得 PHP 的 gettext 变得更好。

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

Gettext 或数据库翻译 的相关文章

  • MySQL中如何重置表的自增列

    我有一张桌子 它的第一列sl是自动递增的 填充表格后 我删除了前两行 第一个条目有sl1 是否可以重置为1维持AI 我正在使用 PHP MyAdmin ALTER TABLE tablename AUTO INCREMENT 1
  • 如何设置 Hibernate 读取/写入不同的数据源?

    使用 Spring 和 Hibernate 我想写入一个 MySQL 主数据库 并从基于云的 Java Web 应用程序中的另一个复制从属数据库中读取数据 我找不到对应用程序代码透明的解决方案 我真的不想更改我的 DAO 来管理不同的 Se
  • 在php中搜索字符串,搜索字段包含空格

    这是我的代码 div style display inline block div 我对空白有疑问 如果我仅使用 适合模型 或使用 11 2000 但不是两者组合 它会找到字符串 我需要将它们结合起来 否则就没用了 编辑 我不能做这样的事情
  • 如何使用 PHP 在邮件正文中发送 Base64 图像?

    我正在尝试使用下面的代码使用 PHP 发送一封正文上包含 base64 图像的电子邮件 但该图像永远不会出现 如果我更改为 URL 它可以工作 但它不能与 base64 一起使用 我只在新页面上测试了base64 img src base6
  • 在 Twig 中使用 PHP 函数

    我有一个 PHP 代码 用于在我的通用控制器中为我的 Twig 模板添加一个新类 opencart htdocs catalog controller common cart php 该代码应检查设备是否是移动设备 function onS
  • Laravel eloquent 获取关系数

    我使用 Laravel 5 3 我有 2 张桌子 Articles id cat id title And Category id parent id title 我在模型中定义了我的关系 Article model public func
  • Laravel 4 - JOIN - 相同的列名

    我目前使用此代码从数据库中检索所需的数据 query DB table packages gt join assigned packages function join use id join gt on packages id assig
  • MySQL查看数据是否为NULL

    我需要在 Select 中放置一个 Case 来检查我添加到视图中的数据是否为 NULL 在这种情况下我希望它只输入零 或者不输入零 你的意思是这样的吗 SELECT IF field IS NULL 0 field 还有 IFNULL S
  • 使用返回哈希数组的外部 PHP SOAP Web 服务的 C# .NET 客户端存在问题

    我正在编写一个需要调用外部 Web 服务的 NET Web 应用程序 我提供的文档包括 PHP 代码示例 我可以使用提供给我的 WSDL 地址在 VS2010 中成功创建 Web 引用 并且使用 fiddler 我可以看到正在发送和接收预期
  • 在 Symfony 中重定向之前访问调试(分析器)信息

    提交表单后 我通常将用户重定向到另一个页面 表单本身除外 因此我丢失了配置文件 调试信息 如日志 我的意思是 单击 调试工具栏 后 我会获得有关重定向后请求的信息 但我确实知道 Symfony 保留有关上一页的信息 我的意思是它不会忘记它
  • PHP - 为什么使用 Guzzle 而不是 cURL?

    在我的应用程序中 我最初开始使用 cURL 从各种 API 检索数据 今天 我尝试使用 Guzzle 来完成同样的任务 到目前为止 cURL 和 Guzzle 似乎都工作得同样好 判断依据Github https github com gu
  • Yii2 - 如何自动加载自定义类?

    我创建了以下自定义类 我想在我的 Yii2 应用程序中使用它 common components helper CustomDateTime php namespace common components helper class Cust
  • MySQL Spatial CONTAINS 显示错误结果

    我的 MySQL 空间搜索有一个奇怪的行为 我在 GEOM 字段 葡萄牙边界 中创建了一个多边形 然后我尝试在内部找到一个点 发现没问题 下一次尝试是查找多边形外部的点 但查询仍返回 1 个找到的行 请帮忙 我做错了什么 为什么它会找到多边
  • Laravel Eloquent ORM 返回 stdClass 而不是实际模型

    我正在做 mymodel MyModel where url domain gt first 这返回了一个 MyModel 对象 现在 不知何故 它返回了一个 stdClass 发生了什么 laravel 有更新吗 我改变了什么吗 Than
  • 使用 mariaDB 将 sql 转储文件安装到 docker 容器

    我刚刚学习 docker 的基础知识 但一直停留在从本地系统导入 SQl 文件上 我使用的是 Windows 10 并允许我的 docker 容器访问我的共享驱动器 我有一个位于 D 上的 SQL 文件 我想导入到从 docker hub
  • 使用 PDO 的基于 PHP 类的用户系统 - 调用非对象上的成员函数prepare()

    我做了相当多的研究 故障排除和搜索 试图解决我的问题 但没有运气 所以这是错误 调用非对象上的成员函数prepare 生成此错误的代码位于我的用户 Auth 类中 如下所示 this gt dbManager gt db gt prepar
  • en_CA 语言环境中 sprintf 中的逗号作为小数分隔符

    是否可以在 en CA 语言环境中的 sprintf 中使用逗号作为小数点分隔符 sprintf 能够识别区域设置 并且将始终使用当前的区域设置 但您可以使用数字格式 http php net manual en function numb
  • 如何从 PHP 的 sha256 加密迁移到 bcrypt?

    登录 rows sql gt fetch PDO FETCH ASSOC us id rows id us pass rows password us salt rows password salt status rows attempt
  • PHP 读取 XML 播客 RSS 源

    好的 我正在为朋友的播客网站创建一个页面 列出他的播客的所有剧集 本质上 我所寻找的只是如何阅读 RSS 提要 解析出节点 并将信息显示在屏幕上 最终 我将创建一个可以播放剧集的播放器 但那是很久以后的事了 这就是我阅读 RSS 源的方式
  • 如何在 PHP 中去除字符串中的所有空格? [复制]

    这个问题在这里已经有答案了 我怎么能够strip remove all spaces of a string in PHP 我有一个string like string this is my string 输出应该是 thisismystr

随机推荐

  • 需要为 EmptyStacks 创建一个新的 RunTimeException

    所以我的任务可能听起来很简单 但它让我感到困惑 我已经浏览了互联网上的代码 但我无法掌握 我也不行 掌握老师发布的幻灯片 这就是对我的要求 创建一个名为 EmptyStackException 的新运行时异常类型 然而我不知道如何制作方法
  • 如何使用元对象协议向对象添加属性?

    我试图回答this问题 并认为我可以使用元对象协议向类添加属性 这是一个我尝试添加属性的最小示例test到班级Configuration施工后 use v6 class Configuration my config Configurati
  • 核心数据中的索引关系

    我刚刚开始在 iPhone SDK 上使用 Core Data 并且正在考虑保存有序列表 例如数组 然而 核心数据中的关系在检索时表示为集合 这使得保存对象的放置顺序变得困难 一个很好的例子是允许对项目进行重新排序时表视图中的数据项目 一个
  • JSF生成的HTML元素ID是变化的,如何将其设置为固定的元素ID?

    我有一个 JSF 输入文本组件 其 id 为search 在生成的 HTML 输出中 它看起来像这样j idt17 search 但是数量17正在不时发生变化 怎样才能让它保持一成不变呢 给生成 HTML 元素的 JSF 组件id j id
  • install_name_tool -change 和 -id 之间的区别

    我已经在这个概念上苦苦挣扎了一段时间 我无法真正理解两者之间的区别 change and id 手册页指出 id name Changes the shared library identification name of a dynami
  • 滚动我自己的@Html.BeginfOrm()

    我正在编写一个自定义验证集 它将显示 div 上所有缺失的元素 我希望能够使用自定义 Html BeginForm 方法将写出该 div 但我真的不知道从哪里开始 因为这个坚果比写出标签或字符串的 html 扩展更难破解 表单封装了数据 控
  • 差异算法

    有人可以推荐一些关于 XML 的基于树的 diff 算法的论文 文献 或代码片段 基于 DOM 树 非常感谢 这是一篇关于相同内容的有用论文 http pdf aminer org 000 301 327 x diff an effecti
  • 将 props 传递给 Material UI 样式

    鉴于Card代码如here 如何更新卡片样式或任何材质 UI 样式 const styles theme gt card minWidth 275 对此如下 const styles theme gt card minWidth 275 b
  • Heroku 中使用 OpenCV 的 Python Web 应用程序

    我正在构建一个在后端使用 OpenCV 的 Web 应用程序 我已经在 Ubuntu 上构建了该应用程序 我也在 Windows 上尝试过 并且运行良好 目前 我正在尝试配置 OpenCV 以在 Heroku 上工作 由于无法使用 pip
  • 在 DataFrame.groupby 的情况下,如何根据另一列的最大值获取一列的值

    我有一个看起来像这样的数据框 id YearReleased Artist count 168 2015 Muse 1 169 2015 Rihanna 3 170 2015 Taylor Swift 2 171 2016 Jennifer
  • AngularJS 组复选框验证

    我有一个复选框列表 其中至少有一个是必填的 我尝试通过 AngularJS 验证来实现这一点 但遇到了困难 下面是我的代码 Code goes here for js var app angular module App function
  • C++ 是否可以计算出整个向量? [复制]

    这个问题在这里已经有答案了 我需要计算一个向量 不仅仅是其中的一个元素 而是整个事物 例如 std cout 您可以定义一个实用函数 例如 template
  • 64 位 Windows 上 long 的位大小是多少?

    不久前 有人告诉我long在 64 位机器上不是 64 位 我应该始终使用int 这对我来说没有意义 我看过文档 例如苹果官方网站上的文档 说long为 64 位 CPU 编译时确实是 64 位 我查了一下 64 位 Windows 上的内
  • 在 Emacs 中,如何使用键盘选择完成列表?

    当我在迷你缓冲区中按 Tab 键完成并且 Emacs 在新缓冲区中显示完成列表时 如何在不使用鼠标的情况下切换到该缓冲区 I tried C x o 但这只是切换到第一个缓冲区 我从中进入了迷你缓冲区 我也尝试过C x b 但这给了我com
  • 如何使用 npm 脚本重命名文件

    我在用复制文件作为一个 npmscirpt copyfiles u 2 src app conf dev json dist config 但最后我想把文件重命名 如何将输入文件重命名为类似的名称conf json 我检查了文档 没有发现可
  • 带定时器的 Windows 服务

    我在 c net 中创建了一个带有计时器的 Windows 服务 当我在 Visual Studio 中调试 构建项目时它工作正常 但安装后它不执行其操作 这背后的原因可能是什么 代码 public partial class Servic
  • 添加包含数字列的分箱值的列

    我有一个包含几列的数据框 其中一列是排名 是 1 到 20 之间的整数 我想创建另一列 其中包含 bin 值 如 1 4 5 10 11 15 16 20 最有效的方法是什么 我的数据框看起来像这样 csv 格式 rank name inf
  • 了解 WebElement.findElement() 和 XPATH

    我想使用WebElement findElement 使用 XPATH 定位父节点内节点的 API span class child class 我以为这会让我归还 div 那是在父级内部 然而 它返回了我在整个 DOM 树中找到的第一个
  • Flask 文件上传限制

    我有一个用于多个文件上传的文件上传处理程序 并设置了 MAX CONTENT SIZE 文档提到当总文件大小超过限制时 Flask 会抛出 413 异常 因此我还使用自定义 413 页面编写了 413 错误处理程序 但是 在测试文件上传时
  • Gettext 或数据库翻译

    哪个更好 gettext 基于自定义MySQL 缓存的功能 Gettext 是一种内置功能 因此我认为它已针对性能进行了调整 使用 poedit 是一种痛苦 而且不可能向任何客户展示 自定义功能允许简单的翻译界面 但可能对 php db 使