我正在考虑将当前的 C# 应用程序转换为英语,以支持多种语言。
该应用程序大量使用插值字符串 - 例如
$"Short Name {header.ShortName} already exists"
。这些字符串需要翻译成其他语言。
有人建议我使用 .resx 文件来保存不同语言的字符串,但不知道它们如何处理插值字符串。有些字符串中有多个变量来组成一个句子,而具有不同词序的语言(例如德语)可能需要在句子中的不同位置使用变量。
任何人都可以建议如何处理这个问题吗?是完全删除内插字符串的唯一选择,还是编写一个可以从 resx 获取其基本模板字符串的替代实现?
您可以使用.NET中当前推荐的本地化方式,即
IStringLocalizer
。
IStringLocalizer
概述,以及这里有关如何将其与参数化字符串一起使用的附加信息。
在资源文件中,您可以在不同位置存储带有占位符的字符串,然后为占位符值提供参数。
Resources/Program.en.resx
HelloPerson: Hello, {name}!
Resources/Program.pl.resx
HelloPerson: {name}, witaj!
public class LocalizationExample(IStringLocalizer<LocalizationExample> localizer)
{
public void ShowLocalizedString()
{
var text = localizer["HelloPerson", new { Name = "John" }];
Console.WriteLine(text);
}
}