3

私はこのトピックが2,3回議論されたことは知っていますが、それらのどれも私のための究極の解決策ではありません。Zend、l18nで多言語データベースをモデル化する方法mysql?

状況 後で多言語コンテンツを保持するリレーショナルmysqlデータベースを設計しています。これはWikipediaまたはMicrosoft Tech Supportページから知ることができます。内容はすべての言語で同じにする必要があります。例:翻訳が見つからない場合、サイトは自動的に翻訳された同じ内容、または情報が利用可能な言語で提供されます。値が設定されていない場合は、2番目またはデフォルトのブラウザ言語にフォールバックするか、 Googleを介して。開発環境はZendです。

私のアイデアはこれまでの課題を解決するためのものである:

二つの主キー:(ID、言語) 利点:データベース抽象化層を介し容易なデータベースアクセス。 問題:外部キー、リレーションシップ、フォールバック

言語の接尾辞付き列: 利点:DBパフォーマンス、リレーショナルの問題なし。 問題:データベース抽象化レイヤでこれを処理できません。

概念自体は実証済みですか、それとも他のものよりも優れていますか?誰かがすでにこのようなものを作り、自分の経験を私と共有することができますか?この状況のた​​めに変更されたZend DBコントローラが存在しますか?どのようにこの情報をフォームにリンクしていますか?

ご協力いただきありがとうございます。

種類について、

マヌエル

+0

私はむしろdoctrine I18n Behaviorを使用したいと思うhttp://www.doctrine-project.org/projects/orm/1.2/docs/manual/behaviors/en#core-behaviors:i18nそして少し時間を節約する:) – tawfekov

答えて

1

第二のオプションは、保守しないであろう(これはマイナス側に添加されるべきです)。実際に別の言語を追加するには、テーブルの抽象レイヤーを変更する必要があります。悪夢のように聞こえる。

最初のオプションははるかに有望ですが、残念ながらそれを動作させるにはたくさんのことがあります。しかし、私の経験から、これはむしろ典型的な解決策なので、私はその車輪を再発明しません。
私が追加しなければならないのは、言語のフォールバックはZend側で行うべきです、データベースはいくらかの情報を見逃します。ある種類の索引表は、内容の一意のIDや使用可能な言語などの情報を保持すると考えるかもしれません。何かを提供する必要があれば、そのような記録を読んで、それを受諾言語と比較し、データベースに(最も適切な言語を使用して)有効な内容を再度尋ねます。唯一の問題は、何らかの形でインデックステーブルを作成する必要があるということです(コンテンツテーブルにコンテンツを挿入するときに表示される最良の方法です)。

多くの作業が問題はあまりありません。

+0

ありがとうございました@Pawel Dydaと@tawfekov! – Manuel

+0

@tawfekov私はドクトリンがパベルが描写していることを正確に行っていると思いますか?情報を共有している場合、これはどのように動作しますか?共有された情報はIDテーブルに格納され、すべての言語に関連するものは参照されるテーブルに向かっていますか?ジョインで検索しますか? doctrineをZendに統合することは可能ですか? doctrineは言語を持つリレーショナルデータベースを処理できますか? 良いチュートリアル/例をご存知ですか? – Manuel

+0

@Manualドクトリンについては、Zendcasts.com http://www.zendcasts.com/category/screencasts/databases/doctrine-databases/を参照してください。また、Jon Lebensoldのビデオポッドキャストもチェックしてください。http://itunes.apple.com/ us/podcast/zend-screencasts-video-tutorials/id300758106 –

0

私は今、まったく同じ問題に取り組んでいます。

どういうわけか、それは同じデータベースにすべてを追加するために私には意味がありません。私は極端に行き、約50の言語をサポートしたいと思うが、これは私のDBを膨らませるだろう。だから、私は主なDBをメイン言語にして、そこにZend_Translateの概念を導入する傾向があります。 Zend_Translateはあなたが探している代替ソリューションを提供するはずです。メインナビゲーションとコアデザインは私のウェブサイトにとって大きな問題ではありませんが、私の最大の関心事は、これらの要素にHTMLが含まれているため、すべてのメインコンテンツをどのように格納するか、どのように翻訳するかです。主な内容については、おそらくいくつかの代替的なアプローチを使用し、各言語用のテーブルを持つ別々のDBを使用します。

+0

は、それを下に解決するという私の考えを掲示しました。このアイデアはどう思いますか? – Manuel

+0

@Manuel私はほとんど同じ点で少し違いがあります。私はTMXを使用し、翻訳があれば、その列の内容(つまり、主要な言語についても)をtmxファイルに移動し、 'tmx'文字列を追加します。だから、あなたのようなすべての列もチェックしますが、$ value === 'tmx'が得られたら、1,2,3言語の決定をZend_Translateに委譲します。 –

+0

しかし、これはあなたが常に主要な言語(おそらく英語)から来て、他の言語に翻訳するよりもむしろ来るということですか?私の入力はm:n言語になります。例:ドイツ語から英語、スペイン語からフランス語。これはおそらく翻訳ファイルではかなり難しいでしょう。私のコアアプリケーションはZend Translでも翻訳されます。 – Manuel

0

私のplattformはコミュニティ主導のデータベースになります。だから私は実際にそれを翻訳する人間に頼るつもりです。とにかく情報を保管しなければならないので、私の最初の関心事はデータベースのサイズやパフォーマンスではなく、使いやすさです。これまでのところ私の考えは、上記のような構造を実装することです。私がdoctrineでそれを行うかどうかはまだ分かりません。

言語の決定: 開始、アプリケーションはユーザーのプリセット言語、第二言語、記事の英語母国語を取得します。データベースから記事を取得するすべての列について次の点を確認します。1.利用できる主な言語は? 2.第二言語は利用可能ですか? 3.それらのどちらでもない場合は、母語または英語で記事を表示し、ユーザーにgoogle translate apiからの提案を翻訳するように指示します。コントローラーのコーティングや操作や、これを行うビジネスモデルの構築にはかなりの時間がかかるでしょう。

@ tawfekovは、これと同様のもの、またはdoctrineと簡単に同じように実現できますか?

関連する問題