Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11,567 changes: 11,567 additions & 0 deletions Translate_skiaversion/Form.Main.fmx

Large diffs are not rendered by default.

198 changes: 198 additions & 0 deletions Translate_skiaversion/Form.Main.pas
Original file line number Diff line number Diff line change
@@ -0,0 +1,198 @@
unit Form.Main;

interface

uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Memo.Types,
FMX.ScrollBox, FMX.Memo, FMX.Controls.Presentation, FMX.Edit, FMX.ComboEdit,
FMX.StdCtrls, FMX.ListBox, System.Actions, FMX.ActnList,
AWS.Translate, System.Skia, FMX.Skia, FMX.Layouts;

type
TMainForm = class(TForm)
ActionList1: TActionList;
ActSwitchLanguages: TAction;
ActTranslate: TAction;
Panel2: TPanel;
ComboSourceLanguage: TComboBox;
BtnSwitchLanguages: TButton;
ComboTargetLanguage: TComboBox;
MemoTextSource: TMemo;
MemoTranslatedText: TMemo;
LoadButton: TButton;
Button1: TButton;
SkAnimatedImage1: TSkAnimatedImage;
OpenDialog1: TOpenDialog;
GridPanelLayout1: TGridPanelLayout;
procedure ComboSourceLanguageChange(Sender: TObject);
procedure ActSwitchLanguagesExecute(Sender: TObject);
procedure ActTranslateExecute(Sender: TObject);
procedure MemoTextSourceKeyDown(Sender: TObject; var Key: Word;
var KeyChar: Char; Shift: TShiftState);
procedure FormCreate(Sender: TObject);
procedure SkAnimatedImage1Click(Sender: TObject);
private
FClient: ITranslateClient;
FDetectedLanguageCode: string;
function GetAutoSourceLabel: string;
property AutoSourceLabel: string read GetAutoSourceLabel;
property Client: ITranslateClient read FClient;
procedure LoadLanguages;
function ExtractLanguageCode(const ALanguageDisplay: string): string;
function GetSourceLanguageCode: string;
function GetTargetLanguageCode: string;
procedure SetDetectedLanguageCode(const ADetectedLanguageCode: string);
property SourceLanguageCode: string read GetSourceLanguageCode;
property TargetLanguageCode: string read GetTargetLanguageCode;
property DetectedLanguageCode: string read FDetectedLanguageCode write SetDetectedLanguageCode;
public
{ Public declarations }
end;

var
MainForm: TMainForm;

implementation

{$R *.fmx}

procedure TMainForm.ActSwitchLanguagesExecute(Sender: TObject);
var
LLanguageIdx: Integer;
LSourceText: string;
begin
LLanguageIdx := ComboSourceLanguage.ItemIndex;
ComboSourceLanguage.ItemIndex := ComboTargetLanguage.ItemIndex + 1;
ComboTargetLanguage.ItemIndex := LLanguageIdx - 1;
LSourceText := MemoTextSource.Text;
MemoTextSource.Text := MemoTranslatedText.Text;
MemoTranslatedText.Text := LSourceText;
end;

procedure TMainForm.ActTranslateExecute(Sender: TObject);
var
LRequest: ITranslateTranslateTextRequest;
LResponse: ITranslateTranslateTextResponse;
begin
LRequest := TTranslateTranslateTextRequest.Create(
SourceLanguageCode,
TargetLanguageCode,
MemoTextSource.Text
);
LResponse := Client.TranslateText(LRequest);
if LResponse.IsSuccessful then
begin
if SourceLanguageCode.Equals('auto') then
DetectedLanguageCode := LResponse.SourceLanguageCode;
MemoTranslatedText.Text := LResponse.TranslatedText;
end;
end;

procedure TMainForm.ComboSourceLanguageChange(Sender: TObject);
begin
ActSwitchLanguages.Enabled := ComboSourceLanguage.ItemIndex <> 0;
end;

function TMainForm.ExtractLanguageCode(const ALanguageDisplay: string): string;
begin
Result := ALanguageDisplay.Split([':'])[0];
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
FClient := TTranslateClient.Create;
LoadLanguages;
end;

