.NET中的国际化。数据库驱动?资源互动?

时间:2011-04-13 10:49:18

标签: vb.net database-design resources internationalization

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

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

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

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

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

那么,您如何看待这两种方法?什么对你更好?也许第三种方法更容易?


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

1 个答案:

答案 0 :(得分:0)

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

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

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

  3. 我们解决问题的方法是加入其他表,所以我们可能会:

    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
    );
    

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