【问题标题】:How do you use gettext when you have link into the translated text?当您有指向翻译文本的链接时,如何使用 gettext?
【发布时间】:2010-07-29 19:47:35
【问题描述】:

我使用 gettext 翻译我的网站。

翻译文本中的链接会很好,但我不想在 gettext 文件中编写 html 标签,因为这些翻译可能会在其他地方使用。

我可以只为网站创建文本(带有链接)和用于所有目的的文本。
我将不得不维护 2 个版本。 :-(

我也可以编写一个自定义解析器来在文本中插入链接,但这似乎有点矫枉过正,我害怕The Danger of Naïveté

对于那些有同样问题的人,你是如何处理的?

【问题讨论】:

    标签: php multilingual gettext


    【解决方案1】:

    我曾经把链接作为参数。大多数情况下,整个 <a> -tag 是一个参数。像Please see %s this link %s for more information. 第一个 %s 传递链接标记,第二个传递结束 </a> 标记。

    现在,当必须翻译链接文本时,我只使用整个短语作为链接。所以我们只有像“请参阅此链接以获取更多信息”这样的文本,将其翻译并在其周围放置链接标签。管理翻译要容易得多,而且您不会有困惑的翻译,或者需要花时间解释您要做什么。

    【讨论】:

      【解决方案2】:

      老实说,我不会太在意在翻译文件中直接使用一些基本的 HTML(或使用bbCodetextilemarkdown 等)。 URL 似乎是目前唯一的问题,但其他文本标记呢?

      更不用说网址本身可能可能因语言而异。

      我同意翻译文件确实存在问题。

      【讨论】:

        【解决方案3】:

        为了补充所选答案,下面是一个实际示例:

        printf( __( 'Please see %s this link %s for more information.', 'text-domain' ), '<a href="http://yolo.io" title="yolo">', '</a>' );
        

        【讨论】:

          【解决方案4】:

          这里的另一个解决方案:https://zargony.com/2008/01/24/links-in-gettext-translated-strings

          它建议使用{curly brackets} 链接。比如:

          _("Please click {here} or {here}")
          

          然后编写自己的函数linkify,用给定的参数替换大括号中的内容。

          linkify(
              _("Please click {here} or {here}"),
              "</a>",
              "<a href='www.example1.com'>", 
              "<a href='www.example2.com'>"
          )
          

          PHP 中的定义:

          function linkify($string, $closingTag) {
              $arguments = func_get_args();
              return preg_replace_callback(
                  '/{(.*?)}/', // Ungreedy (*?)
                  function($matches) use ($arguments, $closingTag) {
                      static $i = 1; 
                      $i++;
                      return $arguments[$i] . $matches[1] . $closingTag;
                  },
                  $string
              );
          }
          

          PS:您也可以轻松地将 {} 替换为 [],因为我注意到在 POEdit 中,这些大括号会向翻译人员发出警告并建议不要翻译。

          【讨论】:

            猜你喜欢
            • 2016-06-18
            • 2019-03-15
            • 1970-01-01
            • 1970-01-01
            • 2012-06-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多