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

Вниз

Можно ли в поток добавить данные?   Найти похожие ветки 

 
sergeyst ©   (2007-06-26 13:28) [0]

Сабж.


 
Джо ©   (2007-06-26 13:29) [1]

Можно. И даже внезависимости от того что есть «поток» — stream или thread.


 
Lamer@fools.ua ©   (2007-06-26 13:30) [2]

> И даже внезависимости от того что есть «поток» — stream
> или thread.


... или поток сознания :-)


 
sergeyst ©   (2007-06-26 14:00) [3]

fs := TFileStream("aaa.txt", fmOpenRead);
Как добавить сюда строку?


 
Kerk ©   (2007-06-26 14:03) [4]

Узнаю брата Васю.. тьфу.. форум... процент даунов зашкаливает


 
wicked ©   (2007-06-26 14:05) [5]


> fs := TFileStream("aaa.txt", fmOpenRead);
> Как добавить сюда строку?

fs.Write(@s[1], Length(s))
пора уже в фак выносить


 
sergeyst ©   (2007-06-26 14:09) [6]


> Kerk ©   (26.06.07 14:03) [4]

злой ты


 
Сергей М. ©   (2007-06-26 14:27) [7]


> sergeyst ©   (26.06.07 14:00) [3]
>
> fs := TFileStream("aaa.txt", fmOpenRead);
> Как добавить сюда строку?


Никак.
Я тоже злой)


 
sergeyst ©   (2007-06-26 15:15) [8]


> Сергей М. ©   (26.06.07 14:27) [7]

> Никак. - это по злости или правда? А как же wicked ©   (26.06.07 14:05) [5] ?


 
homm ©   (2007-06-26 15:17) [9]

>
> > Никак. - это по злости или правда? А как же wicked ©  
> (26.06.07 14:05) [5] ?

Включи моск. Как ты добавить строку в файл, коотрый открыл для чтения?


 
sergeyst ©   (2007-06-26 15:26) [10]


> homm ©   (26.06.07 15:17) [9]

fmOpenRead


 
sergeyst ©   (2007-06-26 15:27) [11]

т.е. fmOpenReadWrite


 
Сергей М. ©   (2007-06-26 15:29) [12]


> sergeyst ©   (26.06.07 15:15) [8]
> > Никак. - это по злости или правда?


Это злая правда злой суровой жизни - нельзя курочить то что тебе не дозволено.


> А как же wicked


Он спросонья не увидел read


 
Сергей М. ©   (2007-06-26 15:30) [13]


> т.е. fmOpenReadWrite


Это же другой коленкор)


 
homm ©   (2007-06-26 15:34) [14]

> [11] sergeyst ©   (26.06.07 15:27)
> т.е. fmOpenReadWrite

Вот теперь правильно.


 
oldman ©   (2007-06-26 15:35) [15]


> sergeyst ©   (26.06.07 15:27) [11]


Так тебе в поток добавить или в файл записать???


 
P   (2007-06-26 15:37) [16]


procedure TForm1.Button1Click(Sender: TObject);
var
 f1: TFileStream;
 mystr: string;
begin
 if not FileExists(Myfile) then
   f1 := TFileStream.Create(Myfile, fmCreate or fmShareExclusive)
 else
   f1 := TFileStream.Create(Myfile, fmOpenReadWrite or fmShareExclusive);
 try
   mystr := "bu-ga-ga";
   f1.Write(mystr[1], length(mystr));

 finally
   f1.Free;
 end;
end;


 
Сергей М. ©   (2007-06-26 15:39) [17]


> oldman ©   (26.06.07 15:35) [15]


Ему по колено - он чатом каким-то озабочен)...
Непонятно с какой луны свалившиммся, но в котором якобы есть "строки" и "потоки")
Вот он и окучивает TFileStream, благо в названии класса есть что-то напоминающее вожделенный "поток")


 
Плохиш ©   (2007-06-26 15:41) [18]

Нифигасе, а я так и не понял, куда надо добавить строку... Велика и могуча руска языка...


 
sergeyst ©   (2007-06-26 15:42) [19]


