当前位置:编程学习 > C#/ASP.NET >>

网站多语言URL设定SEO实施方案问题

--------------------编程问答-------------------- http://www.soaspx.com/dotnet/asp.net/DPattern/dpattern_20130425_10267.html --------------------编程问答-------------------- --------------------编程问答--------------------
引用 2 楼 wg5945 的回复:
http://www.cnblogs.com/artech/archive/2012/05/04/localization-via-url-routing.html

MVC4中最后web.config要改一下

  <system.webServer>
    <modules>
      <add name="CultureAwareHttpModule" type="MTI.Lunaluna.Provider.Lang.CultureAwareHttpModule"/>
    </modules>
  </system.webServer>


不好意思,忘了说了,我用的asp.net webform,知道这个的解决方案吗? --------------------编程问答-------------------- 目前根据Accept标头的值获取语言,然后用cookies保存UserCulture
==================
这不是多此一举吗? --------------------编程问答--------------------
引用 4 楼 winner2050 的回复:
目前根据Accept标头的值获取语言,然后用cookies保存UserCulture
==================
这不是多此一举吗?

cookies保存后不用每次都重新获取,还是比较符合的吧 --------------------编程问答-------------------- 本来Accept就已经存在语言的标识了,你用它给cookie填充。
如果再用cookie给网站用。

浏览器得带着双份的语言标识给你。 --------------------编程问答--------------------
引用 5 楼 hao_cool 的回复:
Quote: 引用 4 楼 winner2050 的回复:

目前根据Accept标头的值获取语言,然后用cookies保存UserCulture
==================
这不是多此一举吗?

cookies保存后不用每次都重新获取,还是比较符合的吧

你cookie难道不是重新获取的吗? --------------------编程问答--------------------
引用 7 楼 ltcszk 的回复:
Quote: 引用 5 楼 hao_cool 的回复:

Quote: 引用 4 楼 winner2050 的回复:

目前根据Accept标头的值获取语言,然后用cookies保存UserCulture
==================
这不是多此一举吗?

cookies保存后不用每次都重新获取,还是比较符合的吧

你cookie难道不是重新获取的吗?


这个问题好办,重要的现在需要根据url来确定语言,不知有何高见? --------------------编程问答--------------------
引用 6 楼 winner2050 的回复:
本来Accept就已经存在语言的标识了,你用它给cookie填充。
如果再用cookie给网站用。

浏览器得带着双份的语言标识给你。


其实也不是双份标识,如果没有cookie就读取当前浏览器语言设置为UserCulture,且存到cookie,下次有cookie了就直接读cookie了,不管当前浏览器语言是什么。因为如果每次都读浏览器语言我还需要做个循环处理,显然不如直接读cookie好了。

if (Request.Cookies["UserCulture"] != null)
        {
            System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(Request.Cookies["UserCulture"].Value);
            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(Request.Cookies["UserCulture"].Value);
        }
        else
        {
            //如果当前浏览器语言在我拥有的语言中,则使用当前浏览器语言
            string lang = Request.UserLanguages[0].ToString();
            string[] langArr = { "zh-CN","en-US", "de-DE", "es-ES", "fr-FR"};
            bool isHas = false;
            for (int i = 0; i < langArr.Length; i++)
            {
                if (lang == langArr[i])
                {
                    isHas = true;
                    AddCookie("UserCulture", lang);
                    System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(lang);
                    System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(lang);
                    break;
                }
            }
            //否则使用默认语言
            if (isHas == false)
            {
                AddCookie("UserCulture", "en-US");
                System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US");
                System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");
            }
        }
--------------------编程问答--------------------
引用 9 楼 hao_cool 的回复:
Quote: 引用 6 楼 winner2050 的回复:

本来Accept就已经存在语言的标识了,你用它给cookie填充。
如果再用cookie给网站用。

浏览器得带着双份的语言标识给你。


其实也不是双份标识,如果没有cookie就读取当前浏览器语言设置为UserCulture,且存到cookie,下次有cookie了就直接读cookie了,不管当前浏览器语言是什么。因为如果每次都读浏览器语言我还需要做个循环处理,显然不如直接读cookie好了。

if (Request.Cookies["UserCulture"] != null)
        {
            System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(Request.Cookies["UserCulture"].Value);
            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(Request.Cookies["UserCulture"].Value);
        }
        else
        {
            //如果当前浏览器语言在我拥有的语言中,则使用当前浏览器语言
            string lang = Request.UserLanguages[0].ToString();
            string[] langArr = { "zh-CN","en-US", "de-DE", "es-ES", "fr-FR"};
            bool isHas = false;
            for (int i = 0; i < langArr.Length; i++)
            {
                if (lang == langArr[i])
                {
                    isHas = true;
                    AddCookie("UserCulture", lang);
                    System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(lang);
                    System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(lang);
                    break;
                }
            }
            //否则使用默认语言
            if (isHas == false)
            {
                AddCookie("UserCulture", "en-US");
                System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US");
                System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");
            }
        }


存在cookie里每次请求都会在服务器和浏览器间传来传去,你觉得服务器里get一个字段不比这快?
--------------------编程问答--------------------
引用 10 楼 ltcszk 的回复:
Quote: 引用 9 楼 hao_cool 的回复:

Quote: 引用 6 楼 winner2050 的回复:

本来Accept就已经存在语言的标识了,你用它给cookie填充。
如果再用cookie给网站用。

浏览器得带着双份的语言标识给你。


