アプリケーションをローカライズする別の方法

すべての良い一日。 アプリケーションのローカライズを簡単に行う方法を公開します(もう1つ)。 リソースアセンブリを使用する標準のメカニズムは、次の理由で私には適していません。



  1. コード内のローカライズされた文字列の値を取得し、OOPの全機能とコンパイラーヒントに本当に頼りたいです。 金曜日の夕方にプロジェクトをまとめ、土曜日の朝に、誰かがGetResource( "assf")の代わりにGetResource( "asdf")を意図せずに作成したというオーバーホールQT残業からの電話を受けて、誤って表示され、月曜日のプロジェクトはすでに印刷されています...



  2. (前の段落の続き...)文字列foo = language.Ui.PromtDialog.AdditionalQuestionの記述は、文字列foo = Resources.GetResource( "Ui_PromtDialog_AdditionalQuestion")よりも単純です。 はい。コンパイラプロンプトによるものも含まれます。



  3. 文字列ではなく、オブジェクト全体をローカライズする必要がある場合があります。 たとえば、名詞(行+性別M / F / C / Mn)および形容詞(行M +行F +行C +行Mn)。 シリアル化された文字列をリソースに押し込み、毎回取得して逆シリアル化しますか? ムッシュは倒錯について多くを知っています...



  4. リソースファイルは行のフラットリストですが、データをより複雑な階層構造にしたいので、Ctrl + Fでクロールする必要はありません。



  5. 新しい言語の作成は、できる限りシンプルにする必要があります。 アプリケーションのローカライズには、コンピューターの使用方法を知っており、必要な言語を話せる人が必要です。 このため、Visual Studioやリソースアセンブリの作成に大騒ぎする必要はありません。


もう1つの必須要件は、UI要素のローカライズに簡単にバインドできることです。 望ましい-WPFとWinFormsの両方。



解決策は表面にあり、簡単にinとシャベルと競合することができます。 あなたの手を見てください:



  1. ローカライズされたすべてのリソースを含むLanguageなどの名前のクラスを作成します。



  2. 「文字列」タイプのプロパティと文字列プロパティを持つプロパティオブジェクト(「カテゴリ」)、およびプロパティオブジェクトのプロパティオブジェクトを入力し、...好みの添付の深さを選択します。



  3. Languageクラス(およびその中にネストされているすべて)をシリアル化可能にするメソッドを使用して、シリアル化された言語でファイルを編集しようとすると、ほとんどのユーザーが最小限の拒否を取得します。 何よりもXMLに感心しているので、属性XmlType、XmlRoot、XmlElement、XmlAttributeをそれぞれ選択します。 JSONファンはJSONを使用できます。 手元にiniファイルを操作するための便利なラッパーがある場合は、それを使用できます。 すべてがあなたの手にあります。



  4. BindingSource(WinForms)、{x:Static}または<ObjectDataProvider>(WPF)コンポーネントと単純なデータバインディングを使用して、フォームに言語を描画します。



  5. アプリケーション(またはそのようなもの)を含むフォルダーにフォルダー「Languages」、「Localizations」を作成し、その中に言語を選択した方法でシリアル化する1つまたは複数のファイルを作成します。



  6. より複雑なもの(写真など)をローカライズする必要がある場合、言語はリソースファイルへの相対パスを保存します。 この場合、ファイル自体は「Languages / Localizations」フォルダーのサブフォルダーに配置されます。



  7. 標準のデシリアライザーを使用してアプリケーションをロードすると、言語がロードされます。 現在選択されている言語は、アプリケーションの起動時にダイアログのドロップダウンリストで選択された保存された設定から決定されます(たとえば、アプリケーションが初めて起動され、構成に何もない場合)、またはCultureInfo.CurrentCultureに基づいて利用可能な言語から自動的に選択されます。 選択した言語は任意のオブジェクトに保存でき、ローカライズされたリソースが必要な場所から(どのように-シングルトン、依存性注入、...-優先オプションを入力しても)アクセスできます。


新しいロケールを作成する場合は、「Languages / Localizations」フォルダー内の便利な言語でファイルをコピーし、その中の行を翻訳するだけです。



健康に使用してください。 サンプルコードは、 ここからダウンロードできます 。 急いで書かれたのは明らかであり、そのため、設計が間違っているという印象を受けます。たとえば、言語はMainメソッドではなく、メインフォームのコードに読み込まれます。 さて、言語がWpfの例のフォームにアタッチされる方法については、ペンチで指を絞ることもできます。 しかし-それは100%動作します。 この方法を改善するための提案を歓迎します。



All Articles