2010-05-03 63 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