其实也不是双份标识,如果没有cookie就读取当前浏览器语言设置为UserCulture,且存到cookie,下次有cookie了就直接读cookie了,不管当前浏览器语言是什么。因为如果每次都读浏览器语言我还需要做个循环处理,显然不如直接读cookie好了。

if (Request.Cookies["UserCulture"] != null)
        {
            System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(Request.Cookies["UserCulture"].Value);
            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(Request.Cookies["UserCulture"].Value);
        }
        else
        {
            //如果当前浏览器语言在我拥有的语言中,则使用当前浏览器语言
            string lang = Request.UserLanguages[0].ToString();
            string[] langArr = { "zh-CN","en-US", "de-DE", "es-ES", "fr-FR"};
            bool isHas = false;
            for (int i = 0; i < langArr.Length; i++)
            {
                if (lang == langArr[i])
                {
                    isHas = true;
                    AddCookie("UserCulture", lang);
                    System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(lang);
                    System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(lang);
                    break;
                }
            }
            //否则使用默认语言
            if (isHas == false)
            {
                AddCookie("UserCulture", "en-US");
                System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US");
                System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");
            }
        }


存在cookie里每次请求都会在服务器和浏览器间传来传去,你觉得服务器里get一个字段不比这快?

但是获取UserLanguages后还要循环判断,确实不知道哪种效率高。 --------------------编程问答--------------------
引用 11 楼 hao_cool 的回复:
Quote: 引用 10 楼 ltcszk 的回复:

Quote: 引用 9 楼 hao_cool 的回复:

Quote: 引用 6 楼 winner2050 的回复:

本来Accept就已经存在语言的标识了,你用它给cookie填充。
如果再用cookie给网站用。

浏览器得带着双份的语言标识给你。


其实也不是双份标识,如果没有cookie就读取当前浏览器语言设置为UserCulture,且存到cookie,下次有cookie了就直接读cookie了,不管当前浏览器语言是什么。因为如果每次都读浏览器语言我还需要做个循环处理,显然不如直接读cookie好了。

if (Request.Cookies["UserCulture"] != null)
        {
            System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(Request.Cookies["UserCulture"].Value);
            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(Request.Cookies["UserCulture"].Value);
        }
        else
        {
            //如果当前浏览器语言在我拥有的语言中,则使用当前浏览器语言
            string lang = Request.UserLanguages[0].ToString();
            string[] langArr = { "zh-CN","en-US", "de-DE", "es-ES", "fr-FR"};
            bool isHas = false;
            for (int i = 0; i < langArr.Length; i++)
            {
                if (lang == langArr[i])
                {
                    isHas = true;
                    AddCookie("UserCulture", lang);
                    System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(lang);
                    System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(lang);
                    break;
                }
            }
            //否则使用默认语言
            if (isHas == false)
            {
                AddCookie("UserCulture", "en-US");
                System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US");
                System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");
            }
        }


存在cookie里每次请求都会在服务器和浏览器间传来传去,你觉得服务器里get一个字段不比这快?

但是获取UserLanguages后还要循环判断,确实不知道哪种效率高。


langArr.contains(lang) --------------------编程问答--------------------
引用 12 楼 ltcszk 的回复:
Quote: 引用 11 楼 hao_cool 的回复:

Quote: 引用 10 楼 ltcszk 的回复:

Quote: 引用 9 楼 hao_cool 的回复:

Quote: 引用 6 楼 winner2050 的回复:

本来Accept就已经存在语言的标识了,你用它给cookie填充。
如果再用cookie给网站用。

浏览器得带着双份的语言标识给你。


其实也不是双份标识,如果没有cookie就读取当前浏览器语言设置为UserCulture,且存到cookie,下次有cookie了就直接读cookie了,不管当前浏览器语言是什么。因为如果每次都读浏览器语言我还需要做个循环处理,显然不如直接读cookie好了。

if (Request.Cookies["UserCulture"] != null)
        {
            System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(Request.Cookies["UserCulture"].Value);
            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(Request.Cookies["UserCulture"].Value);
        }
        else
        {
            //如果当前浏览器语言在我拥有的语言中,则使用当前浏览器语言
            string lang = Request.UserLanguages[0].ToString();
            string[] langArr = { "zh-CN","en-US", "de-DE", "es-ES", "fr-FR"};
            bool isHas = false;
            for (int i = 0; i < langArr.Length; i++)
            {
                if (lang == langArr[i])
                {
                    isHas = true;
                    AddCookie("UserCulture", lang);
                    System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(lang);
                    System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(lang);
                    break;
                }
            }
            //否则使用默认语言
            if (isHas == false)
            {
                AddCookie("UserCulture", "en-US");
                System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US");
                System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");
            }
        }


存在cookie里每次请求都会在服务器和浏览器间传来传去,你觉得服务器里get一个字段不比这快?

但是获取UserLanguages后还要循环判断,确实不知道哪种效率高。


langArr.contains(lang)

如果用IndexOf貌似比Contains性能更快 --------------------编程问答-------------------- 将你的域名de.domain.com,ru.domain.com等绑定到IIS上,如果语言太多,可以直接留空主机头,这样可以做泛解析绑定,然后判断当前访问的域名再调取不同的语言。 --------------------编程问答--------------------
引用 14 楼 leexiaochong 的回复:
将你的域名de.domain.com,ru.domain.com等绑定到IIS上,如果语言太多,可以直接留空主机头,这样可以做泛解析绑定,然后判断当前访问的域名再调取不同的语言。

现在只能这么去判断,想不出什么好的办法了
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,