C#中的多个资源文件

时间:2013-04-07 05:10:48

标签: c# localization embedded-resource

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

背景

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

代码已硬编码为使用本地化控件分隔内容,例如lit_PhoneAU,lit_PhoneNZ& lit_PhoneUK。有隐藏的代码和根据位置配置显示这些控件。

问题 编码的内容适用于我们之前需要的内容,但它有其局限性且不可扩展。

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

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

我们可以轻松切换资源文件吗?或者我误解了资源文件的使用?或者您是否有其他方式可以建议管理文字内容。

更新

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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 从符合文化的数据库中检索数据。