- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在用两种语言开发一个多语言网站,从阿拉伯语和英语开始
我已经在 IE 和 FireFox 中将语言设置为阿拉伯语 (ar-ae),但它总是给我英语版本,我无法解决这个问题
网站结构
Default.aspx
en/Default.aspx
ar/Default.aspx
问题是当我将 URL 用作 http://localhost:49831/site/Defualt.aspx
然后它工作正常并将我重定向到阿拉伯语版本 ar/Default.aspx
如果选择阿拉伯语作为语言。
但是当使用 URL 作为 http://localhost:49831/site/
时,它总是将我重定向到英文版 en/Default.aspx
我不确定我做错了什么。
我只使用 Default.aspx 来检测默认浏览器语言,然后相应地重定向
Default.aspx.cs 文件的代码
// Localization and Globalization code
protected override void InitializeCulture()
{
String lang = Request["Language"];
Session["lang"] = Helper.DetectLanguage(lang);
//Set Direction of page LTR/RTL
if (Session["lang"] == "ar-AE")
{
Session["PageDIR"] = "rtl";
}
else
{
Session["PageDIR"] = "ltr";
}
base.InitializeCulture();
}
public static String DetectLanguage(String lang)
{
String LangCode = lang;
if (!string.IsNullOrEmpty(lang))
{
lang = lang.ToLower();
}
String Lang2Char;
CultureInfo ci = System.Threading.Thread.CurrentThread.CurrentUICulture;
String LangName = ci.Name.ToString().ToLower();
//check leng & if length is less than 2 then set english as default language.
if (LangName.Length > 1)
{
Lang2Char = LangName.Substring(0, 2);
}
else
{
Lang2Char = "en";
}
// if QueryString is not null then execute foollowinf if block
//If Language is present in Querystring then excute if part else, else part
if (lang != null)
{
switch (lang)
{
case "en-us":
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
LangCode = "en-US";
break;
case "ar-ae":
Thread.CurrentThread.CurrentCulture = new CultureInfo("ar-AE");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("ar-AE");
LangCode = "ar-AE";
break;
default:
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
LangCode = "en-US";
break;
}
}
// if lang query string is null then set the language based on following logic
else
{
switch (Lang2Char)
{
case "en":
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
LangCode = "en-US";
break;
case "ar":
Thread.CurrentThread.CurrentCulture = new CultureInfo("ar-AE");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("ar-AE");
LangCode = "ar-AE";
break;
default:
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
LangCode = "en-US";
break;
}
}
return LangCode;
}
我怎样才能最好地定义此代码以使其工作。在 Global.asx 文件中定义 CurrentUICulture 是否更好
最佳答案
我建议您在处理多语言网站时采取一些不同的方法。一开始您不必使用多个默认页面,您只需要一个。
所以让我解释一下如何做到这一点。
首先,可以在 web.config 中设置默认站点全局化:
<system.web>
<globalization uiCulture="sl-SI" culture="sl-SI" enableClientBasedCulture="false"/>
</system.web>
如果可能,您可以设置 enableClientBasedCulture="true"
以强制客户端站点全局化。否则,将采用默认文化。
接下来,如何在 asp.net 页面中设置全局化(强制,当用户需要时):
internal static void ChangeLanguage(string languageCode, System.Web.UI.Page page)
{
CultureInfo ci = new CultureInfo(languageCode);
page.Session[cLanguageSessionKey] = ci;
//save to user profile is required (just a sample)...
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
Entities.MembershipUserFull user = Services.MembershipUserManager.GetMembershipUserFull(HttpContext.Current.User.Identity.Name);
user.LanguageId = Services.LanguageManager.GetLanguageIdFromLanguageCode(languageCode);
//save profile...
user.SaveProfile();
}
//reload page. New culture will take efect...
page.Response.Redirect(page.Request.Url.AbsoluteUri);
}
这是页面加载:
//set language if required...
if (User.Identity.IsAuthenticated)
{
Entities.MembershipUserFull user = Services.MembershipUserManager.GetMembershipUserFull(HttpContext.Current.User.Identity.Name);
if (user != null && user.LanguageId != null)
{
GP.Solutions.Entities.Language language = Services.LanguageManager.GetLanguage((int)user.LanguageId);
if (Thread.CurrentThread.CurrentUICulture.Name != language.Code)
{
ChangeLanguage(language.Code, this);
}
}
}
最后是如何在 Web 控件上处理多语言支持:
请注意我有两个全局资源(每个支持的语言一个。没有语言代码的是默认资源)
假设我需要在 Label 上显示一些文本:
<asp:Label ID="Label1" runat="server" CssClass="AdvertPreTitle" Text='<% $resources:AppResource,MostPopularService %>'></asp:Label>
请注意,MostPopularService 是根据当前 UI Culture 从特定语言资源中读取的。这是资源文件的片段:
所以最后我只有一个处理所有语言的默认页面。
关于c# - CurrentThread.CurrentUICulture 设置正确但总是 en-US,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13915123/
I have list of languages in array as shown below; I currently have english js file as import and use
我在 IE8 中使用 Google Charts 时无限出现以下错误 SCRIPT70: Permission denied format+en,default+en,ui+en,corechart+
你好, 我正在使用 Windows XP sp2 作为我的开发平台, 我在显示 时遇到问题货币符号 . 你看,对于马来西亚来说,正确的货币符号是 RM , 但是当我使用 uiCulture="ms"c
我最近从一台装有 Windows 10 和 VS 2017 的计算机换成了一台装有 Windows 8.1 和 VS 2017 的计算机。我正在处理一段代码,它有这样一行。 Thread.Curren
自从我绞尽脑汁重写 htaccess 以来已经有一段时间了。我想将所有页面从 example.com/en/XXX 重定向到 example.com/en。我正在执行重定向循环或错误 500。 是否可
我有一个国际化的 C#/WPF 应用程序(某些语言的资源字符串)。 目前我正在为资源文件使用以下代码:default.resx、de-DE、fr-FR、es-ES、pt-BR、pt-PT、nl-NL等
我正在尝试做一些非常简单的事情。 场景如下:我有一个整个网站与支持推送状态的浏览器配合得很好。该网站的工作基础是该语言是“实际页面”,例如: /en/whatever/etc = index.en.
在我对 NLP 的研究中,更具体地说是在 spacy 库中,我对此感到困惑,from spacy.lang.en import English() 和有什么不一样和 spacy.load('en')以
如何用 JavaScript 自动替换浏览器地址栏中的url 来自 company.com/en/services/ 至 company.com/en/#services ? 示例:当
上下文: 我们正在开发一个 iOS 应用程序,其中包含 Math/Maths 这个词。这需要根据设备的语言是英语还是英式英语进行更改。 问题: 所以,我有两个 en-GB 和 en-US 的 Info
这个问题在这里已经有了答案: What's the difference between html[lang="en"] and html:lang(en) in CSS? (6 个答案) 关闭
我从 the PocketSphinx tutorial 中读取了以下代码 config = cmd_ln_init(NULL, ps_args(), TRUE, "-hmm
使用 htaccess mod_rewrite 我想将任何不以 example.com/en 开头的 URL 重写为/en/* 例如 example.com/about-us 到 example.co
我有一个 C# 应用程序,它必须在具有不同文化设置的机器上运行。我认为没问题,它只会在启动时查找机器上当前的文化,并为我做所有事情。好吧,不,它会让人感觉有些不对劲。 我有一台 Windows XP
我通过将每条记录推送到验证阶段,然后将其放入数据库来处理记录。验证步骤之一需要检查某些列是否为日期。我使用 DateTime.TryParse(s, out DateTime) 执行此操作,假设这将使
在开发者机器上(cassini) new DateTime(2012,3,14).ToString("d") 结果 14/03/2012 这是正确的,但是当部署到完整的 IIS 服务器时,结果是 03
为什么第一行代码会抛出“String was not recognizes as a valid DateTime.”异常? en-GB 似乎与 en-US 不兼容,但奇怪的是与 zh-CN 和 ru
之间有什么区别?和 ?破折号后面还有哪些其他值? 根据 w3.org “任何两个字母的子代码都被理解为 [ISO3166] 国家代码。”这是否意味着任何 value listed under th
CSS 语言伪类允许我们为不同的语言指定不同的样式,如下所示: html:lang(en) .foo { ... } 但是,这在 IE7 中不起作用,所以我一直在使用属性选择器: html[lang=
我想知道如果我选择使用 UWP 应用程序的默认语言作为“ en ”而不是“ en-US ”,并仅为“ en ”文化提供本地化资源,而不为“ en-US ”提供本地化资源。 考虑到应用程序中没有太多文本
我是一名优秀的程序员,十分优秀!