« MiGrep2 ver1.0フルパッケージ版の公開 | トップページ | Visual studio 2017の価格 »

2017.05.28

Delphi 10.1 Starterでの多言語化

Delphi XEではプロジェクトメニューの言語言語→追加で多言語化が出来ますが、Starter版にはこの機能はありません。そこでネット上を探したところtokibitoさんの記事を見つけました。
で早速試してみたのですが、Delphi 10.1 Starter版ではそのままでは実現できなかったため、備忘録として残しておきます。

まずはhttps://sourceforge.net/projects/dxgettext/からGNU Gettext for Delphi, C++ and Kylixをダウンロードしてgnugettextをインストールする。
このセットアップでインストールされるgnugettext.pasはDelphi XE以降ではコンパイルエラーとなるため、https://sourceforge.net/p/dxgettext/patches/26/からgnugettext.pasをダウンロードして置き換える。次に追加する言語を編集するためにhttps://ja.osdn.net/projects/sfnet_poedit/releases/からpoedit-1.5.7-setup.exeをダウンロードしてインストールする。
これで準備完了です。

ますはプロジェクトフォルダにgnugettext.pasをコピーして、プロジェクトソースのusesにgnugettextを追加します。

program Project1;

uses
Vcl.Forms,
gnugettext in 'gnugettext.pas', //この一行を追加
Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

続いてプログラムソース本体のusesにもgnugettextを追加します。
gnugettextは自動でフォームの文字列を抽出してくれますが、そのままではソースコード内の文字列は抽出してくれません。ソースコード中の多言語化したい文字列を_( )で括ります。

unit Unit1;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Menus,
  gnugettext; // gnugettextユニットを追加
 
type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    F1: TMenuItem;
    E1: TMenuItem;
    O1: TMenuItem;
    X1: TMenuItem;
    C1: TMenuItem;
    V1: TMenuItem;
    P1: TMenuItem;
    N1: TMenuItem;
    Language1: TMenuItem;
    J1: TMenuItem;
    English1: TMenuItem;
    Label1: TLabel;
    Button1: TButton;
    Label2: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure J1Click(Sender: TObject);
    procedure English1Click(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  Label2.Caption := _('これはプログラムコード中の文字列を切り替える確認です.'); // 多言語化したい文字列を_()で括る
end;
 
procedure TForm1.English1Click(Sender: TObject);
begin
  English1.Checked := True;
  UseLanguage('en_US');          // 英語(US)に切り替える
  ReTranslateComponent(Self); // 表示し直す
end;
 
procedure TForm1.J1Click(Sender: TObject);
begin
  J1.Checked := True;
  UseLanguage('ja');         // 日本語に切り替える
  ReTranslateComponent(Self);  // 表示し直す
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  TranslateComponent(Self); // これを追加
end;
 
end.

ソースコードの修正が終わったら、プロジェクトフォルダーでコマンドプロンプトを開き(エクスプローラでフォルダを選択して、SHIFTキーを押しながら右クリックするとコマンドウィンドウをここで開くメニューが出ます)、コマンドラインから
dxgettext --delphi --nonascii
を実行します。
すると言語ファイルであるdefault.poが作成されていますので、このファイルをpoeditで編集します。

Poedit
ここで日本語の対訳を入れていきます。尚、編集ファイルを保存することで自動的に実行に必要なファイルが一種に作成されます(拡張子が.moのファイルです)。
また、この時カタログメニューの設定で基本情報を入れておきます。
Posetting

編集で出来上がったmoファイルをプロジェクト実行ファイルがあるフォルダにサブフォルダlocale\言語名\LC_MESSAGESフォルダを作成して、そこに保存します(ファイル名はdefault.moのままで構いません。またdefault.poは不要です)。

で動作確認結果は以下の通りです。

通常
Testjp

English化
Testeng


「Project1.zip」をダウンロード

のダウンロード


|

« MiGrep2 ver1.0フルパッケージ版の公開 | トップページ | Visual studio 2017の価格 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/22406/65337938

この記事へのトラックバック一覧です: Delphi 10.1 Starterでの多言語化:

« MiGrep2 ver1.0フルパッケージ版の公開 | トップページ | Visual studio 2017の価格 »