> oldman ©   (26.06.07 15:35) [15]

В поток.
Ну вообще-то мне нужно узнать какой тип данных мне послали по чату. Вот я и хочу все данные пересылать SendStream, а там уже фильтровать.

> Сергей М. ©   (26.06.07 15:39) [17]

Не только им


 
Сергей М. ©   (2007-06-26 15:43) [20]


> sergeyst ©   (26.06.07 15:42) [19]


> Не только им


Было бы станным, если бы только им)


 
oldman ©   (2007-06-26 15:44) [21]


> Ну вообще-то мне нужно узнать какой тип данных мне послали
> по чату.


Тебе там можно N типов данных слать? Прямо вот в чате???


 
P   (2007-06-26 15:44) [22]


> sergeyst ©   (26.06.07 15:42) [19]


пиши протокол уровня приложения. Сперва узнай что такое OSI потом будешь уже писать чат.

http://www.citforum.ru/nets/switche/osi.shtml


 
Сергей М. ©   (2007-06-26 15:44) [23]


> вообще-то мне нужно узнать какой тип данных мне послали
> по чату.


Тебе же уже сказали - ищи и изучай ПИО этого чата !
В чем проблема-то ?


 
Сергей М. ©   (2007-06-26 15:47) [24]

Ноги растут отсюда:

http://delphimaster.net/view/2-1182836764/


 
sergeyst ©   (2007-06-26 15:47) [25]


> Сергей М. ©   (26.06.07 15:44) [23]

Не успел спросить что это такое.


 
Сергей М. ©   (2007-06-26 15:48) [26]

ПИО = Протокол Информационного Обмена.

Помогло ?


 
sergeyst ©   (2007-06-26 15:51) [27]


> Сергей М. ©   (26.06.07 15:48) [26]

Это совет сделать протокол самому?


 
homm ©   (2007-06-26 15:52) [28]

> [27] sergeyst ©   (26.06.07 15:51)

Ч есделать то? Тебе ясно написано, изучить.


 
Сергей М. ©   (2007-06-26 15:54) [29]


> sergeyst ©   (26.06.07 15:51) [27]
> Это совет сделать протокол самому?


Да.

Особенно - для чужого, уже существующего чата.

Долой дискриминацию, не позволяющую лезть со своим уставом в чужой монастырь !)


 
sergeyst ©   (2007-06-26 15:55) [30]


> homm ©   (26.06.07 15:52) [28]

P   (26.06.07 15:44) [22] - то, что находится по этой ссылке, я уже читал когда-то. Ну и как мне это знание может помочь?


 
Сергей М. ©   (2007-06-26 16:03) [31]


> sergeyst ©   (26.06.07 15:55) [30]


> как мне это знание может помочь?


тебе это может помочь хотя бы в части 7-го уровня.


 
sergeyst ©   (2007-06-26 16:14) [32]

Долой дискриминацию, не позволяющую лезть со своим уставом в чужой монастырь !) - Полностью поддерживаю. Вот, только, чат надо делать с 0. Какие примеры в сети ни нашел (в т.ч. на этом сайте) - пересылка файлов не работает.

> тебе это может помочь хотя бы в части 7-го уровня.

Ну и как ими мне пользоваться через TClientSocket/TServerSocket?


 
homm ©   (2007-06-26 16:17) [33]

> Долой дискриминацию, не позволяющую лезть со своим уставом
> в чужой монастырь !) - Полностью поддерживаю.

Невменяемый? Это вообще-то стеб был над тобой.


 
oldman ©   (2007-06-26 16:18) [34]


> Вот, только, чат надо делать с 0. Какие примеры в сети ни
> нашел (в т.ч. на этом сайте) - пересылка файлов не работает.
>


Каких файлов и куда?
имхо, не чат надо делать с 0...


 
Сергей М. ©   (2007-06-26 16:18) [35]


> sergeyst ©   (26.06.07 16:14) [32]


> чат надо делать с 0


Надо знач надо)

