У нашої компанії є наявна таблиця перекладу ms-sql, яка зберігає такі рядки:
Id | Key | Language | Value
1 | hello-world | nl-BE | Hallo Wereld
2 | hello-world | en-GB | Hello World
У системі є 3 мови, і я думаю, що в майбутньому це зросте до максимум приблизно 10
Ця таблиця читається декількома дуже різними проектами (близько 60 проектів, переважно веб-сайти / веб-додатки та деякі веб-сервіси), що кожен відкриває підключення до бази даних перекладу, кешує переклади
Зворотній зв'язок із передових розробників полягає в тому, що найбільшим недоліком перекладу є наш інтерфейс UIto або модифікація перекладів - це те, що вони не можуть знати, який проект використовує для яких рядків.
Вони іноді змінюють рядки, не знаючи, що вони порушують 7 проектів.
Тепер вони просто мають набрати щось на кшталт, this.Translate("Hello World")
а система піклується про інше.
Я міг би, звичайно, змусити їх до чогось подібного, this.Translate("Hello World","AwesomeApplication1")
але, схоже, це вимагатиме дуже багато рефакторингу для багатьох багатьох проектів.
Як би ви вирішили запропонувати це рішення? Як би ви як розробник надали перекладу "назву проекту"? Як би ви зберегли це в базі даних?
Важлива примітка: повторне використання перекладу - це вся суть централізованої бази даних, тому розгортаючи переклади до одного проекту, перейшовши
1|hello-world|nl-BE|Hallo Wereld|MyAwesomeApplicatoin1
5|hello-world|nl-BE|Hallo Wereld!|MyAwesomeApplicatoin2
насправді не бажаний варіант.
Я вважаю за краще щось подібне:
1|hello-world|nl-BE|Hallo Wereld|MyAwesomeApplicatoin1,MyAwesomeApplicatoin2
або еквівалент іноземного ключа просто занесення імен до таблиці.
ОНОВЛЕННЯ
На основі поради щодо нормалізації бази даних я поки що придумав щось подібне:
//this allows me to distinquish if translations where added by developer or by translator
UPDATE2: додано edmx замість тексту. Якщо люди зацікавлені, я можу взяти участь в проект WCF, я перекладаю цю концепцію, щоб інші люди могли її перевірити та використати.