多个本地化的aspx布局

时间:2009-04-07 09:45:52

标签: asp.net localization

我想本地化一个应用程序,目前使用App_LocalResource resx文件进行语言更改。但是,我想根据区域设置更改ASPX页面上控件的布局。我知道可以从resx文件设置可见。

例如;我的默认(en-US)可能有

 "firstname" : [textbox]  
"surname"   : [textbox]

作为de-DE,我想要抛出订单

 "surname"   : [textbox]
"firstname" : [textbox]

aspx页面将使用相同的CodeBehind。

我想我正在寻找的东西是有的;

  • 的Default.aspx
  • default.de-DE.aspx
  • default.aspx.cs

default.de-DE.aspx包含与default.aspx相同的所有控件等,甚至具有相同的指令;

 <%@ Page CodeFile="Default.aspx.cs" Inherits="MyNamespace.Default" %>

然后.NET框架选择了这个而不是default.aspx布局..

4 个答案:

答案 0 :(得分:2)

我已经在一个项目上工作了很长一段时间,基本上你要做的事情;我们将它拆分为文件夹是唯一的区别,所以/en-US/Default.aspx和/de-DE/Default.aspx。这些页面共享一个共同的代码隐藏功能。它运作得很好,有一些问题:

  • 确保文件始终一起更新 - 这是必要的,因为共享代码背后。如果您更新后面的代码,所有引用的控件最好存在于页面上。
  • 请注意您的控件引用 - 我们遇到了一些问题,其中控件是从错误的文件夹引用的,导致一些有趣的(有时很难诊断)问题。

就我个人而言,我建议将其拆分为文件夹而不是使用文件命名结构,因为它也非常容易让您提供特定于语言环境的图像和CSS。此外,它允许您通过添加适当的代码来覆盖页面的常见行为(您也可以这样做,但是由于文件名中的句点,您的类名将会很奇怪[例如,ApplicationNS.Default_de_de而不是到ApplicationNS.en_us.Default])。

答案 1 :(得分:1)

在类似情况下,我创建了一个具有可本地化“RenderOrder”属性的自定义服务器控件。它还将Surname和FirstName公开为属性。

有时,详细地址字段也需要类似的方案。

答案 2 :(得分:0)

我应该投票建立一个控件,就像你显示严重依赖本地化的日期和时间一样

答案 3 :(得分:0)

我想说处理这个的最好方法是通过CSS。

您可以轻松应用不同的样式表,这样可以完全更改网站的布局,从而移动所有控件。此解决方案还允许您轻松地为移动浏览器或打印或任何其他原因执行替代渲染,并且非常通用。

正如其他人所述,您显然还会有其他本地化问题,例如翻译或日期/货币格式。但你必须通过其他手段解决这些问题。

以下是同一网站的一些示例,其中100%使用相同的HTML,其中只有CSS已更改,呈现方式完全不同。

http://www.csszengarden.com/?cssfile=/212/212.css&page=0

http://www.csszengarden.com/?cssfile=/211/211.css&page=0

假设您只有两个想要翻转的控件的简单情况:

<div>
<div class=class1>Control1</div>
<div class=class2>Control2</div>

</div>

然后根据位置,在样式表中使用浮点数或绝对定位(在父容器中)来重新定位两个div。 100%相同的html,有两种不同的布局?

ASPX

<link rel="stylesheet" id="Stylesheet1" type="text/css" runat="server" />

ASPX.cs

Stylesheet1.Attributes("href") = ResolveUrl("~\styles\StyleSheet.css")