本地化 - LocalText 类

优质
小牛编辑
127浏览
2023-12-01

[命名空间: Serenity, 程序集: Serenity.Core]

字符串本地化的核心是 LocalText 类。

  1. public class LocalText
  2. {
  3. public LocalText(string key);
  4. public string Key { get; }
  5. public override string ToString();
  6. public static implicit operator string(LocalText localText);
  7. public static implicit operator LocalText(string key);
  8. public static string Get(string key);
  9. public static string TryGet(string key);
  10. public const string InvariantLanguageID = "";
  11. public static readonly LocalText Empty;
  12. }

它的构造函数接受一个 key 参数,它定义将要包含的本地化文本键(local text key)。一些键的示例:

  • Enums.Month.January
  • Enums.Month.December
  • Db.Northwind.Customer.CustomerName
  • Dialogs.YesButton

虽然它不是一个规则,但遵循 约定(如,本地化文本键)的命名空间是一个好的主意。

在运行时,通过 ToString() 函数,本地化文本键被翻译为当前语言(即 CultureInfo.CurrentUICulture)的表示形式。

  1. var text = new LocalText("Dialogs.YesButton");
  2. Console.WriteLine(text.ToString());
  1. > Yes

如果本地化文本表(我们将在后面谈论它)中找不到该翻译,则返回 key 自身。

  1. var text = new LocalText("Unknown.Local.Text.Key");
  2. Console.WriteLine(text.ToString());
  1. > Unknown.Local.Text.Key

这是特意设计的,以便开发人员可以查明没有被翻译的文本。

LocalText.Key 属性

获取 LocalText 实例包含的本地化文本键。

从字符串中隐式转换

LocalText 可以从 String 类型隐式转换。

  1. LocalText someText = "Dialogs.YesButton";

这里的 someText 变量得到一个键为 Dialogs.YesButton 的新 LocalText 实例引用。所以它是只是一个 LocalText 构造函数的快捷方式。

隐式转换为字符串

LocalText 也实现了 String 类型的隐式转换,但是它返回翻译而不是键(像调用 ToString 方法)。

  1. var lt = new LocalText("Dialogs.NoButton");
  2. string text = lt;
  3. Console.WriteLine(text);
  1. > No

LocalText.Get 静态方法

若要访问本地化文本键翻译而无须创建一个 LocalText 实例,请使用 Get 方法:

  1. Console.WriteLine(LocalText.Get("Dialogs.YesButton"));
  1. > Yes

ToString() 在 Get 方法内部被调用。

LocalText.TryGet 静态方法

不像 Get 方法在找不到翻译时返回本地化文本键,TryGet 返回 null。因此,合并运算符(coalesce operator)必须与 TryGet 一起使用:

  1. var translation = LocalText.TryGet("Looking.For.This.Key") ?? "Default Text";
  2. Console.WriteLine(translation);
  1. > Default Text

LocalText.Empty 字段

类似于 String.Empty,LocalText 包含一个含空键(empty key)的空本地化文本对象。

LocalText.InvariantLanguageID 常量

这只是固定语言ID (invariant language ID) 的空字符串,它是固定区域语言标识符(通常默认语言为英语)。

我们将在后面的章节谈论语言标识符(language identifiers)。