【问题标题】:How to make a C# library translatable? [closed]如何使 C# 库可翻译? [关闭]
【发布时间】:2020-11-02 13:29:03
【问题描述】:

我编写了一个(开源)C#/.NET 库,其中包含一些可能会显示给用户的字符串。因此,最好让它们可翻译。

我现在在几家公司工作过,他们总是通过.resx 文件解决这个问题。但是,作为公司,他们 a) 确切地知道他们的应用程序将被翻译成哪些语言,并且 b) 有资源(人力、金钱)来翻译他们的所有字符串。

作为一名开源作者,我既不想将我的图书馆翻译限制为特定的语言集,也没有资源来提供任何翻译。

因此,理想情况下,我只会为我的所有字符串提供英文“翻译”,并且我的库的用户可以通过某种方式将这些字符串翻译成他们想要的语言,而无需对我的库进行任何代码更改。

据我(有限)理解,当使用.resx 文件时,默认语言(英语)直接编译到程序集/dll 中,而其他语言作为附属程序集提供。因此,理论上,我的图书馆的用户可以自己提供所需语言的附属程序集。

这是否适用于开源库(如果是,如何)?或者还有其他更好的(推荐的)方法来处理这个问题吗?

(理想情况下,该解决方案应与 .NET Core 一起使用。)

【问题讨论】:

标签: c# .net .net-core internationalization


【解决方案1】:

我想,让您图书馆的用户提供翻译并不少见或不合理。在工作中,我们对商业图书馆做同样的事情,我们也没有资源来提供开箱即用的所有语言。

翻译仍然适用于附属程序集,唯一复杂的部分是正确获取资源名称(如果您未在项目文件中提供自定义名称,它们使用项目的默认命名空间 + 任何文件夹),以便它们在运行时被正确拾取。

【讨论】:

  • 您能否分享有关您如何准确地创建这些附属程序集(例如工具......)的任何细节?
  • @SebastianKrysmanski:这只是一个包含资源的普通项目。使它们成为附属程序集的唯一原因是它们的名称和位置,它们通常不包含代码,因为它们仅用于加载资源。
【解决方案2】:

您可以使用 JSON 来解决您的翻译问题

Slay the Spire是一款非常有趣的胭脂式套牌建造游戏 并将游戏翻译成各种语言,他们带着指南和文件(基本上是 JSON 文件)来到社区。​​p>

当然,我不知道他们是如何做到这一点的来龙去脉的,但似乎你可以在你的图书馆中使用同样的东西 您可以在程序启动之前检查计算机本地语言(或任何其他方式)以获取用户主要语言并拉取(如果存在)正确的 JSON 文件

TRANSLATOR_README

example for french translation

【讨论】:

  • 在 .NET 世界中,最好保持平台为您提供的方式,即具有资源的附属程序集。请注意,资源可能包含比字符串和任意 JSON 更多的东西,该空间中没有其他工具本机理解这些内容可能不是一个好的解决方案,原因有很多。 特别是对于一个图书馆,没有人愿意为与其他所有地方不同的本地化作品做出让步。
猜你喜欢
  • 2023-03-06
  • 2016-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-10
  • 2014-01-15
  • 2012-09-24
  • 1970-01-01
相关资源
最近更新 更多