【问题标题】:C# Class Library LocalizationC# 类库本地化
【发布时间】:2014-06-06 00:01:16
【问题描述】:

我需要快速了解类库中的本地化

我对从用户上下文中提取语言环境不感兴趣,而是将用户存储在数据库中,并且他们的语言环境也在数据库中设置....

我在类库中的函数已经可以从数据库中的用户配置文件中提取语言环境代码...现在我想根据语言环境包含使用 resx...

我需要几个步骤才能正确执行此操作...

是的 - 我已经用谷歌搜索了这个,并进行了一些研究,但是我能找到的所有教程都太复杂了,无法满足我的需求。

【问题讨论】:

  • 我从 MSDN 中发现了一些奇怪的和外星人的 teqniques...使用 AL...当然我可以使用标准的 Visual Studio 来完成这个?

标签: c# localization


【解决方案1】:

不幸的是,这个主题太复杂了。 ;) 我知道,我也做过研究。

为了让你开始,

  1. 在您的程序集中创建一个 Resources 目录。

  2. 从英语开始,然后将“资源文件”(.resx) 添加到该目录。将其命名为“text.resx”。如果找不到本地化资源,应用程序将默认拉出该文件。

  3. 添加您的文本资源。

  4. 添加另一个资源文件。将其命名为“text.es.resx”。注意文件名的“es”部分。在这种情况下,这定义了西班牙语。请注意,每种语言都有自己的字符代码定义。查一下。

  5. 将您的西班牙语资源添加到其中。

现在我们有了可以使用的资源文件,让我们尝试实现。

为了设置文化,从您的数据库记录中提取它。然后执行以下操作:

String culture = "es-MX"; // defines spanish culture
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(culture);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);

这可能发生在已加载程序集的应用程序或程序集初始化本身中。你选。

要利用资源,您只需在程序集中执行以下操作:

public string TestMessage() {
  return Resources.Text.SomeTextValue;
}

达达。资源变得容易。如果您需要更改用户控件或直接在 aspx 页面中执行某些操作,事情可能会变得更复杂一些。如果您需要更多信息,请更新您的问题。

请注意,您可以拥有命名为“text.es-mx.resx”的资源文件,这将特定于墨西哥西班牙语。但是,这并不总是必要的,因为“es-mx”会在回退到默认值之前回退到“es”。只有您知道您的资源需要多么具体。

【讨论】:

  • 到目前为止听起来不错,除了 Resouces.Text.SomeTextValue - 它来自哪里,我需要包含哪些命名空间?
  • 执行CurrentCulture调用,系统会自动判断是使用text.resx还是text.es.resx
  • 如何为不同的用户提供服务,这需要不同的语言?每次我都需要事先更改线程上的文化吗?
  • @Marcel:是的,你可以这样做。
  • 谢谢。这是一个非常简洁直接的答案。 :)
【解决方案2】:

用其中的文化命名您的 resxes(例如 resource_en-GB.resx)并根据文化选择要查询的资源。

【讨论】:

    【解决方案3】:

    为了从代码访问资源文件,您需要打开资源文件,然后将“访问修饰符”下拉菜单更改为“公共”,我的是“无代码生成”。之后,您可以访问:Resources.FileName.ResourceName。

    【讨论】:

    • -1:有趣的事实,但没有回答问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 2010-10-01
    • 2011-12-12
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多