基于本教程,我试图在我的项目中具有国际化能力。我有这些资源文件用于保存不同语言的单词:
resources.resx --> 默认语言 (en-US)
resources.fa.resx --> 波斯语
resources.es.resx --> 西班牙语
文字喜欢fa
并es
显示文化。
在views
我以这种方式将资源文件中的单词替换为相等的单词:
<a href="#" >@Resources.IranNewsStand</a>
编辑:我已经根据教程实现了所有逻辑。但是我对所有语言都有一个视图,在这个视图中我使用的是 resources.resx 。这是一个正确的逻辑吗?
我的问题是我的项目如何知道根据 的值加载哪个资源文件Thread.CurrentThread.CurrentCulture
?我错过了什么?
编辑:我已经实施了这些步骤:
1-我有一个包含三个Class Library Project
提到的Resources
resx 文件的名称(resources.resx、resources.fa.resx、resources.es.resx)。
2-Resource project
作为参考添加到我的 mvc 应用程序中。
3-controllers 继承了这个 Base Controller :
public class BaseController : Controller
{
protected override void ExecuteCore()
{
string cultureName;
HttpCookie cultureCookie = Request.Cookies["_culture"];
if (cultureCookie != null)
cultureName = cultureCookie.Value;
else
cultureName = Request.UserLanguages[0];
cultureName = utilities.CultureHelper.GetValidCulture(cultureName);
Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(cultureName);
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
base.ExecuteCore();
}
}
4-正如我所说,view
我使用resource.resx
了包含默认语言(en-US)字符串的文件中的资源字符串:
<p>@Resources.Resources.Home</p>
5-in view 我有一个链接,当点击它时,这个 jquery 代码运行:
<script type="text/javascript">
$("#btnChangeLanguage").click(function () {
$.cookie("_culture", "fa-IR", { expires: 365, path: '/' });
window.location.reload(); // reload
})
</script>
fa-IR
是用户选择的文化。但点击此链接时,语言不会改变。
编辑:解决方案
我在我的项目中发现了 2 个问题,解决它们后一切正常:
1-jQuery cookie 插件需要让 jquery 代码正确工作:
<script type="text/javascript" src="~/Scripts/jquery.cookie.js" ></script>
2- ExecuteCore 事件BaseController
不会触发,这听起来像是asp.net MVC 4
. 所以基于这个问题我试图覆盖OnActionExecuted
。