首页 新闻 会员 周边 捐助

.Net Framework Web端项目如何做国际化和多语言

0
悬赏园豆:50 [已解决问题] 解决于 2023-11-22 17:56

公司老项目需要做国际化功能,麻烦各位大哥说一下具体步骤,百度到的都是.NetCore的,对我这个不太适用。
我了解到,假如需要翻译 “ 用户:XXX于XXX点登陆系统 ”,这种非固定字符串得需要语言资源文件,这方面完全没有接触过,可以教教我吗

qiu_Perfect的主页 qiu_Perfect | 初学一级 | 园豆:123
提问于:2023-07-27 10:41
< >
分享
最佳答案
0

刚做完这个,方法可能不太完美,对我来说够用了
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]就行了

收获园豆:50
剑剑~ | 初学一级 |园豆:167 | 2023-08-08 16:56
其他回答(3)
0

以下是使用 ASP.NET 的 aspx.cs 代码实现双语的示例:

在 ASP.NET Web 项目中,您可以使用 GetGlobalResourceObject 方法从语言资源文件中获取文本字符串。首先,确保您已经创建了一个语言资源文件(例如:Resources.resx)并添加了适当的键值对。

创建中文(zh-CN)资源文件的步骤如下:

  1. 打开 Visual Studio 或其他适用的 IDE,并导航到您的项目。
  2. 在项目中创建一个名为 Resources.zh-CN.resx 的新资源文件。可以通过右键单击项目,选择「添加」-> 「新建项」-> 「资源文件」来创建。
  3. Resources.zh-CN.resx 文件中,找到 "Name" 列,输入 "提交" 作为键名,并在 "Value" 列中输入 "提交" 作为中文版本的值。
  4. 确保保存并关闭 Resources.zh-CN.resx 文件。

创建英文(en)资源文件的步骤如下:

  1. 打开 Visual Studio 或其他适用的 IDE,并导航到您的项目。
  2. 在项目中创建一个名为 Resources.en.resx 的新资源文件。可以通过右键单击项目,选择「添加」-> 「新建项」-> 「资源文件」来创建。
  3. Resources.en.resx 文件中,找到 "Name" 列,输入 "提交" 作为键名,并在 "Value" 列中输入 "Commit" 作为英文版本的值。
  4. 确保保存并关闭 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 页面类名。

lanedm | 园豆:2396 (老鸟四级) | 2023-07-27 11:18
0
dudu | 园豆:29570 (高人七级) | 2023-07-27 15:33
1

当你需要在.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将包含相应的翻译文本,以便正确显示不同语言的内容。

注意:为了实现国际化,你需要在所有用户界面和消息中使用资源文件中的键,而不是硬编码的文本。这样,在不同语言环境下,应用程序会根据对应的翻译文本来显示正确的内容。

Technologyforgood | 园豆:7775 (大侠五级) | 2023-07-27 21:11
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册