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

Вниз

override or overload ?   Найти похожие ветки 

 
User1   (2008-05-12 16:02) [0]

...
 public
   { Public declarations }
   constructor Create(AOwner: TComponent); overload;
 end;


Собственно вопрос... :o)


 
Сергей М. ©   (2008-05-12 16:06) [1]

= class(?)

Собссно контрвопрос)


 
Palladin ©   (2008-05-12 16:11) [2]

вопрос какой то странный, я его собственно и не вижу, в чем он?

overload - с помощью этой директивы ты можешь объявлять одноименные методы/процедуры с разным набором параметров

override - эта деректива перекрывает реализацию виртуального/динамического метода/конструктора/деструктора/(да и мало ли чего) родительского класса и обозначает, что у наследника она будет своя

и в чем"же твой вопрос после ликбеза?


 
oxffff ©   (2008-05-12 16:31) [3]


> User1   (12.05.08 16:02)  


1. Без разницы, если инстранцировать будешь как TForm1.Create.

2. Если инстранцировать будешь через  Application.CreateForm(TForm1, Form1), тогда Override, в случае необходимости вызова твоего конструктора.


 
Kolan ©   (2008-05-12 16:37) [4]

> вопрос какой то странный

Ну, почему не спросить stdcall или reitroduce, сабжевые слова просто похожи, отсюда и вопрос что ли ....


 
User1   (2008-05-12 18:57) [5]

Сори на писал только сейчас смог к ветке вернуться....


> Сергей М. ©   (12.05.08 16:06) [1]


да, class
> Palladin ©   (12.05.08 16:11) [2]

> override - эта деректива перекрывает реализацию виртуального/динамического
> метода/конструктора/деструктора/(да и мало ли чего) родительского
> класса и обозначает, что у наследника она будет своя


Совершенно верно ! :o)

Только не найду ошибки, когда делаю override вылетает вот что:

Declaration of "Create" differs from previous declaration.

Непойму почему...


 
Сергей М,   (2008-05-12 19:02) [6]


> да, class


ЧЕЙ наследник этот твой класс ?


 
Юрий Зотов ©   (2008-05-12 19:05) [7]

> User1   (12.05.08 18:57) [5]

Вы не поняли. Сергей спрашивал, от какого класса наследуется Ваш класс. Точнее, нужно знать объявление его конструктора - от этого зависит ответ на Ваш вопрос.


 
User1   (2008-05-12 19:06) [8]


> Юрий Зотов ©   (12.05.08 19:05) [7]

TForm


 
User1   (2008-05-12 19:07) [9]

Дочернее окно. MDIChild


 
Юрий Зотов ©   (2008-05-12 19:13) [10]

Тогда override.


 
User1   (2008-05-12 19:17) [11]


> Юрий Зотов ©   (12.05.08 19:13) [10]

Как раз при подстановке этого оператора и выскакивает:

Declaration of "Create" differs from previous declaration.


 
User1   (2008-05-12 19:23) [12]

Прошу прощения ребята !
Нашел ошибку, а скорее недоучет.

Дело в том, я забыл обозначить, что передается еще один параметр ARec:
constructor Create(AOwner: TComponent; ARec: THandBook); overload; а в этом случае поможет только overload.

Вопрос снят !


 
User1   (2008-05-12 19:24) [13]

Потому и соответствующее сообщение :
Declaration of "Create" differs from previous declaration.


 
tesseract ©   (2008-05-12 20:26) [14]

overload - полиморфизм, для разных параметров в методе.
override - переопределяем сам метод.
reintroduce - просто убирает предупреждение компилятора.


> Declaration of "Create" differs from previous declaration.


Ессно ты же параметры у Create меняешь - этого лучше не делать. inherited конструктор вызвать не забудь только.


 
User1   (2008-05-12 20:30) [15]


> inherited конструктор вызвать не забудь только.

C этим норм.

А вообще суечусь для справочника.

