C# C语言中的多个资源文件#

C# C语言中的多个资源文件#,c#,localization,embedded-resource,C#,Localization,Embedded Resource,我一直在寻找类似问题的答案,但这些问题要么相当陈旧,要么没有答案 背景 我们有几个不同的网站共享相同的代码库,它们分别托管。所有网站都是英文的,但都有本地化内容(如英国、澳大利亚和新西兰)。本地化内容可能包括电子邮件地址、电话号码和不同的公司 该代码已硬编码为使用本地化控件(如lit_PhoneAU、lit_PhoneNZ和lit_PhoneUK)分隔内容。有一些代码可以根据位置配置隐藏和显示这些控件 问题 编码的内容满足了我们以前的需要,但它有其局限性,不可扩展 我们喜欢混合使用由数据库表填充

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

背景

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

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

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

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

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

有没有办法在资源文件之间轻松切换?或者我误解了资源文件的使用?或者,您是否可以建议其他方法来管理文字内容

更新


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

你可以使用谷歌翻译(免费)到你的网站。它将自动将内容转换为所需的语言。只要看一下文件就行了。否则,我认为有些付费翻译是可用的。

在请求发生之前,您可以在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从符合该区域性的数据库中检索数据。

您可以提供一个调用Google Translater web服务的C代码演示吗?经过一些相当广泛的研究,我想我发现这篇文章与我需要的内容类似。很棒的杰克。Jeremy完成这一步。首先,您将向google注册一个简单的javascript示例,如下所示
函数googleTranslateElementInit(){new google.translate.TranslateElement({pageLanguage:'en',IncludeLanguages:'ar',layout:google.translate.TranslateElement.InlineLayout.simple},'google_translate__element');}
我必须再次澄清。这与资源的位置无关。我们已经有了切换UiCulture的代码,但这不是切换区域性。我已经更新了上面的我的问题,我可以破解它,并在不同的情况下使用不同的文化,但这并不理想,可能会有一些意想不到的结果。因此,先是站点A的en-AU,然后是站点B的fr-fr。经过一些相当广泛的研究,我发现这篇文章非常接近我的需要。它表明有一种创建自定义文化的方法。我还是想听听有没有人有更好的答案