我正致力于.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的链接。你怎么看待这件事?也许它可能有用,但我不知道,也许这对我的目的来说太过分了。我在想从哪里开始
答案 0 :(得分:0)
在LedgerSMB中,我们采用了以下方法:
应用程序字符串(以及代码中的字符串)由标准的i18n框架(基本上是GNU gettext)翻译。
商业数据在数据库中获得手动翻译。因此,您可以将翻译添加到部门名称,项目名称,商品和服务描述等。
我们解决问题的方法是加入其他表,所以我们可能会:
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
);
然后我们可以在运行时根据所需的语言进行查询。