我目前正在开发一个ASP.NET核心应用程序,这需要对俄语进行国际化。
我一直在阅读微软为.NET核心国际化提供的文档,这需要在IHtmlLocalizer和IViewLocalizer接口中包装您的字符串。
我最大的问题是为什么?静态资源文件似乎可以像在.net框架中那样允许国际化,那么使用.net核心接口有什么好处呢?
对我来说,.net核心接口看起来非常危险。如果我国际化一个字符串,例如“箔”,该英语单词的含义会根据上下文而变化,并且翻译的单词几乎肯定会因上下文而不同(“包装在箔中”和“充当箔”)。不仅如此,如果代码中出现了对字符串的更改(例如,由于语法更正,“它正在”变成“它的”),那么被翻译的字符串就会“丢失”。
使用新的.NET核心国际化,可以使用Localizer["foil"]将“箔”国际化。使用旧的静态资源方法,您可以将"foil“定义为资源,然后在代码中使用Resources.Foil。这使您可以通过使用不同的资源键来区分不同的含义。我可以用Resources.WrappingFoil和Resources.ActingFoil来区分这两个词。然后,可以将它们分开国际化。
那么,为什么有人会使用新的接口而不是直接使用代码中的资源字符串呢?所有潜在的问题都会随着静态资源文件而消失。
发布于 2019-04-10 04:33:27
我没有使用.Net核心的经验,但我正在开发一个应用程序,我们使用它们的英文挂件作为参考索引来包装可本地化的字符串。这与问题中描述的技术相当接近。
这里的想法是避免使用Localizer["foil"],而是使用更大的短语(如Localizer["wrapped in foil"] )来提供足够的上下文。注意,只有当同一段文本出现在不同含义的多个地方时才需要这样做(至少在我们的例子中,这种情况非常少)。
我们还有一些自动化的测试来检查是否所有可本地化的字符串都有正确的转换。如果有人修改了语法,而忘了修改翻译文件,测试就会显示出来。
对我们来说,这是相当不错的(目前,大约有1000个短语需要翻译),但YMWV。
https://softwareengineering.stackexchange.com/questions/390110
复制相似问题