• 締切済み

ソフトを日本語化したい

 Perlやシェルなどのインタープリター系のプログラム経験しかない初心者のため、見当違いな質問かもしれませんが宜しくお願い致します。  ASCII文字列しか処理できないプログラムを日本語化する場合、どのような手段があるのでしょうか?  とりあえすソースを眺めたところエラー表示(Non printable char...)される部分らしきところを見つけました。 ---------------- if (!isascprn(*p)) /* If not a printable character. */ { ps_t ps; char c = *p; ubyte_ uc = *((ubyte_ *) p); ps.ps_line = globalno; ps.ps_column = p-p_line+1; if (strlen(chabbrev(c))==0) sprintf(linet1, "Non printable character (Sym=<none>, Dec=%03u, Hex=%02X, Oct=%03o).", (unsigned) uc,(unsigned) uc,(unsigned) uc); else sprintf(linet1, "Non printable character (Sym=%s, Dec=%03u, Hex=%02X, Oct=%03o).", chabbrev(c),(unsigned) uc,(unsigned) uc,(unsigned) uc); lr_err(&ps,linet1); *p=CENSORCH; } ---------------  ここを漢字コードならポインターを2byte進めるなどの処理を行えば良いのでしょうか?

みんなの回答

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

> 書き忘れていましたが、処理系は TurboLinux などの UNIX 系で GCC でコンパイルする予定です。 それを先に書かないから、抽象的な回答をせざるを得ないのです。 GCCの場合、ワイド文字定数やワイド文字列定数を使うためには、特別なコンパイルオプションが必要です。必然的にMakefileも変更しなければなりません。しかも、そのオプションはバージョン3.4以降でなければサポートされません。 また、ワイド文字を使う場合、適切にロケールを設定する必要もあります。おそらく、最初にsetlocale(LC_CTYPE, "");としておけばよいと思いますが、"C"ロケールに依存したコーディングをしていると、それだけではすまなくなります。 ワイド文字を使用するように変更するのは、ロケールの設定を行った上で、例えばstrcpyをwcscpyに変更するなど、関数の置き換えが必要になります。ほとんどは単純作業なので簡単ですが、結構手間はかかります。 もし、多バイト文字に関連する処理が局所的であれば、その部分だけを変更する方が手っ取り早いでしょう。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

> 『ワイド文字』とは何でしょうか? wchar_t型で表される文字のことです。 厳密には処理系に依存しますが、多くの場合、wchar_tの変数1つで(漢字なども含めて)1文字を表現することができます。

qaz_qwerty_me
質問者

お礼

初心者的質問に丁寧な御回答ありがとうございます。 さっそく『ワイド文字』で処理できるかどうか検討して日本語化に挑戦してみます。 書き忘れていましたが、処理系は TurboLinux などの UNIX 系で GCC でコンパイルする予定です。オリジナルのソースは GCC でノーエラーでオブジェクトを作成できる事を確認しているので、同じ Makefile で Build してノーエラーで通れば日本語化が成功?と考えています。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

処理系にもよりますが、一番簡単な方法はワイド文字を使うことです。

qaz_qwerty_me
質問者

補足

誠に申し訳ありませんが・・・・『ワイド文字』とは何でしょうか?

関連するQ&A