Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.08.17;
Скачать: [xml.tar.bz2];

Вниз

Помогите написать "Уведомлятель"   Найти похожие ветки 

 
Костик   (2008-07-11 11:38) [0]

Помогите пожалуйста написать "Уведомлятель".... Я уже смотрел faq нашел некоторые моменты, но така как я новичок то те процедуры, которые там написаны я не очень в состоянии применть (немного не понятно). Хочу чтобы программа загружалась с виндой и сворачивалась к часам в панели задач и через каждое установленное время выдавала сообщение что типа "Эй чувак - да ты заработался как я посмотрю" )))  ну чтото типа того...
Заранее благодарю.


 
Сергей М. ©   (2008-07-11 11:42) [1]

Чем же тебе помочь ?


 
Костик   (2008-07-11 11:53) [2]


> Чем же тебе помочь ?

Мне б помочьдобавить в автозагрузку и свернуть/развернуть с места возле часов....


 
Denis__ ©   (2008-07-11 12:02) [3]

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
uses Registry;
TRegistry;
Качать RXLibrary, там есть RXTrayIcon.


 
Костик   (2008-07-11 12:18) [4]


> HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
> uses Registry;
> TRegistry;
> Качать RXLibrary, там есть RXTrayIcon.

та тут много таких советов... и что мне с этим делать?


 
Сергей М. ©   (2008-07-11 12:21) [5]


> что мне с этим делать?


Ну как что ?
принять как направление для исследования предложенного на предмет применимости в своей задаче)


 
Denis__ ©   (2008-07-11 12:31) [6]


> Костик

Разжую :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
Это ветка реестра, куда надо писать, чтобы твоя программа запускалась автоматически. Строковый параметр с любым именем. В нём должен быть путь к программе. Используй Application.Exename;

uses Registry;
...
var
  Reg : TRegistry;
...

Это то, чем ты должен пользоваться для записи в реест. Хотя можешь поизвращаться с TRegIniFile. Но мне больше нравится TRegistry;

Качать RXLibrary, там есть RXTrayIcon.
Это компонент, с помощью которого можно "запуздырить иконку возле часиков". Там есть readme, так что с установкой проблем быть не должно.
RxLib7 весит в архиве 3.62 метра.

Удачи


 
Anatoly Podgoretsky ©   (2008-07-11 12:36) [7]

> Костик  (11.07.2008 11:38:00)  [0]

В чем проблема, таймер и иконка в трей. Только зачем же на АПИ? У тебя пока явно знаний на АПИ не хватит.
Работы то на 10 минут, в Д2006.


 
Плохиш ©   (2008-07-11 12:39) [8]


> Anatoly Podgoretsky ©   (11.07.08 12:36) [7]
> Работы то на 10 минут, в Д2006.

Ну вот взял и обломил людям целую rxlib :-)


 
Костик   (2008-07-11 12:44) [9]


> Ну вот взял и обломил людям целую rxlib :-)

Ниче не обламал - у меня тока 7-ка стоит ))

> Denis__ ©   (11.07.08 12:31) [6]

Спасибо - будем пробывать.


 
Johnmen ©   (2008-07-11 13:13) [10]


> Спасибо - будем пробывать.

Пробый, пробый...:))


 
Anatoly Podgoretsky ©   (2008-07-11 13:14) [11]

> Плохиш  (11.07.2008 12:39:08)  [8]

А ты хочешь следующий вопрос(ы) - как поставить, где взять, не встает.


 
oldman ©   (2008-07-11 13:17) [12]


> Хочу чтобы программа загружалась с виндой и сворачивалась
> к часам в панели задач и через каждое установленное время
> выдавала сообщение


Планировщик задач отменили?
Когда???


 
Правильный*Вася   (2008-07-11 13:20) [13]


>  Помогите написать "Уведомлятель"

правильно "уведомитель"
а твое - странные ассоциации вызывает


 
Костик   (2008-07-11 13:22) [14]


