String.Formatの適切な記事(a / an)
-
05-07-2019 - |
質問
適切な記事(a / an)を使用しながら、文に名詞を適切に挿入する文化的に敏感な方法を探しています。これを行う適切な方法が他の場所にある場合は、String.Format、またはおそらく他の何かを使用できます。
例:
基本文:"あなたは/ {0}を見ています"
これは次のようにフォーマットする必要があります:" You are looking at carrot"または「卵を見ています」
現在、挿入する単語の最初の文字を手動でチェックしてから、「a」を手動で挿入してこれを行っています。または&an;"しかし、アプリケーションが他の言語にローカライズされている場合、これにより制限される可能性があることを心配しています。
この問題に取り組むためのベストプラクティスはありますか?
解決策:この問題は、私が最初に述べた方法でこの問題を解決するためのユーティリティやフレームワークが存在しないほど複雑になっているようです。 (私の状況では)最良の解決策は、翻訳者が必要なレベルの制御を行えるように、名詞とともにデータベースに記事を保存することです。すべての提案をありがとう!
解決
lc(1時間、帽子)で指摘された問題に加えて、異なる言語の文法規則は大きく異なります。たとえば、多くのラテン語ベースの言語は、名詞の「性別」と「数」に基づいて名詞の記事を切り替えます。これは、単語の最後の数文字から推測されることもありますが、英語と同じ問題があります...多くの例外。
インターフェイスのローカライズについて話している場合は、各言語のインターフェイス要素の名詞とともに記事を保存します。ユーザー入力を処理している場合、これを行う簡単な方法はありません。
他のヒント
問題は英語でもあり、a-vs-anは開始文字ではなく、開始音によって決定されます。開始文字に基づいて英語でかなり良い仮定を立てることができますが、いくつかの例外があります(例:「時間」、「ユーザー」)。
最善の方法は、単語の発音にアクセスして選択できるようにすることです。
それを除いて、次に行うべき最も良いことは、一般的な例外のリストを用意して、残りを推測することです。
Wikipedia から:
「a」の選択または" an"は むしろ音声規則によって決定されます スペル規則よりも。 " An"は 削除するためにスピーチで採用 ぎこちない声門停止(瞬間的なサイレント 一時停止)それ以外の場合は必要 「a」の間および次の単語 「X線」 ... 以下 段落は、「an」のスペルルールです。 音声規則の場合に使用できます 理解されていません。
古いテキストアドベンチャーコンピューターゲームの時代、これを解決する1つの方法は「a」、「an」、「the」を作成します。 etcの実際の名前の一部。これらのゲームで「メールボックス」が表示される場合、「a」を判断するスマートAIはありません。オブジェクトの名前は「メールボックス」です。いくつかのゲームでは「メールボックスを開く」と言うことができますが、これは口がきけないように聞こえます。また、別のゲームでは「メールボックスを開く」と言うことができます。 。現在のルートではなく、このルートに行くことをお勧めします。
他の言語にも同様の問題がありますが、たとえば、オブジェクトの性別やオブジェクトの実際の数に応じてコンテキストが異なります(また、一部の言語は1つと2つのオブジェクトを区別するだけでなく、文法が1つ、2つで異なりますまたはロシア語で3つ以上のオブジェクト)。
ドイツ語の例を使用するには:
「a(n)Xを見ています」に相当次のようになります。
" Du siehst ein X"
または「Du siehst eine X」
または「Du siehst einen X」」
オブジェクトXの性別によって異なります。また、オブジェクトの性別は推測できないものであり、歴史的伝統に基づいてオブジェクトの名前にリンクされています。
したがって、ほとんどの言語でこのような区別を実装する簡単な方法はありません。私のアドバイスは、すべてのケースで機能する製剤を常に使用することです。
" X型のオブジェクトを見ています"
または" a(n)X"を見ています
または「1つのXを見ています」
これはどのように文化的に敏感ですか?あなたがやろうとしていることは、英語でのみ意味があります。他の言語では、文に対してまったく異なる変更が必要になる場合があります。一部の人は名詞を変更し、一部の人は文の構造を変更し、一部の人は単語を並べ替えます。
やろうとしていることは、他の言語にローカライズすると 壊れます。これを自動的に解決する方法はありません。
簡単な例として、" the {something}"を書き込もうとするとどうなるか考えてみましょう。 英語では、単語の前に" the"を付けるだけです。そしてすべてが順調です。フランス語では、性別および複数形かどうかに応じて、le、la、またはlesをプレフィックスとして付けます。 デンマーク語では、代わりに「en」または「et」の接尾辞を追加します。したがって、単語テーブルが「bord」、「the table」に変換される場合、 「bordet」になります。そして「椅子」 (stol)は「盗難」になります。
これを回避する唯一の意味のある方法は、翻訳者に全体文を制御させることです。文化に依存するいくつかの言葉をあちこちに差し込めると思い込まないでください。
実際には、アプリケーションを簡単にローカライズできないことを受け入れることが最善の解決策かもしれません。おそらく、いくつかの主要な言語が可能であることを確認でき、それ以外は問題を無視できます。その後、将来のある時点でアプリケーションを言語Xに翻訳する必要がある場合は、翻訳者と協力して、アプリケーションコードで必要な変更を行います。
別の方法として、自分で文章を作成しようとすることを完全にgiveめなければなりません。文が正しいことを確認する唯一の方法は、翻訳者に whole 文を書かせることです。そしてもちろん、個々の単語を交換したいときに問題が発生します。
.NET inflector というライブラリがあります。またはそのようなことに対して同じ方法で拡張されました。ここで探しているのは、例外を加えて微調整できる一般的なルールです。たとえば、一般的に母音と発音される文字の組み合わせで始まる単語などです。これは[厳密に言えば]文化的に敏感ではありませんが、少なくとも英語で始められるはずです。