W naszej firmie mamy istniejącą tabelę tłumaczeń ms-sql, która przechowuje takie ciągi:
Id | Key | Language | Value
1 | hello-world | nl-BE | Hallo Wereld
2 | hello-world | en-GB | Hello World
System ma 3 języki i spodziewam się, że w przyszłości liczba ta wzrośnie do maksymalnie 10
Ta tabela jest odczytywana przez wiele bardzo różnych projektów (około 60 projektów, głównie stron internetowych / aplikacji internetowych i niektórych usług internetowych), z których każdy otwiera połączenie bazy danych z bazą tłumaczeń, buforuje tłumaczenia
Informacje zwrotne od deweloperów front-end są takie, że nasz interfejs użytkownika wprowadza lub modyfikuje największą wadę tłumaczeń, ponieważ nie mogą wiedzieć, który projekt używa jakich ciągów.
Czasami modyfikują ciągi, nie wiedząc, że zrywają z nim 7 projektów.
Teraz muszą po prostu wpisać coś podobnego, this.Translate("Hello World")
a system zajmie się resztą.
Mógłbym oczywiście zmusić ich do czegoś takiego, this.Translate("Hello World","AwesomeApplication1")
ale wydaje się, że będzie to wymagało sporo refaktoryzacji w wielu projektach.
Jak poszedłbyś na temat zapewnienia tego rozwiązania? W jaki sposób jako twórca podałbyś tłumaczenie nazwy projektu? Jak miałbyś to przechowywać w bazie danych?
Ważna uwaga: ponowne użycie tłumaczenia stanowi cały punkt scentralizowanej bazy danych, dlatego też zakres tłumaczenia jest przenoszony do jednego projektu
1|hello-world|nl-BE|Hallo Wereld|MyAwesomeApplicatoin1
5|hello-world|nl-BE|Hallo Wereld!|MyAwesomeApplicatoin2
nie jest tak naprawdę poszukiwaną opcją.
Wolałbym coś takiego:
1|hello-world|nl-BE|Hallo Wereld|MyAwesomeApplicatoin1,MyAwesomeApplicatoin2
lub klucz obcy równoważny po prostu umieszczeniu nazw w tabeli.
AKTUALIZACJA
Na podstawie porady dotyczącej normalizacji bazy danych do tej pory wymyśliłem coś takiego:
//this allows me to distinquish if translations where added by developer or by translator
UPDATE2: dodano edmx zamiast tekstu. Jeśli ludzie są zainteresowani, mogę zamienić projekt WCF. Pakuję tę koncepcję, aby inni mogli ją przetestować i wykorzystać.