> Качать RXLibrary, там есть RXTrayIcon.

Короче говоря еле нашел... Самая большая версия 3.58 :
RX Library 2.75 conversion to Delphi 7, v1.0 (based on conversion by SGB Software)
 from Project JEDI (http://jvcl.sourceforge.net)
и то нет тута в помине RXTrayIcon.


 
Костик   (2008-07-11 13:28) [15]

а не есть


 
Dennis I. Komarov ©   (2008-07-11 13:32) [16]

И вот на каждый "млятель" компоненты искать (ставить)...


 
Костик   (2008-07-11 13:54) [17]

Что делать?
Пишет что не может найти  RXShell; uses


 
DVM ©   (2008-07-11 13:55) [18]


> а твое - странные ассоциации вызывает

У меня это сразу вызвало ассоциации с еще тремя шедеврами програмистской мысли: "Конвектор форматов", "Автошема", и "Кодировочник"


 
Dennis I. Komarov ©   (2008-07-11 13:58) [19]

> [17] Костик   (11.07.08 13:54)
Что делать?

Нанять программиста


 
Костик   (2008-07-11 14:02) [20]


> Нанять программиста

а я кто по вашему?

))) шучу
да вроде ж все установил...
по инструкции...


 
Костик   (2008-07-11 14:05) [21]

короче не знаю что сделал - но заработало, надо бы получше разобраться с этими компонентами....


 
oldman ©   (2008-07-11 14:07) [22]


> Костик   (11.07.08 14:05) [21]
> короче не знаю что сделал - но заработало


Видимо, вышел - вошел
:)


 
Dennis I. Komarov ©   (2008-07-11 14:11) [23]

> а я кто по вашему?

флудер... эт я тоже шучу
видно из-за пятницы еще не запуздырили к часикам


 
Костик   (2008-07-11 14:16) [24]

скажите пожалуйста какое событие происходит когда нажимаешь свернуть форму _ ?
ну я туда впишу код появления иконки в системном трее ( или как он там называется "место возле часов") а потом чё с формой лучше сделать: визибл фалсэ?


 
Костик   (2008-07-11 15:08) [25]

Вот что получается.... Вроде как работает:

function IsStatus: boolean;
var
Reg:  TRegistry;
bIs:  boolean;
List: TStringList;
I:    Integer;
begin
bIs  := False;
Reg  := TRegistry.Create;
List := TStringList.Create;
try
  Reg.RootKey := HKEY_LOCAL_MACHINE;
  if Reg.OpenKey("\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", True) then
   begin
     Reg.GetValueNames(List);
     for I:=0 to List.Count-1 do
       begin
        if List.Strings[I] = "YouMemory 1.0" then
         bIs := True;
         break;
       end;
   end;
finally
   Reg.Free;
   List.Free
end;
Result :=  bIs;
end;

procedure WriteStatus(Status:boolean);
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
 try
   Reg.RootKey := HKEY_LOCAL_MACHINE;
   if Reg.OpenKey("\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", True) then
   begin
    if Status then
     Reg.WriteString("YouMemory 1.0",""" + Application.ExeName + """)
    else
     Reg.DeleteValue("YouMemory 1.0");
     Reg.CloseKey;
   end;
 finally
   Reg.Free;
 end;
end;

procedure TForm1.RxTrayIcon1Click(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
RxTrayIcon1.Active := False;
Form1.Visible := true;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
RxTrayIcon1.Active := true;
Form1.Visible := false;
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if CheckBox1.Checked then
 WriteStatus(True)
else
 WriteStatus(False);
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
if IsStatus then
 CheckBox1.Checked := true
else
 CheckBox1.Checked := false;
end;


 
Johnmen ©   (2008-07-11 15:35) [26]


> if IsStatus then  
>   CheckBox1.Checked := true
> else  
> CheckBox1.Checked := false;

Милашка...
:)


 
Dennis I. Komarov ©   (2008-07-11 15:49) [27]

