使用 PHP Gettext 无需安装语言环境

2023-12-20

我一直在寻找国际化开源项目的选项:

  • Gettext,似乎每个人都推荐,显然需要“安装在您的系统上”才能使用语言环境。看到这个note http://www.php.net/manual/en/book.gettext.php#91187PHP手册上的内容准确地反映了我的情况。这所以问题 https://stackoverflow.com/questions/3398113/php-gettext-problems也询问同样的问题。这不适合开源项目,因为我不相信最终用户的系统上安装了适当的区域设置。此外,非常非常奇怪的是,您必须安装语言环境才能使用您已翻译的字符串(IMO)。

  • 有时也建议使用 Zend_Translate 以支持 gettext,但我没有使用 Zend 框架,所以我认为这不是我的选择。有些人说你可以将它从 Zend 框架中分离出来,但我不知道如何分离。如果有人可以告诉我需要挑选哪些文件(我已经下载了 Zend 框架的 tarball),我将愿意使用 Zend_Translate。

  • 数组。这就是我现在正在做的,但它并不理想,因为:

    • 当当前页面不会使用大多数翻译时,它将占用大量内存来定义每个翻译。
    • 我发现自己在复制数组中的键时遇到问题,数组已经有 1000 行代码长,而且我几乎没有添加任何内容......
    • 这意味着非程序员无法真正翻译,而 POedit 是每个人都期望使用的标准。

我能以某种方式阅读吗.mo没有 Gettext 或 Zend_Translate 的文件,还是必须使用 Gettext?如果是这样,我怎样才能使所有区域设置正常工作,就像我上面链接的问题一样?

编辑:我现在愿意使用 Zend_Translate。我只需要弄清楚我需要哪些文件(如果它们可以合并到一个文件中那就太好了) - 我不希望在我的项目中使用整个 Zend Framework。


更新:我有兴趣了解大型开源项目如何处理 i18n:

  • Moodle 使用arrays https://github.com/moodle/moodle/blob/master/lang/en/.
  • Drupal好像用数组,带有数据库后备 https://github.com/drupal/drupal/blob/7.x/includes/bootstrap.inc#L1464。他们也跑setlocale('C')获得一个通用的语言环境并绕过整个setlocale mess.
  • WordPress 使用自己的函数堆 https://github.com/WordPress/WordPress/blob/55fb020e84fd46bd56668facd1f3a74be1776cbf/wp-includes/l10n.php对于 i18n,虽然下面确实使用了 gettext。

因此,据我所知,这三个随机项目都没有使用 Zend_Translate,也没有直接使用 gettext。

也许使用Clocale,将语言名称存储在文本域名中,然后从那里开始。


据我所知,这就是:

$lang = 'de'; //debug
setlocale( LC_ALL, 'C' );
bindtextdomain( 'default', PATH . "/locale/$lang" );
bind_textdomain_codeset( 'default', 'UTF-8' );
textdomain( 'default' );

var_dump( file_exists( PATH . "/locale/$lang/C/LC_MESSAGES/default.mo" ) ); //bool(true)

但我仍然只得到英文字符串,即使我使用了 poedit、msgfmt 等来制作适当的文件。我也尝试过重新启动 Apache。


Try gettext-php https://launchpad.net/php-gettext/。它是用 PHP 编写的 gettext 的直接替代品。我认为,它最初是为 WordPress 完成的,因为 WP 需要在共享主机上运行,​​而这些主机并不总是针对每个区域设置进行配置。在我看来,这也是你的问题。

它对性能造成了一些影响,但这对我来说根本不是问题。

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

