Thứ nhất, hãy nhận thức được những hạn chế. Đối với nội dung do người dùng tạo, bạn đang xem bản dịch cộng đồng (thất thường), dịch máy (không đáng tin cậy) hoặc thanh toán cho người dịch (đắt tiền!) Nếu bạn muốn bản địa hóa nội dung mà người dùng của bạn đang nhập vào ứng dụng của bạn. Bạn có thể muốn yêu cầu người dùng cung cấp hai phiên bản - một cho văn hóa mặc định của bạn (tiếng Anh?) Và một cho văn hóa được bản địa hóa của họ để bạn có thể cung cấp bản dịch ngược cho người dùng khác?
Thứ hai, hãy chuẩn bị cho một số di chuyển cơ sở dữ liệu cực kỳ dài ... nếu bạn có bốn cột văn bản trong bảng tính Excel, đột nhiên bạn đang xử lý việc chèn từng giá trị vào hệ thống dịch, truy xuất ID được bản địa hóa, và sau đó lưu trữ rằng trong bảng bạn đang thực sự nhập - và SELECT *
sẽ chỉ cung cấp cho bạn ID cụm từ mà bạn cần phải giải quyết trở lại thành chuỗi bằng cách bản địa hóa chúng dựa trên bảng dịch của bạn.
Điều đó nói rằng - bạn có thể bản địa hóa rất nhiều bảng tra cứu, danh sách thả xuống, v.v. được điều khiển bởi cơ sở dữ liệu trong một dự án điển hình. Các chú thích khác đã đề cập đến việc lưu trữ các giá trị StringId trong cơ sở dữ liệu tham chiếu đến các tệp hoặc bảng tính tài nguyên bên ngoài, nhưng nếu bạn quan tâm đến việc giữ TẤT CẢ văn bản đã bản địa hóa trong cơ sở dữ liệu cùng với dữ liệu, thì bạn có thể thấy phương pháp này hữu ích.
Chúng tôi đã sử dụng bảng có tên là Cụm từ, có chứa ID và nội dung mặc định (tiếng Anh) cho mọi phần văn bản trong ứng dụng của bạn.
bảng khác của bạn kết thúc lên trông như thế này:
CREATE TABLE ProductType (
Id int primary key,
NamePhraseId int, -- link to the Phrase containing the name of this product type.
DescriptionPhraseId int
)
Tạo Văn hóa bảng thứ hai, trong đó có các nền văn hóa cụ thể và trung tính bạn đang hỗ trợ. Đối với các điểm thưởng, hãy thực hiện bảng này dưới dạng cây tự tham chiếu (mỗi bản ghi Văn hóa chứa tham chiếu ParentCultureCode không có giá trị), vì vậy bạn có thể quay trở lại từ các nền văn hóa cụ thể ("fr-CA" cho tiếng Pháp Canada) sang nền văn hóa trung tính ("fr" nếu không có nội địa hóa trong khu vực tồn tại), với văn hóa bất biến/default của bạn (thường là 'en' bởi vì nó nên sử dụng rộng rãi)
dịch thực tế của bạn đang ở trong một bảng LocalizedPhrase, trông giống như:
CREATE TABLE LocalizedPhrase (
PhraseId int primary key,
CultureCode varchar(8) primary key,
Content nvarchar(255) -- the actual localized content
)
bạn có thể mở rộng mô hình này nếu bạn muốn cung cấp các bản địa hóa cụ thể cho phái nam/nữ:
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)
)
Bạn sẽ muốn lưu toàn bộ biểu đồ bảng này vào bộ nhớ và sửa đổi các truy vấn/kết hợp các chiến lược phù hợp - lưu trữ các bản địa hóa bên trong các lớp Cụm từ và ghi đè phương thức ToString() trên đối tượng Cụm từ để kiểm tra văn bản luồng hiện tại. Nếu bạn cố gắng và làm công cụ này bên trong truy vấn của bạn, bạn sẽ phải chịu một chi phí hiệu suất đáng kể và mọi truy vấn sẽ kết thúc như thế này:
-- 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