С "конвектором" рядом не стояла


 
Костик   (2008-07-11 15:49) [28]


> Johnmen ©   (11.07.08 15:35) [26]
>
> > if IsStatus then  
> >   CheckBox1.Checked := true
> > else  
> > CheckBox1.Checked := false;
>
> Милашка...
> :)
> <Цитата>
>
>
> Dennis I. Komarov ©   (11.07.08 15:49) [27]
> С "конвектором" рядом не стояла

не понял?


 
Правильный*Вася   (2008-07-11 15:55) [29]


> for I:=0 to List.Count-1 do
>   begin
>     if List.Strings[I] = "YouMemory 1.0" then
>        bIs := True;
>        break;
>   end;

выпадет из цикла после первой же итерации
зачем цикл тогда?


 
Правильный*Вася   (2008-07-11 15:56) [30]


> if CheckBox1.Checked then  WriteStatus(True) else  WriteStatus(False);

вторая милашка :)


 
Dennis I. Komarov ©   (2008-07-11 16:09) [31]

> [28] Костик   (11.07.08 15:49)

Чего тут не понятного IsStatus какие значения принимает?
CheckBox1.Checked:=IsStatus;

А мой пост это не для тебя...


 
Костик   (2008-07-11 16:10) [32]


> выпадет из цикла после первой же итерации
> зачем цикл тогда?

Вы уверены?

> Правильный*Вася   (11.07.08 15:56) [30]
>
> > if CheckBox1.Checked then  WriteStatus(True) else  WriteStatus(False);
>
>
> вторая милашка :)

Все такие умные стали....
Ану скажите пожалуйста:
вот написал

procedure TForm1.OnMinimizeProc(Sender: TObject);
begin
RxTrayIcon1.Active := True;
Form1.Hide;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
Application.OnMinimize := OnMinimizeProc;
if IsStatus then
 CheckBox1.Checked := true
else
 CheckBox1.Checked := false;
end;

только когда разворачиваю и з трэя то не могу опять свернуть, и разворачивает в окно за всеми активными окнами....
Как исправить что б нормально было?


 
Dennis I. Komarov ©   (2008-07-11 16:21) [33]

> Вы уверены?

Угу

> Все такие умные стали....

Думаю что за сегодня не сильно изменились...

> Как исправить что б нормально было?

Еще и Rx поставить...?
Ну объясняй каждую строчку своего кода


 
Костик   (2008-07-11 17:04) [34]

Ну  с брэйком я согласен... пропстил begin end;
Ну создаю лишний код .... ну я же новичок ё ма ё
)
> Еще и Rx поставить...?
> Ну объясняй каждую строчку своего кода

Вот забыл дописать:

procedure TForm1.RxTrayIcon1Click(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
RxTrayIcon1.Active := False;
Form1.Show;
end;

Но все равно не понял что Вы имеете в виду?
> Еще и Rx поставить...?
> Ну объясняй каждую строчку своего кода


 
Игорь Шевченко ©   (2008-07-11 19:42) [35]

давить! оно потом банк-клиент будет писать


 
McSimm ©   (2008-07-11 20:08) [36]


> давить! оно потом банк-клиент будет писать


– Нет, конечно... – промямлил я. – Проделана большая работа... (Эдик схватился за голову.) Я, конечно, понимаю... добрые намерения... (Эдик посмотрел на меня с презрением.) Ну в самом деле, – сказал я, – человек старался... нельзя же так...
– Побойся бога, – отчетливо произнес Эдик.
– Нет... Ну что ж... Ну пусть человек работает, раз ему интересно...


:)


 
Denis__ ©   (2008-07-11 21:44) [37]

Удалено модератором


 
Костик   (2008-07-14 09:10) [38]

Удалено модератором


 
Костик   (2008-07-14 09:44) [39]


> давить! оно потом банк-клиент будет писать

если Вы сейчас уже не "оно" то это не значит что надо оскарблять других...

