串联字符串和资源值时出现问题

时间:2011-03-14 12:49:58

标签: c# asp.net resources internationalization

我的.aspx页面中有一个奇怪的行为。我正在国际化一些页面,但由于我想在我的资源中只保留实体或值对象,我希望有一个键值,如:

(pt-br)
    CITY - Cidade
    STATE - Estado
    ...

但是当我列出实体时,我想把“:”放在最后。像:

<asp:Label ID="LabelCity" runat="server" Text="<%$ Resources:Localizacao, CITY %>:"></asp:Label>

但是,如果我在text属性中放置资源之后的“:”,页面只显示“:”。

我的简单解决方案是在标签的所有定义之后,但我认为这太错了:

<asp:Label ID="LabelCity" runat="server" Text="<%$ Resources:Localizacao, CITY %>"></asp:Label>:

连连呢?

3 个答案:

答案 0 :(得分:5)

有完全相同的问题,并经过一些搜索改变了这个

<asp:Label ID="label" runat="server" Text="<%$ Resources: Resources, color %>" />:

到此:

<asp:Label ID="label" runat="server">
    <%= Resources.Resources.color + ":"%>
</asp:Label>

答案 1 :(得分:1)

您正确地命名了这个:连接。问题是,连接是最严重的(如高严重性)i18n缺陷之一。 我建议你把完整的字符串(或者在最坏的情况下使用占位符的场景字符串)放到资源文件中,即使你必须复制资源(这些重复的资源可能会以不同的方式转换,具体取决于上下文) )。

让我举个例子:当我在L10n团队时,我们有一个包含多个页面的控制台,每个页面的标题都是“Something Policy ”,即“Firewall 政策“,”防病毒和反间谍软件政策“。有人认为保存一些珍贵的东西并简单地将标题连接起来是个好主意:

String title = Resources.getString("Firewall") + "<b>" + Resources.getString("Policy") + "</b>";

我们遇到的唯一问题是正确的波兰语翻译听起来像“ Polityka zapory ogniowej”,即“政策”首先出现。实际上,我们将其翻译为“Zapora ogniowa Polityka ”,这远远不及正确的翻译(注意“防火墙”的翻译应该是正统的...译者不知道他在翻译什么,因此,它无法修复,因为我们无法对该句子进行重新排序。

修复需要将整个字符串外化,所以实际上原始开发人员的所有良好意图都铺平了地狱。

如果您还在阅读本文,请记住,法语中的所有冒号都必须以空格开头(这只是他们的规则)。重复使用相同的翻译以构建多个句子可能会禁止......

答案 2 :(得分:0)

Expressions<%$)是一个集合语法,如果你想在那里使用表达式,它是全有或全无。您可以执行建议或将代码中的值设置为替代值。

但是,我认为你的角色应该在你的资源文件中。所有语言都会使用相同的字符吗?那对于从右到左的语言是否有效?