私たちの会社には、次のような文字列を格納する既存の翻訳ms-sqlテーブルがあります。
Id | Key | Language | Value
1 | hello-world | nl-BE | Hallo Wereld
2 | hello-world | en-GB | Hello World
システムには3つの言語があり、将来的には最大で約10言語に増えると思います
このテーブルは、複数の非常に異なるプロジェクト(約60のプロジェクト、主にWebサイト/ Webアプリケーションと一部のWebサービス)によって読み取られ、それぞれが翻訳データベースへのデータベース接続を開き、翻訳をキャッシュします。
フロントエンド開発者からのフィードバックは、翻訳の入力または変更のためのUIのUIの最大の欠点は、どのプロジェクトがどの文字列を使用するかを理解できないことです。
彼らは時々それを使って7つのプロジェクトを壊していることを知らずに文字列を変更します。
これで、ユーザーは次のように入力するだけthis.Translate("Hello World")
で、あとはシステムが処理します。
もちろん、私はそれらを次のようなものに強制することもできますthis.Translate("Hello World","AwesomeApplication1")
が、それは多くの多くのプロジェクトにわたってかなりのリファクタリングを必要とするようです。
このソリューションを提供するにはどうしますか?開発者として、翻訳に「プロジェクト名」をどのように提供しますか?これをデータベースにどのように保存しますか?
重要な注意:翻訳の再利用は一元化されたデータベースの核心なので、次のようにして翻訳を1つのプロジェクトにスコープします
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プロジェクトをgithubすることができます。