Как сделать чтобы программа нормально разворачивалась/сворачивалась трэй?


 
Dennis I. Komarov ©   (2008-07-14 09:50) [40]

Удалено модератором


 
Palladin ©   (2008-07-14 09:58) [41]


> Как сделать чтобы программа нормально разворачивалась/сворачивалась
> трэй?

надо:
нормально показать иконку в трее (можно много)
нормально свернуть приложение
нормально скрыть приложение из панели задач
позже, при каком либо событии
нормально показать приложение на панели задач
нормально восстановить приложение на рабочем столе
по желанию, нормально убрать иконку из трея (можно все)


 
Anatoly Podgoretsky ©   (2008-07-14 10:02) [42]

Зачем так много слов!
Надо просто нормально написать программу.


 
Костик   (2008-07-14 11:34) [43]


uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ShellApi, StdCtrls, Menus, Registry;
.....
   procedure ActionIcon(n: Integer; Icon: TIcon);
   procedure WindowsMessage(var Msg:TMessage); message M_SYSCOMMAND;
   procedure OnMinimizeProc(Sender: TObject);
   procedure IconMouseClick(var Msg:TMessage); message WM_USER + 1;
.....
function IsRunWithWin: boolean;
var
Reg:  TRegistry;
bIs:  boolean;
List: TStringList;
I:    Integer;
begin
bIs  := False;
Reg  := TRegistry.Create;
List := TStringList.Create;
try
  Reg.RootKey := HKEY_LOCAL_MACHINE;
  if Reg.OpenKey("\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", True) then
   begin
     Reg.GetValueNames(List);
     for I:=0 to List.Count-1 do
       begin
        if List.Strings[I] = "YouMemory 1.0" then
         begin
          bIs := True;
          break;
         end;
       end;
   end;
finally
   Reg.Free;
   List.Free
end;
Result :=  bIs;
end;

procedure WriteReg(Status:boolean);
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
 try
   Reg.RootKey := HKEY_LOCAL_MACHINE;
   if Reg.OpenKey("\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", True) then
   begin
    if Status then
     Reg.WriteString("YouMemory 1.0",""" + Application.ExeName + """)
    else
     Reg.DeleteValue("YouMemory 1.0");
     Reg.CloseKey;
   end;
 finally
   Reg.Free;
 end;
end;

//Посылаем подальше  RX_Tray_Icon
procedure TForm1.ActionIcon(n: Integer; Icon: TIcon);
var Nim: TNotifyIconData;
begin
with Nim do
 begin
  cbSize := SizeOf(Nim);
  Wnd    := Form1.Handle;
  uID    := 1;
  uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
  hIcon  := Icon.Handle;
  uCallbackMessage := WM_USER + 1;
  szTip := "Уведомитель";
 end;
case n of
 1: Shell_NotifyIcon(NIM_ADD, @Nim);
 2: Shell_NotifyIcon(NIM_DELETE, @Nim);
 3: Shell_NotifyIcon(NIM_MODIFY, @Nim);
end;
end;

procedure TForm1.WindowsMessage(var Msg:TMessage);
begin
if Msg.WParam = SC_MINIMIZE then
 begin
  ActionIcon(1, Application.Icon);  //нормально показываем иконку в трэе
  ShowWindow(Handle, SW_HIDE);      //нормально скрываем приложение
  ShowWindow(Application.Handle, SW_HIDE); //нормально скрываем приложение из панели задач
 end
else
 inherited;
end;

procedure TForm1.OnMinimizeProc(Sender: TObject);
begin
PostMessage(Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0); //нормально запускаем WindowsMessage
end;

