当前位置: 首页 > 知识库问答 >
问题:

gettext不翻译每个字符串

颜嘉誉
2023-03-14

我使用PHP Gettext与. mo文件(使用PoEdit)翻译从法语(fr_FR. UTF-8)到英语(en_US. UTF-8),它的工作原理相当好,但不是所有的字符串都翻译!我不是在说UTF-8没有正确翻译的重音,有些整个字符串没有翻译。

我已经从所有PHP文件中提取了要翻译的法语字符串-u(“stringtotranslate”)-感谢shell脚本:

find . -iname "*.php" | xargs xgettext -j --from-code=UTF-8 -o locale/default.pot

违约。pot已生成,所有字符串均正确无误。从那以后。我已经创建了一个默认的pot文件。采购订单文件为英文版。那个po在UTF-8中,我需要它们的PHP文件也在UTF-8中(没有BOM)。

缓存没有问题:我命名。每个修改的mo文件都不同(“默认值”filemtime)。

我能注意到的:

  • 翻译没有utf-8字符的短字符串

我已经根据我的服务器设置了区域设置(Apache1.3.37,PHP4.4.4,--使用gettext)。根据在网站上单击的标志,区域设置是动态的,以下是英文版本:

putenv('LANGUAGE=eng');
setlocale(LC_ALL, 'en_US.UTF-8');
bindtextdomain('default', './locale');
bind_textdomain_codeset('default', 'UTF-8');
textdomain('default');

正如我所说的,一些字符串被正确地翻译成英语,但不是每个字符串。

以下是英文版的网站:http://librairiedescarres.com/2015/en/

这里是一个部分。采购订单文件:

# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: Librairie des Carrés\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-08-03 14:57+0200\n"
"PO-Revision-Date: 2015-08-04 10:08+0200\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: en\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.2\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Poedit-SourceCharset: UTF-8\n"

#: about-us.php:10 about-us.php:31
#, php-format
msgid ""
"Initialement spécialisé dans l'histoire des sciences et des voyages, notre stock est aujourd'hui largement diversifié : "
"%slivres illustrés%s, %shistoire%s, %sagriculture%s, %sjardinage et architecture%s, %smédecine%s, %sbibliophilie%s, "
"%slivres rares et curieux du XVème au XXème siècle%s."
msgstr ""
"Initially specialised in Travel and Science, our stock is now largely diversified and includes literature and "
"%sillustrated books%s, %shistory%s, %sagriculture%s, %sgardens and architecture%s, %smedicine%s, %sbibliophile%s and "
"%srare books from the XVth to the XXth century%s."
(...)

我尝试过许多解决方案,但没有一个有效:

  • 尝试其他区域设置,例如:“en_US”、“en_US.utf8”、“en_US.utf-8”
  • putenv('LANG=fra')、putenv('LC_ALL=fra')
  • 强制对数据进行UTF-8编码。mo文件生成,使用记事本

解决办法吗?Apache、PHP或Gettext是否存在问题?

共有1个答案

程胤运
2023-03-14

我终于找到了答案!感谢那个帖子(法国帖子):解决方案

Gettext在msgstr(或类似的东西)中似乎不支持正确的重音或UTF-8字符。

解决方案是生成。带有“-no hash”选项的mo文件:

msgfmt --no-hash default.po -o default.mo

我想让PoEdit自己做,但是我没有找到这样的设置...

 类似资料:
  • 我试图使用gettext翻译我的PHP项目,但它不起作用。PHP输出gettext字符串名称,而不是实际的翻译。. po文件在POEditor中编译。 设置区域设置: PO文件:(在locale/en/LC_MESSAGES/filename.PO中) 在PHP中回声: 是的,我尝试了从stackoverflow到Google的一切,用了3个多小时。我已经在PHP中安装了gettext,还尝试重新

  • 我是新手。 这是我的设置:/apache2.2php5.3。6窗口7/ 我在Apache/htdocs/test/index中有以下代码。php 我使用PoEdit在locale/de_de/LC_MESSAGES/MESSAGES下生成必要的翻译。po 当我访问,结果是Hello World!当它应该是霍尔贴边! 作为测试,我打开命令提示符并导航到测试文件夹。然后我打了进去 控制台中显示的结果是

  • 我正在考虑从自然gettext msgstr切换到固定的。例如从 到 这是因为当站点上的语言数量不断增加时,文本字符串更新变得越来越麻烦,并且每次连续部署版本的所有翻译都不实用。然而,改用伪造的MSGID将使网站模板和源代码(英语是主要语言)的工作变得繁琐。 金字塔框架和变色龙模板通过允许gettext翻译的默认值,为这个问题提供了一个简洁的解决方案。例如,如果没有可用的和数据(英文)。采购订单文

  • 我正在用Django做一个中文博客。我用中文写所有我能控制的东西,如文章文本,博客标题,博客导航,评论和联系人表单的标签标签。我唯一不能控制的是表单提交错误,如“此字段是必需的。”,“输入有效的电子邮件地址。”。因为我使用django评论框架和表单库来制作我的评论表单和联系人表单,我不知道如何将英文版替换成中文版。 为什么django翻译一些错误消息而忽略其他错误消息? 如果django不能自动翻

  • 我需要将gettext转换添加到我们代码中的所有字符串文字,但它不适用于case语句中的文字。 此失败的尝试给出: 错误是什么意思,如何标记方向进行翻译?

  • 我有一个从xml文档中读取数据的程序。在这个xml文档中,一些属性包含特殊字符,如“\n”、“t”等。 有没有一种简单的方法可以将所有这些字符串替换为实际的字符,或者我必须像下面的例子一样为每个字符手动替换? 手动示例: 编辑: 我正在寻找某种方法来处理字符串,就像这样的转义字符串(尽管我知道这是行不通的)