Delphi XE2의FireMonkey 입문(18) - Tlang(다중 언어 전환의 실현)

3802 단어 Delphi
하나의 작은 Tlang 클래스로 다중 언어 전환을 실현하니 매우 좋다.작동 방향은 다음과 같습니다.
1. 우선 AddLang('언어 코드')을 통해 언어 종류를 추가합니다. 예를 들어 AddLang('en'), AddLang('cn').
2. 각 언어 코드는 Tstrings 목록에 대응하고 수령 방식은 다음과 같다. LangStr['en'], LangStr['cn'].
3. 이 데이터를 수동으로 채울 수 있고 LoadFromFile() 방법으로 이전의 SaveToFile() 데이터(*.lng)를 불러올 수 있으며 디자인할 때 제공한 인터페이스에서 이 데이터를 조작할 수 있다.
4. 전환할 때 Lang 속성을 수정하면 됩니다. 예를 들어 Lang: ='cn'.
5. 이 역할 영역은 현재 프로젝트의 모든 창과 컨트롤러입니다. 그림 그리기 컨트롤러 (예: TTExt), 컨트롤러의 텍스트와 창 제목 등은 포함되지 않습니다.
테스트:
1. 먼저 창에 Tlang을 추가합니다.
2. 언어를 전환하는 데 사용할 세 개의 TRadioButton을 추가합니다.
3. TButton, TCheckBox, Tlabel을 추가하여 테스트 표시에 사용한다.
4, RadioButton1, Button1 및 창의 기본 이벤트를 활성화합니다.

unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.Objects;

type
  TForm1 = class(TForm)
    Lang1: TLang;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    RadioButton3: TRadioButton;
    Button1: TButton;
    CheckBox1: TCheckBox;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure RadioButton1Change(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.FormCreate(Sender: TObject);
begin
  RadioButton1.Text := 'English';
  RadioButton2.Text := '    ';
  RadioButton3.Text := '    ';
  RadioButton1.Tag := 0;
  RadioButton2.Tag := 1;
  RadioButton3.Tag := 2;
  RadioButton2.OnChange := RadioButton1.OnChange;
  RadioButton3.OnChange := RadioButton1.OnChange;

  {         TLang      }
  Button1.Text := 'Button';
  CheckBox1.Text := 'CheckBox';
  Label1.Text := 'Test';
  Caption := 'Test';

  {      }
  Lang1.AddLang('en');
  Lang1.AddLang('cn');
  Lang1.AddLang('big');

  {Original:       TStrings     }
  with Lang1.Original do
  begin
    Add('Button');
    Add('CheckBox');
    Add('Test');
  end;

  {en           }
  with Lang1.LangStr['en'] do
  begin
    Add('Button');
    Add('CheckBox');
    Add('Test');
  end;

  {    }
  with Lang1.LangStr['cn'] do
  begin
    Values['Button'] := '  ';
    Values['CheckBox'] := '   ';
    Values['Test'] := '  ';
//    Values[Lang1.Original[0]] := '  ';
//    Values[Lang1.Original[1]] := '   ';
//    Values[Lang1.Original[2]] := '  ';
  end;

  {    }
  with Lang1.LangStr['big'] do
  begin
    Values['Button'] := '  ';
    Values['CheckBox'] := '   ';
    Values['Test'] := '  ';
  end;
end;

{  }
procedure TForm1.RadioButton1Change(Sender: TObject);
begin
  case TRadioButton(Sender).Tag of
    0: Lang1.Lang := 'en';
    1: Lang1.Lang := 'cn';
    2: Lang1.Lang := 'big';
  end;
end;

{        Resources    ,       TStrings   }
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  for i := 0 to Lang1.Resources.Count - 1 do
    ShowMessage(TStrings(Lang1.Resources.Objects[i]).Text);
end;

end.

좋은 웹페이지 즐겨찾기