我想国际化我的 asp.net 应用程序。这该怎么做?我必须遵循哪些步骤?
6 回答
1.) 如果你使用数据库,那么你必须修改你的表。至少添加 LCID 列。
2.) 在 web.config 中设置默认文化和 UI 文化
<system.web>
<globalization culture="cs-CZ" uiCulture="cs-CZ"/>
</system.web>
3.) 然后您可以在例如 BeginRequest 事件的 global.asax 中或在 InitializeCulture 方法中的页面类的基类中设置实际的线程文化
protected override void InitializeCulture()
{
string language = Request["lang"];
if (!string.IsNullOrEmpty(language))
{
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(language);
System.Threading.Thread.CurrentThread.CurrentUICulture = System.Threading.Thread.CurrentThread.CurrentCulture;
}
else
{
base.InitializeCulture();
}
}
- 对于静态文本,您可以使用资源。例如,您创建 Mytexts.resx,在其中为默认语言 (en-us) 编写文本,然后为英国英语创建 Mytexts.en-UK.resx 并覆盖与默认语言不同的文本。然后你可以在你的页面中插入这个字符串:
<asp:Label runat="server" Text='<%$ Resources: Mytests,WelcomeMessage %>' />
这只是从本地化开始的简单步骤,但对于小页面/应用程序就足够了。
您必须探索在 Web 应用程序中使用资源文件的主题。如果您需要基于数据库的本地化支持,您可以尝试来自westwind的优秀免费产品
MSDN 中的本地化和全球化主题是您最好的选择。
能够为您提供确切的步骤是一个相当大的问题,并且有几种不同的方法。
我们在我最近的项目(简化)中采用的方法是:
- 为每个国家/地区设置一个域
- 为每种文化(en-US、de-DE、fr-FR)的所有硬编码字符串(表单标签等)创建一个资源文件
- 根据访问站点的域更改 Thread.CurrentCulture - 这意味着您的所有数字格式、日期格式都将正确并使用正确的本地化资源文件
希望这可以帮助!
只需创建一个继承自 Page 类的基页类,将此方法放在基页类中,并在您的每个 aspx.cs 页面中继承基页类即可实现全球化。
protected override void InitializeCulture()
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
base.InitializeCulture();
}
用这种方法设置你想要的任何文化,比如阿拉伯语的 ar-sa....
请参阅有关创建本地化资源文件的链接:http: //msdn.microsoft.com/en-us/library/ms247246.aspx
基本上,您为要支持的每种语言/文化创建一个新的资源文件。然后,您可以在标记页面和文件背后的代码中按名称访问其中的字符串。
此外,这些资源文件需要位于项目中名为App_GlobalResources的特定文件夹中
全局资源文件必须位于 App_GlobalResources 文件夹中。如果您尝试在此文件夹之外创建 .resx 文件,Visual Web Developer 会提示您在该文件夹中创建它。
这是一个复杂的主题,需要大量工作才能通过系统的所有层来正确处理。
从这里开始。
ASP.NET resx 文件可以让您轻松配置常量字符串,但您的数据库还需要支持 unicode,并且您需要根据您希望支持的语言做不同的事情。
祝你好运,并在遇到具体问题时提出问题。