procedure TForm1.IconMouseClick(var Msg:TMessage);
var p: TPoint;
begin
GetCursorPos(p);
Case Msg.LParam of
 WM_LBUTTONUP, WM_LBUTTONDBLCLK:
  begin
   ActionIcon(2, Application.Icon);  //нормально удаляем иконук из трея
   ShowWindow(Application.Handle, SW_SHOW); //нормально восстанавливаем приложение на панели задач
   ShowWindow(Handle, SW_SHOW); // нормально восстанавливаем приложение на рабочем столе
   SetForegroundWindow(Handle);
  end;
 WM_RBUTTONUP:
  begin
   SetForegroundWindow(Handle);
   PopupMenu1.Popup(p.X,p.Y);
   PostMessage(Handle, WM_NULL, 0, 0);
  end;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMinimize := OnMinimizeProc;
CheckBox1.Checked := IsRunWithWin;
Application.Minimize;
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
 WriteReg(CheckBox1.Checked)
end;



 
Anatoly Podgoretsky ©   (2008-07-14 11:44) [44]


> Костик   (14.07.08 11:34) [43]

Что сказать то хотел?


 
Костик   (2008-07-14 12:07) [45]


> Что сказать то хотел?

Да ниче... Всем спасибо )


 
Костик   (2008-07-14 14:43) [46]

Скажите пожалуйста как записать в реестр чтобы программа запускалась в определенный момент времени или спустя некоторое время после запуска виндовс.
И еще если не трудно как из приложения можно выключить компьютер .. и как отправить его в ждущий режим...???
Заранее очень благодарю...


 
Denis__ ©   (2008-07-14 19:05) [47]

TTimer.

var
ph: THandle;
tp, prevst: TTokenPrivileges;
rl: DWORD;
begin
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or
  TOKEN_QUERY, ph);
LookupPrivilegeValue(nil, "SeShutdownPrivilege", tp.Privileges[0].Luid);
tp.PrivilegeCount := 1;
tp.Privileges[0].Attributes := 2;
AdjustTokenPrivileges(ph, FALSE, tp, SizeOf(prevst), prevst, rl);
ExitWindowsEx(EWX_SHUTDOWN or EWX_POWEROFF, 0);
end;
end;


 
Костик   (2008-07-15 09:59) [48]


> Denis__ ©   (14.07.08 19:05) [47]
> TTimer.

Благодарю... А если какая то программа помешает выключению, как проверить?


 
brother ©   (2008-07-15 10:03) [49]

> А если какая то программа помешает выключению, как проверить?

100% выключение гарантирует только отключение питания... ;)


 
Костик   (2008-07-15 10:06) [50]


> 100% выключение гарантирует только отключение питания...
>  ;)

ну это понятно,  а по сути я бы проверил, если работает винда еще то выключил бы "Контрольный" раз )


 
brother ©   (2008-07-15 10:12) [51]

> "Контрольный"

ну если какое-либо приложение блокирует завершение, тогда послать всем килл олл


 
Anatoly Podgoretsky ©   (2008-07-15 10:18) [52]

> Костик  (15.07.2008 10:06:50)  [50]

Из выключеного приложения :-)


 
brother ©   (2008-07-15 10:40) [53]

> выключеного приложения

новые понятия в программистике? ;)


 
Костик   (2008-07-15 10:49) [54]

Не знаю как у Вас, но у меня пока ни одна прога не поборола
ExitWindowsEx(EWX_FORCE or EWX_SHUTDOWN or EWX_POWEROFF, 0)
хе-хе...
Вот только проблемка - есть EWX_LOGOF типа "вылогиться" но он тушит все процессы, а я бы хотел чтобы было как "Пуск/Выход из системы/смена пользователя/" ООООО. а может так и сделать..? тоесть надо отправить Cntr+Esc, стрелка вверх, стрелка вправо, ввод, ввод.... Э не а если мышка в этот момент будет в этой области но чуть выше - не  не катит... что делать?
заодно, чтобы не показаться наглым)), подскажите как мне сделать всплывающее окошко как у isq? чтобы оно поверх всех окон всплывало..?
заранее очень благодарю.


 
brother ©   (2008-07-15 10:53) [55]

не пиши ерунды...


 
Костик   (2008-07-15 11:12) [56]

