2008-10-02 14 views
17

Grałem z wbudowanymi funkcjami lokalizacyjnymi .NET i zdają się polegać na umieszczaniu danych w plikach resx.Jak zlokalizować stronę internetową opartą na bazie danych?

Jednak większość systemów nie może na nich polegać, ponieważ są one oparte na bazie danych. Jak rozwiązać ten problem? Czy istnieje wbudowany sposób .NET, czy tworzysz tabelę tłumaczeń w SQL i robisz to ręcznie? A jeśli musisz to zrobić na większości swoich witryn, czy istnieje jakikolwiek powód, aby nawet skorzystać z metody resx lokalizacji?

Przykładem tego jest posiadanie listy FAQ na mojej stronie, przechowuję tę listę w bazie danych, dzięki czemu mogę łatwo dodawać/usuwać więcej, ale umieszczając ją w bazie danych, nie mam dobrego sposobu na przetłumaczenie tego informacje na wiele języków.

Odpowiedz

16

Moim zdaniem lokalizowanie zawartości dynamicznej (np. FAQ) powinno być wykonywane przez użytkownika w bazie danych. W zależności od tego, jak przechowywane są twoje pytania, prawdopodobnie utworzyłbym kolumnę "locale" i użyłbym jej podczas wybierania pytań z FAQ z bazy danych. Nie jestem pewien, czy to by się bardzo dobrze skalowało, gdy zaczniesz lokalizować wiele tabel.

W przypadku treści statycznych (np. Etykiety pól formularzy, tekstu statycznego, ikon itp.) Najprawdopodobniej wystarczy korzystanie z zasobów opartych na plikach. Jeśli jednak naprawdę chciałeś, wygląda na to, że nie byłoby bardzo trudno stworzyć niestandardową implementację dostawcy zasobów, która mogłaby sobie z tym poradzić.

Oto niektóre powiązane linki:

0

Obecnie t ranslacja nie jest czymś, co można zrobić automatycznie. Najlepszym sposobem jest skłonienie osoby do tłumaczenia i używania metod Nicka, aby pokazać właściwy język.

2

Dla danej pozycji w modelu danych, podziel część opisu na zlokalizowaną tabelę z kolumną Identyfikator ustawień lokalnych (LCID).

Więc tabelę dla Produktu nie byłoby w rzeczywistości zawierać opis produktów lub nazwy, ale tylko jego sztywnych wartości (ProductId, EAN, NumberInStock, NextStockData, IsActive, IsPublished) itd

ProductDescription zawiera następnie ProductId, Name, Description, LCID

2

Mieszkam w Kanadzie, więc wielojęzyczność to wielka sprawa. Widziałem dwa podejścia. Pierwszą opcją jest przechowywanie wszystkich zlokalizowanych danych dla określonego rekordu w innej tabeli, połączonych z oryginalną tabelą za pomocą klucza podstawowego i ustawień narodowych. Druga opcja jest podobna do pierwszej, z tą różnicą, że dla każdego locale istnieje inna tabela, z locale jako sufiksem dla nazwy tabeli.

Wariant A

Item (ItemID, ...) 
ItemLocal (ItemID,LocaleID,....) 

Wariant B

Item (ItemID, ...) 
Item_ENUS (ItemID,....) 
Item_ENGB (ItemID,....) 
Item_FR (ItemID,....) 

Trzecia opcja Myślałem ostatnich, co byłoby naprawdę miło, gdyby baza danych obsługiwana jest natywnie będzie przechowywać wartości dla wszystkich mieszkańców w tym samym polu. A jeśli pole zostało ustawione jako varchar-multilocal, musisz uzyskać do niego dostęp, przekazując parametr, aby określić język. Nic takiego nie istnieje, tak jak ja to wiem, ale jest to coś, co myślę, że naprawdę ułatwiłoby to i o wiele bardziej płynne.

+3

FYI: local! = Locale – Tanktalus

Powiązane problemy