【问题标题】:Wordpress .po file won't recognize french accentsWordpress .po 文件无法识别法语口音
【发布时间】:2011-11-11 20:52:12
【问题描述】:

我已经为我的 wordpress 主题编写了一个 .po 文件。字符集是 unicode,因为我无法将其定义为“utf-8”,否则它不会在 Poedit(我目前用于对字符串进行编目的程序)中打开。不幸的是,Peoedit(因此它是 .mo 编译)或 __() 和 _e() 的 gettext 处理都不会正确呈现包含重音符号的字符串(法语字符串,因为我的基本语言是法语)。我网站的 .php 文件目前是 utf-8,用于处理法语口音。

.mo 和 web 文件之间的字符集不匹配可能是这里的罪魁祸首吗?如果是这样,我如何在 utf-8 字符集下渲染我的 .po 和 .mo 文件并让它工作?这是我的 .po 文件的标头(包括不起作用的 utf-8 编码):

msgid ""
msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Project-Id-Version: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: \n"
"Last-Translator: Patrick <shock_x_trooper@hotmail.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"

【问题讨论】:

  • 您尝试过更新版本的 Poedit 吗?它会拒绝有效的 UTF-8 并不常见。如果您的 .po 文件不在该字符集中,您还指定了什么? (显示 gettext 初始化代码。)
  • 是的,我运行的是最新版本 1.4.6。也许问题是我无法使用 utf-8 编码运行 Poedit,从而阻止我重新编译 .mo 文件(因为我无法打开它)。有没有一个程序可以单独从 .po 文件编译 .mo 文件?
  • 我发现使用字符集 iso-8859-1 可以与 Poeditor 一起使用,不幸的是,仍然无法使用法语口音。
  • 其他程序:msgfmt - 如果不显示代码,您将无法获得太多帮助。这太模糊了,而且是一个非常本地化的问题。
  • 我不确定你想看什么代码。我认为这更像是我的文件的配置问题而不是实际代码。

标签: php internationalization gettext po mo


【解决方案1】:

除了任何初始化代码细节或实际 .po 或 .mo 文件的 hexdump 之外,唯一值得研究的是 bind_textdomain_codeset。 (也可以setlocale 或在LANG=LC_ALL= 中添加字符集。)

msgfmtphp2po(通过 Pootle)是 Poedit 的替代品,如果您无法使 UTF-8 工作。 (这是你需要做的。)

【讨论】:

  • 因此,似乎通过将所有法语口音替换为其 ASCII 等效项,它不会引发任何 unicode 错误。我认为这是因为 PoEdit 使用 unicode 字符集来编译 .mo 文件,msgfmt 或 php2po 的工作方式可能不同。两者我都看过,但似乎它们不像 PoEdit 那样在界面上被砍掉得多,而且更多的是基于控制台的,这对我来说非常麻烦。我更有可能坚持使用 PoEdit,并在需要时用 ASCII 代码替换重音符号,因为现在翻译的字符串非常静态且很小。
  • 修复您的页面编码。并尝试另一个版本的 Poedit。没有充分的理由不应该使用 UTF-8。
  • 将尝试修复它,但如果 PoEdit 使用 unicode 字符集,则没什么可做的......
【解决方案2】:

您需要按照您所说的定义“Content-Type: text/plain; charset=utf-8\n”, 但您还需要将文件转换为 UTF-8(无 BOM)(notepad++ 会这样做)。

当您在 poedit 中重新打开它时,重音应该显示 OK。 保存并上传到您的 WP 主题文件夹。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多