Тип такого чтот:

unit uHandBook;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, Buttons, ExtCtrls, ComCtrls, ToolWin, DBCtrls, Grids, DBGridEh,
 DB, StdCtrls;

type

{ TfHandBook }

 TShowHandBook = (shbUnknown, shbRequisite, shbEmployee, shbJobTitle, shbUser, shbRole,
   shbLog, shbPlace, shbPoint, shbTpPoint, shbStreet, shbTpStreet, shbHome,
   shbTpHome, shbPost, shbManagement, shbProperty, shbOtherRem, shbEntrance,
   shbApartment, shbRoom, shbTpRoom);

 PHandBook = ^THandBook;
 THandBook = packed record
   ShowType: TShowHandBook;
   case Integer of
     0: (
       GoToIndex: Integer);
 end;

 TfHandBook = class(TForm)
   pnl: TPanel;
   sBtnClose: TSpeedButton;
   sBtnPrint: TSpeedButton;
   sBtnHelp: TSpeedButton;
   tb: TToolBar;
   sbInfo: TStatusBar;
   sb: TStatusBar;
   nv: TDBNavigator;
   tSprt1: TToolButton;
   tBtnFilter: TToolButton;
   grd: TDBGridEh;
   ds: TDataSource;
   procedure FormCreate(Sender: TObject);
   procedure FormShow(Sender: TObject);
   procedure FormPaint(Sender: TObject);
   procedure FormActivate(Sender: TObject);
   procedure FormResize(Sender: TObject);
   procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
   procedure FormDeactivate(Sender: TObject);
   procedure FormHide(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
 private
   { Private declarations }
   FRec: THandBook;
 public
   { Public declarations }
   constructor Create(AOwner: TComponent; ARec: THandBook); overload;
 end;

function CreateHandBook(AOwner: TComponent; ARec: THandBook): Boolean;

resourcestring
 SUnknown = "Íåèçâåñòíûé ñïðàâî÷íèê";
 SRequisite = "Ñïðàâî÷íèê ðåêâèçèòû ïðåäïðèÿòèÿ";
 SEmployee = "";
 SJobTitle = "";
 SUser = "";
 SRole = "";
 SLog = "";
 SPlace = "";
 SPoint = "";
 STpPoint = "";
 SStreet = "";
 STpStreet = "";
 SHome = "";
 STpHome = "";
 SPost = "";
 SManagement = "";
 SProperty = "";
 SOtherRem = "";
 SEntrance = "";
 SApartment = "";
 SRoom = "";
 STpRoom = "";

var
 fHandBook: TfHandBook;

implementation

uses
{ Ïîäêëþ÷åíèå äîïîëíèòåëüíû&# 245; ìîäóëåé. }
 uDm, IniFiles, uConstants, uDbs;

{$R *.dfm}

function CreateHandBook(AOwner: TComponent; ARec: THandBook): Boolean;
begin
 if Assigned(fHandBook) then
   if (fHandBook.FRec.ShowType <> ARec.ShowType) or
     (fHandBook.FRec.GoToIndex <> ARec.GoToIndex) then
     fHandBook.Free
   else
     if not (fHandBook.WindowState in [wsNormal, wsMaximized]) then
       fHandBook.WindowState := wsNormal
     else
       fHandBook.Show;

 Result := True;
 try
   if not Assigned(fHandBook) then
     fHandBook := TfHandBook.Create(AOwner, ARec);
 except
   Result := False;
   fHandBook.Free;
   fHandBook := nil;
 end;
end;

constructor TfHandBook.Create(AOwner: TComponent; ARec: THandBook);
begin
 inherited Create(AOwner);
 FRec := ARec;
 case FRec.ShowType of
   shbUnknown:
     begin
       Close;
     end;
   shbRequisite:
     begin
       Caption := SRequisite;
       ds.DataSet := dm.qRequisite;
     end;
 else
   begin
     //&#205;&#229;&#232;&#231;&#226;&#229;&#241;&#242;&#237;&#251;&#233; &#226;&#232;&#228; &#226;&#251;&#231;&#251;&#226;&#224;&#229;&#236;&#238;&#227;&#238; &#241;&#239;&#240;&#224;&#226;&#238;&#247;&#237;&#232;&#234;&#232;.
   end;
 end;
end;

procedure TfHandBook.FormCreate(Sender: TObject);
begin
 if OpenDataSet(ds.DataSet) then
   begin
     //
   end
 else
   begin
     //
   end;
end;

procedure TfHandBook.FormShow(Sender: TObject);
begin
 //
end;

procedure TfHandBook.FormPaint(Sender: TObject);
begin
 //
end;

procedure TfHandBook.FormActivate(Sender: TObject);
begin
 //
end;

procedure TfHandBook.FormResize(Sender: TObject);
begin
 //
end;

procedure TfHandBook.FormCloseQuery(Sender: TObject;
 var CanClose: Boolean);
begin
 //
end;

procedure TfHandBook.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 //
end;

procedure TfHandBook.FormDeactivate(Sender: TObject);
begin
 //
end;

procedure TfHandBook.FormHide(Sender: TObject);
begin
 //
end;

procedure TfHandBook.FormDestroy(Sender: TObject);
begin
 //
end;

end.


 
Игорь Шевченко ©   (2008-05-12 20:32) [16]

Чему вас только Пачеко учил...


 
User1   (2008-05-12 20:36) [17]


> Игорь Шевченко ©   (12.05.08 20:32) [16]

И чему же... ? :o)


 
tesseract ©   (2008-05-12 20:36) [18]


begin
inherited Create(AOwner);
FRec := ARec;
case FRec.ShowType of
  shbUnknown:
    begin
      Close;
    end;
  shbRequisite:
    begin
      Caption := SRequisite;
      ds.DataSet := dm.qRequisite;
    end;
else
  begin
    //&#205;&#229;&#232;&#231;&#226;&#229;&#241;&#242;&#237;&#251;&#233; &#226;&#232;&#228; &#226;&#251;&#231;&#251;&#226;&#224;&#229;&#236;&#238;&#227;&#238; &#241;&#239;&#240;&#224;&#226;&#238;&#247;&#237;&#232;&#234;&#232;.
  end;
end;
end;


Какой Close в OnCreate ? И в OnShow тоже нельзя. Проверяй перед созданием формы, а не в ней. Или Error взводи.


 
User1   (2008-05-12 20:40) [19]


> tesseract ©   (12.05.08 20:36) [18]

Честно, налобал даже не проверял.... :o) просто "мысль гения" пришла, а сому "последовательность" shbUnknown даже ниразу не вызывал... :o)))


 
Юрий Зотов ©   (2008-05-12 20:44) [20]