使用 PHP Gettext 无需安装语言环境 的相关文章

  • 将 UTC 日期转换为 PHP 本地时间

    我使用以下方法将 UTC 日期存储到数据库中 utc gmdate M d Y h i s A 然后我想将保存的 UTC 日期转换为客户端的本地时间 我怎样才能做到这一点 Thanks 如果客户端指的是浏览器 那么您首先需要从浏览器将时区名
  • 单元测试魔术方法

    当涉及到 PHP 中魔术方法的单元测试实现时 调用这些方法的推荐方法是什么 我看到三个可用选项 显式 直接调用它们 object gt get someValue 间接调用它们 使用任何旨在触发它们的操作 object gt someVal
  • 有人成功地使用 PHP 5.4.4 和 APC 3.1.10 提供高流量服务吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 让浏览器缓存我的动态 PHP 样式表

    我想在 PHP 文件 styles php 中创建一个样式表 以便样式表变得动态 具体取决于请求的用户 对于每个单独的用户来说 样式表是不变的 因此应该缓存在他的客户端浏览器上 我读过 您可以通过设置内容类型和缓存控制等标头来实现此目的 但
  • Ada:用可变大小的数组打包记录

    我正在寻找创建一个打包记录 它可以容纳长度从 5 50 个元素不等的数组 是否可以以这样的方式来完成此操作 以便可以在不浪费空间的情况下打包记录 当我去创建记录时 我会知道数组中有多少元素 the range of the array ty
  • PHP Web 应用程序中的 Ace 编辑器

    我正在制作一个小型网络应用程序 允许用户通过以下方式提交 html css 和 javascript 内容王牌编辑器 http ace ajax org 在此编辑器中 将存储的内容回显到编辑器中就足够了 但是无论如何我找不到将用户输入提交到
  • Zend Framework - 需要从视图访问 GET 参数

    我正在使用 Zend 框架 我需要的是在我的视图中构造一个 url 通常 在常规 php 代码中 我只需使用全局 GET 获取 GET 变量 然而 对于 Zend 我将其设置为清理 URI 如下所示 ac 列表 过滤器 作品 页面 2 好像
  • 用于 Eclipse PDT 的 Zend 框架插件

    我安装了 eclipse PDT IDE 版本 1 2 0 我将它与 Dojo 一起使用来开发非常有趣的 Ajax 应用程序 现在我想在我的 eclipse IDE 中启用 Zend 框架 我怎样才能做到这一点 经过一番谷歌搜索后 我尝试了
  • Woocommerce:添加第二个电子邮件地址不起作用,除非收件人是管理员

    我尝试了多种方法来向 Woocommerce 电子邮件添加其他收件人 但它似乎仅适用于主要收件人是管理员的测试订单 这些是我尝试过的片段 如果订单的客户是管理员 则电子邮件将发送到这两个地址 如果订单包含客户电子邮件地址 则仅发送至该电子邮
  • simplexml_load_file 在 Solr 的 url 中带有 &(与号)

    我正在使用 Solr 并有以下查询 该查询在我的浏览器中运行良好 http www someipaddress com 8983 solr select q fq shopid 40 start 0 rows 18 fq manufactu
  • 如何在 Laravel 中将秒转换为天小时分钟[重复]

    这个问题在这里已经有答案了 我想将以秒为单位的时间间隔转换为天小时分钟 我已经尝试过了 value 90060 CarbonInterval seconds value gt forHumans 我得到了输出 90060 seconds 我
  • 从数组中输入多个数字,每个数字检查是否为整数

    每个人 我希望有人能帮我弄清楚C语言的一些东西 这是我第一次认真地做IT方面的作业 我没有经验 而且我正在电子学习中学习 所以老师的帮助不是很好 我需要用C语言开发控制台应用程序 用户需要输入10个整数 如果插入的数字不是整数 需要输出错误
  • 通过 PHP 将 CSV 导入 MYSQL

    我正在将 CSV 文件导入到我的管理区域 并且我想将文件添加到我的数据库中 我的 PHP 代码import php is
  • PHP while 语句回显重复项

    我是 PHP 新手 我花了几个小时研究并试图找出我做错了什么 我正在连接多个表 以使用交易表中的多个交易填充客户配置文件页面 页面的其余部分按预期处理查询 但是当使用 while 语句时 结果中的每个事务的重复次数等于结果中的事务总数 例如
  • 在 PHP 中,如何检测由于超出 max_input_vars 而导致输入变量被截断?

    我知道一个E WARNING由 PHP 生成 PHP 警告 未知 输入变量超过 1000 https stackoverflow com q 9673895 367456 但我如何在我的脚本中检测到这一点 一个 足够接近 的方法是检查if
  • 两边带有感叹号的正则表达式 ('!\d!')

    我见过正则表达式 d PHP 内部preg match功能 这到底是什么 来自PHP PCRE 文档 http php net manual en regexp reference delimiters php 使用 PCRE 函数时 要求
  • 如何使用 PHP 解释 HTML5 输入日期值

    我需要让用户选择一个日期 最好采用 dd mm yy 格式 我决定尝试新的 HTML5 输入日期类型 但是我不知道如何解释它在服务器端给出的值 我得到的值是 yyyy mm dd 我怎样才能做到这一点 如果用户使用不支持它的旧版浏览器怎么办
  • R 语言与 php 集成以获取 R 的结果

    我有以下 R 脚本 assign data path data path lt C Users Owner Desktop R work assign valus to the following three percent train p
  • 参考指南:这个符号在PHP中是什么意思? (PHP 语法)

    这是什么 这是关于 PHP 语法时不时出现的问题的集合 这也是一个社区 Wiki 因此邀请每个人参与维护此列表 为什么是这样 过去很难找到有关运算符和其他语法标记的问题 主要思想是提供 Stack Overflow 上现有问题的链接 这样我
  • 从路径中删除不必要的斜杠

    path home to my site 我正在尝试删除不必要的正斜杠 从上面的路径 我正在努力得到这个结果 home to my site 我失败了str replace 因为我不知道斜线的数量 优雅的解决方案 With preg rep

