公司老项目需要做国际化功能,麻烦各位大哥说一下具体步骤,百度到的都是.NetCore的,对我这个不太适用。
我了解到,假如需要翻译 “ 用户:XXX于XXX点登陆系统 ”,这种非固定字符串得需要语言资源文件,这方面完全没有接触过,可以教教我吗
刚做完这个,方法可能不太完美,对我来说够用了
1.右键项目-》添加-》创建asp.net文件夹,选app_global开头那个,
2.建好后右键文件夹,新建项,资源文件,命名的话:比如中英文:Gloable.en-US.resx Gloable.resx
3.添加全局过滤器,
public class LocalizationAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext filterContext)
{
var request = filterContext.Request;
var headers = request.Headers;
if (headers.Contains("Accept-Language"))
{
var acceptLanguage = headers.GetValues("Accept-Language").FirstOrDefault();
Thread.CurrentThread.CurrentUICulture =
CultureInfo.CreateSpecificCulture(acceptLanguage);
}
base.OnActionExecuting(filterContext);
}
}
4、在需要做多语言的控制器上面加[LocalizationAttribute]就行了
以下是使用 ASP.NET 的 aspx.cs 代码实现双语的示例:
在 ASP.NET Web 项目中,您可以使用 GetGlobalResourceObject
方法从语言资源文件中获取文本字符串。首先,确保您已经创建了一个语言资源文件(例如:Resources.resx
)并添加了适当的键值对。
创建中文(zh-CN)资源文件的步骤如下:
Resources.zh-CN.resx
的新资源文件。可以通过右键单击项目,选择「添加」-> 「新建项」-> 「资源文件」来创建。Resources.zh-CN.resx
文件中,找到 "Name" 列,输入 "提交" 作为键名,并在 "Value" 列中输入 "提交" 作为中文版本的值。Resources.zh-CN.resx
文件。创建英文(en)资源文件的步骤如下:
Resources.en.resx
的新资源文件。可以通过右键单击项目,选择「添加」-> 「新建项」-> 「资源文件」来创建。Resources.en.resx
文件中,找到 "Name" 列,输入 "提交" 作为键名,并在 "Value" 列中输入 "Commit" 作为英文版本的值。Resources.en.resx
文件。这样,您就创建了两个资源文件,一个是中文(zh-CN)版本,另一个是英文(en)版本,都包含了键为 "提交" 的翻译。
假设您的 aspx 页面包含一个 Label 控件,用于显示登录信息字符串。在 aspx.cs 代码中,在 Page_Load 或其他适当的事件中编写以下代码:
using System;
using System.Globalization;
using System.Resources;
using System.Threading;
public partial class YourPageName : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// 设置当前线程的语言环境(例如:英语 "en", 简体中文 "zh-CN")
string languageCode = "zh-CN";
SetLanguage(languageCode);
// 获取资源文件的 ResourceManager
ResourceManager resourceManager = new ResourceManager(typeof(Resources));
// 获取双语后的字符串
string testMessage = (string)GetGlobalResourceObject("Resources", "提交");
// 将翻译后的登录信息字符串设置到 Label 控件上
lblLoginMessage.Text = testMessage;
}
// 设置当前线程的语言环境
private static void SetLanguage(string languageCode)
{
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(languageCode);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(languageCode);
}
}
请注意,上述代码中的 YourPageName
应替换为您实际的 aspx 页面类名。
当你需要在.NET Framework Web端项目中实现国际化和多语言支持时,你可以通过使用语言资源文件来实现。语言资源文件包含了不同语言的文本翻译,使得你的应用程序可以根据用户的语言环境动态加载正确的文本。下面是实现国际化和多语言的具体步骤:
创建语言资源文件:在项目中添加语言资源文件(.resx)来存储不同语言的文本翻译。对于每种语言,你都可以创建一个独立的资源文件,例如英语(en)、中文(zh-cn)、法语(fr)等。
在Visual Studio中,可以右键单击项目,在"添加"菜单中选择"新建项",然后选择"资源文件"。为每种语言创建一个资源文件,如"Resources.resx"、"Resources.zh-cn.resx"、"Resources.fr.resx"等。
添加资源键值对:在每个语言资源文件中,添加需要翻译的文本,并为其指定一个唯一的键(Key)。例如,你可以添加一个名为"UserLoginMessage"的键,并为每种语言提供相应的翻译值。
访问资源文件:在你的代码中,通过ResourceManager类来访问语言资源文件,根据用户的语言环境获取相应的翻译文本。
csharp
Copy code
using System.Resources;
// 获取当前线程的语言环境(可以根据用户选择或浏览器设置等来确定语言环境)
string currentCulture = System.Threading.Thread.CurrentThread.CurrentCulture.Name;
// 加载对应的资源文件
ResourceManager resourceManager = new ResourceManager("YourProjectNamespace.Resources", typeof(YourController).Assembly);
// 根据键获取对应的翻译文本
string translatedText = resourceManager.GetString("UserLoginMessage", new System.Globalization.CultureInfo(currentCulture));
设置语言环境:你需要在用户登录或根据浏览器设置等情况下,设置当前线程的语言环境,以便正确加载相应的翻译文本。通常,你可以将用户选择的语言存储在用户配置中,或者根据浏览器的Accept-Language头来自动检测用户的语言偏好。
在ASP.NET Web应用程序中,你可以在Global.asax文件的Application_BeginRequest方法中设置语言环境:
csharp
Copy code
protected void Application_BeginRequest(object sender, EventArgs e)
{
// 获取浏览器语言或用户配置的语言,然后设置当前线程的语言环境
string userLanguage = GetUserLanguage(); // 自定义方法,根据需要从用户配置或浏览器头获取语言
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(userLanguage);
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(userLanguage);
}
这样,在你的应用程序中,根据用户的语言环境,translatedText将包含相应的翻译文本,以便正确显示不同语言的内容。
注意:为了实现国际化,你需要在所有用户界面和消息中使用资源文件中的键,而不是硬编码的文本。这样,在不同语言环境下,应用程序会根据对应的翻译文本来显示正确的内容。