我的.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>:
连连呢?
答案 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(<%$
)是一个集合语法,如果你想在那里使用表达式,它是全有或全无。您可以执行建议或将代码中的值设置为替代值。
但是,我认为你的角色应该在你的资源文件中。所有语言都会使用相同的字符吗?那对于从右到左的语言是否有效?