Почему бы не начать свою грустную историю именно с этой фразой ?

Твой предыдущий пост уже прикрыли фактически за отсутствии оной, а тебе все невдомек)

Ну нельзя же так тупить)..


> как ими мне пользоваться через TClientSocket/TServerSocket?


А что конкретно непонятно ?

Ты уже ПИО разработал ?

Если нет, то какого ляда взялся за компоненты ?

Выбор компонентов - этап, следующий ЗА разработкой ПИО !

Бельмес ?)


 
Kerk ©   (2007-06-26 16:22) [36]

На http://code.progler.ru/tags/Чат выбери себе любой


 
sergeyst ©   (2007-06-26 16:31) [37]


> Невменяемый?

 Вариант один?


 
sergeyst ©   (2007-06-26 16:35) [38]


> Сергей М. ©   (26.06.07 16:18) [35]

Я потому и спрашиваю, потому что не знаю за что там браться вначале и в конце.
>Kerk ©   (26.06.07 16:22) [36]
спасибо за ссылочку


 
P   (2007-06-26 16:37) [39]


> sergeyst ©   (26.06.07 16:31) [37]
>
>
> > Невменяемый?
>
>  Вариант один?


Разработай сперва App-протокол в виде набора команд передающихся по соединению

номер версии протокола(4 байта)|числовой идентификтор команды(4 байта)|размер данных команды(4 байта)|данные команды(размер данных команды)|


 
Сергей М. ©   (2007-06-26 16:38) [40]


> а что там браться


Где "там" ?

Ты свой ПИО  уже разработал ? Или взял на вооружениие чужой ?

Только - я тебя умоляю - не говори, что не понимаешь, что такое информационный обмен и что такое протокол (евойный в частности)


 
sergeyst ©   (2007-06-26 16:45) [41]

>Сергей М. ©   (26.06.07 16:38) [40]
Хорошо.
Это что P   (26.06.07 16:37) [39] сказал? Это не долга. А потом что ж, как получил команду на прием файла, то что?


 
Сергей М. ©   (2007-06-26 16:48) [42]


> то что?
>


Известно что - передать файл)


 
Mike Kouzmine ©   (2007-06-26 16:49) [43]

Сергей М. ©   (26.06.07 16:48) [42] Принять. Не путай.


 
sergeyst ©   (2007-06-26 16:50) [44]

>Известно что - передать файл)
Что мне говорить TClient/server?


 
Mike Kouzmine ©   (2007-06-26 16:53) [45]

sergeyst ©   (26.06.07 16:50) [44] Каждый говорит свое.


 
homm ©   (2007-06-26 16:53) [46]

> Что мне говорить TClient/server?

зум-зум? :)


 
Сергей М. ©   (2007-06-26 16:56) [47]


> Mike Kouzmine ©   (26.06.07 16:49) [43]
> Принять.


Прежде чем что-то принимать, надо уметь это "что-то" передать. И то и другое тесно связано с единым для приемника и передатчика ПИО. О нем как раз и речь идет, и им пока еще не пахнет)


> Что мне говорить TClient/server?
>


Тому кто передает говорить "SendЧЕГОТОТАМВСООТВЕТСТВИИСПИО", тому кто принимает - ""ReceiveЧЕГОТОТАМВСООТВЕТСТВИИСПИО""


 
Mike Kouzmine ©   (2007-06-26 17:03) [48]

Сергей М. ©   (26.06.07 16:56) [47] Автор хочет узнать об абстрактной модели, например, как реагировать на команду "принять файл" и что при этом говорить.


 
Сергей М. ©   (2007-06-26 17:11) [49]


> Mike Kouzmine ©   (26.06.07 17:03) [48]


> что при этом говорить


Кому говорить-то ?

Если передатчику, то он уже все сказал командой "принять файл", приемнику остается только молча исполнить команду)


 
Сергей М. ©   (2007-06-26 17:13) [50]

Предлагаю обсудить любой другой простейший ПИО, ну, скажем, на примере диалога покупателя с продавцом у пивного ларька).. Довольно показателен, кстати)


 
Mike Kouzmine ©   (2007-06-26 17:14) [51]

