gpt4 book ai didi

localization - 使用 gettext 和 .po 文件时组合键和全文

转载 作者:行者123 更新时间:2023-12-02 12:56:45 27 4
gpt4 key购买 nike

我正在看gettext and .po files用于创建多语言应用程序。我的理解是,在 .po 文件中,msgid 是源代码,msgstr 是翻译结果。因此,我看到了两种定义 msgid 的方法:

使用全文(例如“My name is %s.\n”)具有以下优点:

  • 当调用gettext时,你可以清楚地看到即将发生的事情已翻译
  • 翻译 .po 文件更容易,因为它们包含要翻译的实际内容

使用 key (例如my-name %s)具有以下优点:

  • 当源文本较长时(例如有关公司的段落),gettext 调用会更加简洁,从而使您的 View 更加清晰
  • 更容易维护多个 .po 文件和 View ,因为 key 不太可能更改(例如 company-description 的 key 比实际情况更改的可能性要小得多)公司描述)

因此我的问题是:
是否有一种使用 gettext.po 文件的方法,可以结合这两种方法的优点,即:
-gettext 调用中使用按键
- 译者能够看到需要翻译的全文吗?

最佳答案

gettext 旨在将英语文本翻译成其他语言,这就是您应该使用它的方式。请勿将其与 key 一起使用。如果您需要键,请使用其他一些技术,例如关联数组。

我管理过两个大型开源项目(50 种语言,5000 种翻译),一个使用 key 方法,一个使用 gettext 方法 - 而且我永远不会再使用 key 方法。

缺点包括将英文文本的更改传播到其他语言。如果你改变

msg_no_food = "We had no food left, so we had to eat the cats"

msg_no_food = "We had no food left, so we had to eat the cat's"

新文本具有完全不同的含义 - 那么如何确保其他翻译无效并更新?

您提到过长的文本使您的脚本难以阅读。解决方案可能是将它们放在单独的脚本中。例如,将其放入主代码中

print help_message('help_no_food')

并且有一个仅提供帮助消息的脚本:

switch ($help_msg) {
...
case 'help_no_food': return gettext("We had no food left, so we had to eat the cat's");
...
}

gettext 的另一个问题是当您有整页需要翻译时。也许是网站上包含大量嵌入图像的小册子页面。如果您为长文本语言(例如德语)留出大量空间,那么在短文本语言(例如中文)上就会有大量空白。因此,每种语言可能会有不同的图像/布局。

由于这些数量往往很少,因此在 gettext 之外完全实现这些通常更容易。例如

brochure-view.en.php
brochure-view.de.php
brochure-view.zh.php

关于localization - 使用 gettext 和 .po 文件时组合键和全文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15743919/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com