当前位置: 首页 > 面试题库 >

表格的语言翻译

龚鸿羽
2023-03-14
问题内容

我知道大多数人都使用下面的方法,并为需要翻译的特定表创建翻译表,但这可能会导致大量的表。

CREATE TABLE Product
(
     Product_id
    ,ProductTrans_id -- FK
)

CREATE TABLE ProductTranslation
(
     ProductTrans_id
    ,Product_id
    ,Name
    ,Descr
    ,lang_code
)

以下方法可行吗?假设您有很多表需要翻译超过1列。您能将以下所有翻译都保留在一张表格中吗?我想这张桌子的大小会随着时间的推移而大大增加。

   CREATE TABLE translation_entry (
          translation_id        int,
          language_id           int,
          table_name            nvarchar(200),
          table_column_name     nvarchar(200),
          table_row_id          bigint,
          translated_text       ntext
        )

    CREATE TABLE translation_language (
          id int,
          language_code CHAR(2)
        )

因此,使用第二种方法,您将获得像这样的文本

select 
     product.name 
    ,translation_entry.translated_text
from product
inner join  translation_entry on product.product_id = translation_entry.table_row_id 
and translation_entry.table_name = 'Product' and translation_entry.table_column_name = 'Name'
and language_id = 3

问题答案:

我不确定您为什么担心表的数量:减少表的数量并不能自动意味着您的数据库更小,更高效或设计更好。特别是如果减少表的数量增加了查询的复杂性,我会非常小心。

无论如何,我会为每个“基本”表选择一个转换表。主要原因是您的第二个解决方案不灵活:如果主键不是单个整数,则将很难实现和使用。查询翻译也更加复杂,并且取决于表和数据的大小,可能难以对其进行有效索引

目前尚不清楚为什么要TranslationIDProducts桌子上放东西。通常,这种关系是相反的:

create table dbo.Products (
    ProductCode char(10) not null primary key,
    ProductName nvarchar(50) not null,
    ProductDescription nvarchar(100) not null,
    -- other columns
)

create table dbo.ProductsTranslations (
    ProductCode char(10) not null,
    LanguageCode char(2) not null,
    ProductName nvarchar(50) not null,
    ProductDescription nvarchar(100) not null,
    -- other translations
    constraint FK1 foreign key (ProductCode)
        references dbo.Products (ProductCode),
    constraint FK2 foreign key (LanguageCode)
        references dbo.Languages (LanguageCode),
    constraint PK primary key (ProductCode, LanguageCode)
)

根据您的工具集和部署过程,您可能希望直接从基础数据库生成转换表,并将其作为数据库构建的一部分。您还可以使用视图来提供基本表的方便的,“完全翻译”的版本。

一个有趣的问题是列中使用哪种语言,Products以及在不需要翻译时是否可以直接使用它们。我的建议是,所有生产代码都应传递语言参数,并且仅从ProductsTranslations表中获取文本,即使是英语(或您所使用的内部公司语言)也是如此。这样,您可以确保在同一张表中找到所有“正式”名称,并且基表中的各列用于确保数据模型的清晰性和完整性以及开发人员的便利性和(可能)临时使用的内部名称报告等等。



 类似资料:
  • 名称 参数 默认 formatLoadingMessage - 'Loading, please wait…' formatRecordsPerPage pageNumber '%s records per page' formatShowingRows pageFrom, pageTo, totalRows 'Showing %s to %s of %s rows' formatDetailPa

  • TERM 术语 script 脚本 utility 实用程序 prototype 原型 builtin 内建命令 hard-coded 硬编码 magic number 幻数 generalize 泛化 POSIX 可移植操作系统接口 stdin 标准输入

  • 问题内容: 是否有Python模块可将文本从一种人类语言翻译成另一种语言?我打算使用Python脚本对文本进行前后处理。可以使用其他哪些Python集成方法? 问题答案: 如果您实际上想在两种语言之间翻译文本字符串,例如从英语“ Hello”到西班牙语“ Hola”,则可能需要研究Google Language API 。 由于Google API的免费版本最近被弃用,另一个替代方法是Bing T

  • 我有英文的php gettext默认语言 我想在我的一个控制器,翻译一些词在2个其他语言,并把他们全部在一个数组。 理想情况下我可以 但它并不存在。 是每次更改gettext设置的唯一方法吗? 相关:在Google:i18n之后用gettext看到了它,但没有地方设置的麻烦? 以下是建议的已回答的解决方案: https://github.com/philip15b/php-i18n(似乎是最佳解决

  • 我有一个应用程序可以翻译成10种语言。当然,我们试图保持最新的翻译,但它从来都不是完美的,许多是社区贡献,我们经常发布更新的翻译,只有在不同的水平(在)完整(比如说80%)。 所以翻译缺失是一个现实。默认情况下,当翻译不可用时,返回源语言(英语)。 我有pt_PT、pt_BR和es_ES等的翻译。在那种情况下,我想还是退后为好 从pt_PT到pt_BR到es_ES,然后只有英语; 从pt_BR到p

  • 我得到这个错误: “preferences\u default\u reminder\u labels”未翻译成cs、de、es、fr、it、ja、ko、nl、pl、pt、pt rBR、zh 问题:检查并非所有字符串都被翻译的不完整翻译Id: Missing翻译 但我的应用程序只需要翻译成英语和俄语。如何调整lint以仅检查en、ru翻译?