Сергей М. ©   (26.06.07 17:11) [49]
Ну, например, "сим-сим" - мол готов к приему!
Но, думаю, он имел ввиду вслух.


 
Плохиш ©   (2007-06-26 17:14) [52]


> Предлагаю обсудить любой другой простейший ПИО, ну, скажем,
>  на примере диалога покупателя с продавцом у пивного ларька

- Пива НЕТ!!!

и чё тут протоколировать? ;-)


 
Сергей М. ©   (2007-06-26 17:16) [53]


> мол готов к приему


Так это же и есть, по сути, команда "передай мне что-то там" !

И тот кто должен передать, вправе начать это делать немедленно, ибо принятая команда и есть факт готовности к приему.


 
Сергей М. ©   (2007-06-26 17:18) [54]


> Пива НЕТ!!!
>
> и чё тут протоколировать


Протокол подразумевает, что покупатель подойдя к пивному ларьку может молчать, ибо вариант с таким ходом диалога имеет право на существование)...


 
Плохиш ©   (2007-06-26 17:20) [55]

Покупатель притаранил PS/2 мышу, желая прикупить пыва для пятикласника, а ему продавец в рыло и "а нефиг мени мышами пугать..."


 
P   (2007-06-26 17:56) [56]


> sergeyst ©   (26.06.07 16:45) [41]
>
> >Сергей М. ©   (26.06.07 16:38) [40]
> Хорошо.
> Это что P   (26.06.07 16:37) [39] сказал? Это не долга.
> А потом что ж, как получил команду на прием файла, то что?
>


Отослать другую команду, называемую "файл", где в данных команды этот файл и сопутствующая информация типа названия и будет лежать.

А еще лучше разбить файла на части и отослать в нескольких командах, которые на стороне получателя будут собраны в один файл.


 
sergeyst ©   (2007-06-27 08:27) [57]

>P   (26.06.07 17:56) [56]
>Отослать другую команду, называемую "файл", где в данных команды этот >файл и сопутствующая информация типа названия и будет лежать.

>А еще лучше разбить файла на части и отослать в нескольких командах, >которые на стороне получателя будут собраны в один файл.

Вот это-то я и пытаюсь узнать(конкретно для TClientSocket/Server), а пыво в ларьке я знаю как купить.


 
Сергей М. ©   (2007-06-27 09:32) [58]


> конкретно для TClientSocket/Server


Опять ты за свое !
Ну причем здесь TClientSocket/Server ? На месте этих компонентов с тем же успехом могут быть использованы и любые другие подходящие. Задача компонентов транспортного уровня - организовать соединение и гонять туда-сюда некие неважно какие данные.

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

Так бери карандаш с бумагой, садись и распиши этот ПИО в деталях !


 
sergeyst ©   (2007-06-27 10:04) [59]


> Сергей М. ©   (27.06.07 09:32) [58]

Слухаюсь!

#HiAll - вход в систему, отсылается всем
#HiSle - ответ на приветствие
#Talki - принять текст
#CauFi - принять файл
#FuAll - вышел

Это я должен сделать в первую очередь?


 
Сергей М. ©   (2007-06-27 10:37) [60]

Ну вот, уже что-то)

Теперь более подробно:


> #HiAll - вход в систему, отсылается всем


#HiAll - это, константа ? Какая - строковая или числовая ? Размер ?
Кем отсылается ?


 
sergeyst ©   (2007-06-27 10:51) [61]

#HiAll + " " + UserNick
#HiSle + " " + UserNick
#Talki + " " + redtSend.Text
#FuAll + " " + UserNick
#CauFi + " " + FileName - вот, а тут-то что дальше?


 
sergeyst ©   (2007-06-27 11:11) [62]

>#HiAll - #HiAll - это, константа ? Какая - строковая или числовая ? Размер ?
>Кем отсылается ?
константа, строковая, SizeOf


 
homm ©   (2007-06-27 11:15) [63]

