【问题标题】:Multiple resource files in C#C#中的多个资源文件
【发布时间】:2013-04-07 05:10:48
【问题描述】:

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

背景

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

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

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

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

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

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

更新

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

【问题讨论】:

标签: c# localization embedded-resource


【解决方案1】:

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

【讨论】:

  • 你能用 C# 代码调用谷歌翻译网络服务吗?
  • 经过一些相当广泛的研究,我认为我发现这篇文章与我需要的内容相似。
  • 伟大的杰克。杰里米通过这个link。首先你会在谷歌注册link一个简单的javascript示例如下所示
  • <div id="google_translate_element" style="float:right;"></div> <script type="text/javascript"> function googleTranslateElementInit() { new google.translate.TranslateElement({pageLanguage: 'en', includedLanguages: 'ar', layout: google.translate.TranslateElement.InlineLayout.SIMPLE}, 'google_translate_element'); } </script> <scripttype="text/javascript" src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>
【解决方案2】:

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

【讨论】:

  • 我必须再次说清楚。这与资源的位置无关。我们已经准备好切换 UiCulture 的代码,但这与切换文化无关。我已经更新了我上面的问题
  • 我本可以破解它并为不同的实例使用不同的文化,但这并不理想,可能会产生一些意想不到的结果。因此,站点 A 使用 en-AU,站点 B 使用 fr-fr。
猜你喜欢
  • 1970-01-01
  • 2012-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多