1

我一直在寻找类似问题的答案,但这些问题要么相当老,要么没有答案。

背景

我们有几个不同的网站共享相同的代码库,它们是分开托管的。所有网站都是英文的,但它们都有本地化的内容(例如英国、澳大利亚和新西兰)。本地化内容可能包括电子邮件地址、电话号码和不同的公司。

该代码已硬编码以使用本地化控件(例如 lit_PhoneAU、lit_PhoneNZ 和 lit_PhoneUK)分隔内容。有代码可以根据位置配置隐藏和显示这些控件。

问题 编码的内容可以满足我们之前的需要,但它有其局限性并且不可扩展。

我们喜欢混合使用由数据库表填充的资源文件和对象属性。通过数据库调用加载一些常见的东西是相当直接的,但最好使用资源文件之类的东西来存储更具体和文字的东西。

Question 我对C#资源文件的理解是我们可以根据本地化设置如en-AU、en-UK、fr-fr等来切换资源文件。但是,它们不符合我们的目的,因为我们可能在一个位置有多个站点。

有没有办法可以轻松地在资源文件之间切换?还是我误解了资源文件的使用?还是您可以建议任何其他方式来管理文字内容。

更新

我必须说得很清楚。我的问题不在于切换 UiCulture,因为我们已经有代码来处理它。这是关于在同一文化中处理多个资源。例如,我们在英国的两个不同站点有相同的代码库。站点 A 是关于 A 部门的,它可能是 SiteA.co.uk,站点标题为 Company A,然后站点 B 是公司的另一个部门,站点可能是 siteB.co.uk。目前管理内容的效率非常低,因此我们试图将内容移动到资源文件或由数据库调用填充的业务对象中。

4

2 回答 2

0

在请求发生之前,您可以在 Global.asax.cs 中选择您需要的本地化。

protected void Application_AcquireRequestState(object sender, EventArgs e)
{
    //Sets default culture to en-UK
    string culture = "en-UK";

    //Here you can choose the culture as you want.
    //If you don't want to have another culture, you can specify a default of any culture, and .resx files will use it.

    //In this example, I check if the culture is the fr-fr we use it, otherwise use en-UK.
    //Try to get values from Accept lang HTTP header
    if (HttpContext.Current.Request.UserLanguages != null &&
        HttpContext.Current.Request.UserLanguages.Length != 0)
    {
        //Gets accepted list 
        string name = HttpContext.Current.Request.UserLanguages[0];
        if (name.Equals("fr-fr", StringComparison.CurrentCultureIgnoreCase))
            culture = "fr-fr";
    }

    CultureInfo info = CultureInfo.CreateSpecificCulture(culture);
    //Finally setting culture for each request
    Thread.CurrentThread.CurrentUICulture = info;
    Thread.CurrentThread.CurrentCulture = info;
}

然后,您可以使用Thread.CurrentThread.CurrentUICulture从符合文化的数据库中检索数据。

于 2013-04-07T05:59:55.893 回答
0

您可以使用谷歌翻译(免费)到您的网站。它会自动将内容转换为所需的语言。只需浏览文档即可。否则我认为可以使用一些付费翻译..

于 2013-04-07T05:17:05.903 回答