4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Embarcadero Dev-C++ を日本語化しようとすると文字化けする件

Last updated at Posted at 2024-05-15

はじめに

Windows でお手軽に gcc が使えるようになる 『Dev-C++』 という IDE があります。

image.png

元々 Delphi で書かれていたこの IDE を Embarcadero がフォークしたのが 『Embarcadero Dev-C++』 です。

image.png

文字化け

インストーラー形式なので、インストールはとても簡単なのですが...

image.png

インストールの際はデフォルトのパスではなく、C:\Dev-Cpp 等にインストールする事をオススメします。

初期設定で言語を 日本語 に変更すると文字化けします。

image.png

image.png

文字化けした場合、〔Alt〕〔T〕〔V〕または、画面右の下側のボタンで言語を変更できます (English (Original) がデフォルトです)。

image.png

解決方法

インストールフォルダの Lang にある Japanese.lng をテキストエディタで開き、Lang=日本語 になっている所を Lang=Japanese に書き替えます。

[lang]
- Lang=日本語
+ Lang=Japanese
Ver=1
1=ファイル(&F)
2=編集(&E)
3=検索(&S)
4=表示(&V)
5=プロジェクト(&P)
6=実行(&X)
7=ツール(&T)
8=ウィンドウ(&W)
9=ヘルプ(&H)
10=デバッグ(&D)

環境設定で Japanese が選べるようになります。

image.png

image.png

原因

言語ファイルは Lang フォルダにあり、環境設定に従いこれをロードしています。日本語なら Japanese.lng ですね。言語ファイルの文字エンコーディングは ANSI 形式となっています (日本語なら SHIFT_JIS)。内容はこんな感じです。

Japanese.lng
[lang]
Lang=日本語
Ver=1
1=ファイル(&F)
2=編集(&E)
...

そして ANSI のコードページ判定に Lang パラメータを使っています。

MultiLangSupport.pas
procedure TdevMultiLangSupport.Open(const Filename: String);
var
  LangFile: String;
begin
  // Load file from languages directory
  LangFile := ValidateFile(Filename, devDirs.Lang);
  if LangFile = '' then begin
    MessageDlg('Could not open language file ' + Filename, mtError, [mbOK], 0);
    Exit;
  end;

  // Load file into fStrings
  fStrings.LoadFromFile(LangFile,TEncoding.ANSI);
  fLangFile := LangFile;

  // Get languange
  fCurLang := fStrings.Values['Lang'];
  if fCurLang = '' then
    fCurLang := ChangeFileExt(ExtractFileName(LangFile), '');

  fCurCodePage := GetCodePage(fCurLang); // <- ここ
  devData.Language := ExtractFileName(LangFile);
end;

日本語 という文字列からコードページ 932 (Shift_JIS) を引く事ができないのが文字化けの原因です。コードページを引けなかった時は 1252 になるようです。

MultiLangSupport.pas
    Encodings: Array[0..MaxEncodings - 1] of TCPData =
    (
      ...
      //(CPID: 866; CPName: 'cp866'),
      //(CPID: 869; CPName: 'ibm869'),
      //(CPID: 870; CPName: 'IBM870'),
      //(CPID: 874; CPName: 'windows-874'),
      //(CPID: 875; CPName: 'cp875'),
      (CPID: 932; CPName: 'shift_jis'; CPLang: 'Japanese';),
      (CPID: 936; CPName: 'gb2312'; CPLang: 'Chinese';),
      (CPID: 949; CPName: 'ks_c_5601-1987'; CPLang: 'Korean';),
      //(CPID: 950; CPName: 'big5'),
      //(CPID: 1026; CPName: 'IBM1026'),
      //(CPID: 1047; CPName: 'IBM01047'),
      //(CPID: 1140; CPName: 'IBM01140'),
      //(CPID: 1141; CPName: 'IBM01141'),
      ...
MultiLangSupport.pas
function GetCodePage(const ALanguage: String): Integer;
var
  I: Integer;
begin
  Result := 1252; //put the default encoding here

  for I := 0 to MaxEncodings - 1 do
    if ALanguage.IndexOf(Encodings[I].CPLang)>-1 then
    begin
      Result := Encodings[I].CPID;
      break;
    end;
end;      

なので、Lang パラメータの値を Japanese にすれば、文字化けは起こらなくなります。値に Japanese が含まれればいいので Japanese (日本語) とかでも大丈夫です。

Japanese.lng
[lang]
Lang=Japanese (日本語)
Ver=1
1=ファイル(&F)
2=編集(&E)
...

Lang パラメータは言語リストの表示名にも使われているので、プログラムで判定せず、Codepage=932 みたいなパラメータを新設するか、言語ファイルを UTF-8 化した方がいいとは思うのですが...

2024/06/17 にプルリクエストがマージされたため、この問題は解決しています。インストーラは更新されていないようなので、GitHub から言語ファイルを持ってきて手動でマージする必要があります。

おわりに

余談ですが、『Dev-C++』をインストール後、インストールフォルダを USB メモリにコピーするだけでポータブル環境が作れます。devcpp.exe の代わりに devcppPortable.exe を実行するとコピーしたフォルダの config サブフォルダに設定が保存されるようになります。

image.png

もう一つ余談ですが、オリジナルの『Dev-C++』は映画『Winny』で『C++ Builder』の代役として使われていましたね。

image.png

image.png

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?