0.実際、問題は何ですか?
国際化の複雑さを最初に見てみましょう。 従来、ロシア語で書かれたプログラムがあり、ロシア語のインターフェースを備えているため、他の言語、例えばフランス語に翻訳する必要があります。
例ではなぜフランス語なのですか? しかし、それは非常に簡単です-それには発音区別符号などのようなものがあるので、Unicodeを使用する必要があり、英語のレイアウトだけではできません;)
では、何を翻訳する必要がありますか?
- アプリケーションインターフェース
インストーラー(ある場合)
もちろん、現在の傾向は、インストーラーを使用できないことが多いことですが、ライセンス契約を表示することは常に便利なことだと考えています(これはロシアの法律にも完全に同意します)。 しかし、ルールなしでは製品を外部にリリースすることはできません。
問題に取り組みます。 アプリケーションの異なるバージョンを異なる言語で保持することはあまり便利ではありません。 コードを編集する際に必要な変更の量を想像してください。また、ソースコードを翻訳者に発行することもあまり正しくないことを忘れないでください。 したがって、1つのソースコードが必要です。
別の方法はリソースファイルです。つまり、アプリケーション(実行可能ファイルまたはライブラリ)に言語が「埋め込まれている」場合です。 問題が発生します-それをどのように識別して選択するか。
1.適切なソリューション
この問題に直面したとき、次の国際化ルールを選択しました。
1.インストーラーでは、ユーザーのインストーラー言語を選択できるようにする必要があります。一方、言語を選択するように求めるインストーラーウィンドウでは、オペレーティングシステムの言語バージョンに基づいて選択し、すべてのショートカットはその言語で作成されます
2.インストーラー段階のいずれかでアプリケーション言語が個別に選択されます
3.ユーザーは、アプリケーションでサポートする必要がある言語を選択する必要があります
4.アプリケーションをインストールした後、そのインターフェイスに別の言語を選択できるはずです
2.どうやってやるの?
インストーラーを選択するという質問は、個別の広範な議論に値しますが、私はNSISを使用しています。 したがって、最初の3つの段落の実装は問題なく可能でした。最初はNSISで多言語サポートがありましたが、言語ファイルを少しだけ修正しました。
さらに、どの方法で言語ファイルを使用したかを伝える必要があります。 私の意見では、エレガントな解決策は、各言語の* .xmlファイルを取得し、必要な行をすべて保存することでした。 実行可能ファイルでは、ユーザーが怒りからすべての言語ファイルを取り出して削除する場合に備えて、英語のみを「縫い付け」ました。
XMLは、スキームに従ってファイルの正確性をすばやくチェックできるので、ユーザーにとっても便利です。つまり、ユーザー自身が言語ファイルをルールし、間違いを犯した場合、プログラムはそれをロードしません。
XMLはUnicodeを非常によくサポートしており、大きなプラスでもありました。
3.最後に何が起こったのですか?
その結果、ソリューションは次のようになります-インストール後のプログラムフォルダーに言語フォルダーがあります。 ru.xml、en-GB.xml、en-US.xmlなどの名前で言語ファイルを保存します。 言語ファイルのセットは、インストール中にユーザーが決定します。
プログラムフォルダーには、ユーザーが選択した言語のデータを含むlanguage.xmlファイルがあります。 言語選択ユーティリティは、XMLファイルを言語フォルダーからプログラムのルートフォルダーにコピーし、言語を決定します。
4.合併症
Webサーバー
1つではないにしても、すべてがうまくいきますが、私のプログラムでは、コンポーネントの1つに、より便利なデバッグ用に設計された自己完結型Webサーバーが含まれていました。 彼はアクティブなコンテンツを提供せず、単にデバッグデータを生成しました。 しかし、それらの中には日付がありました...
日付の問題は何ですか? 一般に、何もありません。 ユーザーがリクエストを行うと、HTTPリクエストからAccept-Languageフィールドを取り出して、発行する言語を常に正確に把握しました。 ただし、日付を文字列に変換することはサーバー側で実行されます。 したがって、すべてが正しく機能するためには、処理フローの言語をユーザーのブラウザーが要求する言語に変更する必要があります。
その後、すべてが完全に正確になります。
そしてもちろん、Webサーバーのリソースを、「ru」、「en-GB」などの名前の別のフォルダーに保存しました。 ユーザーが要求した言語がそこで見つからなかった場合、リソースから英語の標準ファイルを発行します。
単語(行)の長さ
もちろん、異なる言語の同じ単語は異なります。 したがって、アプリケーションインターフェイスを作成するときは、これを覚えておく必要があります。 良い例は、英語の「ロック解除」とウクライナ語の「Rozblokuvati」です。
数の違い
ロシア語で数字の整数部分と小数部分の区切り記号がコンマである場合、英語ではピリオドなどであることに注意してください。 カンマは数千を区切るために使用されます。つまり、英語のロシア語「1,000,000.00」のレコードは「1,000,000.00」のようになります。
日付差
ISOは日付の保存形式(YYYY-MM-DD)を設定しているという事実にもかかわらず、必ずしもそれほど単純で楽しいわけではありません。 ロシアではDD-MM-YYYYと記述できますが、米国ではMM-DD-YYYYと記述できます。
数値と日付に関する一般的なアドバイスは、ユーザーの言語に基づいてフォーマットすることであり、プログラムで処理する独自のメカニズムを「縫う」ことはありません。
愛をこめて
マニアックな