プログラム内に埋め込まれた生成前のメッセージに日本語訳を用意するのではなく、 プログラムが生成した後のメッセージを日本語訳に置き換えるフィルタを通すような例、ないのかな。 たとば、「メモリがwrittenになれませんでした」なんて類いの問題は、 「メモリが」+任意の文字列+「になれませんでした」という処理だから困るのであって、 まず英語のメッセージ「The memory could not be "written".」を生成させて、 それをフィルタによって「メモリを読むことができませんでした」に変換すればいい。
そうでないもの? (スコア:0)
Re: (スコア:0)
タレコミ人が何を言いたいかちょっと良く分からないですね。
・gettext のような汎用言語カタログ機能を使ってる → それに従う
・アプリ独自で言語カタログ機能を実装してる(Webアプリとかで多い) → それに従う
・言語カタログ機能が実装されてない → 日本語パッチ作る、あるいは言語カタログ化パッチを作る
他にどうしろと?
Re: (スコア:0)
プログラムが生成した後のメッセージを日本語訳に置き換えるフィルタを通すような例、ないのかな。
たとば、「メモリがwrittenになれませんでした」なんて類いの問題は、
「メモリが」+任意の文字列+「になれませんでした」という処理だから困るのであって、
まず英語のメッセージ「The memory could not be "written".」を生成させて、
それをフィルタによって「メモリを読むことができませんでした」に変換すればいい。
元のメッセージが動的に生成さ
Re:そうでないもの? (スコア:1)
問題は、それを出すのがカーネルとかそこに近い場所だった辺りなんですかね?
Win32 APIだとFormatMessage [microsoft.com]辺りが該当機能を持ってます。
Re: (スコア:0)
アプリケーションは独自の例外ハンドラを用意し、デフォルトのそれと差し替えることができます。
(アプリケーションが例外処理を怠ったときのセーフネットではないことに注意。)
OSはアプリの持つ例外ハンドラに対して"written"という文字列を渡したりはしません。
具体的にはunsigned longの1という値を渡してきます。readなら0です。
なお、Windowsはオープンソースではないので、ソースコードを直接書き換えたりせずに様々なことが可能なように作られています。
プロセスのWin32APIコールのフックチェーンに参加して、ウインドウに表示しようとする文字列を英語から日本語に差し替える、なんていう強引なことも可能です。
しかし、そんなことをするよりも標準手法・・・つまりEXEやDLL内の"リソース"にメッセージの文字列を格納するのが昔からの作法です。