function TMainForm.GetAutoSourceLabel: string;
begin
if DetectedLanguageCode.IsEmpty then
Result := 'auto: Detect Language Automatically'
else
Result := Format('auto: Detect Language Automatically (%s)', [DetectedLanguageCode]);
end;

function TMainForm.GetSourceLanguageCode: string;
begin
Result := ExtractLanguageCode(ComboSourceLanguage.Selected.Text);
end;

function TMainForm.GetTargetLanguageCode: string;
begin
Result := ExtractLanguageCode(ComboTargetLanguage.Selected.Text);
end;

procedure TMainForm.LoadLanguages;

procedure SelectLanguageCode(const AComboBox: TComboBox; const ALanguageCode: string);
var
I: Integer;
begin
for I := 0 to AComboBox.Items.Count - 1 do
if ExtractLanguageCode(AComboBox.Items[I]).Equals(ALanguageCode) then
begin
AComboBox.ItemIndex := I;
Exit;
end;
end;

var
LResponse: ITranslateListLanguagesResponse;
LLanguage: ITranslateLanguage;
LSourceLanguageCode, LTargetLanguageCode: string;
begin
LSourceLanguageCode := SourceLanguageCode;
LTargetLanguageCode := TargetLanguageCode;
ComboSourceLanguage.BeginUpdate;
ComboTargetLanguage.BeginUpdate;
ComboSourceLanguage.Items.Clear;
ComboTargetLanguage.Items.Clear;
ComboSourceLanguage.Items.Add(AutoSourceLabel);
LResponse := Client.ListLanguages;
if LResponse.IsSuccessful then
begin
for LLanguage in LResponse.Languages do
begin
if LLanguage.LanguageCode.Equals('auto') then
Continue;

var LLanguageLabel := Format('%s: %s', [LLanguage.LanguageCode, LLanguage.LanguageName]);
ComboSourceLanguage.Items.Add(LLanguageLabel);
ComboTargetLanguage.Items.Add(LLanguageLabel);
end;
end;
SelectLanguageCode(ComboSourceLanguage, LSourceLanguageCode);
SelectLanguageCode(ComboTargetLanguage, LTargetLanguageCode);
ComboTargetLanguage.EndUpdate;
ComboSourceLanguage.EndUpdate;
end;

procedure TMainForm.MemoTextSourceKeyDown(Sender: TObject; var Key: Word;
var KeyChar: Char; Shift: TShiftState);
begin
if (Key = 13) and not (ssShift in Shift) then
begin
Key := 0;
KeyChar := #0;
ActTranslate.Execute;
end;
end;

procedure TMainForm.SetDetectedLanguageCode(
const ADetectedLanguageCode: string);
begin
FDetectedLanguageCode := ADetectedLanguageCode;
ComboSourceLanguage.BeginUpdate;
ComboSourceLanguage.Items[0] := AutoSourceLabel;
ComboSourceLanguage.EndUpdate;
end;

procedure TMainForm.SkAnimatedImage1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
MemoTextSource.Lines.LoadFromFile(OpenDialog1.FileName, TEncoding.UTF8);

end;

end.
18 changes: 18 additions & 0 deletions Translate_skiaversion/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Translate Demo
The Translate Demo sample demonstrates the use of `ListLanguages` and
`TranslateText` of `TTranslateClient`.

![Translate demo running on Windows.](Screenshot.png)

## Running the sample
1. Open “Translate_skiaversion.dproj” in Delphi or RAD Studio.
2. Select “Run > Run” from the menu or press F9.
3. Select a target language from the combo list on the top-right.
4. Write some text to translate in the left memo and hit enter to translate
or
click on the animated file open button and select a text file.

There are two example text files in the "smaples" folder. They contain
text which is in the public domain - one in Danish, one in French.

**Note that this version was created using RAD Studio 12.3 with Skia enabled.**
Binary file added Translate_skiaversion/Screenshot.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
14 changes: 14 additions & 0 deletions Translate_skiaversion/Translate_skiaversion.dpr
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
program Translate_skiaversion;

uses
System.StartUpCopy,
FMX.Forms,
Form.Main in 'Form.Main.pas' {MainForm};

{$R *.res}

begin
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end.
Loading