【问题标题】:Implementing language files for c# windows form application为 c# windows 窗体应用程序实现语言文件
【发布时间】:2019-04-18 10:43:02
【问题描述】:

我有一个 Windows 窗体应用程序,它具有显示为文本标签的各种字符串,这些字符串当前是从项目中的 .resx 文件中分配的字符串。我使用资源管理器查看我需要的资源文件:

ResourceManager rm = new ResourceManager("UICS_Client.english_Lang", Assembly.GetExecutingAssembly());

然后在一个函数中,表单上的标签被设置为资源文件中的字符串:

adminTab.Text = rm.GetString("adminTab");

然后如果用户需要应用程序以不同的语言运行,我会切换资源管理器使用的资源文件。

rm = new ResourceManager("UICS_Client.chinese_Lang", Assembly.GetExecutingAssembly());

这很好用,但需要资源文件在构建时位于项目中。我想要做的有一个解决方案,表单应用程序可以扫描用户 PC 上包含“语言文件”的文件夹,然后应用程序读取用户在设置选项卡中选择的语言文件(然后选择的文件将每次应用程序运行时都可以重复使用)。这样我就可以稍后将语言文件部署给用户,而无需重新构建和发送新版本的软件。

有没有人做过类似的事情,有什么建议让我试试吗?

【问题讨论】:

  • 资源文件只能是嵌入资源(不能是外部文件)。恐怕你必须用另一种方法重新实现你的全球化。或者,改为将语言加载为 DLL。见stackoverflow.com/questions/1508570/…

标签: c# winforms resx


【解决方案1】:

我最终为我的语言文件使用了一个 SQLite 数据库,其中包含条目号、标签和语言的列

例如:

|Entry|  Tag  | English | German |
-----------------------------------
|  0  | hello |  Hello  | Hallo  |

因此,当表单需要英文字符串时,它会向 SQLite 数据库发送请求:

SELECT English FROM `Strings` WHERE(Tag='hello')

这将返回列英文条目 0:“Hello”。

这样,当需要一种新语言时,可以为每个条目创建一个带有翻译的新列。

表单还可以请求列名以查看可用的语言。

然后可以为用户已经使用的现有语言文件部署和更改一个语言文件。

当然,如果系统上没有找到语言文件,表单也需要处理错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 2011-06-05
    • 2010-12-31
    • 1970-01-01
    相关资源
    最近更新 更多