クライアントがデータベースにオブジェクトを作成できるプロジェクトに取り組んでいます。これらの各オブジェクトには、オブジェクトを説明する説明文字列があります。車を表すオブジェクトを見ているとしましょう:
「車」クラスにはさまざまな属性があり、すべてが必須というわけではありません。例えば:
説明文にはこの情報を含める必要があります。例えば。座席数がわかっている場合、この情報は文の一部である必要がありますが、そうでない場合はそうではありません。これを1つの言語だけで行う場合、これはそれほど複雑ではありません。文の構造を分析し、次のように文を作成するだけです。
A [{色}] {車のタイプ} [{ブランド名}製] [{マイル}マイルあり] [{年}から] [{座席}座席あり}
[....]内の部分は、属性({...}内)が設定されている場合、最終文の一部にすぎません。
ただし、このプロジェクトは複数の言語をサポートする必要があり、これを迅速に翻訳する方法が必要です。つまり、「製造元」と他のすべての要素をすべての異なる言語で翻訳し、同じ構造の文を作成することはできません。言語が異なれば、文の構造が大きく異なる場合があります。明らかに、要素の各組み合わせを個別に翻訳することもできますが、組み合わせの数が膨大になる可能性があるため(10以上の属性を持つオブジェクトがあるため)、その努力はすぐに高くなります。
このようなシナリオに対処するための推奨される方法は何ですか?
プロジェクトはRuby on Railsで実装されているため、理想的にはこれをサポートするアプローチを探しています。
ユーザーを苛立たせない/奇妙/不快/混乱させない国際化が必要な場合は、次の2つのいずれかを実行します。ブロック全体を取り出し、コピーを項目ごとに一度に翻訳するか、または説明文の構造を削除します。言語構造の違いを完全に回避できるように、変数属性を含めることを提案します。
これが行われる最も一般的な方法は、自然言語で書かれた一般的な製品の宣伝文であり、これはサポートする任意の言語に翻訳されます。製品クラスによって異なる情報は含まれていないため、いくつかのオプションを含める必要がある場合は、「2ドアまたは4ドアモデルで利用可能...」のように記載されています(ただし、通常は可能な限り避けます)。
次に、属性セクションを基本的にキーと値のペアとして使用するため、次のようになります。
これが非常に人気がある理由は、提案されたプレースホルダーソリューションが言語間で機能しないためです。他の言語のネイティブスピーカーがあなたの壊れた翻訳を理解していないとき、またはそれでもとにかくそれを購入しても構わないと思っているときに驚かれるかもしれませんが、自然言語は難しいので、正しく実行することをお勧めします(テキストの単一のセットブロックを処理する流暢な翻訳者)または問題を回避します(Key-Valueはどこでも自然言語ではありません。製品をスキャンして比較するのが簡単で、Wordレベルの翻訳をはるかに簡単に実行できます。あなたが遭遇する可能性が高い言語の大部分)。
文の構造と文法の微妙さは、確かに国際化の取り組みを困難にする可能性があります。
すべてのケースで使用する必要があるコアプラクティスは次のとおりです。
ブライアンの答え で提案されているように、最も簡単な方法は確かに属性とその値をリストすることです。
不便なのは、データの表示が画面上の多くの場所を消費することです。
もう1つの方法は、属性に名前を付けることさえせずに、さまざまな値を単に連結する分類されたような文字列を作成することです。これは、値が混乱を招かない場合に適しています。
ここでは、別の優れた方法が必要です。すべてのエラーメッセージまたはテキストアセンブリについて、パラメーターの順序をハードコードせずに、名前付きプレースホルダーを含む多言語文字列を使用します。プレースホルダーの順序は、もちろん言語とローカルの使用法に依存します。
English example French example German example
--------------- -------------- --------------
BMW car, red, 62000 miles Berline BMW, rouge, 99000 km BMW Pkw, rot, 99000 km
Dodge pickup-truck, 2010 Pick-up Dodge, 2010 Dodge Pick-up, 2010
Car, 5 seats Berline, 5 sièges Pkw, 5 Sizter
{brand}{type}{miles}{seats} {type}{brand}{miles}{seats} {brand}{type}{miles}{seats}
より複雑ですが、いくつかの利点があります。
完全な文を生成することは、さらに複雑なレベルです。ただし、要件によっては、これは必須機能(契約の生成、音声アシスタントアプリケーションなど)になる場合があります。
したがって、ここでは、正しい順序でプレースホルダーを含む多言語文字列に加えて、高度な文法認識テキストジェネレーターがない限り、以下に対処するために、より多くの語彙を予測する必要があります。
単純な文、またはオブジェクトの自己記述の場合、追加の属性を使用して多言語リソースを管理するだけで十分です。
type: car: -> French: gender=F; (berline, S), (berlines, P)
type: pick-up -> French: gender=M; (pick-up, S), (pick-ups, P)
color: red -> French: (rouge, M, S), (rouge, F, S), (rouges, M, P), (rouges, F, P)
color: blue -> French: (bleu, M, S), (bleue, F, S), (bleus, M, P), (bleues, F, P)
したがって、コンテキストによっては、単数か複数かがわかる場合があります。次に、使用する性別を推定する必要があります(タイプでわかります)。次に、残りの値について、既知の属性の組み合わせを持つWordを選択します。
注意:より洗練された文章を作成したい場合、すぐに非常に複雑になります(たとえば、ドイツ語のような言語では、車の自己記述を文で使用することは非常に難しい場合があります。ドイツ語では、グループの文法機能に応じてすべての単語を微調整する必要がある場合があります。そして、すべての言語には異なるルールがあるかもしれません。次に、NLP翻訳サービスを使用することが考えられます。