уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

Раз нельзя использовать API Инструментов переводчика, то решал поработать с Google AJAX Language API, чтобы обеспечить минимальный набор функций по переводу текста с помощью Переводчика Google. В целом, компонент для Delphi получился небольшой (как и сам API), едсинственное, что пришлось использовать из не входящих в стандартный набор Delphi библиотек — это библиотеку SuperObject для работы с JSON, т.к. именно в этом формате (и только в нем) приходит ответ при работе с AJAX Language API. Так что, если хотите воспользоваться компонентом переводчика, то сначала придётся скачать последнюю версию SuperObject здесь.
Ну, а теперь, всё что касается непосредственно компонента.

1. Свойства компонента

У компонента Translator всего два свойства:

property SourceLang: TLanguageEnum read FSourceLang write FSourceLang;

Язык оригинала.

property DestLang: TLanguageEnum read FDestLang write FDestLang;

Язык на который необходимо перевести отрывок текста. При этом перечислитель TLanguageEnum содержит идентификаторы всех доступных в Переводчике Google языков. Однако следует отметить следующее обстоятельство, которое относися непосредственно к API — не все пармы языков SourceLang/DestLang поддерживаются. Если невозможно перевести текст с SourceLang на DestLang, то API вернет ошибку.
Если Вы не знаете на каком языке написан исходный екст, то в свойстве SourceLang можно указать значение Unknown — в этом случае Google попробует определить язык оригинала автоматически.

2. События компонента

OnTranslate: TOnTranslate;
type
  TOnTranslate = procedure(const SourceStr, TranslateStr: string; LangDetected: TLanguageEnum) of object;

Возникает после того как получен положительный ответ от сервера (с кодом 200). Возвращает следующие значения:
SourceStr — строка текста для перевода;
TranslateStr — переведенный текст;
LangDetected — язык оригинала. Удобно использовать, когда необходимо опеределить язык оригинала текста.

OnTranslateError: TOnTranslateError;
type
  TOnTranslateError = procedure(const Code: integer; Status: string) of object;

Возникает в случае, если во время перевода произошла какая-либо ошибка (в JSON-документе содержится код ответа отличный от 200). Возвращает следующие значение:
Code — код ошибки
Status — текст ошибки.

3. Методы компонента

function Translate(const SourceStr: string): string;

Основной метод компонента Delphi. Переводит строку SourceStr на язык, определенный в свойстве DestLang.

function GetLanguagesNames: TStringList;

Возвращает список всех доступных языков для перевода. Удобно использовать, когда необходимо заполнить ComboBox доступными языками.

function GetLangByName(const aName: string): TLanguageEnum;

Возвращает идентификатор языка по его названию. Например,

Translator.GetLangByName('Русский')

вернет значение lng_ru, которое можно в дальнейшем использовать в свойствах компонента.

4. Пример использования

Создадим небольшое приложение, как показано на рисунке:

В Edit будем записывать строку, в ComboBox’ах выбирать языки, с которыми нам необходимо работать, а в Memo выведем результат работы компонента. Напишем следующие обработчики событий у компонента Tanslator1:

procedure TForm6.Translator1Translate(const SourceStr, TranslateStr: string;
  LangDetected: TLanguageEnum);
begin
  Memo1.Lines.Clear;
  Memo1.Lines.Add('Исходный текст '+SourceStr);
  Memo1.Lines.Add('Перевод '+TranslateStr);
end;
 
procedure TForm6.Translator1TranslateError(const Code: Integer; Status: string);
begin
  Memo1.Lines.Add('Ошибка '+IntToStr(Code)+' '+Status)
end;

На OnShow формы будем формировать списки ComboBox:

procedure TForm6.FormShow(Sender: TObject);
begin
  ComboBox1.Items.Assign(Translator1.GetLanguagesNames);
  ComboBox2.Items.Assign(Translator1.GetLanguagesNames);
end;

При выборе языка в ComboBox’ах будем сразу передавать эти значения в свойства компонента Translator1:

procedure TForm6.ComboBox1Change(Sender: TObject);
begin
  Translator1.SourceLang:=Translator1.GetLangByName(ComboBox1.Items[ComboBox1.ItemIndex]);
end;
 
procedure TForm6.ComboBox2Change(Sender: TObject);
begin
  Translator1.DestLang:=Translator1.GetLangByName(ComboBox2.Items[ComboBox2.ItemIndex]);
