判斷瀏覽器語系及製作多語系網站
最近有一個專案用到了中文跟英文兩個語系,也讓我第一次接觸到如何寫一個
多語系的網站,下面紀錄一些判斷瀏覽器語系的方法,以及一些心得。
用來判斷瀏覽器語系的方法還真不少,這邊列出三個
Controller
public class HomeController : Controller
{
public ActionResult Index()
{
//Request.UserLanguages返回string陣列
string[] str1 = Request.UserLanguages;
ViewData["UserLanguages"] = str1;
//Request.ServerVariables抓語系的key是HTTP_ACCEPT_LANGUAGE
//返回字串
string str2 = Request.ServerVariables["HTTP_ACCEPT_LANGUAGE"];
ViewData["ServerVariables"] = str2;
return View();
}
}
View
<%var UserLanguages = ViewData["UserLanguages"] as string[]; %>
<h2>用Request.UserLanguages找出來的語系</h2>
<%foreach (var item in UserLanguages)
{ %>
<%=item %><br />
<%} %>
<h2>用Request.UserLanguages找出來的語系</h2>
<%=ViewData["ServerVariables"]%>
<h2>用Js找出來的語系</h2>
<span id="js_language"></span>
<script type="text/javascript">
$(function () {
var lang = window.navigator.userLanguage || window.navigator.language;
$("#js_language").text(lang) ;
});
</script>
用三種不同的方法所查詢到的結果
有了這些,就可以去判別該導向哪個網頁,或是用哪種資源檔。
如果還要讓使用者可以選擇語系的話,通常會把使用者選擇的語系存在cookie裡
Controller
//選擇中文語系
public ActionResult Chinese()
{
HttpCookie cookie = new HttpCookie("lang");
cookie.Value = "ch";
cookie.Expires = DateTime.Now.AddYears(1);
Response.Cookies.Add(cookie);
return RedirectToAction("Index");
}
//選擇英文語系
public ActionResult English()
{
//建一個HttpCookie,名字為lang
HttpCookie cookie = new HttpCookie("lang");
cookie.Value = "en";
//到期時間設為一年
cookie.Expires = DateTime.Now.AddYears(1);
//加入cookie
Response.Cookies.Add(cookie);
return RedirectToAction("Index");
}
View
<h2>Cookie的value</h2>
<%if (Request.Cookies["lang"] != null)
{ %>
<%=Request.Cookies["lang"].Value %>
<%} %>
完成之後
可以看到有抓到cookie的value
另外在瀏覽器的cookie視窗中也可以看到確實有存進這個cookie
所以用這種方法,可以在使用者第一次進入網站時去判斷他有沒有這個cookie
如果有的話,就依照cookie的值去判別他所要的語系
如果沒有的話,就依照瀏覽器的預設語系替使用者新增cookie
過幾天再來寫資源檔要怎麼用~
補充:
Request.ServerVariables有很多key
用Request.ServerVariables.AllKeys把所有key找出來