我使用gettext來翻譯我的網站。如何在鏈接到翻譯文本時使用gettext?
這將是很好的鏈接文本翻譯,但我不想在gettext文件中寫html標籤,因爲這些翻譯可能會在別處使用。
我可以創建僅用於網站(包含鏈接)和文字的文字用於各種目的。
我將不得不維護2個版本。 :-(
我還可以寫一個自定義的解析器在文本中插入鏈接,但它似乎矯枉過正,我affraid的The Danger of Naïveté
對於那些誰有同樣的問題,你是怎麼處理這個問題?
我使用gettext來翻譯我的網站。如何在鏈接到翻譯文本時使用gettext?
這將是很好的鏈接文本翻譯,但我不想在gettext文件中寫html標籤,因爲這些翻譯可能會在別處使用。
我可以創建僅用於網站(包含鏈接)和文字的文字用於各種目的。
我將不得不維護2個版本。 :-(
我還可以寫一個自定義的解析器在文本中插入鏈接,但它似乎矯枉過正,我affraid的The Danger of Naïveté
對於那些誰有同樣的問題,你是怎麼處理這個問題?
我曾經把鏈接作爲參數。大部分時間,整個<a>
-tag是一個參數。像Please see %s this link %s for more information.
第一個%s傳遞了鏈接標記,第二個傳遞了關閉</a>
標記。
現在我只使用整個短語作爲鏈接鏈接文本必須翻譯。因此,我們只有「請參閱此鏈接以獲取更多信息」這樣的文字,將其翻譯並將鏈接標籤放在其中。管理翻譯更容易,而且您沒有困惑的翻譯員,或者需要花時間解釋您正在嘗試做什麼。
爲了補充選擇的答案,這裏是一個實際的例子:
printf(__('Please see %s this link %s for more information.', 'text-domain'), '<a href="http://yolo.io" title="yolo">', '</a>');
另一種解決方案在這裏: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的大括號給予警告,譯者和建議他們不需要翻譯。