C# 将插值字符串转换为多种语言

问题描述 投票:0回答:1

我正在考虑将当前的 C# 应用程序转换为英语,以支持多种语言。

该应用程序大量使用插值字符串 - 例如

$"Short Name {header.ShortName} already exists"
。这些字符串需要翻译成其他语言。

有人建议我使用 .resx 文件来保存不同语言的字符串,但不知道它们如何处理插值字符串。有些字符串中有多个变量来组成一个句子,而具有不同词序的语言(例如德语)可能需要在句子中的不同位置使用变量。

任何人都可以建议如何处理这个问题吗?是完全删除内插字符串的唯一选择,还是编写一个可以从 resx 获取其基本模板字符串的替代实现?

c# .net multilingual
1个回答
0
投票

您可以使用.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);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.