> [62] sergeyst ©   (27.06.07 11:11)

Не SizeOf, а до первого пробела, судя по тому что ты написал.


 
Сергей М. ©   (2007-06-27 11:15) [64]

Кем отсылается ?


 
Сергей М. ©   (2007-06-27 11:20) [65]


> sergeyst


Ты вообще какой чат пытаешься слепить - децентрализованный или в выделенным чат-сервером (серверами) ?

Это же важно ! С этого и начинать надо)


 
sergeyst ©   (2007-06-27 11:25) [66]


> homm ©   (27.06.07 11:15) [63]

Не знаю зачем нужен размер, но ест-но, что до пробела.
>Кем?  
UserNick нужен или Host?
Host, вроде, тут: Socket.RemoteHost или, если прием будет происходить не в обработчиках Client/Server, то при отправке: Socket.LocalHost


 
sergeyst ©   (2007-06-27 11:27) [67]


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

Скорее децентрализованный (если я правильно понял) .


 
homm ©   (2007-06-27 11:30) [68]

Может хватит уже мучить себя и других? Взгляни уже сюда
> [36] Kerk ©   (26.06.07 16:22)


 
Сергей М. ©   (2007-06-27 11:31) [69]


> UserNick нужен или Host?


Причем здесь это ?

Кто кому отсылает это самое HiAll - клиент серверу или клиент всем прочим клиентам сервера ?


 
Сергей М. ©   (2007-06-27 11:33) [70]


> sergeyst ©   (27.06.07 11:27) [67]
>
>
> > Сергей М. ©   (27.06.07 11:20) [65]
>
> Скорее децентрализованный


И как же клиенты твоего чата будут находить друг-друга ?


 
sergeyst ©   (2007-06-27 11:39) [71]

>Кто кому отсылает это самое HiAll - клиент серверу или клиент всем >прочим клиентам сервера ?
М-да... Пожалуй, соглашусь с homm ©   (27.06.07 11:30) [68]. Всем спасибо.


 
sergeyst ©   (2007-06-27 11:43) [72]

>И как же клиенты твоего чата будут находить друг-друга ?
Э-э-э... idUDP


 
Сергей М. ©   (2007-06-27 11:53) [73]


> sergeyst ©   (27.06.07 11:43) [72]


Так ведь и для этого тоже ПИО требуется разработать !
С этого и начинай)

Кстати, а накой ляд тогда TClient/ServerSocket"ы нужны ?
Ну и сотворяй все на основе UDP ! Зачем эта солянка сборная из UDP+TCP нужна ? Ты сам-то себе можешь дать разумное объяснение такой необходимости ?

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


 
sergeyst ©   (2007-06-27 11:59) [74]


> Сергей М. ©   (27.06.07 11:53) [73]

Солянка, конечно, лишнее, мягко говоря. Просто мне показалось, что войти лучше по UDP, а пересылать файлы по TCP(то бишь проще).


 
Сергей М. ©   (2007-06-27 12:05) [75]


> войти лучше по UDP


Куда "войти"-то ?
У тебя же нет центрального чат-сервера)


 
sergeyst ©   (2007-06-27 12:17) [76]


> Куда "войти"-то ?

Этот чат будет частью проги, работающей с БД. Вот "войти" - значить пользователь запустил эту самую прогу и готов к общению( есть(будут) два типа сообщений: простой разговор - нет пользователя, нет и разговора и служебные сообщения, которые(только служебные), в случае недоступности пользователя, будут сохраняться в БД, а когда он включится, то ему сообщ. типа табе тама малява). Можно пересылать файлы через БД, но не хочется. Просто не хочется.


 
homm ©   (2007-06-27 12:21) [77]

> Можно пересылать файлы через БД, но не хочется

Лучше архивы прогрессбаром распаковывать ;)


 
Сергей М. ©   (2007-06-27 12:24) [78]


> "войти" - значить пользователь запустил эту самую прогу
> и готов к общению


Прелюбопытное определение)

Но причем здесь пользователь, если речь идет об алгоритме программы как таковой ?


 
sergeyst ©   (2007-06-27 13:19) [79]


