So che la maggior parte delle persone utilizza l'approccio seguente e crea una tabella di conversione per la tabella specifica che necessita di traduzioni, ma questo può essere un carico di tabelle.Language Translation for Tables
CREATE TABLE Product
(
Product_id
,ProductTrans_id -- FK
)
CREATE TABLE ProductTranslation
(
ProductTrans_id
,Product_id
,Name
,Descr
,lang_code
)
L'approccio di seguito potrebbe essere valido? Supponiamo che tu abbia molte tabelle in cui è necessario tradurre più di 1 colonna. Potresti fare quanto segue e mantenere tutte le traduzioni in 1 tabella? Suppongo che questo tavolo crescerà enormemente nel tempo.
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)
)
Quindi, utilizzando il secondo metodo si otterrebbe il testo in questo modo
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
Il secondo approccio sembra un sovraccarico e comporterà più recuperi per ottenere colonne tradotte di un singolo prodotto .. Se l'ho capito correttamente ..? +1 come è una buona domanda! –
Immagino che un buon approccio sia quello di considerare come saranno le tue domande .. che imposteranno il design della tabella –
Nel secondo approccio potresti filtrare su TableName e ColumnName e quindi link via table_row_id. Forse query lente. Sto solo pensando a un modo per farlo che non richiede un cambio di schema quando è necessaria una traduzione per una nuova tabella o colonna, ecc. – davey