В нашей компании есть таблица перевода ms-sql, в которой хранятся такие строки:
Id | Key | Language | Value
1 | hello-world | nl-BE | Hallo Wereld
2 | hello-world | en-GB | Hello World
В системе 3 языка, и я ожидаю, что в будущем их число возрастет до 10.
Эта таблица читается несколькими очень разными проектами (около 60 проектов, в основном веб-сайты / веб-приложения и некоторые веб-сервисы), каждый из которых открывает соединение базы данных с базой переводов, кэширует переводы
Обратная связь от разработчиков переднего плана заключается в том, что наш пользовательский интерфейс для ввода или изменения самого большого недостатка переводов заключается в том, что они не могут знать, какой проект использует какие строки.
Иногда они изменяют строки, не зная, что они нарушают 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
ОБНОВЛЕНИЕ2: добавлено edmx вместо текста. Если кому-то интересно, я мог бы заняться проектом WCF, я включаю эту концепцию, чтобы другие люди могли ее протестировать и использовать.