网站多语言URL设定SEO实施方案问题
--------------------编程问答-------------------- http://www.soaspx.com/dotnet/asp.net/DPattern/dpattern_20130425_10267.html --------------------编程问答-------------------- --------------------编程问答--------------------不好意思,忘了说了,我用的asp.net webform,知道这个的解决方案吗? --------------------编程问答-------------------- 目前根据Accept标头的值获取语言,然后用cookies保存UserCulture
==================
这不是多此一举吗? --------------------编程问答--------------------
cookies保存后不用每次都重新获取,还是比较符合的吧 --------------------编程问答-------------------- 本来Accept就已经存在语言的标识了,你用它给cookie填充。
如果再用cookie给网站用。
浏览器得带着双份的语言标识给你。 --------------------编程问答--------------------
你cookie难道不是重新获取的吗? --------------------编程问答--------------------
目前根据Accept标头的值获取语言,然后用cookies保存UserCulture
==================
这不是多此一举吗?
cookies保存后不用每次都重新获取,还是比较符合的吧
你cookie难道不是重新获取的吗?
这个问题好办,重要的现在需要根据url来确定语言,不知有何高见? --------------------编程问答--------------------
本来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");
}
}
本来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一个字段不比这快?
--------------------编程问答--------------------
本来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后还要循环判断,确实不知道哪种效率高。 --------------------编程问答--------------------
本来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) --------------------编程问答--------------------
本来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上,如果语言太多,可以直接留空主机头,这样可以做泛解析绑定,然后判断当前访问的域名再调取不同的语言。 --------------------编程问答--------------------
将你的域名de.domain.com,ru.domain.com等绑定到IIS上,如果语言太多,可以直接留空主机头,这样可以做泛解析绑定,然后判断当前访问的域名再调取不同的语言。
现在只能这么去判断,想不出什么好的办法了
补充:.NET技术 , ASP.NET