代码之家  ›  专栏  ›  技术社区  ›  Brian Laframboise

如何从属性文件中重构HTML标记?

  •  8
  • Brian Laframboise  · 技术社区  · 18 年前

    我最近继承了一个国际化的文本密集型Struts 1.1 web应用程序。许多JSP文件如下所示:

    <p>
        <bean:message key="alert" />
    </p>
    

    属性文件如下所示:

    messages.properties
    alert=Please update your <a href="/address.do">address</a> and <a href="/contact.do">contact information</a>.
    

    具有N种其他语言的适当翻译(消息\u fr.properties等)。

    1. 干犯 -我有N个对Struts操作URL的引用,而不是1个,这使得重构操作URL容易出错。
    2. 复杂的关切 -我的应用程序的标记现在不仅仅存在于我的JSP文件中,这使得web专家很难调整标记(使用CSS等)。
    3. 翻译后标记 -每当我收到新翻译的文本时,我必须决定用什么来围绕它 <a>...</a>

    我考虑过在消息文件中添加占位符,如:

    alert=Please update your {0} and {1}.
    

    我能做些什么来改进这一点?

    4 回复  |  直到 13 年前
        1
  •  2
  •   Linus Caldwell Emperor 2052    13 年前

    避免在长时间内创建链接 文本块。喜欢较短的文本 可以作为逻辑上完整的 和独立链接。

    任何时候,开发人员手动操作翻译后字符串都会导致潜在的昂贵错误。剪切/粘贴或字符串编辑可能导致字符损坏、字符串错位等。翻译缺陷需要外部各方参与修复,这涉及成本和时间。

    想一想,像这样的事情可能不那么难看:

    <p>Please update your address and contact information.
    <br />
    <a href="/address.do">update address</a>
    <br />
    <a href="/contact.do">update contact information</a></p>
    

    …但我不是UI设计师。

        2
  •  1
  •   John Topley    18 年前

        3
  •  0
  •   McDowell rahul gupta    18 年前

    #
    alert=Please update your {0}address{1} and {2}contact information{3}.
    
        4
  •  0
  •   Linus Caldwell Emperor 2052    13 年前

    消息标记API允许 只有5个参数参数

    啊!!我指责我完全不了解Struts API。

    引用 manual :

    也可以在JavaServer中使用 Struts团队鼓励使用 Struts上的标准标记特定于 如果可能,请添加标签。

    你也许可以用 http://java.sun.com/jsp/jstl/fmt

    <fmt:bundle basename="messages">
        <fmt:message key="alert">
            <fmt:param value='<a href="/">' />
            <fmt:param value="</a>" />
            <fmt:param value='<a href="/">' />
            <fmt:param value="</a>" />
        </fmt:message>
    </fmt:bundle>
    

    缺点是这不是有效的XML,将值拖到变量中涉及更多的间接、查找和冗长。这不是一个好的解决方案。

    只要我收到新翻译的 文本,我必须决定包围什么 和 <a>...</a> 加成

    你不应该这样做,我认为这是你翻译过程中的一个错误(我是前本地化工程师和本地化工具的前开发人员)。这个 {0}

    您可以在返回时以编程方式验证属性包。特定于字符串的正则表达式可能会起作用。在翻译过程中,“地址”和“联系信息”交换顺序的可能性并不在范围之外。

    最简单的解决方案是重新设计要呈现的消息:

    <a href="/address.do">Please update your address.</a>
    <a href="/contact.do">Please update your contact information.</a>
    

    推荐文章