2010-05-03 108 views
5

我想在我的Zend Framework應用程序中本地化一些文本。 還有像一些文本:使用HTML標籤進行本地化

Hello, I'm <a href="test.php" title="Title-Attribute" rel="test">a sample text</a>, greetings to all of you! :)

如果在它沒有HTML,它是簡單的localizate,但是HTML在裏面,我應該怎樣做最好呢?

+0

同一主題討論http://stackoverflow.com/questions/2566432/add-some-html-to-zend-forms/2567764#2567764檢查那裏 – user1400 2010-05-03 14:46:24

回答

4

某些本地化工具(如Virtaal)處理way中的XML(HTML)標記,以便翻譯工作。另一種方法是簡化呈現給本地人的字符串,方法是用字符串格式化變量替換標記,並使格式字符串局部化而不是格式化結果。例如(我猜主要是爲示範起見,不知道PHP非常好):

printf(_("Hello, I'm %sa sample%s, greetings to all of you!"), '<a href="test.php" title="Title-Attribute" rel="test">', "</a>");

在上述聲明中的String航向將看到的是隻包含一個%s格式化變量(因爲它被包裝在_() gettext函數中)。當然,如果他不知道變量將被替換的位置,那麼這對於本地化者來說會有相當混亂的缺點,所以包括適當的本地化評論。

+2

我明白「標題屬性」也必須翻譯。 – Gordon 2010-05-04 07:30:43

+0

在這種情況下,xtofl的答案看起來更好。 Upvoted它。但是,同樣的想法。 :) – Walter 2010-05-04 13:40:26

2

您應該本地化UI中的任何字符串。在這種情況下,您有UI /控件元素的組合。這意味着title屬性的內容必須單獨進行本地化。

在這種情況下,這意味着:

$guilink = "<a href='test.php' " 
      ."title='".gettext("Title-Attribute")."'" 
      ." rel='test'>" 
      .gettext("a sample text") 
      ."</a>"; 

$guistring = sprintf( 
     gettext("Hello, I'm %s, greetings to all of you! :)"), $guilink); 

但是,正如戈登說:不要過於複雜。

1

對於翻譯適配器,翻譯是否包含HTML應該沒有什麼區別。如果使用內聯HTML獲得短字符串,只需將翻譯和HTML一起根據需要放入語言源文件中。當字符串中存在HTML時,您必須確保輸出不會被轉義。


編輯像xtofl在評論中指出,具有語言文件中的HTML是不是最佳的解決方案,因爲翻譯者可能不熟悉處理HTML。雖然有一些事實,我覺得它是可以忽略的。 HTML不是火箭科學,在少數情況下,可能會出現HTML元素,您可以向他們提供備忘單。專業翻譯應該能夠處理這個問題。另一個問題是他們會插入不需要的內容,例如鏈接(如果您正在與社區翻譯人員合作,而不是專業人士)。但是由於您無論如何都沒有提及任何翻譯,我假設您自己正在翻譯,在這種情況下,以上所有內容均爲yagni。沒有必要overcomplicate things

+0

把這個邊緣,你可能有翻譯帶你完整的源代碼並挑出字符串文字......我不喜歡那樣,真的。翻譯人員應該不知道技術細節,以便高效完成工作。 (誰知道html表單輸入中的'name'屬性是否應該被翻譯爲'nom','name','gnorpx'?) – xtofl 2010-05-04 07:16:28

+0

@xtofl對於OP的目的,上述是有效的方法。我們不知道OP是否與翻譯員合作。如果OP有,那麼翻譯者可能會告訴他,他們是否可以處理內聯HTML。如果您認爲這是一個更好的解決方案,請取消刪除您自己的答案。 – Gordon 2010-05-04 07:26:07