end;

И, наконец, по нажатии на кнопку «Перевести» будем переводить текст из Edit:

procedure TForm6.Button1Click(Sender: TObject);
begin
  Translator1.Translate(Edit1.Text)
end;

Теперь запускаем приложение и, для проверки, переведем «Hello World» скажем…на персидский язык. Вот результат работы переводчика:
.

Скачать компонент можно со страницы загрузок нашего проекта на GitHub. Замечания, предложения, идеи по дальнейшему развитию компонента принимаются здесь.

Книжная полка

Описание: Рассмотрены практические вопросы по разработке клиент-серверных приложений в среде Delphi 7 и Delphi 2005 с использованием СУБД MS SQL Server 2000, InterBase и Firebird. Приведена информация о теории построения реляционных баз данных и языке SQL. Освещены вопросы эксплуатации и администрирования СУБД.
купить книгу delphi на ЛитРес
Описание: Рассмотрены малоосвещенные вопросы программирования в Delphi. Описаны методы интеграции VCL и API. Показаны внутренние механизмы VCL и приведены примеры вмешательства в эти механизмы. Рассмотрено использование сокетов в Delphi: различные режимы их работы, особенности для протоколов TCP и UDP и др.
купить книгу delphi на ЛитРес
0 0 голоса
Рейтинг статьи
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Подписаться
Уведомить о
15 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии
Deksden
Deksden
09/08/2010 23:44

Определение Свойства destLang в статье проверьте — для чтения и записи используется поле из sourceLang.

Sky
Sky
08/10/2010 01:09

Попробовал использовать данный сервис, тут же столкнулся с такой проблемой: невозможность перевода длинных текстов, вышло что-то порядка 389 символов чистого текста с пробелами, знаками препинания на русском языке. По сему есть мысли как обойти данное ограничение или как возможно разделять текст на нужное кол-во символов? ведь на середине прдложения оборвать нельзя текст и предложения могут быть длинными :(

Саня
Саня
05/12/2010 22:28

Класс TTranslate не находит не в Delphi 7 не в DelphiRAD2010. Просто кидаю все содержимое паки translator_pack в папку translate_demo + superobject.pas туда же и пытаюсь скомпилировать. Может подскажете в чём ошибка?

Саня
Саня
05/12/2010 23:45

Эм.. ну дык я написал, что скопировал файл GTranslate.pas в папку с DEMO программой. Вот тут вот и проблема, файл есть а класс не находит.

CoolleR
CoolleR
31/12/2010 00:27

Укажи еще эту папку с файлом GTranslate.pas в опциях среды—библиотеки—пути тада должно пойти

Виталий
Виталий
12/01/2011 11:08

Отлично! А если переводчик через прокси должен работать? Как из этой ситуации выдти?

Nick
Nick
11/07/2011 15:34

Подскажите версию дельфи. При компилляции GTranslate в D7 получаю ругань на всех строках типа
function *****; inline;
А в дальнейшем (при //inline;) выход за границы Integer вот здесь (SuperObject):
class function TSuperAvlEntry.Hash(const k: SOString): Cardinal;
var
  h: cardinal;
  i: Integer;
begin
  h := 0;
{$Q-}
  for i := 1 to Length(k) do
    h := h*129 + ord(k[i]) + $9e370001;
{$Q+}
  Result := h;
end;

Lum
Lum
06/09/2011 20:15

TTranslator = class(TComponent)
Вы перед тем как Demo собирать компонент установили? Пакет лежит в директории packages – устанавливаете компонент, на вкладке WebDelphi появится TTranslator. Открываете демку, компилируете

А можно поподробнее об этом? Понимаю, вопрос глупый, но я новичок. И уже сутки бьюсь… Пишет, что компонент установлен. Но никаких вкладок WebDelphi не нашла( Понимаю, что не получается «подцепить» класс(

stalker1995s
stalker1995s
02/03/2013 00:59

Здравствуйте, пожалуйста помогите мне с установкой этого компонента. Мой скайп: stalker_agg
Мой емейл: stalker1995s@mail.ru
Спасибо!

Зулус
Зулус
29/03/2015 21:37

Нормально собралось установилось, но демка при переводе вот что выдаёт: The system cannot locate the resourse specified.

comment image
comment image