> Сергей М. ©   (27.06.07 12:24) [78]

Ну какой алгоритм? Я просто не знаю как принять поток из сокета. И передать тоже. Edit.Text := "sdfg"; - Вот этого я не знаю, в переносе на сокеты.


> homm ©   (27.06.07 12:21) [77]

А где сообщ. хранить?

ЗЫ.Кому нравится околокружие?


 
Anatoly Podgoretsky ©   (2007-06-27 13:27) [80]

> sergeyst  (27.06.2007 12:17:16)  [76]

Вряд ли этот чат будет.


 
clickmaker ©   (2007-06-27 13:31) [81]


> [79] sergeyst ©   (27.06.07 13:19)

заведи рекорд
type TChatMessage = packed record
 From: array[0..50] of char;
 To: array[0..50] of char;
 MessageSize: integer;
 DateSent: TDateTime;
end;
это шапка сообщения
в MessageSize - Length(Edit.Text) к примеру - длина сообщения
Записывай в сокет (или по UDP) сначала этот заголовок, потом сам текст.
На приемной стороне читаешь заголовок, смотришь MessageSize и читаешь столько байт из сокета


 
Сергей М. ©   (2007-06-27 13:51) [82]


> не знаю как принять поток из сокета


Чтобы принять поток, нужно знать его размер.
А метод SendStream не передает инф-цию о размере потока.
Значит эту инф-цию нужно передать "ручками", до вызова SendStream.
Тогда принимающая сторона, ожидающая поток, должна принять сначала эту инф-цию, и уж на основании ее посредством одного или более вызовов метода ReceiveBuf принять собственно данные, переданные в контексте ожидаемого потока


 
sergeyst ©   (2007-06-27 13:53) [83]


> clickmaker ©   (27.06.07 13:31) [81]

А пакеты IdUDP сам собирает?
А если есть сообщения одновременно от нескольких пользователей?

> Anatoly Podgoretsky ©   (27.06.07 13:27) [80]

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


 
sergeyst ©   (2007-06-27 13:57) [84]


> Сергей М. ©   (27.06.07 13:51) [82]


> одного или более вызовов метода ReceiveBuf принять собственно
> данные

Как потом собрать?


 
Сергей М. ©   (2007-06-27 14:09) [85]


> Как потом собрать?


Записать в стрим-объект, последовательно в порядке поступления.


 
sergeyst ©   (2007-06-27 14:19) [86]


> Записать в стрим-объект, последовательно в порядке поступления.

М-м-м... Насколько я знаю, UDP-пакеты могут приходить в любой последовательности. Или это совет для TCP?


 
P   (2007-06-27 18:13) [87]


> sergeyst ©   (27.06.07 14:19) [86]


По части только приема-передачи файла это уже 5 команд

1. Запрос на получение файла
2. Ответ с информацией о файле, его сеансовом-id, частях, имени и пр.
3. Ответ в виде id части файла, смещения и размера части файла
4. Ответ в виде закрытия передачи файла определённого ID.
5. Запрос на прекращение передачи частей файла.


 
Сергей М. ©   (2007-06-28 08:20) [88]


> sergeyst ©   (27.06.07 14:19) [86]


> Или это совет для TCP?
>


Ну ты же речь-то завел о TServer/ClientSocket ? Так о каком же UDP ты рассуждаешь, если эти компоненты используют TCP ?



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

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

Наверх




Память: 0.67 MB
Время: 0.043 c
15-1183403239
KilkennyCat
2007-07-02 23:07
2007.07.29
Уберите битый пиксел. Я пугаюсь.


2-1183640247
POP
2007-07-05 16:57
2007.07.29
64bit HEX преобразовать в DEC строку


15-1183313519
BaryVetaL
2007-07-01 22:11
2007.07.29
Аналоги 1С


15-1182875275
Malik
2007-06-26 20:27
2007.07.29
Чисто из интереса...


2-1183419596
DagOT-R
2007-07-03 03:39
2007.07.29
Всё о трее





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