सबसे पहले, सीमाओं के बारे में बहुत जागरूक रहें। उपयोगकर्ता द्वारा निर्मित सामग्री के लिए, आप समुदाय अनुवाद (अनियमित), मशीन अनुवाद (अविश्वसनीय) या मानव अनुवादकों (महंगे!) का भुगतान कर रहे हैं यदि आप उन सामानों को स्थानीयकृत करना चाहते हैं जो आपके उपयोगकर्ता आपके आवेदन में प्रवेश कर रहे हैं। आप अपने उपयोगकर्ताओं से दो संस्करण प्रदान करने के लिए कह सकते हैं - एक आपकी डिफ़ॉल्ट संस्कृति (अंग्रेजी?) और एक अपनी स्थानीय संस्कृति के लिए, ताकि आप अन्य उपयोगकर्ताओं के लिए फॉल-बैक अनुवाद प्रदान कर सकें?
दूसरा, कुछ बेहद लंबी डेटाबेस माइग्रेशन के लिए तैयार रहें ... यदि आपके पास Excel स्प्रेडशीट में टेक्स्ट के चार कॉलम हैं, तो अचानक आप अपने अनुवाद सिस्टम में प्रत्येक मान डालने, स्थानीयकृत आईडी को पुनर्प्राप्त करने, और फिर उस तालिका में संग्रहीत जो आप वास्तव में आयात कर रहे हैं - और SELECT *
केवल आपको वाक्यांश आईडी देगा, जिसे आपको अपनी अनुवाद तालिकाओं के विरुद्ध स्थानीयकरण करके स्ट्रिंग में वापस हल करने की आवश्यकता है।
उसने कहा - आप एक सामान्य प्रोजेक्ट में डेटाबेस द्वारा संचालित लुकअप टेबल, ड्रॉप-डाउन सूचियों आदि को स्थानांतरित कर सकते हैं। अन्य टिप्पणियों ने पहले ही डेटाबेस में स्ट्रिंगआईड मानों को संग्रहीत करने का उल्लेख किया है जो बाहरी संसाधन फ़ाइलों या स्प्रैडशीट्स का संदर्भ लेते हैं, लेकिन यदि आप डेटा के साथ डेटाबेस में अपने सभी स्थानीय टेक्स्ट को रखने में रुचि रखते हैं, तो आपको यह दृष्टिकोण उपयोगी लगेगा।
हमने वाक्यांश नामक एक तालिका का उपयोग किया है, जिसमें आपके आवेदन में पाठ के प्रत्येक भाग के लिए आईडी और डिफ़ॉल्ट (अंग्रेज़ी) सामग्री शामिल है।
आपका अन्य तालिकाओं अंत इस तरह लग रही:
CREATE TABLE ProductType (
Id int primary key,
NamePhraseId int, -- link to the Phrase containing the name of this product type.
DescriptionPhraseId int
)
एक दूसरी तालिका संस्कृति है, जो आप का समर्थन कर रहे विशिष्ट और तटस्थ संस्कृतियों शामिल बनाएँ। बोनस प्वाइंट्स के लिए, इस तालिका को एक स्व-रेफरेंसियल पेड़ के रूप में कार्यान्वित करें (प्रत्येक संस्कृति रिकॉर्ड में एक निरर्थक पेरेंटकल्चरकोड संदर्भ होता है), ताकि आप विशिष्ट संस्कृतियों (कनाडाई फ्रांसीसी के लिए "एफए-सीए") से तटस्थ संस्कृतियों ("fr" अगर कोई क्षेत्रीय स्थानीयकरण मौजूद है), अपने अपरिवर्तनीय/डिफ़ॉल्ट संस्कृति के लिए (आमतौर पर 'en', क्योंकि यह व्यापक रूप से बोली है)
आपका वास्तविक अनुवाद कि लग रहा है, एक LocalizedPhrase तालिका में हैं जैसे:
CREATE TABLE LocalizedPhrase (
PhraseId int primary key,
CultureCode varchar(8) primary key,
Content nvarchar(255) -- the actual localized content
)
आप कर सकते हैं यदि आप नर/मादा-विशिष्ट स्थानीयकरण प्रदान करना चाहते हैं तो इस मॉडल का विस्तार करें:
CREATE TABLE GenderedLocalizedPhrase (
PhraseId int primary key,
CultureCode varchar(8) primary key,
GenderCode char(1) primary key, -- 'm', 'f' or '?' - links to Gender table
Content nvarchar(255)
)
आप इस संपूर्ण तालिका ग्राफ को स्मृति में कैश करना चाहते हैं और तदनुसार अपनी क्वेरी/रणनीतियां संशोधित करना चाहते हैं - वाक्यांश कक्षाओं के अंदर स्थानीयकरण को कैश करना और वर्तमान थ्रेड संस्कृति का निरीक्षण करने के लिए वाक्यांश ऑब्जेक्ट पर ToString() विधि को ओवरराइड करना एक दृष्टिकोण है। आप कोशिश करते हैं और आपके प्रश्नों के अंदर इस चीजें करते हैं, तो आप एक बड़ा प्रदर्शन लागत का कारण बन जाएगा और हर क्वेरी इस तरह की तलाश में खत्म हो जाएगा:
-- assume @MyCulture contains the culture code ('ca-FR') that we are looking for:
SELECT
Product.Id,
Product.Name,
COALESCE(ProductStatusLocalizedPhrase.Content, ProductStatusPhrase.Content) as ProductStatus,
COALESCE(ProductTypeLocalizedPhrase.Content, ProductTypePhrase.Content) as ProductType,
FROM Product
INNER JOIN ProductStatus ON Product.StatusId = ProductStatus.Id
INNER JOIN Phrase as ProductStatusPhrase ON ProductStatus.NamePhraseId = Phrase.Id
LEFT JOIN LocalizedPhrase as ProductStatusLocalizedPhrase
ON ProductStatus.NamePhraseId = ProductStatusLocalizedPhrase.Id and CultureCode = @MyCulture
INNER JOIN ProductType ON Product.TypeId = ProductType.Id
INNER JOIN Phrase as ProductTypePhrase ON ProductType.NamePhraseId = Phrase.Id
LEFT JOIN LocalizedPhrase as ProductTypeLocalizedPhrase
ON ProductType.NamePhraseId = ProductTypeLocalizedPhrase.Id and CultureCode = @MyCulture