随机推荐

  • iOS:如何写入项目中特定目录的文件?

    我正在尝试将我在应用程序中收集的一些字符串输出到文本文件中 文本文件将始终存在于我的项目中 如下所示 我试图用新的 多行 字符串覆盖文件中的所有内容 func writeFile let theFile FileHandle FileHan
  • 使用 javascript 执行器为 selenium webdriver ruby​​ 绑定脚本启用禁用字段

    我正在 Selenium Webdriver 脚本中编写以下 Ruby 代码 以通过 Javascript 执行器启用 UI 上的禁用字段 browser execute script browser find element xpath
  • 三个彼此相邻的 DIV,具有流畅的水平宽度

    我需要知道如何将所有三个 div 与所有不同的背景图像对齐 中间的 div 需要为 989px 左 div 和右 div 的宽度并不重要 简而言之 http jsfiddle net hobobne qyGC5 http jsfiddle
  • 在 Mobile Safari 中保持 WebSocket 处于活动状态

    一旦屏幕锁定 是否可以在 Mobile Safari 中保持 html 5 网页 WebSocket 连接打开 我想向用户发送全天的持续更新 而他们的屏幕必须始终解锁才能接收这些通知 这似乎很愚蠢 还有其他选择吗 我认为当浏览器处于后台或屏
  • Java BufferedReader 返回文本文件的顶部?

    我目前有 2BufferedReaders 在同一文本文件上初始化 当我读完第一个文本文件后BufferedReader 我使用第二个从顶部再次遍历文件 需要多次遍历同一文件 我知道关于reset 但需要先调用mark and mark 需
  • 如何在mongo中插入带有日期的文档?

    我们正在尝试插入一个以当前日期作为字段的文档 我们正在使用 mongodb 的 eclipse 插件用 java 编写 我们想要执行Date mongo 命令从 mongo 获取日期 而不是从 java 获取日期 我怎样才能执行这个 mon
  • 如何将 C 函数移动到单独的文件中?

    我正在开始 C 编程 我目前有一个包含很多函数的大文件 我想将这些函数移至单独的文件中 以便代码更易于阅读 但是 我似乎无法弄清楚如何正确包含 编译 并且在我找到的任何在线教程中都找不到示例 这是一个简化的示例 include
  • CSS 字体未在 IE9 中加载

    我遇到了 font face 字体无法在 IE9 中加载的问题 IE8 及更低版本运行完美 就像我尝试过的所有其他浏览器一样 这是我的 CSS 字体松鼠语法 font face font family ssmicon src url ssm
  • Log4Net - 我可以在 Config 中拥有自定义部分名称吗

    我需要在配置部分使用除 log4net 之外的部分名称 我知道这是我们通常使用的 section type section 但我需要有一个这样的部分 section type section 我正在开发一个 sitecore 网站 它有自己
  • 使用便携式打印机通过蓝牙与 Delphi XE7 连接

    我正在尝试与世宇LK P32通过蓝牙打印机 为此 我正在使用德尔福XE7 我用 Delphi 做了一些例子 但没有成功 我将配对的打印机放在平板电脑上 即使这样我也无法连续打印 当我打印某些内容时 必须重新启动应用程序 以便我可以再次打印某
  • 父目录中的 htaccess 导致“RewriteEngine not allowed here”

    目前 我正在使用 OSX Server Yosemite 托管一堆 PHP 应用程序 其中一些应用程序在网站文档根目录下有一个用于子域的子目录 自从更新到 OSX Server 的 Yosemite 版本以来 这些子域一直抛出 500 错误
  • Python 中的时间戳服务器 rfc3161 响应令牌生成

    我正在尝试使用twisted在python上实现tsa服务器 目前我正在使用 openssl 二进制文件来生成响应 但这对我来说似乎很难看 这就是为什么我试图弄清楚如何使用 m2crypto 制作响应令牌 预先感谢您的帮助 Maris ED
  • Kotlin 中“external”关键字的用途是什么?

    其目的到底是什么externalKotlin 中的关键字 我猜这是 JNI 之类的native在Java中 但我似乎找不到任何关于此的实际参考或文档 事实上 它相当于Java的native 目前文档中缺少它 但有一个issue https
  • 群体内正常化

    假设我们有以下数据集 import pandas as pd data apple red 155 apple green 102 apple iphone 48 tomato red 175 tomato ketchup 96 tomat
  • Ajax 无法与 jquery 一起使用 Flip!插入

    我正在尝试使用 FLIP 插件并通过 ajax 加载其内容 不过我遇到了问题 它只是不起作用 我可以看到 firebug 中发生的 post 事件 但当我在 FLIP 中填充 content 参数时 似乎没有任何变化 插入 下面是我的代码
  • ffmpeg 和 DVB 字幕缩放

    我尝试对视频中的 DVB 字幕进行硬编码 我设法对其进行硬编码 但它仍然错位 原因是字幕的分辨率为标清 720x576 而视频的分辨率为 1920x1080 因此 当我使用叠加时 字幕错位并位于左角 这是我的命令 ffmpeg canvas
  • Chrome 中的边框半径错误?

    我对 chrome 中的边框半径有疑问 这是我的代码 img border radius 24px border 2px solid c7c7c7 moz border radius 24px webkit border radius 24
  • 在Wpf应用程序中实现快捷键

    我是 wpf 应用程序的新手 我正在开发应用程序 我已经创建了一个菜单现在我想在快捷键 ctrl o ctrl n 等上功能菜单项事件 我该怎么做 请详细说明 你可以通过以下方式做到这一点 在 Xaml 文件中
  • 自定义损失问题:急切执行函数的输入不能是 keras 符号张量,但发现

    我使用tensorflow keras自定义损失 使用额外的输入数据来计算损失 的代码如下 inp Input shape inp seq len feature size w Input shape 1 code ommitted def
  • 使用 PHP Gettext 无需安装语言环境

    我一直在寻找国际化开源项目的选项 Gettext 似乎每个人都推荐 显然需要 安装在您的系统上 才能使用语言环境 看到这个note http www php net manual en book gettext php 91187PHP手册