> tesseract ©   (12.05.08 20:26) [14]

Overload - НЕ полиморфизм (а перегрузка). А вот override - это как раз полиморфизм и есть.


 
Сергей М,   (2008-05-12 20:45) [21]


> налобал даже не проверял


Да уж..
Тело ф-ции CreateHandBook - шедевр, достойный истинного "лобуха")


 
User1   (2008-05-12 20:46) [22]


> Юрий Зотов ©   (12.05.08 20:44) [20]

Не предал значения. Совершенно верно !


 
tesseract ©   (2008-05-12 20:53) [23]


> Overload - НЕ полиморфизм (а перегрузка).


В общем-то да. overload не перекрывает сам метод. Определение "полиморфизма" само по себе туманновато.


 
User1   (2008-05-12 21:00) [24]


> tesseract ©   (12.05.08 20:53) [23]


Это да. :o)

http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%BB%D0%B8%D0%BC%D0%BE%D1%80%D1%84%D0%B8%D0%B7%D0%BC_%D0%B2_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F

Кратко смысл полиморфизма можно выразить фразой: «Один интерфейс, множество методов».

Полиморфизм — один из трех важнейших механизмов объектно-ориентированного программирования (наряду с инкапсуляцией и наследованием).

Полиморфизм позволяет писать более абстрактные программы и повысить коэффициент повторного использования кода. Общие свойства объектов объединяются в систему, которую могут называть по-разному — интерфейс, класс. Общность имеет внешнее и внутреннее выражение. Внешне общность проявляется как одинаковый набор методов с одинаковыми именами и сигнатурами (типами аргументов и результатов). Внутренняя общность есть одинаковая функциональность методов. Её можно описать интуитивно или выразить в виде строгих законов, правил, которым должны подчиняться методы. Возможность приписывать разную функциональность одному методу (функции, операции) называется перегрузкой метода (функций, операций).


 
Юрий Зотов ©   (2008-05-12 21:24) [25]

> tesseract ©   (12.05.08 20:53) [23]

> Определение "полиморфизма" само по себе туманновато.

По смыслу - разное поведение одного и того же метода в зависимости от класса. По сути - всего лишь косвенная адресация. Ничего туманного.


 
tesseract ©   (2008-05-12 21:33) [26]


> По смыслу - разное поведение одного и того же метода в зависимости
> от класса.


Определение туманно. Как работает, ясно конечно.


 
main ©   (2008-05-13 02:06) [27]


> tesseract ©   (12.05.08 21:33) [26]


Ну хватит оправдываться. Все ошибаются.
:)


 
Германн ©   (2008-05-13 04:16) [28]


> tesseract ©   (12.05.08 21:33) [26]
>
>
> > По смыслу - разное поведение одного и того же метода в
> зависимости
> > от класса.
>
>
> Определение туманно. Как работает, ясно конечно.

Очень напомнило "Координаты чудес" Шэкли. :)


 
User1   (2008-05-13 06:56) [29]


> Сергей М,   (12.05.08 20:45) [21]

Почему ? :o)


 
Сергей М. ©   (2008-05-13 08:28) [30]

function CreateHandBook...
begin
if Assigned(fHandBook) then
..
    fHandBook.Free //разрушение объекта, в fHandBook остается мусор (1)
..
try
  if not Assigned(fHandBook) then // в случае (1) уловие будет ложным
    fHandBook := TfHandBook.Create(AOwner, ARec); //и эта строчка никогда не будет выполнена (2)
except
  fHandBook.Free; // в случае исключения при выполнении (2) разрушение заведомо несозданного объекта лишено всякого смысла
  fHandBook := nil; // равно как лишена смысла и эта строчка
end;
end;


 
User1   (2008-05-13 08:35) [31]


> Сергей М. ©   (13.05.08 08:28) [30]

function CreateHandBook(AOwner: TComponent; ARec: THandBook): Boolean;
begin
if Assigned(fHandBook) then
  if (fHandBook.FRec.ShowType <> ARec.ShowType) or
    (fHandBook.FRec.GoToIndex <> ARec.GoToIndex) then
    begin
      fHandBook.Free;
      fHandBook := nil;
    end
  else
    if not (fHandBook.WindowState in [wsNormal, wsMaximized]) then
      fHandBook.WindowState := wsNormal
    else
      fHandBook.Show;

Result := True;
try
  if not Assigned(fHandBook) then
    fHandBook := TfHandBook.Create(AOwner, ARec);
except
  Result := False;
end;
end;


?


 
Сергей М. ©   (2008-05-13 08:59) [32]

function CreateHandBook(AOwner: TComponent; ARec: THandBook): Boolean;
begin
Result := True;
if Assigned(fHandBook) then
 if (fHandBook.FRec.ShowType <> ARec.ShowType) or
   (fHandBook.FRec.GoToIndex <> ARec.GoToIndex) then
     FreeAndNil(fHandBook)
 else
   if not (fHandBook.WindowState in [wsNormal, wsMaximized]) then
     fHandBook.WindowState := wsNormal
   else
     fHandBook.Show;

 if not Assigned(fHandBook) then
 try
   fHandBook := TfHandBook.Create(AOwner, ARec);
 except
   Result := False;
 end;
end;


 
XentaAbsenta ©   (2008-05-13 09:42) [33]

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


 
User1   (2008-05-13 10:57) [34]

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

Заранее спасибо !


 
Сергей М. ©   (2008-05-13 11:00) [35]

Какого "такого" ?


 
User1   (2008-05-13 11:06) [36]


> Сергей М. ©   (13.05.08 11:00) [35]

unit uHandBook;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Buttons, ExtCtrls, ComCtrls, ToolWin, DBCtrls, Grids, DBGridEh,
DB, StdCtrls;

type

{ TfHandBook }

TShowHandBook = (shbUnknown, shbRequisite, shbEmployee, shbJobTitle, shbUser, shbRole,
  shbLog, shbPlace, shbPoint, shbTpPoint, shbStreet, shbTpStreet, shbHome,
  shbTpHome, shbPost, shbManagement, shbProperty, shbOtherRem, shbEntrance,
  shbApartment, shbRoom, shbTpRoom);

PHandBook = ^THandBook;
THandBook = packed record
  ShowType: TShowHandBook;
  case Integer of
    0: (
      GoToIndex: Integer);
end;

TfHandBook = class(TForm)
  pnl: TPanel;
  sBtnClose: TSpeedButton;
  sBtnPrint: TSpeedButton;
  sBtnHelp: TSpeedButton;
  tb: TToolBar;
  sbInfo: TStatusBar;
  sb: TStatusBar;
  nv: TDBNavigator;
  tSprt1: TToolButton;
  tBtnFilter: TToolButton;
  grd: TDBGridEh;
  ds: TDataSource;
  procedure FormCreate(Sender: TObject);
  procedure FormShow(Sender: TObject);
  procedure FormPaint(Sender: TObject);
  procedure FormActivate(Sender: TObject);
  procedure FormResize(Sender: TObject);
  procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  procedure FormClose(Sender: TObject; var Action: TCloseAction);
  procedure FormDeactivate(Sender: TObject);
  procedure FormHide(Sender: TObject);
  procedure FormDestroy(Sender: TObject);
private
  { Private declarations }
  FRec: THandBook;
public
  { Public declarations }
  constructor Create(AOwner: TComponent; ARec: THandBook); overload;
end;

function CreateHandBook(AOwner: TComponent; ARec: THandBook): Boolean;

resourcestring
SUnknown = "&#205;&#229;&#232;&#231;&#226;&#229;&#241;&#242;&#237;&#251;&#233; &#241;&#239;&#240;&#224;&#226;&#238;&#247;&#237;&#232;&#234;";
SRequisite = "&#209;&#239;&#240;&#224;&#226;&#238;&#247;&#237;&#232;&#234; &#240;&#229;&#234;&#226;&#232;&#231;&#232;&#242;&#251; &#239;&#240;&#229;&#228;&#239;&#240;&#232;&#255;&#242;&#232;&#255;";
SEmployee = "";
SJobTitle = "";
SUser = "";
SRole = "";
SLog = "";
SPlace = "";
SPoint = "";
STpPoint = "";
SStreet = "";
STpStreet = "";
SHome = "";
STpHome = "";
SPost = "";
SManagement = "";
SProperty = "";
SOtherRem = "";
SEntrance = "";
SApartment = "";
SRoom = "";
STpRoom = "";

var
fHandBook: TfHandBook;

implementation

uses
{ &#207;&#238;&#228;&#234;&#235;&#254;&#247;&#229;&#237;&#232;&#229; &#228;&#238;&#239;&#238;&#235;&#237;&#232;&#242;&#229;&#235;&#252;&#237;&#251;&#  245; &#236;&#238;&#228;&#243;&#235;&#229;&#233;. }
uDm, IniFiles, uConstants, uDbs;

{$R *.dfm}

function CreateHandBook(AOwner: TComponent; ARec: THandBook): Boolean;
begin
if Assigned(fHandBook) then
  if (fHandBook.FRec.ShowType <> ARec.ShowType) or
    (fHandBook.FRec.GoToIndex <> ARec.GoToIndex) then
    fHandBook.Free
  else
    if not (fHandBook.WindowState in [wsNormal, wsMaximized]) then
      fHandBook.WindowState := wsNormal
    else
      fHandBook.Show;

Result := True;
try
  if not Assigned(fHandBook) then
    fHandBook := TfHandBook.Create(AOwner, ARec);
except
  Result := False;
  fHandBook.Free;
  fHandBook := nil;
end;
end;

constructor TfHandBook.Create(AOwner: TComponent; ARec: THandBook);
begin
inherited Create(AOwner);
FRec := ARec;
case FRec.ShowType of
  shbUnknown:
    begin
      Close;
    end;
  shbRequisite:
    begin
      Caption := SRequisite;
      ds.DataSet := dm.qRequisite;
    end;
else
  begin
    //&#205;&#229;&#232;&#231;&#226;&#229;&#241;&#242;&#237;&#251;&#233; &#226;&#232;&#228; &#226;&#251;&#231;&#251;&#226;&#224;&#229;&#236;&#238;&#227;&#238; &#241;&#239;&#240;&#224;&#226;&#238;&#247;&#237;&#232;&#234;&#232;.
  end;
end;
end;

procedure TfHandBook.FormCreate(Sender: TObject);
begin
if OpenDataSet(ds.DataSet) then
  begin
    //
  end
else
  begin
    //
  end;
end;

procedure TfHandBook.FormShow(Sender: TObject);
begin
//
end;

procedure TfHandBook.FormPaint(Sender: TObject);
begin
//
end;

procedure TfHandBook.FormActivate(Sender: TObject);
begin
//
end;

procedure TfHandBook.FormResize(Sender: TObject);
begin
//
end;

procedure TfHandBook.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
//
end;

procedure TfHandBook.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//
end;

procedure TfHandBook.FormDeactivate(Sender: TObject);
begin
//
end;

procedure TfHandBook.FormHide(Sender: TObject);
begin
//
end;

procedure TfHandBook.FormDestroy(Sender: TObject);
begin
//
end;

end.


 
Игорь Шевченко ©   (2008-05-13 11:15) [37]

Все выбросить на помойку клавишей Shift+Delete

Читать Тейксейру с Пачеко


 
Сергей М. ©   (2008-05-13 11:20) [38]


> User1   (13.05.08 11:06) [36]


Это не справочник, это просто лобуховая декларация и реализация некоего класса формы)


 
User1   (2008-05-13 12:30) [39]


> Сергей М. ©   (13.05.08 11:20) [38]

А что же догда понимать под справочником программы ?

Тогда объясните как реализовать "гибкий справочник" для работы с некоторыми таблицами в БД ?...


 
Сергей М. ©   (2008-05-13 12:40) [40]


> что же догда понимать под справочником программы ?


Это тебя надо спросить, что ты под этим понимаешь)


> как реализовать "гибкий справочник"


Какой такой "гибкий" ?)



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

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

Наверх





Память: 0.58 MB
Время: 0.032 c
15-1210763844
@!!ex
2008-05-14 15:17
2008.06.29
тесселяция выпуклого многоугольника.


3-1200914554
Mike Kouzmine
2008-01-21 14:22
2008.06.29
"Внебрачные отношения."


2-1212174519
Pi:=3.14...
2008-05-30 23:08
2008.06.29
Переход к запускному файлу


15-1210977956
Draw
2008-05-17 02:45
2008.06.29
Чем заменить Canvas.CopyRect ?


11-1190587748
Jon
2007-09-24 02:49
2008.06.29
Database large object





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский