我有一个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上包含“语言文件”的文件夹,然后该应用程序将在用户在设置选项卡中选择的语言文件中读取该文件(然后,选定的文件将每次应用程序运行时都可以重新使用)。这样一来,我以后就可以将语言文件部署给用户,而无需重新生成和发送软件的新版本。
有人做过这样的事情吗,我有什么建议可以尝试吗?
答案 0 :(得分:0)
我最终将SQLite数据库用于语言文件,其中包含用于输入编号,标签和语言的列
例如:
|Entry| Tag | English | German |
-----------------------------------
| 0 | hello | Hello | Hallo |
因此,当表单需要英文字符串时,它将向SQLite数据库发送请求:
SELECT English FROM `Strings` WHERE(Tag='hello')
哪个会返回英文列0:“ Hello”。
这样,当需要一种新语言时,可以为每个条目创建一个带有翻译的新列。
该表单还可以请求列名以查看可用的语言。
然后可以为用户已经使用的现有语言文件部署和更改一个语言文件。
当然,如果系统上没有找到语言文件,则表单也需要处理错误。