【问题标题】:Internationalization in .NET. Database driven? Resources interactively?.NET 中的国际化。数据库驱动?资源交互?
【发布时间】:2011-04-13 10:49:18
【问题描述】:

我正在研究 .NET (VB.NET) 中的 CMS 的国际化。在管理部分,我们使用了资源,但对于客户,我们需要一个 UI,以便有人可以看到标签并将它们从一种语言翻译成另一种语言。

所以,第一个想法是用三个表来做数据库驱动:

Label     Translation          Language
-----     -----------          --------
id         id                  id
name       keyname_id          name
filename   language_id
           value

然后创建一个用户界面,这样你就可以让客户先选择你要翻译的页面的文件名,标签,然后选择他想要的语言并翻译它,它会存储在翻译表中. 我在这里看到一个问题:如何从页面中获取所有标签?

我还发现了一个可以以交互方式翻译的资源管理器示例。 This is the example。 这个解决方案的好处是你正在使用资源,所以一切看起来都更容易,因为一些工作已经完成。另一方面,这种结构可能更难以实现,我不知道,因为我没有这方面的经验。

那么,您如何看待这两种方法?什么对你更好?也许还有第三种更简单的方法?


编辑:我还发现了这个关于Resource-provider model 的链接。你怎么看待这件事?也许它可能有用,但我不知道,也许它对我的目的来说太多了。我正在考虑从哪里开始

【问题讨论】:

标签: vb.net database-design resources internationalization


【解决方案1】:

在 LedgerSMB 中,我们采用了以下方法:

  1. 应用程序字符串(和代码中的字符串)由标准 i18n 框架(基本上是 GNU gettext)翻译。

  2. 业务数据在数据库中获得人工翻译。因此,您可以为部门名称、项目名称、商品和服务描述等添加翻译。

我们解决你说的问题的方法是加入其他表,所以我们可能有:

CREATE TABLE parts (
   id int primary key.... -- autoincrements but not relevant to this example
   description text,
   ...
);

CREATE TABLE language (
   code varchar(5) primary key, -- like en_US
   name text unique,
);

CREATE TABLE parts_translation (
   parts_id int not null references parts(id),
   language_code varchar(5) not null references language(code),
   translation text
);

然后我们可以在运行时根据所需的语言进行查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-03
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多