制作多语言网站的最佳方法

9
我使用Asp.net和c#建立了一个英文网站。现在,我有一个需求,要将该网站制作成支持多种语言的方式,即(德语、法语)。标签/文本框/字符串所有的值都会显示所选的语言。在搜索时,我知道有一些方法,例如:
  • 使用本地化
  • 使用资源文件。
  • 数据库(所有内容都保存在数据库中,用于不同的语言)。
坦率地说,我不赞成第三种选择。我想知道哪种方式最好,或者是否有更好的方式?
注:当前网站是使用.NET framework 4.0/vs 2010构建的。
谢谢

一种做法是创建完全翻译的网页,只是名称不同,例如AboutPage.en和AboutPage.fr,然后根据选择的语言显示相应语言结尾的页面。 - RhysW
1
一些关于该主题的好链接:https://dev59.com/-XVC5IYBdhLWcg3w21Iq https://dev59.com/RGsz5IYBdhLWcg3wmpFb - Christopher Rathermel
1
请看这个帖子:https://dev59.com/ynRB5IYBdhLWcg3w6bUD - Felipe Oriani
1
阅读此链接:http://www.hanselman.com/blog/GlobalizationInternationalizationAndLocalizationInASPNETMVC3JavaScriptAndJQueryPart1.aspx - animaonline
1
@satindersingh 是的,那听起来很合理,但这真的取决于您项目的细节。例如,如果您必须进行大量图像更改和CSS,则将所有内容放入DB可能是有意义的,即使乍一看似乎有些过度。我还会查看像~CodeBlend提到的第三方工具。 - Christopher Rathermel
显示剩余4条评论
3个回答

7

Resx文件:

http://msdn.microsoft.com/en-us/library/ms227427.aspx

http://dreamdotnet.blogspot.com/2007/01/tutorial-translating-aspnet-web.html

您可以使用Resx文件来支持多种语言,并使用ResXResourceWriter更新它们(如果您希望用户能够更新文件:http://msdn.microsoft.com/en-us/library/system.resources.resxresourcewriter.aspx)。

此解决方案仅适用于静态内容。如果您想要能够从数据库中翻译内容(例如,如果您在数据库中存储产品,并且希望产品描述也支持多语言)。在这种情况下,您需要更改 DB Scheme 以支持多语言内容。

PS:您可以使用GetLocalResourceObject("key")来检索值,而无需使用 Web 控件。

如果您正在使用MVC,请参见以下问题:如何本地化ASP.NET MVC应用程序?


谢谢,我已经通过在App_globalization文件夹下使用三个.resx文件(.En、.De、.Fr)完成了它,并且它的工作非常好。 - Satinder singh

3

我使用资源文件添加global.asax完成了示例代码

 void Application_BeginRequest(Object sender, EventArgs e)
        {
            // Code that runs on application startup
            HttpCookie cookie = HttpContext.Current.Request.Cookies["CultureInfo"];
            if (cookie != null && cookie.Value != null)
            {
                System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(cookie.Value);
                System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(cookie.Value);
            }
            else
            {
                System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en");
                System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en");
            }
        }

它有任何安全问题吗? - Javid

-1

对于动态内容,第三方插件或添加类似Google翻译的东西即可实现;

http://translate.google.com/translate_tools

顺便提一下,Google Chrome内置了自动翻译功能,而且Chrome的受欢迎程度正在迅速增长...哇,想象一下一个无论语言如何都可以访问所有内容的网络,虽然这不是那样的网络,但我想分享一下我的想法。


1
使用第三方控件并不是一个好的选择。由于我正在制作一个产品,因此使用谷歌翻译并不是一个好的选择,因为使用它会改变整个用户界面、弹出窗口等。 - Satinder singh
2
你试过这种自动翻译吗?我保证一个自动翻译的网站不支持多种语言:从英语到法语的结果很糟糕(我熟悉的一个例子),我会感到惊讶如果其他语言的情况不同。自动翻译可以帮助用户理解网站的基本意思,但结果还是相当痛苦的... - Falanwe
这些是基于比我更多的经验而得出的有效观点,但是对于获取动态内容显示的一般想法呢? - Paul C
要了解我在说什么,可以查看Google翻译得出的最著名的法国报纸站点之一 - Falanwe
@Falanwe:是的,它翻译了内容,但看起来很奇怪,也不确定翻译的内容是否完美,甚至影响用户界面。 - Satinder singh
@satindersingh:看起来确实很奇怪。而这正是我的观点 ;) - Falanwe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接