2010-07-29 35 views
5

我使用gettext來翻譯我的網站。如何在鏈接到翻譯文本時使用gettext?

這將是很好的鏈接文本翻譯,但我不想在gettext文件中寫html標籤,因爲這些翻譯可能會在別處使用。

我可以創建僅用於網站(包含鏈接)和文字的文字用於各種目的。
我將不得不維護2個版本。 :-(

我還可以寫一個自定義的解析器在文本中插入鏈接,但它似乎矯枉過正,我affraid的The Danger of Naïveté

對於那些誰有同樣的問題,你是怎麼處理這個問題?

回答

3

我曾經把鏈接作爲參數。大部分時間,整個<a> -tag是一個參數。像Please see %s this link %s for more information.第一個%s傳遞了鏈接標記,第二個傳遞了關閉</a>標記。

現在我只使用整個短語作爲鏈接鏈接文本必須翻譯。因此,我們只有「請參閱此鏈接以獲取更多信息」這樣的文字,將其翻譯並將鏈接標籤放在其中。管理翻譯更容易,而且您沒有困惑的翻譯員,或者需要花時間解釋您正在嘗試做什麼。

1

我真的不會太在意使用一些基本的HTML(或使用bbCode,textile,markdown等)直接到您的翻譯文件。URL的似乎是唯一的問題,但其他文字標記呢? ?

更不用說URL自己可能可能取決於語言會有所不同。

我同意翻譯文件確實有他們的問題。

1

爲了補充選擇的答案,這裏是一個實際的例子:

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

另一種解決方案在這裏: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的大括號給予警告,譯者和建議他們不需要翻譯。