Вот я пишу:

  SetForegroundWindow(Form2.Handle);
  Form2.ShowModal;
  ShowWindow(Form2.Handle, SW_HIDE);
  ShowWindow(Application.Handle, SW_HIDE);

а хочеться поверх всех окон чтобы была форма...
и еще вопрос если можно, в примере выше [43] я определил момент "свертывания" приложения а можно вместо "свертывания" определить так метод закрытия формы (когда на крестик нажимешь у главной формы как в uTorrent)


 
brother ©   (2008-07-15 11:20) [57]

> а хочеться поверх всех окон чтобы была форма...

начинается ((((


 
DVM ©   (2008-07-15 12:02) [58]


> Denis__ ©   (14.07.08 19:05) [47]

Хоть бы в одной функции проверил код возврата. И хэндлы закрывать надо.


 
Костик   (2008-07-15 12:17) [59]

Вот дописал  [56] :

procedure TForm2.FormShow(Sender: TObject);
begin
 SetWindowPos(Handle, HWND_TOPMOST, 0,0,0,0, SWP_NOMOVE OR SWP_NOSIZE OR SWP_SHOWWINDOW OR SWP_NOSENDCHANGING);
end;

Вроде ниче только не активное....
Еще дописал  [56] :

procedure TForm1.WindowsMessage(var Msg:TMessage);
begin
if (Msg.WParam = SC_MINIMIZE) or (Msg.WParam = SC_CLOSE) then
 begin
  ActionIcon(1, Application.Icon);    ShowWindow(Handle, SW_HIDE);         ShowWindow(Application.Handle, SW_HIDE);
 end
else
 inherited;
end;

но не пойму откуда посылать

PostMessage(Handle, WM_SYSCOMMAND, SC_CLOSE, 0);

вот

procedure TForm1.OnCloseProc(Sender: TObject);
begin
PostMessage(Handle, WM_SYSCOMMAND, SC_CLOSE, 0);
end;

если там [56]

procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMinimize := OnMinimizeProc;

то к чему присвоить (переопределить) OnCloseProc ?


 
Правильный$Вася   (2008-07-15 12:25) [60]

напоминает школьника из моего дества, которые учились драться по видеоиграм типа мортал-комбата


 
brother ©   (2008-07-15 12:34) [61]

> учились драться по видеоиграм типа мортал-комбата

круто!)


 
Костик   (2008-07-15 12:34) [62]


> Правильный$Вася   (15.07.08 12:25) [60]
> напоминает школьника из моего дества, которые учились драться
> по видеоиграм типа мортал-комбата

за собой следить надо


 
brother ©   (2008-07-15 12:55) [63]

> за собой следить надо

следи за собой, будь осторожен (с) Кино


 
Костик   (2008-07-15 13:02) [64]

так что

procedure OnMinimizeProc(Sender: TObject);

вообще не нужна
и
можно сделать так:

procedure TForm1.FormCreate(Sender: TObject);
begin
{ Application.OnMinimize := OnMinimizeProc;}
PostMessage(Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0);

ниче не пойму...
что написав утэто

   procedure WindowsMessage(var Msg:TMessage); message WM_SYSCOMMAND;

уже все перехвачено?



Страницы: 1 2 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.08.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.62 MB
Время: 0.042 c
15-1214489008
ekto
2008-06-26 18:03
2008.08.17
Как по ip вычислить нахала?


15-1214991525
Дебил какой-то
2008-07-02 13:38
2008.08.17
Где же винда хранит пароли от интернета ?


15-1214850088
hmel
2008-06-30 22:21
2008.08.17
Глубокоувожаемые мастера помогите! Делаю программу,где нужно использовать круговые регуляторы...


15-1211457036
Kerk
2008-05-22 15:50
2008.08.17
Идеальная потрепаловка. Какой она должна быть?


15-1214636002
Kolan
2008-06-28 10:53
2008.08.17
Все отстрелялся, теперь я учёный! :)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский