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

Вниз

ListView   Найти похожие ветки 

 
Robt   (2007-06-09 19:39) [0]

А как сделать чтобы элементы ListView не выделялись правой кнопкой мыши ?


 
Vladimir Kladov   (2007-06-09 21:43) [1]

Хм. Вы программист? API изучать надо.

var ChangingState: Boolean;
   LV1RClick: Boolean;
procedure TForm1.ListView1LVStateChange(Sender: PControl; IdxFrom,
 IdxTo: Integer; OldState, NewState: Cardinal);
var i: Integer;
begin
 if ChangingState then Exit;
 if LV1RClick then
 begin
   ChangingState := TRUE;
   if (OldState and LVIS_SELECTED = 0) xor
      (NewState and LVIS_SELECTED = 0) then
       for i := IdxFrom to IdxTo do
         if NewState and LVIS_SELECTED = 0 then
           Sender.LVItemState[ i ] :=
             Sender.LVItemState[ i ] + [ lvisSelect ]
         else
           Sender.LVItemState[ i ] :=
             Sender.LVItemState[ i ] - [ lvisSelect ];
   ChangingState := FALSE;
 end;
end;

procedure TForm1.ListView1MouseDown(Sender: PControl;
 var Mouse: TMouseEventData);
begin
 if Mouse.Button = mbRight then
   LV1RClick := TRUE
 else
   LV1RClick := FALSE;
end;


 
Robt   (2007-06-10 19:52) [2]

Ой спасибо !!! :)
насчет программиста - у каждого бывает "тупиковый период"


 
domo   (2007-06-29 13:48) [3]

Я снова со своими вопросами про вирт. список. Наверно, в этой ветке будет лучше. Надеюсь, подскажете, кто может:

- как в вирт.списке ListView (да и в EditBox тоже) отображать табуляцию, имеющуюся в строках, считываемых из файла. У меня вместо нее появляется какой-то значок - крякозяблик.

- как проверить, что списки ListView и StrList еще существуют, а не разрушены уже?

- как в списки ListView и StrList читать строки Unicode (UTF), есть какие-то правила?


 
Vladimir Kladov   (2007-06-29 17:02) [4]

Наверное, символ табуляции в list view всегда так отображается. Это наверняка не от виртуальности. Выход - только owner draw.

Остальное... 2е - как-то непонятно. Вы же сами их конструируете и уничтожаете. 3е - совсем непонятно. Так же как и всегда. Там параметр Txt вроде бы KOLString. Для unicode есть WStrList.


 
domo   (2007-07-02 16:55) [5]

Спасибо за 1 и 3. Попробую WStrList. А owner draw - это самому отслеживать? Для меня это несложно, но думал уже Вы сделали.

2 - так программа же немного разрослась. Попробуй уследи. Я думал можно там на что-то проверить, какой-нибудь ноль или nil или еще что, тяжело по коду следить. Можно?

P.S. Я задал поиск на "TListView" по каталогу со справкой КОЛ и не получил ни одной ссылки. А Вы же пишете, что самая доступная и свежая справка именно в самом коде КОЛ. Может по  ListView еще нет справки или где она?


 
Vladimir Kladov   (2007-07-02 20:06) [6]

У нас нет TListView, у нас TControl. Ищите listview или list view.


 
domo   (2007-07-04 18:07) [7]

Я попробовал WStrList, но у меня пока не получилось. Метода AnsiSort я там не обнаружил, метода Find - тоже. А что же тогда вместо них?

Теперь про помощь на list view и listview. Да, Вы правы, на эти слова что-то я нашел. Но информация настолько скудная, настолько скудная, что я больше почерпнул из Ваших ответов и особенно ответов Дмитрия К (еще раз спасибо ему за примеры), чем из помощи по КОЛ. Ну не все же такие классные программисты, как Вы (речь даже не про меня), может Вы все-таки расширите эту помощь, чтобы она была полезной для большего числа людей?


 
=BuckLr=   (2007-07-04 19:29) [8]


> Метода AnsiSort я там не обнаружил

.Sort() ??? AnsiSort там не будет, это же юникодовый список


> метода Find - тоже

Можно написать свой, используя Find от pStrList.


>  как проверить, что списки ListView и StrList еще существуют

Ну это же как обычно, что за проблемы?
if Assigned(MyStrList) then ...


> как в списки ListView и StrList читать строки Unicode

Если речь о загрузке из файла, то сейчас погляжу в свои исходнички...


 
=BuckLr=   (2007-07-04 19:54) [9]

Ага, нашёл, только кода много, потому что там не только UTF-8, но и UTF-16 big и low endian и куча ещё чего - всё заточено под чтение юникодовых текстовых файлов. А что тебе нужно - я не знаю.

Ну в общем, если тебе просто сохранить-загрузить что-то своё, то SaveFromFile и LoadFromFile :)

Ну а если Что до справки - тебе дело говорят: KOL.pas вполне хватает...


 
=BuckLr=   (2007-07-04 20:03) [10]

Ага, нашёл, только кода много, потому что там не только UTF-8, но и UTF-16 big и low endian и куча ещё чего - всё заточено под чтение юникодовых текстовых файлов. А что тебе нужно - я не знаю.

Ну в общем, если тебе просто сохранить-загрузить что-то своё, то SaveFromFile и LoadFromFile :)

Ну а если Что до справки - тебе дело говорят: KOL.pas вполне хватает...


 
domo   (2007-07-05 14:42) [11]

Я посмотрел - мой текст UTF-8.
Метод .Sort() попробовал, действительно работает, Find от pStrList прикрутить попробую, но не уверен, что смогу, - иногда бывает проще свой код написать, чем разобраться в чужом. Про if Assigned(MyStrList) then я не догадался. В общем, спасибо.

А про помощь KOL.pas я все-таки не согласен. Мне, н-р, этой помощи мало. Посмотри, что там про listview - крохи. И вообще, чем больше и качаственнее помощь - тем лучше.


 
domo   (2007-07-09 10:17) [12]

Не могу даже попробовать разобраться с методом Find, т.к. никак не могу считать свой файл UTF-8 в вирт.список. Текстовые редакторы UTF-8 читают этот файл нормально, а у меня получается всего одна очень длинная строка (т.е. игнорируются #13#10), причем вся из знаков вопроса. Что-то я не так делаю. А читаю я точно так же как и в обычный список, только pStrList заменил pWStrList. Требуется помощь, подскажите, как надо.


 
=BuckLr=   (2007-07-09 11:20) [13]


> Мне, н-р, этой помощи мало


> Не могу даже попробовать разобраться с методом Find

Ну это уже другой вопрос, когда ты не можешь. Лично я без труда делал и свой сорт, и много ещё чего. Надо просто подумать чуть-чуть.


 
=BuckLr=   (2007-07-09 11:29) [14]


> Требуется помощь, подскажите, как надо.

Ну как тебе подсказать? Ты хоть код бы привёл, а то ж мы почём знаем, что ты там написал? Сложно отвечать на вопросы типа "я хочу это, но у меня не получается, скажите что не так"
Кидай код, короче.


 
domo   (2007-07-09 18:07) [15]

Нет проблем, вот он, шедевр создания вирт. списка UTF8, дающий почему-то одну длинную строку из знаков вопроса. Только код большой, но, как говорится - сам напросился:

interface

   OpenSaveDialog1: TKOLOpenSaveDialog;
   TabControl1: TKOLTabControl;
   TabControl1_Tab0: TKOLPanel;
   TabControl1_Tab1: TKOLPanel;
   Toolbar1: TKOLToolbar;
   Memo1: TKOLMemo;

   procedure ProgStartHere(Sender: PObj);

 private
   { Private declarations }
 public
   { Public declarations }
  procedure lvWOnLVData(Sender: PControl; Idx, SubItem: Integer;
         var Txt: KOL_String; var ImgIdx: Integer; var State: DWORD;
         var Store: Boolean);
  procedure OpenFileForList(ks: KOLString);
 end;

var
 sListW, sListW2: pWStrList;// for UTF
 LvW: PControl;

procedure LVColumnClick(Dummy: Pointer; Sender: PControl; Idx: Integer);

implementation

procedure TForm1.lvWOnLVData(Sender: PControl; Idx, SubItem: Integer;
 var Txt: KOL_String; var ImgIdx: Integer; var State: DWORD; var Store: Boolean);
begin
case SubItem of
 0: Txt:=int2str(Idx+1);
 1: Txt:=sListW.Items[Idx];
end;
end;//lvWOnLVData

procedure TForm1.OpenFileForList(ks: KOLString);
var i,j: integer;

begin//OpenFileForList
sListW.Clear; sListW2.Clear; Memo1.Clear;
  //sListW.SetText(StrLoadFromFile(ks), false); {попробовать еще так}
if sListW.LoadFromFile(ks) then begin{if7}
  //try to remove evrth until [Data] section. Пока не работает
(*i:=0;
 repeat
  Memo1.Text:=Memo1.Text +#13+#10 + sListW.Items[i];
  inc(i);
 until (sListW.Items[i] = "[Data]") or (i = sListW.Count);
 for j:=i-1 downto 0 do sListW.Delete(j);
*)
 LvW.LVCount:=0;
 LvW.Update;
 LvW.LVCount:=sListW.Count;
end{if7}
else Form1.Form.StatusText[1]:="Ошибка при чтении списка из файла!";

end;//OpenFileForList

//========{Старт обработки}======
procedure TForm1.ProgStartHere(Sender: PObj);
var
s: string;

begin
Form1.Form.StatusText[0]:="";
Form1.Form.StatusText[1]:="";
Form1.Form.StatusPanelRightX[0]:=155;
sListW:=NewWStrList;  form.add2autofree(sListW); //list for UTF8 file
sListW2:=NewWStrList; form.add2autofree(sListW2);//try to make undo in ListW2
//Создание списка UTF
LvW:=NewListView(TabControl1.Pages[1], lvsDetail, [lvoRowSelect, lvoGridlines, lvoOwnerData], nil, nil, nil).SetPosition(0,24).SetSize(300,359).SetAlign(caNone){.BringToFront};
LvW.AnchorTop:=true; LvW.AnchorBottom:=true; LvW.AnchorLeft:=true;
LvW.LVColAdd("N стр.", taRight, 45);//Создание 2 колонок
LvW.LVColAdd("Сама строка", taLeft, 255);
LvW.OnLVData:=lvWOnLVData;//на ввод данных
end;//======cтарт обработки ProgStartHere=======

procedure TForm1.ToolbarClicked(Sender: PObj);
var
s: string;
i,j: integer;
kolstr,ks: KOL_string;

begin//ToolbarClicked
if Toolbar1.RightClick then beep (150, 100)
else begin{4}
 case Toolbar1.CurIndex of
  0: begin{c0}
   if OpenSaveDialog1.Execute then begin{if2}//which file to open
     OpenFileForList(OpenSaveDialog1.Filename);//open file in listview
   end{if2} else beep (150, 100);
  end{c0};
  1: if sListW.Count>0 then begin{i5}//save modified file if it"s not empty
      sListW.AppendToFile(ExtractFileNameWOext(OpenSaveDialog1.Filename)+"_new.txt");
     end{i5};
  //...
  20: Form.Close;//21=17 buttons + 4 separators
 end{case Toolbar1.CurIndex};
end{4};
end;//ToolbarClicked

//try to sort listW when column header is clicked. Пока не хочет работать
procedure {TForm1.}LVColumnClick(Dummy : Pointer; Sender: PControl; Idx: Integer);
begin
LvW.LVOptions:=[lvoSortAscending];//иначе не работает
LvW.BeginUpdate;
LvW.LVSortColumn(idx); //sorting for column? Look for more info on that method.
LvW.LVCount:=0;
LvW.Update;
LvW.LVCount:=sListW.Count;
LvW.EndUpdate;
end;


 
Vladimir Kladov   (2007-07-09 19:25) [16]

UTF-8 - это не WideString. Это обычные Ansi-символы, в которой unicode-символы представлены в виде 16-ричных цифр. Метод TWStrList.LoadFrom... предназначен для загрузки именно Unicode, и именно 2х-байтного unicode (есть ещё 4-байтный вариант).

Совет: поищите по KOL.pas строку UTF, может что-то прояснится насчёт загрузки именно UTF.


 
=BuckLr=   (2007-07-10 12:25) [17]

Я бы вообще использовал RichEdit.RE_Text вместе с re_TextUnicode - работает без проблем. А с Memo повозиться придётся


 
mdw ©   (2007-07-10 13:21) [18]

А в чем проблема? есть же функции UTF8xxxxx. Читайте файл и преобразуйте в нужный формат.


 
domo   (2007-07-11 09:54) [19]

Нет, не всё так просто (для меня конечно, для остальных-то, думаю, всё ясно).
Я просмотрел kol.pas, выбрал функцию UTF8_2WideString (более подходящего не нашел), поменял слегка свой код, но - не работает. Строки-то читаются в ListView, но в конце почти каждой строки - мусор из знаков вопроса и крякозябликов. Меня замучили крякозяблики вместо табуляции, а тут еще и эти. А может быть ошибка в функции UTF8_2WideString или где-то не тот тип я использую?

Да, мне же не только в Memo1 надо читать строки (там только комментарии),
основной массив строк - в вирт.списке. Делаю так:
- из файла считываю в pStrList,
- в вирт.список перегоняю lvOnLVData:

procedure TForm1.lvOnLVData(Sender: PControl; Idx, SubItem: Integer;
 var Txt: KOL_String; var ImgIdx: Integer; var State: DWORD; var Store: Boolean);
begin
case SubItem of
 0: Txt:=int2str(Idx+1);
 1: Txt:=UTF8_2WideString(sList.Items[Idx]);
end;
end;//lvOnLVData

А кстати, по остальным процедурам замечаний нет? А то там тоже не все работает.


 
mdw ©   (2007-07-12 11:47) [20]

Даже не в курсе был, что в KOL есть функции для Utf8. Всегда пользовался из System. Правда в Д5 их вроде нет, но в Д7 есть.

Постотрите:
AnsiToUtf8, PUCS4Chars, StringToWideChar, UCS4StringToWideString, UnicodeToUtf8, UTF8Decode, UTF8Encode, Utf8ToAnsi, Utf8ToUnicode, WideCharLenToString, WideCharLenToStrVar, WideCharLenToStrVar, WideCharToString, WideCharToStrVar, WideStringToUCS4String.


 
domo   (2007-07-13 09:11) [21]

А как же я посмотрю, если у меня только Д5?


 
=BuckLr=   (2007-07-13 12:30) [22]


> А как же я посмотрю, если у меня только Д5?

Нету в систем. В КОЛ смотри


 
mdw ©   (2007-07-13 12:47) [23]


> А как же я посмотрю, если у меня только Д5?

Можно всять System из Д7 и выдрать нужное.


 
Дмитрий К ©   (2007-07-13 13:05) [24]


> domo   (11.07.07 09:54) [19]
>
> Нет, не всё так просто (для меня конечно, для остальных-
> то, думаю, всё ясно).
> Я просмотрел kol.pas, выбрал функцию UTF8_2WideString (более
> подходящего не нашел), поменял слегка свой код, но - не
> работает. Строки-то читаются в ListView, но в конце почти
> каждой строки - мусор из знаков вопроса и крякозябликов.
>  Меня замучили крякозяблики вместо табуляции, а тут еще
> и эти. А может быть ошибка в функции UTF8_2WideString или
> где-то не тот тип я использую?
>

Преобразуй при загрузке:

WStrList.SetText(UTF8_2WideString(StrLoadFromFile("файл")));


 
domo   (2007-07-13 14:36) [25]

Увы, WStrList.SetText(UTF8_2WideString(StrLoadFromFile(ks))); не работает: латынь видна, кириллица - крякозябликами, в конце почти каждой строчки с десяток знаков вопроса. Да и Кладов уже мне писал, что "UTF-8 - это не WideString".

А можно к этому форуму прикрепить файл system.pas из Д7? Я бы в нем поковырялся насчет функций про к-рые писал mdw... Или может уже у кого-то есть выдранные?


 
mdw ©   (2007-07-13 14:40) [26]

Куда прислать? или письмо мне напиши, пришлю system.pas. Кстати в kolatl.7z должны быть, я в свое время добавлял для совместимости с Д5.


 
domo   (2007-07-13 15:01) [27]

Ох ты, прошу прощения, работает! Я же поставил и забыл потом снять преобразование UTF8_2WideString с procedure TForm1.lvWOnLVData. Огромное спасибо Дмитрию К.


 
domo   (2007-07-13 15:07) [28]

mdw: Знаешь, все-таки пришли, вдруг я еще что-то захочу преобразовать: dom3me СОБАЧКА yahoo.com


 
domo   (2007-07-13 15:35) [29]

Дмитрию К: А сохранять как, а то sListW.SaveToFile(ExtractFileNameWOext(ks)+"(New).txt"); дает мне файл не UTF, а Unicode.


 
Дмитрий К ©   (2007-07-13 15:50) [30]


> А сохранять как,


Например, использовать функцию UTF8Encode из модуля system.pas из D7


 
mdw ©   (2007-07-13 16:14) [31]

Послал. Там 2 письма, первый раз забыл сам файл прикрепить.:)


 
domo   (2007-07-13 17:03) [32]

mdw: получил, спасибо. Посмотрю на досуге, наверняка что-то пригодится.
Дмитрий К: это непросто для меня, но спасибо, попробую.


 
domo   (2007-07-24 11:14) [33]

Разобрался на досуге с system.pas из Д7. Не знаю, насколько это оптимально, но пришлось выдрать 2 функции:

function UnicodeToUtf8(Dest: PChar; MaxDestBytes: Cardinal; Source: PWideChar; SourceChars: Cardinal): Cardinal; // UnicodeToUtf8(4)

function Utf8Encode(const WS: WideString): {UTF8}String; // я заменил на String, т.к. не нашел в КОЛ UTF8String


А сохраняю так:
if StrSaveToFile(ExtractFileNameWOext(DicFName)+"_new.txt", UTF8Encode(SListW.Text))
  then Form1.Form.StatusText[1]:=PChar("Файл сохранён.")
  else Form1.Form.StatusText[1]:="Ошибка при сохранении файла!";

Вроде все работает, спасибо Дмитрий К и mdw за помощь и за файл.
Если можно сделать проще, надежнее (вроде бы последний символ может заменяться на #0 ?), быстрее - напишите.

P.S. Не вставил еще ресурс картинки на кнопки (Не ставятся никакие пакеты), но я срочно на неделю уехал на море, приехал, а тему закрыли.
Надо будет через недельку еще попробовать и именно через Д5, не хочется свою собственную программу кромсать Ресторатором.


 
Demt   (2007-08-04 19:08) [34]

Дабы не плодить лишних тем пишу в эту ветку.
Нужно организовать из ListView загрузку/сохрание в текстовый файл с разделителями.
Нашел требуемое для VCL.
Вот пример сохранения (VCL):

Procedure SaveListView(S: String; ListView: TListView);
Const Delimiter = "|";
Var ff: TextFile;
   t: Integer;
begin
AssignFile(ff, S);
ReWrite(ff);
try
 With ListView Do For t:=0 to Items.Count - 1 Do
  WriteLn(ff,StringReplace(Items[t].Caption + Delimiter + Items.Item[t].SubItems.Text,#13#10,Delimiter,[rfReplaceAll]));
finally
 CloseFile(ff);
end;
end;

Нет нужных методов, таких как SubItems.Text.
StringReplace заменяется на StrReplace, и выносится отдельной строкой..
Жду вразумительного ответа


 
Vladimir Kladov   (2007-08-04 21:53) [35]

У нас LVITems[ line, col ]. SubItems нет и не будет.


 
Дмитрий К ©   (2007-08-04 21:55) [36]


> Жду вразумительного ответа
На какой вопрос?

Пример загрузки-сохранения:
program svldlv;

uses
 {Windows, Messages,} Kol;

type
 PForm1 = ^TForm1;
 TForm1 = object(TObj)
   form, btn1, btn2, lv: PControl;
 public
   procedure DoClick1(Sender: PObj);
   procedure DoClick2(Sender: PObj);
   procedure LoadList(Path: string; Delimiter: Char);
   procedure SaveList(Path: string; Delimiter: Char);
 end;

var
 Form1: PForm1;

procedure NewForm1(var Result: PForm1; AParent: PControl);
var i, j: Integer;
begin
 New(Result, Create);
 with Result^ do
 begin
   form := NewForm(AParent, "Form1");
   form.Add2AutoFree(Result);
   Applet := form;
   lv:=NewListView(form, lvsDetail, [], nil, nil, nil).SetClientSize(600,400).ResizeParentRight;
   lv.LVColAdd("Column0", taLeft, 150);
   lv.LVColAdd("Column1", taLeft, 150);
   lv.LVColAdd("Column2", taLeft, 150);
   lv.LVColAdd("Column3", taLeft, 150);
   for i := 0 to 20 do
   begin
     lv.LVItemAdd("Item " + Int2Str(i));
     for j := 1 to lv.LVColCount - 1 do
     begin
       lv.LVItems[i, j] :="SubItem " + int2str(i) + ":" + int2str(j);
     end;
   end;
   btn1 := NewButton(form, "Load").PlaceUnder;
   btn1.OnClick := DoClick1;
   btn2 := NewButton(form, "Save").PlaceRight.ResizeParentBottom;
   btn2.OnClick := DoClick2;
 end;
end;

{ TForm1 }

procedure TForm1.LoadList(Path: string; Delimiter: Char);
var Sl: PStrList; S: string; ColCount, i, j: Integer;
begin
 Sl := NewStrList;
 try
   Sl.LoadFromFile(Path);
   S := Sl.Items[0];
   for i := Lv.LVColCount - 1 downto 0 do
     Lv.LVColDelete(i);
   for i := Lv.LVCount - 1 downto 0 do
     Lv.LVDelete(i);
   ColCount := 0;
   for i := 1 to Length(S) do
   begin
     if S[i] = Delimiter then
       inc(ColCount);
   end;
//    inc(ColCount);
   for i := 0 to ColCount {- 1} do
     Lv.LVColAdd("Column " + int2str(i), taLeft, 150);
   for i := 0 to Sl.Count - 1 do
   begin
     S := Sl.Items[i];
     Lv.LVItemAdd(Parse(s, Delimiter));
     for j := 1 to ColCount {- 1} do
       Lv.LVItems[i, j] := Parse(S, Delimiter);
   end;
 finally
   Sl.Free;
 end;
end;

procedure TForm1.SaveList(Path: String; Delimiter: Char);
var i, j: integer;  Stream: PStream;
begin
 Stream := NewWriteFileStream(Path);
 try
   for i := 0 to lv.LVCount - 1 do
   begin
     Stream.WriteStr(lv.LVItems[i, 0]);
     for j := 1 to lv.LVColCount - 1 do
     begin
       Stream.WriteStr(Delimiter + lv.LVItems[i, j]);
     end;
     Stream.WriteStr(#13#10);
   end;
 finally
   Stream.Free;
 end;
end;

procedure TForm1.DoClick1(Sender: PObj);
begin
 LoadList("lv.txt", "|");
end;

procedure TForm1.DoClick2(Sender: PObj);
begin
 SaveList("lv.txt", "|");
end;

begin
 NewForm1(Form1, nil);
 Run(Applet);
end.


 
Demt   (2007-08-05 08:26) [37]

Теперь понял алгоритм, а то что-то в голове вырисовывалось, но не до конца. Про LVItems я знаю, это даже лучше чем в VCL.
Дмитрий К: Спасибо за предоставленный код.


 
Robt   (2007-09-18 15:37) [38]

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


 
Vladimir Kladov ©   (2007-09-18 17:08) [39]

За раз можно и без указателей. Достаточно оба сделать виртуальными и в OnData брать данные из одного и того же места.


 
Robt   (2007-09-18 19:01) [40]

А как оно работает ?



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

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

Наверх





Память: 0.57 MB
Время: 0.008 c
2-1211399141
dumnsar
2008-05-21 23:45
2008.06.15
Драг дроп


15-1209726044
lizardy
2008-05-02 15:00
2008.06.15
python


3-1199992043
Виталий Панасенко(дом)
2008-01-10 22:07
2008.06.15
SQL Server & Co


2-1211447916
dumka
2008-05-22 13:18
2008.06.15
Отчеты


15-1209307659
Dmitry S
2008-04-27 18:47
2008.06.15
Прочее





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