2

C#(winforms)アプリケーションを多言語にしたいと思います。私の考えは:

  • いくつかのテキストファイルに翻訳を入れます。各「文」またはフレーズには、一意のID(整数)が含まれます。
  • アプリの起動時に、アプリにあるすべてのフォームのすべてのコントロールを繰り返し処理し(これは、各フォームの「Load」イベントハンドラーで実行する必要があると思います)、そのタイプのコントロールをテストします。
  • つまり、ボタンまたはメニュー項目の場合は、デフォルトの「テキスト」プロパティを読み取り、このフレーズを1つのテキストファイルで検索し、一意のIDを読み取り、このIDを介して(他の)テキストファイルで翻訳されたフレーズを検索します。
  • 次に、コントロールの「Text」プロパティを翻訳されたフレーズで上書きします

これにより、言語ごとにフレーズを含む個別のテキストファイルを作成できます(将来、個別の翻訳を維持するのは簡単です。txtファイルは1つだけです)。

  1. 私はあなたから聞きたいです-これを達成するためのより良い/より簡単な/より速い/より多くの「プロ」の方法がある場合は専門家。
  2. どの形式の翻訳テキストファイルを使用する必要がありますか(プレーンテキスト、XML、ini ....)-人間が読める形式である必要があります。XMLでフレーズを検索する方が、プレーンテキストファイルで行ごとに検索して特定のフレーズ/文字列を検索するよりもC#で高速になるかどうかはわかりません...?
  3. 編集-ユーザー(コミュニティ)が私のアプリを自分の母国語に翻訳できるようにしたい(つまり、Microsoftのリソースがゲームから外れている)

事前にどうもありがとうございました。

クローズ-私の解決策: 元のコンセプトを維持しているようです-すべてのフレーズはプレーンテキストファイルの別々の行にあります-Unicodeエンコーディング(および行の先頭にあるID)。IDも削除して行番号だけを使用することを考えていましたが、高度なテキストエディタ(メモ帳には行番号が表示されません)が必要で、誰かが誤って「行の削除」のショートカットを押して気付かなかった場合、アプリ全体が夢中になる :)

//sample of my translation text file for one language
0001:Text of my first button
0002:Text of my first label
0003:MessageBox title text
...etc etc

4

3 に答える 3

3

Microsoftのリソースファイル方式を使用してみませんか?この方法で複雑なカスタムコードを記述する必要はありません。

于 2012-04-08T20:44:49.310 に答える
3

「1つのテキストファイル」のアイデアにいくらか投資しているようです。そうでなければ、おそらく標準的な方法に傾倒して、Microsoftのリソースファイルを使用するでしょう。リソースファイルの処理は組み込みであり、コントロールはそれをサポートするためにすでにキー設定されています。ただし、ご存知かもしれませんが、各翻訳は独自のリソースファイルに入ります。そのため、アプリと一緒に配布するために複数のファイルをジャグリングする必要があります。

カスタムの独自のソリューションを使用すると、おそらく1つのUnicodeファイルに切り詰めることができます。ただし、コントロールをループしてテキストを設定してから、各コントロールのテキストを検索する必要があります。コントロールタイプを追加するときは、それらのコードにサポートを追加する必要があります。また、言語を追加するとテキストファイルが大きくなるため、それも考慮する必要があります。

私はまだリソースファイルを使用することに傾倒していますが、あなたの言い回しはあなたがすでにその解決策を好きではないことを示唆しているので、私はあなたの考えを変えたとは思いません。

編集:

再コンパイルの必要がないようにソリューションをアプリから分離する必要があるため、言語タイプごとにSQL-CEデータベースファイルを配布できます。テキスト値はNVARCHARフィールドに保存できます。

これによりクエリが簡単になりますが、自己編集の要件が高まります。ユーザーが独自の翻訳ファイルを追加したり、画面を編集したりするためのメカニズムを提供する必要があります。

編集2:

解決に向けて推進する。:)

Unicodeでエンコードされた単純な区切りテキストファイルを、規則ベースの命名システムで使用できます。例えば:

en-US.txt

FormName,ControlName,Text
"frmMain","btnSubmit","Save"
"frmMain","lblDescription","Description"

次に、CurrentUICultureを使用して、ローカリゼーションのためにロードするテキストファイルを決定し、ファイルが見つからない場合はen-USにフォールバックできます。これにより、ユーザーは一般的なテキストエディターを使用して、急な学習曲線なしで独自のローカリゼーションファイルを作成(および変更)できます。

于 2012-04-08T20:57:36.047 に答える
1

物事をシンプルかつ迅速に保ちながら、ユーザーがアプリケーションを介して翻訳を編集できるようにする場合は、リソースファイルが最適です。気に入らない場合は、2番目に良いオプションはXMLファイルです。

それでも、テキストファイルでそれを最適に行う方法についての質問に答えるには、非常に簡単です。一意の識別子(intおそらく)が正しいことを確認するだけです(ファイルを使用する前に検証してください)。次に、すばやく検索するには、半分の手法を使用します。

番号Xを探すので、ファイルの中央の行に移動します。id> xの場合、ファイルの1/4に移動します。

正しいラインに到達するまで2つにカットします。これは最も早く知られている研究方法です。

注:アプリケーションの外部にあるが翻訳が必要なものに注意してください:外部ファイルアイテム、データベースに含まれる情報など。

于 2012-04-09T03:07:11.097 に答える