Compare commits
230 commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
94dd3be54f | ||
![]() |
0e0958753c | ||
![]() |
5876c98f8a | ||
![]() |
d286c1f338 | ||
![]() |
a54c4e7dd2 | ||
![]() |
7aa6874074 | ||
![]() |
065e0b7ac9 | ||
![]() |
6fd109bfca | ||
![]() |
ada2c9aa1f | ||
![]() |
42c9ea8a3a | ||
![]() |
2ffa9e176a | ||
![]() |
77d50c3ae1 | ||
![]() |
ea0efaeab7 | ||
![]() |
942e7c6244 | ||
![]() |
72151e7cbd | ||
![]() |
0446ca2b9b | ||
![]() |
653eb902ce | ||
![]() |
ab5b444e26 | ||
![]() |
014145c8ee | ||
![]() |
1cb22c9df1 | ||
![]() |
5a59dc100c | ||
![]() |
1842756995 | ||
![]() |
ea697f1cc7 | ||
![]() |
20c78ce94c | ||
![]() |
c0210af0b9 | ||
![]() |
aa3e220738 | ||
![]() |
4980fa460c | ||
![]() |
d8a040b5d5 | ||
![]() |
c5929af862 | ||
![]() |
766335c34d | ||
![]() |
2ca2c46807 | ||
![]() |
6234a65228 | ||
![]() |
f45ed4572a | ||
![]() |
5de79c45a6 | ||
![]() |
c52854ae51 | ||
![]() |
1dc5e2ba46 | ||
![]() |
345006633c | ||
![]() |
bb215b59d3 | ||
![]() |
59ec18fe1b | ||
![]() |
7744facaec | ||
![]() |
71276b109e | ||
![]() |
cd451723ef | ||
![]() |
a904aa37da | ||
![]() |
ab7dcb8ee6 | ||
![]() |
0d0a2cbbd7 | ||
![]() |
9d86bf2af6 | ||
![]() |
23864bf541 | ||
![]() |
5fea0dae38 | ||
![]() |
82a5cbbf5a | ||
![]() |
6f89e259df | ||
![]() |
f4b47623cf | ||
![]() |
8b46df36b6 | ||
![]() |
f75e3e9954 | ||
![]() |
b7283219c0 | ||
![]() |
80d3146ebb | ||
![]() |
150f0c48cc | ||
![]() |
4d8995d565 | ||
![]() |
1798a43d91 | ||
![]() |
0340e4f14b | ||
![]() |
43e5f81683 | ||
![]() |
be0d4cd299 | ||
![]() |
de3100e6f2 | ||
![]() |
bf837abf38 | ||
![]() |
0926d27195 | ||
![]() |
1c32a0ef9e | ||
![]() |
99d684bf89 | ||
![]() |
f2431f3a3a | ||
![]() |
a6b2ea20e1 | ||
![]() |
e1242691d2 | ||
![]() |
b15d0a3f86 | ||
![]() |
9a2c6a73ac | ||
![]() |
35faf09857 | ||
![]() |
11631ace8b | ||
![]() |
7463ef080e | ||
![]() |
e926b216b6 | ||
![]() |
6940278a51 | ||
![]() |
daeb7db701 | ||
![]() |
786394bb3e | ||
![]() |
01104c87d3 | ||
![]() |
413e449112 | ||
![]() |
5f7da0ab50 | ||
![]() |
e73e247444 | ||
![]() |
921db6bc5c | ||
![]() |
a35c6cdd3b | ||
![]() |
7205b4df1b | ||
![]() |
952a41f1ed | ||
![]() |
81f33055b5 | ||
![]() |
7103bf9bfe | ||
![]() |
e828fc36ef | ||
![]() |
70340d7b55 | ||
![]() |
7439a68b09 | ||
![]() |
6684a75865 | ||
![]() |
4de2a69ac1 | ||
![]() |
6a6bff563b | ||
![]() |
c595e9ef14 | ||
![]() |
236083e217 | ||
![]() |
aa87311f6d | ||
![]() |
236153cee7 | ||
![]() |
dc9dac44ff | ||
![]() |
004f84b544 | ||
![]() |
a3341cb5cf | ||
![]() |
ee2a6fb740 | ||
![]() |
ff66ed2512 | ||
![]() |
1388bc6ed7 | ||
![]() |
54cfce4df2 | ||
![]() |
d020f9c32a | ||
![]() |
3107a601eb | ||
![]() |
cb12fbf4f9 | ||
![]() |
a0ecd0c66d | ||
![]() |
a61c9db881 | ||
![]() |
0c1623a8f6 | ||
![]() |
d4f52a175c | ||
![]() |
37438544df | ||
![]() |
b45e494771 | ||
![]() |
e5adfc1bd6 | ||
![]() |
5828496b52 | ||
![]() |
1398ab1362 | ||
![]() |
b30905ef41 | ||
![]() |
f872bb9bc3 | ||
![]() |
a00d1ee6c6 | ||
![]() |
84f742de3a | ||
![]() |
26e5b2de9f | ||
![]() |
8779215927 | ||
![]() |
cc8873682a | ||
![]() |
9b4fa898a9 | ||
![]() |
dd349ff7cb | ||
![]() |
5c88b021af | ||
![]() |
f648686f1b | ||
![]() |
4e3b913a9d | ||
![]() |
0a786049fc | ||
![]() |
abbaad7a0c | ||
![]() |
496eb6328f | ||
![]() |
581e024254 | ||
![]() |
1070b5a6e7 | ||
![]() |
e8005883ab | ||
![]() |
fbe3a7fbba | ||
![]() |
4ef719cd3a | ||
![]() |
69acd90512 | ||
![]() |
8100114319 | ||
![]() |
00b709e39f | ||
![]() |
af70b22699 | ||
![]() |
660376b9df | ||
![]() |
4e08542823 | ||
![]() |
9edcd8f6e5 | ||
![]() |
90a4286e90 | ||
![]() |
ac1c748650 | ||
![]() |
df29bbcda1 | ||
![]() |
68b71dae70 | ||
![]() |
9208d9b1e9 | ||
![]() |
fc0b402d72 | ||
![]() |
9cd264dea6 | ||
![]() |
739f2b7e46 | ||
![]() |
1808ca4984 | ||
![]() |
6a8760d5d3 | ||
![]() |
625374fbc4 | ||
![]() |
65105dd11b | ||
![]() |
6eee0c3c43 | ||
![]() |
2c74a733d5 | ||
![]() |
9ad31b041a | ||
![]() |
ff7300f6c9 | ||
![]() |
d032f3a237 | ||
![]() |
d8fc5281ce | ||
![]() |
4438dcae0e | ||
![]() |
8e3cebf165 | ||
![]() |
dec3a260c4 | ||
![]() |
a8cf6f88d0 | ||
![]() |
f4f058edb5 | ||
![]() |
f958dfe2bc | ||
![]() |
1e78c9685c | ||
![]() |
cf851ad630 | ||
![]() |
4079aea8c0 | ||
![]() |
e4d04d990b | ||
![]() |
7611afc323 | ||
![]() |
94beda1419 | ||
![]() |
10bac37b2c | ||
![]() |
c52d8811f3 | ||
![]() |
1cf511f526 | ||
![]() |
66ef529edb | ||
![]() |
38b9e44a3e | ||
![]() |
0f10389a34 | ||
![]() |
a22204df13 | ||
![]() |
d498c116ed | ||
![]() |
ef7a655dea | ||
![]() |
0a349cc38e | ||
![]() |
f41571934a | ||
![]() |
a0a03fe35e | ||
![]() |
7ce2d397b8 | ||
![]() |
cf121a5d59 | ||
![]() |
7d7f67f227 | ||
![]() |
2d4c06883f | ||
![]() |
9d8db69aad | ||
![]() |
fbba265512 | ||
![]() |
be4f5877c4 | ||
![]() |
26669c8a6c | ||
![]() |
39177beff9 | ||
![]() |
97f26e9b24 | ||
![]() |
5b11831e3f | ||
![]() |
d42d647dfe | ||
![]() |
3b3a4eafc2 | ||
![]() |
b828460886 | ||
![]() |
65c96cae5a | ||
![]() |
00bf713c43 | ||
![]() |
f2fd8a981b | ||
![]() |
233e6c2811 | ||
![]() |
b818752acc | ||
![]() |
b61131c7e1 | ||
![]() |
de72552309 | ||
![]() |
b1fb7e500c | ||
![]() |
c8befa2c9e | ||
![]() |
85e7f17e65 | ||
![]() |
618cbf7001 | ||
![]() |
d1d03da879 | ||
![]() |
60d6b3c8e5 | ||
![]() |
bab470cf1f | ||
![]() |
350bdad82e | ||
![]() |
5bd31bdae0 | ||
![]() |
498f87eff5 | ||
![]() |
a1f49d4748 | ||
![]() |
5d6f9f35bb | ||
![]() |
b2194b6a5d | ||
![]() |
51e7d211fe | ||
![]() |
7a6792ff04 | ||
![]() |
0bb5b0121d | ||
![]() |
53c6b384ec | ||
![]() |
7d5722462f | ||
![]() |
b2845e41aa | ||
![]() |
fc1863cca9 | ||
![]() |
9019ee1038 | ||
![]() |
eebd337929 | ||
![]() |
3670c41f41 |
98 changed files with 9172 additions and 2938 deletions
25
.gitignore
vendored
25
.gitignore
vendored
|
@ -1,14 +1,11 @@
|
|||
*.o
|
||||
*.so
|
||||
*.mo
|
||||
tg/
|
||||
auto/
|
||||
autom4te.cache/
|
||||
config.h
|
||||
config.h.in~
|
||||
dep/
|
||||
libs/
|
||||
bin/
|
||||
config.log
|
||||
config.status
|
||||
Makefile
|
||||
/objs/
|
||||
/autom4te.cache/
|
||||
/config.h
|
||||
*~
|
||||
/dep/
|
||||
/libs/
|
||||
/bin/
|
||||
/config.log
|
||||
/config.status
|
||||
/Makefile
|
||||
/commit.h
|
||||
|
|
2
.gitmodules
vendored
2
.gitmodules
vendored
|
@ -1,4 +1,4 @@
|
|||
[submodule "tgl"]
|
||||
path = tgl
|
||||
branch = test
|
||||
url = https://github.com/vysheng/tgl
|
||||
url = https://github.com/majn/tgl
|
||||
|
|
48
.travis.yml
Normal file
48
.travis.yml
Normal file
|
@ -0,0 +1,48 @@
|
|||
language: c
|
||||
# Select Trusty Tahr.
|
||||
sudo: required
|
||||
dist: trusty
|
||||
# Travis' git submodule support is ... broken? half-broken? Maybe intentional?
|
||||
git:
|
||||
submodules: false
|
||||
depth: 3
|
||||
before_install:
|
||||
- git submodule update --init --recursive
|
||||
- sudo apt-get update -qq
|
||||
- sudo apt-get install -qq libssl-dev libgcrypt20-dev libpurple-dev libwebp-dev
|
||||
script:
|
||||
- ./configure $CONFIGURE_FLAGS
|
||||
- make -j2
|
||||
- make check
|
||||
compiler:
|
||||
- clang
|
||||
- gcc
|
||||
env:
|
||||
# Try to be nice to the builder
|
||||
- CONFIGURE_FLAGS=""
|
||||
- CONFIGURE_FLAGS="--disable-gcrypt"
|
||||
- CONFIGURE_FLAGS=" --disable-libwebp"
|
||||
# - CONFIGURE_FLAGS="--disable-gcrypt --disable-libwebp"
|
||||
- CONFIGURE_FLAGS=" --disable-translation"
|
||||
# - CONFIGURE_FLAGS="--disable-gcrypt --disable-translation"
|
||||
# - CONFIGURE_FLAGS=" --disable-libwebp --disable-translation"
|
||||
- CONFIGURE_FLAGS="--disable-gcrypt --disable-libwebp --disable-translation"
|
||||
matrix:
|
||||
# Be even nicer by excluding half of the combinations
|
||||
exclude:
|
||||
- compiler: clang
|
||||
env: CONFIGURE_FLAGS=""
|
||||
- compiler: gcc
|
||||
env: CONFIGURE_FLAGS="--disable-gcrypt"
|
||||
- compiler: clang
|
||||
env: CONFIGURE_FLAGS=" --disable-libwebp"
|
||||
# - compiler: XXX
|
||||
# env: CONFIGURE_FLAGS="--disable-gcrypt --disable-libwebp"
|
||||
- compiler: gcc
|
||||
env: CONFIGURE_FLAGS=" --disable-translation"
|
||||
# - compiler: clang
|
||||
# env: CONFIGURE_FLAGS="--disable-gcrypt --disable-translation"
|
||||
# - compiler: gcc
|
||||
# env: CONFIGURE_FLAGS=" --disable-libwebp --disable-translation"
|
||||
- compiler: clang
|
||||
env: CONFIGURE_FLAGS="--disable-gcrypt --disable-libwebp --disable-translation"
|
45
AppStream/Makefile
Normal file
45
AppStream/Makefile
Normal file
|
@ -0,0 +1,45 @@
|
|||
# This file is part of telegram-purple
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
|
||||
#
|
||||
# Copyright Ben Wiederhake 2016
|
||||
|
||||
# This file is NOT meant for inclusion into the main Makefile.
|
||||
|
||||
LOCALES=$(shell cat po/LINGUAS)
|
||||
LOCALE_MOS=$(addprefix po/,$(addsuffix .mo,$(LOCALES)))
|
||||
# Hardcoded, since this should only be run on very few machines anyway,
|
||||
# which are expected to have msgfmt on their $PATH
|
||||
MSGFMT_PATH=msgfmt
|
||||
|
||||
all: translate
|
||||
|
||||
po/%.mo: po/%.po
|
||||
${MSGFMT_PATH} -cf -o $@ $<
|
||||
|
||||
po/telegram-purple.metainfo.xml.pot: telegram-purple.metainfo.untranslated.xml as-metainfo.its
|
||||
itstool -i as-metainfo.its -o $@ $<
|
||||
|
||||
# CAREFUL WHEN EDITING!
|
||||
# "-j raw.xml *.mo" must be the last options!
|
||||
telegram-purple.metainfo.xml: as-metainfo.its telegram-purple.metainfo.untranslated.xml $(LOCALE_MOS) po/LINGUAS
|
||||
itstool -i as-metainfo.its -o $@ \
|
||||
-j telegram-purple.metainfo.untranslated.xml $(LOCALE_MOS)
|
||||
|
||||
.PHONY: potfile
|
||||
potfile: po/telegram-purple.metainfo.xml.pot
|
||||
|
||||
.PHONY: translate
|
||||
translate: telegram-purple.metainfo.xml
|
23
AppStream/as-metainfo.its
Normal file
23
AppStream/as-metainfo.its
Normal file
|
@ -0,0 +1,23 @@
|
|||
<!-- Copyright © 2012-2015 Matthias Klumpp.
|
||||
This material may only be distributed subject to the terms and
|
||||
conditions set forth in the GNU Free Documentation License (GFDL),
|
||||
V1.2 with no invariant sections or later (the latest version is
|
||||
presently available at http://www.gnu.org/licenses/fdl.txt).
|
||||
|
||||
This file bases on the "Quickstart Translation using itstool":
|
||||
http://www.freedesktop.org/software/appstream/docs/sect-Quickstart-Translation.html
|
||||
|
||||
The copyright for the base transformer was found at:
|
||||
http://www.freedesktop.org/software/appstream/docs/index.html
|
||||
-->
|
||||
<its:rules
|
||||
xmlns:its="http://www.w3.org/2005/11/its"
|
||||
version="1.0">
|
||||
<its:translateRule translate="no" selector="/component"/>
|
||||
<its:translateRule translate="yes"
|
||||
selector="/component/name |
|
||||
/component/summary |
|
||||
/component/description |
|
||||
/component/screenshots/screenshot/caption |
|
||||
/component/developer_name"/>
|
||||
</its:rules>
|
1
AppStream/po/.gitignore
vendored
Normal file
1
AppStream/po/.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
/*.mo
|
12
AppStream/po/LINGUAS
Normal file
12
AppStream/po/LINGUAS
Normal file
|
@ -0,0 +1,12 @@
|
|||
bg
|
||||
cs_CZ
|
||||
de_DE
|
||||
es
|
||||
es_AR
|
||||
fr
|
||||
it_IT
|
||||
nl
|
||||
pl_PL
|
||||
ru_RU
|
||||
sq
|
||||
uk
|
25
AppStream/po/bg.po
Normal file
25
AppStream/po/bg.po
Normal file
|
@ -0,0 +1,25 @@
|
|||
#
|
||||
# Translators:
|
||||
# Любомир Василев, 2016
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: telegram-purple\n"
|
||||
"POT-Creation-Date: 2016-01-07 23:23+0100\n"
|
||||
"PO-Revision-Date: 2016-10-19 14:07+0000\n"
|
||||
"Last-Translator: Любомир Василев\n"
|
||||
"Language-Team: Bulgarian (http://www.transifex.com/telegram-purple-developers/telegram-purple/language/bg/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: bg\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#. (itstool) path: component/name
|
||||
#: telegram-purple.metainfo.untranslated.xml:9
|
||||
msgid "Telegram"
|
||||
msgstr "Telegram"
|
||||
|
||||
#. (itstool) path: component/summary
|
||||
#: telegram-purple.metainfo.untranslated.xml:10
|
||||
msgid "A plugin that adds support for Telegram"
|
||||
msgstr "Добавка, която добавя поддръжка на Telegram"
|
25
AppStream/po/cs_CZ.po
Normal file
25
AppStream/po/cs_CZ.po
Normal file
|
@ -0,0 +1,25 @@
|
|||
#
|
||||
# Translators:
|
||||
# Jan Breuer <j123b567@jaybee.cz>, 2016
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: telegram-purple\n"
|
||||
"POT-Creation-Date: 2016-01-07 23:23+0100\n"
|
||||
"PO-Revision-Date: 2016-02-18 14:45+0000\n"
|
||||
"Last-Translator: Jan Breuer <j123b567@jaybee.cz>\n"
|
||||
"Language-Team: Czech (Czech Republic) (http://www.transifex.com/telegram-purple-developers/telegram-purple/language/cs_CZ/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: cs_CZ\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||
|
||||
#. (itstool) path: component/name
|
||||
#: telegram-purple.metainfo.untranslated.xml:9
|
||||
msgid "Telegram"
|
||||
msgstr "Telegram"
|
||||
|
||||
#. (itstool) path: component/summary
|
||||
#: telegram-purple.metainfo.untranslated.xml:10
|
||||
msgid "A plugin that adds support for Telegram"
|
||||
msgstr "Zásuvný modul, který přidá podporu pro Telegram"
|
25
AppStream/po/de_DE.po
Normal file
25
AppStream/po/de_DE.po
Normal file
|
@ -0,0 +1,25 @@
|
|||
#
|
||||
# Translators:
|
||||
# Ben Wiederhake <BenWiederhake.GitHub@gmx.de>, 2016
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: telegram-purple\n"
|
||||
"POT-Creation-Date: 2016-01-07 23:23+0100\n"
|
||||
"PO-Revision-Date: 2016-01-09 13:14+0000\n"
|
||||
"Last-Translator: Ben Wiederhake <BenWiederhake.GitHub@gmx.de>\n"
|
||||
"Language-Team: German (Germany) (http://www.transifex.com/telegram-purple-developers/telegram-purple/language/de_DE/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: de_DE\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#. (itstool) path: component/name
|
||||
#: telegram-purple.metainfo.untranslated.xml:9
|
||||
msgid "Telegram"
|
||||
msgstr "Telegram"
|
||||
|
||||
#. (itstool) path: component/summary
|
||||
#: telegram-purple.metainfo.untranslated.xml:10
|
||||
msgid "A plugin that adds support for Telegram"
|
||||
msgstr "Plugin zur Unterstützung von Telegram"
|
25
AppStream/po/es.po
Normal file
25
AppStream/po/es.po
Normal file
|
@ -0,0 +1,25 @@
|
|||
#
|
||||
# Translators:
|
||||
# aguador <aguador@openmailbox.org>, 2017
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: telegram-purple\n"
|
||||
"POT-Creation-Date: 2016-01-07 23:23+0100\n"
|
||||
"PO-Revision-Date: 2017-02-27 09:08+0000\n"
|
||||
"Last-Translator: aguador <aguador@openmailbox.org>\n"
|
||||
"Language-Team: Spanish (http://www.transifex.com/telegram-purple-developers/telegram-purple/language/es/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: es\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#. (itstool) path: component/name
|
||||
#: telegram-purple.metainfo.untranslated.xml:9
|
||||
msgid "Telegram"
|
||||
msgstr "Telegram"
|
||||
|
||||
#. (itstool) path: component/summary
|
||||
#: telegram-purple.metainfo.untranslated.xml:10
|
||||
msgid "A plugin that adds support for Telegram"
|
||||
msgstr "Un plugin que añade soporte para Telegram"
|
25
AppStream/po/es_AR.po
Normal file
25
AppStream/po/es_AR.po
Normal file
|
@ -0,0 +1,25 @@
|
|||
#
|
||||
# Translators:
|
||||
# KNTRO <kntro@msn.com>, 2016
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: telegram-purple\n"
|
||||
"POT-Creation-Date: 2016-01-07 23:23+0100\n"
|
||||
"PO-Revision-Date: 2016-10-08 19:37+0000\n"
|
||||
"Last-Translator: KNTRO <kntro@msn.com>\n"
|
||||
"Language-Team: Spanish (Argentina) (http://www.transifex.com/telegram-purple-developers/telegram-purple/language/es_AR/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: es_AR\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#. (itstool) path: component/name
|
||||
#: telegram-purple.metainfo.untranslated.xml:9
|
||||
msgid "Telegram"
|
||||
msgstr "Telegram"
|
||||
|
||||
#. (itstool) path: component/summary
|
||||
#: telegram-purple.metainfo.untranslated.xml:10
|
||||
msgid "A plugin that adds support for Telegram"
|
||||
msgstr "Un plugin que agrega soporte para Telegram"
|
25
AppStream/po/fr.po
Normal file
25
AppStream/po/fr.po
Normal file
|
@ -0,0 +1,25 @@
|
|||
#
|
||||
# Translators:
|
||||
# Javier Sixto, 2016
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: telegram-purple\n"
|
||||
"POT-Creation-Date: 2016-01-07 23:23+0100\n"
|
||||
"PO-Revision-Date: 2016-04-14 19:51+0000\n"
|
||||
"Last-Translator: Javier Sixto\n"
|
||||
"Language-Team: French (http://www.transifex.com/telegram-purple-developers/telegram-purple/language/fr/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: fr\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
|
||||
#. (itstool) path: component/name
|
||||
#: telegram-purple.metainfo.untranslated.xml:9
|
||||
msgid "Telegram"
|
||||
msgstr "Telegram"
|
||||
|
||||
#. (itstool) path: component/summary
|
||||
#: telegram-purple.metainfo.untranslated.xml:10
|
||||
msgid "A plugin that adds support for Telegram"
|
||||
msgstr "Une extension qui ajoute le support pour Telegram"
|
25
AppStream/po/it_IT.po
Normal file
25
AppStream/po/it_IT.po
Normal file
|
@ -0,0 +1,25 @@
|
|||
#
|
||||
# Translators:
|
||||
# Giuseppe Pignataro (Fasbyte01) <rogepix@gmail.com>, 2016
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: telegram-purple\n"
|
||||
"POT-Creation-Date: 2016-01-07 23:23+0100\n"
|
||||
"PO-Revision-Date: 2017-02-27 09:08+0000\n"
|
||||
"Last-Translator: Giuseppe Pignataro (Fasbyte01) <rogepix@gmail.com>\n"
|
||||
"Language-Team: Italian (Italy) (http://www.transifex.com/telegram-purple-developers/telegram-purple/language/it_IT/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: it_IT\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#. (itstool) path: component/name
|
||||
#: telegram-purple.metainfo.untranslated.xml:9
|
||||
msgid "Telegram"
|
||||
msgstr "Telegram"
|
||||
|
||||
#. (itstool) path: component/summary
|
||||
#: telegram-purple.metainfo.untranslated.xml:10
|
||||
msgid "A plugin that adds support for Telegram"
|
||||
msgstr "Un plugin che aggiunge il supporto per Telegram"
|
25
AppStream/po/nl.po
Normal file
25
AppStream/po/nl.po
Normal file
|
@ -0,0 +1,25 @@
|
|||
#
|
||||
# Translators:
|
||||
# justin [notsupplied] <inactive+justin50@transifex.com>, 2016
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: telegram-purple\n"
|
||||
"POT-Creation-Date: 2016-01-07 23:23+0100\n"
|
||||
"PO-Revision-Date: 2016-10-19 17:56+0000\n"
|
||||
"Last-Translator: justin [notsupplied] <inactive+justin50@transifex.com>\n"
|
||||
"Language-Team: Dutch (http://www.transifex.com/telegram-purple-developers/telegram-purple/language/nl/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: nl\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#. (itstool) path: component/name
|
||||
#: telegram-purple.metainfo.untranslated.xml:9
|
||||
msgid "Telegram"
|
||||
msgstr "Telegram"
|
||||
|
||||
#. (itstool) path: component/summary
|
||||
#: telegram-purple.metainfo.untranslated.xml:10
|
||||
msgid "A plugin that adds support for Telegram"
|
||||
msgstr "Een plug-in die ondersteuning voor Telegram toevoegt"
|
25
AppStream/po/pl_PL.po
Normal file
25
AppStream/po/pl_PL.po
Normal file
|
@ -0,0 +1,25 @@
|
|||
#
|
||||
# Translators:
|
||||
# Piotr Drąg <piotrdrag@gmail.com>, 2016
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: telegram-purple\n"
|
||||
"POT-Creation-Date: 2016-01-07 23:23+0100\n"
|
||||
"PO-Revision-Date: 2017-02-27 09:08+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Polish (Poland) (http://www.transifex.com/telegram-purple-developers/telegram-purple/language/pl_PL/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: pl_PL\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>=14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
|
||||
|
||||
#. (itstool) path: component/name
|
||||
#: telegram-purple.metainfo.untranslated.xml:9
|
||||
msgid "Telegram"
|
||||
msgstr "Telegram"
|
||||
|
||||
#. (itstool) path: component/summary
|
||||
#: telegram-purple.metainfo.untranslated.xml:10
|
||||
msgid "A plugin that adds support for Telegram"
|
||||
msgstr "Wtyczka dodająca obsługę protokołu Telegram"
|
25
AppStream/po/ru_RU.po
Normal file
25
AppStream/po/ru_RU.po
Normal file
|
@ -0,0 +1,25 @@
|
|||
#
|
||||
# Translators:
|
||||
# Vladimir <TurbaVladimir@yandex.ru>, 2016
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: telegram-purple\n"
|
||||
"POT-Creation-Date: 2016-01-07 23:23+0100\n"
|
||||
"PO-Revision-Date: 2016-02-18 14:45+0000\n"
|
||||
"Last-Translator: Vladimir <TurbaVladimir@yandex.ru>\n"
|
||||
"Language-Team: Russian (Russia) (http://www.transifex.com/telegram-purple-developers/telegram-purple/language/ru_RU/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: ru_RU\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
|
||||
|
||||
#. (itstool) path: component/name
|
||||
#: telegram-purple.metainfo.untranslated.xml:9
|
||||
msgid "Telegram"
|
||||
msgstr "Telegram"
|
||||
|
||||
#. (itstool) path: component/summary
|
||||
#: telegram-purple.metainfo.untranslated.xml:10
|
||||
msgid "A plugin that adds support for Telegram"
|
||||
msgstr "Плагин, добавляющий поддержку Telegram"
|
25
AppStream/po/sq.po
Normal file
25
AppStream/po/sq.po
Normal file
|
@ -0,0 +1,25 @@
|
|||
#
|
||||
# Translators:
|
||||
# Besnik <besnik@programeshqip.org>, 2016
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: telegram-purple\n"
|
||||
"POT-Creation-Date: 2016-01-07 23:23+0100\n"
|
||||
"PO-Revision-Date: 2016-02-18 14:45+0000\n"
|
||||
"Last-Translator: Besnik <besnik@programeshqip.org>\n"
|
||||
"Language-Team: Albanian (http://www.transifex.com/telegram-purple-developers/telegram-purple/language/sq/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: sq\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#. (itstool) path: component/name
|
||||
#: telegram-purple.metainfo.untranslated.xml:9
|
||||
msgid "Telegram"
|
||||
msgstr "Telegram"
|
||||
|
||||
#. (itstool) path: component/summary
|
||||
#: telegram-purple.metainfo.untranslated.xml:10
|
||||
msgid "A plugin that adds support for Telegram"
|
||||
msgstr "Një shtojcë që shton mbulim për Telegram-in"
|
21
AppStream/po/telegram-purple.metainfo.xml.pot
Normal file
21
AppStream/po/telegram-purple.metainfo.xml.pot
Normal file
|
@ -0,0 +1,21 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"POT-Creation-Date: 2016-01-07 23:23+0100\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#. (itstool) path: component/name
|
||||
#: telegram-purple.metainfo.untranslated.xml:9
|
||||
msgid "Telegram"
|
||||
msgstr ""
|
||||
|
||||
#. (itstool) path: component/summary
|
||||
#: telegram-purple.metainfo.untranslated.xml:10
|
||||
msgid "A plugin that adds support for Telegram"
|
||||
msgstr ""
|
||||
|
25
AppStream/po/uk.po
Normal file
25
AppStream/po/uk.po
Normal file
|
@ -0,0 +1,25 @@
|
|||
#
|
||||
# Translators:
|
||||
# Самохвалов Антон <samant.ua@mail.ru>, 2017
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: telegram-purple\n"
|
||||
"POT-Creation-Date: 2016-01-07 23:23+0100\n"
|
||||
"PO-Revision-Date: 2017-03-04 06:36+0000\n"
|
||||
"Last-Translator: Самохвалов Антон <samant.ua@mail.ru>\n"
|
||||
"Language-Team: Ukrainian (http://www.transifex.com/telegram-purple-developers/telegram-purple/language/uk/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: uk\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
|
||||
#. (itstool) path: component/name
|
||||
#: telegram-purple.metainfo.untranslated.xml:9
|
||||
msgid "Telegram"
|
||||
msgstr "Телеграм"
|
||||
|
||||
#. (itstool) path: component/summary
|
||||
#: telegram-purple.metainfo.untranslated.xml:10
|
||||
msgid "A plugin that adds support for Telegram"
|
||||
msgstr "Плагін, що додає підтримку у Телеграм"
|
16
AppStream/telegram-purple.metainfo.untranslated.xml
Normal file
16
AppStream/telegram-purple.metainfo.untranslated.xml
Normal file
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2015 Jiri Eischmann <eischmann@redhat.com>
|
||||
It is very important that this file does *not* receive any
|
||||
Invariant Sections as per GFDL.
|
||||
-->
|
||||
<component type="addon">
|
||||
<id>telegram-purple</id>
|
||||
<extends>pidgin.desktop</extends>
|
||||
<name>Telegram</name>
|
||||
<summary>A plugin that adds support for Telegram</summary>
|
||||
<url type="homepage">https://github.com/majn/telegram-purple</url>
|
||||
<url type="bugtracker">https://github.com/majn/telegram-purple/issues/</url>
|
||||
<metadata_license>GFDL-1.3</metadata_license>
|
||||
<project_license>GPL-2.0+</project_license>
|
||||
<update_contact>eischmann_at_redhat.com</update_contact>
|
||||
</component>
|
40
AppStream/telegram-purple.metainfo.xml
Normal file
40
AppStream/telegram-purple.metainfo.xml
Normal file
|
@ -0,0 +1,40 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2015 Jiri Eischmann <eischmann@redhat.com>
|
||||
It is very important that this file does *not* receive any
|
||||
Invariant Sections as per GFDL.
|
||||
-->
|
||||
<component type="addon">
|
||||
<id>telegram-purple</id>
|
||||
<extends>pidgin.desktop</extends>
|
||||
<name>Telegram</name>
|
||||
<name xml:lang="bg">Telegram</name>
|
||||
<name xml:lang="cs-CZ">Telegram</name>
|
||||
<name xml:lang="de-DE">Telegram</name>
|
||||
<name xml:lang="es">Telegram</name>
|
||||
<name xml:lang="es-AR">Telegram</name>
|
||||
<name xml:lang="fr">Telegram</name>
|
||||
<name xml:lang="it-IT">Telegram</name>
|
||||
<name xml:lang="nl">Telegram</name>
|
||||
<name xml:lang="pl-PL">Telegram</name>
|
||||
<name xml:lang="ru-RU">Telegram</name>
|
||||
<name xml:lang="sq">Telegram</name>
|
||||
<name xml:lang="uk">Телеграм</name>
|
||||
<summary>A plugin that adds support for Telegram</summary>
|
||||
<summary xml:lang="bg">Добавка, която добавя поддръжка на Telegram</summary>
|
||||
<summary xml:lang="cs-CZ">Zásuvný modul, který přidá podporu pro Telegram</summary>
|
||||
<summary xml:lang="de-DE">Plugin zur Unterstützung von Telegram</summary>
|
||||
<summary xml:lang="es">Un plugin que añade soporte para Telegram</summary>
|
||||
<summary xml:lang="es-AR">Un plugin que agrega soporte para Telegram</summary>
|
||||
<summary xml:lang="fr">Une extension qui ajoute le support pour Telegram</summary>
|
||||
<summary xml:lang="it-IT">Un plugin che aggiunge il supporto per Telegram</summary>
|
||||
<summary xml:lang="nl">Een plug-in die ondersteuning voor Telegram toevoegt</summary>
|
||||
<summary xml:lang="pl-PL">Wtyczka dodająca obsługę protokołu Telegram</summary>
|
||||
<summary xml:lang="ru-RU">Плагин, добавляющий поддержку Telegram</summary>
|
||||
<summary xml:lang="sq">Një shtojcë që shton mbulim për Telegram-in</summary>
|
||||
<summary xml:lang="uk">Плагін, що додає підтримку у Телеграм</summary>
|
||||
<url type="homepage">https://github.com/majn/telegram-purple</url>
|
||||
<url type="bugtracker">https://github.com/majn/telegram-purple/issues/</url>
|
||||
<metadata_license>GFDL-1.3</metadata_license>
|
||||
<project_license>GPL-2.0+</project_license>
|
||||
<update_contact>eischmann_at_redhat.com</update_contact>
|
||||
</component>
|
51
CHANGELOG.md
51
CHANGELOG.md
|
@ -1,6 +1,57 @@
|
|||
Changelog
|
||||
---------
|
||||
|
||||
##### 1.3.1
|
||||
|
||||
- Stability improvements
|
||||
- Support auto-loading for documents
|
||||
- Add support for "typing" in group chats (using group-typing-notifications plugin)
|
||||
- Add support for /kick command in group chats
|
||||
|
||||
##### 1.3.0
|
||||
|
||||
- channel/supergroup support
|
||||
- support sending code tags in markdown "backtick" format (see README for example)
|
||||
- reduce amount of file-transfer popups in Pidgin, auto-load media in the background
|
||||
- fix stability issues for the win32 build
|
||||
- fix multiple crashes in libtgl
|
||||
|
||||
##### 1.2.6
|
||||
|
||||
- Include libtgl bugfix "use-after-not-created for photos"
|
||||
- Fix Adium bundle version incompatibillity for newest version
|
||||
|
||||
##### 1.2.5
|
||||
|
||||
- Include libtgl fix to prevent crashes on certain channel messages
|
||||
- Improve error handling to be more graceful
|
||||
|
||||
##### 1.2.4
|
||||
|
||||
- Fix crash on unknown media type
|
||||
- Fix crash on logout after cancelling a file transfer
|
||||
|
||||
##### 1.2.3
|
||||
|
||||
- Build: Allow compilation on Windows #52 Thanks Eion!
|
||||
- Build: Drop dependency on LodePNG, Thanks Ben!
|
||||
- Build: Gettext is now optional
|
||||
|
||||
- Fix issue that prevented to send messages to deleted users in certain cases (#174)
|
||||
- Fix own user being added to the buddy list in certain cases
|
||||
- Fix that read recipes of own messages are being displayed (#139)
|
||||
- Fix encoding inconsistencies with Unicode characters (#177)
|
||||
- Fix auto-joining for chats (#179)
|
||||
- Fix client not reconnecting anymore under certain circumstances (#173)
|
||||
- Fix crash on compat-verification (PullRequest #183)
|
||||
|
||||
- Remove pointless "create chat" confirmation dialogue
|
||||
- Improve logging messages
|
||||
- Always send read recipes when the user is typing or sending a message
|
||||
- Improve translation and user messages (#139)
|
||||
- Use native password prompts (Adium)
|
||||
|
||||
|
||||
##### 1.2.2
|
||||
|
||||
- fix some licensing issues by not depending on OpenSSL any longer (thanks Ben!)
|
||||
|
|
38
HACKING.BUILD.md
Normal file
38
HACKING.BUILD.md
Normal file
|
@ -0,0 +1,38 @@
|
|||
# Hacking on the build system
|
||||
|
||||
This list was previously maintained as [issue #242](https://github.com/majn/telegram-purple/issues/242), until we realized that this needs proper version-control. (Duh!)
|
||||
|
||||
## Exhaustive list of requirements on the build system:
|
||||
|
||||
1. `commit.h` must change whenever it disagrees with the current git commit
|
||||
1. `commit.h` must not change whenever it agrees with the current git commit
|
||||
1. Must call `cd tgl && ./configure` with appropriate options whenever `tgl/Makefile` is missing, or notices that `./configure` was run. ("Too often" is acceptable as long as `make && make` isn't violated.)
|
||||
1. Must call `make -C tgl` whenever this might have any effect. ("Too often" is acceptable as long as `make && make` isn't violated.)
|
||||
1. Any changes due to `make -C tgl` must cause all necessary rebuilds in telegram-purple during the same invocation of make. ("Too often" is acceptable as long as `make && make` isn't violated.)
|
||||
1. If `tgl/Makefile.in` is missing, explain that we need submodules, and stop.
|
||||
1. `make -j12` must work fine
|
||||
1. Must support out-of-CVS builds.
|
||||
|
||||
## While ensuring that:
|
||||
|
||||
- Must not `-include tgl/Makefile` as it doesn't really support that, and I'm not going to try and convince @vysheng to do that. Also, it's too fragile. You know how he ticks.
|
||||
- `make && make` must not create any files in the second run (otherwise, `sudo make install` would become hairy)
|
||||
- Compatibility with other makes
|
||||
|
||||
## Approach:
|
||||
|
||||
- `commit.h` is a regular file which depends on a .PHONY target `commit`. Building `commit.h` *only* touches `commit.h` if necessary and possible. (=> 1, 2, half of 8)
|
||||
- Have a target `tgl/Makefile` which depends on `Makefile`. (=> 3)
|
||||
- The central target `${PRPL_LIBNAME}` shall depend on the .PHONY `submade`, which depends on `tgl/Makefile`, and essentially executes `make -C tgl`. (=> 4, time constraint of 5)
|
||||
- All objects of telegram-purple depend on `tgl/libs/libtgl.a`. Rationale: if `tgl/libs/libtgl.a` stays the same, then nothing in tgl changed. If `tgl/libs/libtgl.a` changes, then due to lots of black preprocessor magic within tgl, it can't be safely determined which, if any, objects of telegram-purple can be re-used. Also, if tgl got recompiled (~ 1 minute), then tgp can be recompiled, too (~ 5 seconds). (=> dependency constraint of 5)
|
||||
- Let `tgl/Makefile` depend on `tgl/Makefile.in`, and put the warning into the rule for the latter. (=> 6)
|
||||
- The above already implies a dependency DAG that is completely known to make; except at one point: let `tgl/libs/libtgl.a` depend on `submade`, without any own code. Now make ensure thread-safety on it's own. (=> 7)
|
||||
- Bundle commit.h into the origtar (=> other half of 8)
|
||||
|
||||
## Side effects:
|
||||
|
||||
- Should be ultimately robust. Then again, that's what I thought about the last few attempts, and they didn't last long.
|
||||
- This reduces the number of .PHONYs drastically, making it easier to read, and making it easier to prove that `make && make` doesn't change anything.
|
||||
- Even though `submade` should trigger once and only once, this can handle multiple invocations just fine, too.
|
||||
- All files dependent on `commit.h` need to be mentioned explicitly as dependents in the Makefile. This is ugly, but (as far as I can see) unavoidable. Thankfully, any errors here will get detected by automated testing.
|
||||
- We currently use only one GNU make specific extension. See https://github.com/majn/telegram-purple/issues/137#issuecomment-167970054
|
20
HACKING.md
Normal file
20
HACKING.md
Normal file
|
@ -0,0 +1,20 @@
|
|||
# Contributing
|
||||
|
||||
This is Open Source Software. We realized that we didn't pass the Patch Test
|
||||
|
||||
## What to contribute
|
||||
|
||||
Here's a few places to start:
|
||||
|
||||
- Report any bugs you find.
|
||||
- No, seriously! Most of the bugs don't even get reported, or the reporter only writes "Doesn't work for me" and then vanishes.
|
||||
- ["help wanted" issues](https://github.com/majn/telegram-purple/issues?utf8=%E2%9C%93&q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22+-label%3A%22in-pipeline%22), especially automated testing
|
||||
- ["secret chat" issues](https://github.com/majn/telegram-purple/issues?utf8=%E2%9C%93&q=is%3Aopen+is%3Aissue+label%3A%22secret+chats%22+-label%3A%22in-pipeline%22+)
|
||||
- Portability (especially endianness) of tgl (external project)
|
||||
- [Issues of tgl](https://github.com/vysheng/tgl/issues) -- lots and lots of false or obsolete reports
|
||||
- Slim down the size of the generated files in `tgl/auto`, as this currently dominates the build time. Yuk!
|
||||
- Make sure that the libpurple-devs don't break libpurple any further.
|
||||
|
||||
## How to contribute
|
||||
|
||||
Write [an issue](https://github.com/majn/telegram-purple/issues/new), shoot us a mail (scrape the address from the git history), or contact us in dev chat (changing URL, see README for that).
|
160
Makefile.in
160
Makefile.in
|
@ -22,7 +22,7 @@ datarootdir=@datarootdir@
|
|||
localedir=@localedir@
|
||||
gettext_package=@GETTEXT_PACKAGE@
|
||||
|
||||
CFLAGS=@CFLAGS@ @PURPLE_CFLAGS@ @DEFS@ -DENABLE_NLS -DLOCALEDIR='"$(localedir)"' -Wall -Wextra -Wno-deprecated-declarations -Wno-unused-parameter -I${srcdir} -I. -fno-strict-aliasing -fPIC
|
||||
CFLAGS=@CFLAGS@ @PURPLE_CFLAGS@ @DEFS@ -DENABLE_NLS -DLOCALEDIR='"$(localedir)"' -Wall -Wextra -Wno-deprecated-declarations -Wno-unused-parameter -I${srcdir} -I. -fno-strict-aliasing -fPIC -D_FORTIFY_SOURCE=2
|
||||
LDFLAGS=@LDFLAGS@ @OPENSSL_LIBS@ @PURPLE_LIBS@ @LIBS@ -rdynamic -ggdb
|
||||
DIR_PERM=0755
|
||||
FILE_PERM=0644
|
||||
|
@ -31,13 +31,18 @@ CC=@CC@
|
|||
PKG_CONFIG=@PKG_CONFIG@
|
||||
MSGFMT_PATH=@MSGFMT_PATH@
|
||||
|
||||
# Check if -fstack-protector-strong is supported before enabling it
|
||||
SPUNSUPPORTED = $(shell $(CC) -fstack-protector-strong 2>&1 | grep -c 'stack-protector-strong')
|
||||
ifeq "$(SPUNSUPPORTED)" "0"
|
||||
CFLAGS += -fstack-protector-strong
|
||||
endif
|
||||
|
||||
DEP=dep
|
||||
EXE=bin
|
||||
OBJ=objs
|
||||
LIB=libs
|
||||
DIR_LIST=${DEP} ${EXE} ${OBJ} ${LIB}
|
||||
DIR_LIST=${DEP} ${EXE} ${OBJ}
|
||||
|
||||
PLUGIN_OBJECTS=${OBJ}/tgp-net.o ${OBJ}/tgp-timers.o ${OBJ}/msglog.o ${OBJ}/telegram-base.o ${OBJ}/telegram-purple.o ${OBJ}/tgp-2prpl.o ${OBJ}/tgp-structs.o ${OBJ}/tgp-utils.o ${OBJ}/tgp-chat.o ${OBJ}/tgp-ft.o ${OBJ}/tgp-msg.o ${OBJ}/tgp-request.o ${OBJ}/tgp-blist.o
|
||||
PLUGIN_OBJECTS=${OBJ}/tgp-net.o ${OBJ}/tgp-timers.o ${OBJ}/msglog.o ${OBJ}/telegram-base.o ${OBJ}/telegram-purple.o ${OBJ}/tgp-2prpl.o ${OBJ}/tgp-structs.o ${OBJ}/tgp-utils.o ${OBJ}/tgp-chat.o ${OBJ}/tgp-ft.o ${OBJ}/tgp-msg.o ${OBJ}/tgp-request.o ${OBJ}/tgp-blist.o ${OBJ}/tgp-info.o
|
||||
ALL_OBJS=${PLUGIN_OBJECTS}
|
||||
|
||||
ifdef MSGFMT_PATH
|
||||
|
@ -55,9 +60,14 @@ all: ${PRPL_LIBNAME} $(LOCALE_MOS)
|
|||
|
||||
PLUGIN_DIR_PURPLE=$(shell ${PKG_CONFIG} --variable=plugindir purple)
|
||||
DATA_ROOT_DIR_PURPLE=$(shell ${PKG_CONFIG} --variable=datarootdir purple)
|
||||
COPY_ICONS=@COPY_ICONS@
|
||||
CRYPTO_FLAG=@CRYPTO_FLAG@
|
||||
|
||||
|
||||
### == 'Magic' targets and infrastructure. == ###
|
||||
# Here be dragons! See https://github.com/majn/telegram-purple/issues/242
|
||||
# For the full list of requirements, goals, and rationale.
|
||||
|
||||
.PHONY: create_dirs
|
||||
create_dirs: ${DIR_LIST}
|
||||
|
||||
${DIR_LIST}:
|
||||
|
@ -67,77 +77,93 @@ DEPENDENCE=$(subst ${OBJ}/,${DEP}/,$(patsubst %.o,%.d,${ALL_OBJS}))
|
|||
DEPENDENCE_LIST=${DEPENDENCE}
|
||||
-include ${DEPENDENCE_LIST}
|
||||
|
||||
|
||||
# The dependency on tgl/libs/libtgl.a ensures that "make -C tgl" was called,
|
||||
# and most importantly: It ensures that all automatic headers exist.
|
||||
${PLUGIN_OBJECTS}: ${OBJ}/%.o: ${srcdir}/%.c ${LIB}/libtgl.a | create_dirs
|
||||
echo $@ && ${CC} ${CFLAGS} ${CPPFLAGS} -I ${srcdir}/tgl -c -MP -MD -MF ${DEP}/$*.d -MQ ${OBJ}/$*.o -o $@ $<
|
||||
|
||||
tgl/Makefile.in:
|
||||
@echo "tgl/Makefile.in not found. Maybe you need to 'git submodule update --init --recursive' ?" && exit 1
|
||||
|
||||
tgl/Makefile: tgl/Makefile.in
|
||||
tgl/Makefile: tgl/Makefile.in Makefile
|
||||
cd tgl && ./configure -q ${CRYPTO_FLAG} --disable-extf CFLAGS="@CFLAGS@" LDFLAGS="@LDFLAGS@"
|
||||
|
||||
tgl/libs/libtgl.a: tgl/Makefile
|
||||
+make -C tgl
|
||||
+${MAKE} -C tgl libs/libtgl.a
|
||||
|
||||
.PHONY: commit
|
||||
commit:
|
||||
|
||||
# The *commands* for commit.h shall always be executed, but the
|
||||
# *file* commit.h should only be considered to have changed in rare cases.
|
||||
GIT_COMMIT=$(shell git rev-parse HEAD | cut -c1-10)
|
||||
commit.h: commit
|
||||
@./commit.h.gen
|
||||
|
||||
# Ugly, but necessary, because otherwise commit.h would not get generated:
|
||||
test/loadtest.c: commit.h
|
||||
|
||||
# Ugly, but necessary, because otherwise commit.h would not get generated:
|
||||
telegram-purple.c: commit.h
|
||||
|
||||
|
||||
### == 'Normal' build. == ###
|
||||
|
||||
${PLUGIN_OBJECTS}: ${OBJ}/%.o: ${srcdir}/%.c tgl/libs/libtgl.a | create_dirs
|
||||
echo $@ && ${CC} ${CFLAGS} ${CPPFLAGS} -I ${srcdir}/tgl -c -MP -MD -MF ${DEP}/$*.d -MQ ${OBJ}/$*.o -o $@ $<
|
||||
|
||||
po/%.mo: po/%.po
|
||||
${MSGFMT_PATH} -cf -o $@ $<
|
||||
${MSGFMT_PATH} -cf -o $@ $< >/dev/null 2>&1
|
||||
|
||||
${LIB}/libtgl.a: tgl/libs/libtgl.a | create_dirs
|
||||
cp $< $@
|
||||
|
||||
${PRPL_LIBNAME}: ${PLUGIN_OBJECTS} ${LIB}/libtgl.a | create_dirs
|
||||
${PRPL_LIBNAME}: ${PLUGIN_OBJECTS} tgl/libs/libtgl.a | create_dirs
|
||||
${CC} -shared -o $@ $^ ${LDFLAGS}
|
||||
|
||||
.PHONY: plugin
|
||||
plugin: $(PRPL_LIBNAME)
|
||||
|
||||
### == noicon_{,un}install targets. Use only if you know that you don't need icons. Note that pidgin uses those files. == ###
|
||||
|
||||
.PHONY: strip
|
||||
strip: $(PRPL_LIBNAME)
|
||||
$(STRIP) --strip-unneeded $(PRPL_LIBNAME)
|
||||
|
||||
.PHONY: install
|
||||
install: $(PRPL_LIBNAME) $(LOCALE_MOS)
|
||||
.PHONY: noicon_install
|
||||
noicon_install: $(PRPL_LIBNAME) $(LOCALE_MOS)
|
||||
mkdir -m $(DIR_PERM) -p $(DESTDIR)$(PLUGIN_DIR_PURPLE)
|
||||
install -m $(FILE_PERM) $(PRPL_LIBNAME) $(DESTDIR)$(PLUGIN_DIR_PURPLE)/$(PRPL_NAME)
|
||||
mkdir -m $(DIR_PERM) -p $(DESTDIR)/etc/telegram-purple
|
||||
install -m $(FILE_PERM) tg-server.tglpub $(DESTDIR)/etc/telegram-purple/server.tglpub
|
||||
ifeq ($(COPY_ICONS),no)
|
||||
@echo "Not copying icons due to configure-option --disable-icons."
|
||||
@echo " If you're using Finch, Empathy, or Telepathy, then this is a good idea."
|
||||
@echo " If you're using Pidgin, then this is a bad idea."
|
||||
@echo " If you're using Adium, read the README.md: You're using the wrong build system!"
|
||||
else
|
||||
mkdir -m $(DIR_PERM) -p $(DESTDIR)$(DATA_ROOT_DIR_PURPLE)/pixmaps/pidgin/protocols/16
|
||||
install -m $(FILE_PERM) imgs/telegram16.png $(DESTDIR)$(DATA_ROOT_DIR_PURPLE)/pixmaps/pidgin/protocols/16/telegram.png
|
||||
mkdir -m $(DIR_PERM) -p $(DESTDIR)$(DATA_ROOT_DIR_PURPLE)/pixmaps/pidgin/protocols/22
|
||||
install -m $(FILE_PERM) imgs/telegram22.png $(DESTDIR)$(DATA_ROOT_DIR_PURPLE)/pixmaps/pidgin/protocols/22/telegram.png
|
||||
mkdir -m $(DIR_PERM) -p $(DESTDIR)$(DATA_ROOT_DIR_PURPLE)/pixmaps/pidgin/protocols/48
|
||||
install -m $(FILE_PERM) imgs/telegram48.png $(DESTDIR)$(DATA_ROOT_DIR_PURPLE)/pixmaps/pidgin/protocols/48/telegram.png
|
||||
endif
|
||||
# Assume that the user does not use AppStream if she doesn't want icons
|
||||
@for lang in $(LOCALES); do \
|
||||
mkdir -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES; \
|
||||
echo "installing po/$$lang.mo to $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(gettext_package).mo"; \
|
||||
install -m $(FILE_PERM) po/$$lang.mo $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(gettext_package).mo; \
|
||||
done
|
||||
|
||||
.PHONY: uninstall
|
||||
uninstall:
|
||||
.PHONY: noicon_uninstall
|
||||
noicon_uninstall:
|
||||
rm -f $(DESTDIR)$(PLUGIN_DIR_PURPLE)/$(PRPL_NAME)
|
||||
rm -f $(DESTDIR)/etc/telegram-purple/server.pub # TODO: Remove this in later versions
|
||||
rm -f $(DESTDIR)/etc/telegram-purple/server.tglpub
|
||||
rm -f $(DESTDIR)$(DATA_ROOT_DIR_PURPLE)/pixmaps/pidgin/protocols/16/telegram.png
|
||||
rm -f $(DESTDIR)$(DATA_ROOT_DIR_PURPLE)/pixmaps/pidgin/protocols/22/telegram.png
|
||||
rm -f $(DESTDIR)$(DATA_ROOT_DIR_PURPLE)/pixmaps/pidgin/protocols/48/telegram.png
|
||||
# TODO: Delete all installed .mo's, no matter what LINGUAS says.
|
||||
@for lang in $(LOCALES); do \
|
||||
echo "removing $(localedir)/$$lang/LC_MESSAGES/$(gettext_package).mo"; \
|
||||
rm -f $(localedir)/$$lang/LC_MESSAGES/$(gettext_package).mo; \
|
||||
done
|
||||
|
||||
|
||||
### == Main {,un}install targets. This should satisfy most needs. == ###
|
||||
|
||||
.PHONY: install
|
||||
install: noicon_install
|
||||
mkdir -m $(DIR_PERM) -p $(DESTDIR)$(DATA_ROOT_DIR_PURPLE)/pixmaps/pidgin/protocols/16
|
||||
install -m $(FILE_PERM) imgs/telegram16.png $(DESTDIR)$(DATA_ROOT_DIR_PURPLE)/pixmaps/pidgin/protocols/16/telegram.png
|
||||
mkdir -m $(DIR_PERM) -p $(DESTDIR)$(DATA_ROOT_DIR_PURPLE)/pixmaps/pidgin/protocols/22
|
||||
install -m $(FILE_PERM) imgs/telegram22.png $(DESTDIR)$(DATA_ROOT_DIR_PURPLE)/pixmaps/pidgin/protocols/22/telegram.png
|
||||
mkdir -m $(DIR_PERM) -p $(DESTDIR)$(DATA_ROOT_DIR_PURPLE)/pixmaps/pidgin/protocols/48
|
||||
install -m $(FILE_PERM) imgs/telegram48.png $(DESTDIR)$(DATA_ROOT_DIR_PURPLE)/pixmaps/pidgin/protocols/48/telegram.png
|
||||
mkdir -m $(DIR_PERM) -p $(DESTDIR)$(datarootdir)/appdata
|
||||
install -m $(FILE_PERM) AppStream/telegram-purple.metainfo.xml $(DESTDIR)$(datarootdir)/appdata/telegram-purple.metainfo.xml
|
||||
|
||||
.PHONY: uninstall
|
||||
uninstall: noicon_uninstall
|
||||
rm -f $(DESTDIR)$(DATA_ROOT_DIR_PURPLE)/pixmaps/pidgin/protocols/16/telegram.png
|
||||
rm -f $(DESTDIR)$(DATA_ROOT_DIR_PURPLE)/pixmaps/pidgin/protocols/22/telegram.png
|
||||
rm -f $(DESTDIR)$(DATA_ROOT_DIR_PURPLE)/pixmaps/pidgin/protocols/48/telegram.png
|
||||
rm -f $(DESTDIR)$(datarootdir)/appdata/telegram-purple.metainfo.xml
|
||||
|
||||
|
||||
### == The local_{,un}install targets, in case you're not root. == ###
|
||||
|
||||
.PHONY: local_install
|
||||
local_install:
|
||||
mkdir -m $(DIR_PERM) -p $(DESTDIR)$(HOME)/.purple/plugins
|
||||
|
@ -151,6 +177,20 @@ local_uninstall:
|
|||
rm -f $(DESTDIR)$(HOME)/.purple/plugins/$(PRPL_NAME)
|
||||
rm -f $(DESTDIR)$(HOME)/.purple/telegram-purple/server.tglpub
|
||||
|
||||
|
||||
### == Handling and maintenance. Subject to rapid change, shouldn't be used in scripts. == ###
|
||||
|
||||
.PHONY: plugin
|
||||
plugin: $(PRPL_LIBNAME)
|
||||
|
||||
.PHONY: strip
|
||||
strip: $(PRPL_LIBNAME)
|
||||
$(STRIP) --strip-unneeded $(PRPL_LIBNAME)
|
||||
|
||||
.PHONY: build-nsi
|
||||
build-nsi: telegram-purple.nsi.awk telegram-purple.nsi.awk-in
|
||||
awk -f telegram-purple.nsi.awk telegram-purple.nsi.awk-in > telegram-purple.nsi
|
||||
|
||||
.PHONY: run
|
||||
run:
|
||||
pidgin -d | grep 'telegram\|plugin\|proxy'
|
||||
|
@ -159,10 +199,36 @@ run:
|
|||
debug: install
|
||||
ddd pidgin
|
||||
|
||||
DIST_ERR_MSG="Working directory is not git clean.\
|
||||
Run 'git status' to show what files are causing this.\
|
||||
Please note that 'make dist' packages the state in git, not the one on your disk."
|
||||
|
||||
SUBMOD_ERR_MSG="Couldn't find tgl/tl-parser/tl-parser.c\
|
||||
Are all submodules properly initialized and updated?"
|
||||
|
||||
# Not PHONY
|
||||
.git:
|
||||
@echo "Not in a git folder. Features that require git are disabled."; exit 1
|
||||
|
||||
.PHONY: check-clean
|
||||
check-clean: .git
|
||||
@test "x" = x"`git status --porcelain`" || (echo ${DIST_ERR_MSG}; exit 1)
|
||||
@test -r tgl/tl-parser/.git || (echo ${SUBMOD_ERR_MSG}; exit 1)
|
||||
|
||||
# Feel free to remove the "check-clean" dependency if you know what you're doing.
|
||||
.PHONY: dist
|
||||
dist: check-clean commit.h .git create_dirs
|
||||
./gen-origtar
|
||||
|
||||
|
||||
### == Cleaning in various flavors == ###
|
||||
|
||||
.PHONY: clean-here
|
||||
clean-here:
|
||||
rm -rf ${DIR_LIST} config.log config.status $(PRPL_C_OBJS) $(PRPL_LIBNAME) po/*.mo
|
||||
rm -rf ${DIR_LIST} $(PRPL_LIBNAME) po/*.mo autom4te.cache AppStream/po/*.mo
|
||||
|
||||
-include test/Makefile
|
||||
|
||||
.PHONY: clean
|
||||
clean: clean-here tgl/Makefile
|
||||
+make -C tgl clean
|
||||
clean: clean-here clean-test tgl/Makefile
|
||||
+${MAKE} -C tgl clean
|
||||
|
|
|
@ -41,7 +41,7 @@ LIB=libs
|
|||
DIR_LIST=${DEP} ${EXE} ${OBJ} ${LIB} ${DEP}/lodepng ${OBJ}/lodepng
|
||||
|
||||
PLUGIN_OBJECTS=${OBJ}/tgp-net.o ${OBJ}/tgp-timers.o ${OBJ}/msglog.o ${OBJ}/telegram-base.o ${OBJ}/telegram-purple.o ${OBJ}/tgp-2prpl.o ${OBJ}/tgp-structs.o ${OBJ}/tgp-utils.o ${OBJ}/tgp-chat.o ${OBJ}/tgp-ft.o ${OBJ}/tgp-msg.o ${OBJ}/tgp-request.o ${OBJ}/tgp-blist.o ${OBJ}/lodepng/lodepng.o
|
||||
ALL_OBJS=${PLUGIN_OBJECTS}
|
||||
ALL_OBJS=${PLUGIN_OBJECTS} ${OBJ}/tgp-info.o
|
||||
|
||||
LOCALES=$(patsubst %.po, %.mo, $(wildcard po/*.po))
|
||||
|
||||
|
|
|
@ -18,9 +18,6 @@
|
|||
|
||||
srcdir=.
|
||||
|
||||
SCHEME_VERSION = 38
|
||||
ENCRYPTED_SCHEME_VERSION = 23
|
||||
|
||||
|
||||
WIN32_DEV_TOP ?= ../../win32-dev
|
||||
|
||||
|
@ -92,7 +89,7 @@ ${EXE}/generate: ${GENERATE_OBJECTS} ${COMMON_OBJECTS}
|
|||
${AUTO}/scheme.tlo: ${AUTO}/scheme.tl ${EXE}/tl-parser
|
||||
${EXE}/tl-parser -e $@ ${AUTO}/scheme.tl
|
||||
|
||||
${AUTO}/scheme.tl: ${srcdir}/scheme$(SCHEME_VERSION).tl ${srcdir}/encrypted_scheme$(ENCRYPTED_SCHEME_VERSION).tl ${srcdir}/binlog.tl ${srcdir}/mtproto.tl ${srcdir}/append.tl | ${AUTO}
|
||||
${AUTO}/scheme.tl: ${srcdir}/scheme.tl ${srcdir}/encrypted_scheme.tl ${srcdir}/binlog.tl ${srcdir}/mtproto.tl ${srcdir}/append.tl | ${AUTO}
|
||||
cat $^ > $@
|
||||
|
||||
${AUTO}/scheme2.tl: ${AUTO}/scheme.tl ${EXE}/tl-parser
|
||||
|
|
175
README.md
175
README.md
|
@ -3,40 +3,54 @@ Telegram-Purple Unofficial (Beta)
|
|||
|
||||
Telegram-purple is a Libpurple protocol plugin that adds support for the Telegram messenger.
|
||||
|
||||
I keep getting many questions about this plugin in my E-mail, so I've created a
|
||||
[telegram group chat](https://goo.gl/bhmM7N) for
|
||||
I keep getting many questions about this plugin in my E-mail, so I've created a [telegram group chat](https://goo.gl/VudXys) for
|
||||
telegram-purple related discussions or questions.
|
||||
|
||||
OS Support
|
||||
----------
|
||||
Installation
|
||||
------------
|
||||
|
||||
This plugin is tested and compiles on **Linux**, **OS X** and **Windows**. Packages for those platform will be provided soon.
|
||||
If you are just interested in using the plugin you probably want to use one of the following binary distributions. Please note that I do not control most of those package sources and the version may lag behind.
|
||||
|
||||
1.2.3
|
||||
-----
|
||||
If your platform is not supported or you want to contribute by testing or development, scroll down to "Building form Source".
|
||||
|
||||
- Build: Allow compilation on Windows (#52 Thanks Eion!)
|
||||
- Build: Drop dependency on LodePNG (Thanks Ben!)
|
||||
- Build: Gettext is now optional
|
||||
|
||||
- Fix issue that prevented to send messages to deleted users in certain cases (#174)
|
||||
- Fix own user being added to the buddy list in certain cases
|
||||
- Fix that read recipes of own messages are being displayed (#139)
|
||||
- Fix encoding inconsistencies with Unicode characters (#177)
|
||||
- Fix auto-joining for chats (#179)
|
||||
- Fix client not reconnecting anymore under certain circumstances (#173)
|
||||
- Fix crash on compat-verification (PullRequest #183)
|
||||
#### OSX (Adium)
|
||||
|
||||
- Remove pointless "create chat" confirmation dialogue
|
||||
- Improve logging messages
|
||||
- Always send read recipes when the user is typing or sending a message
|
||||
- Improve translation and user messages (#139)
|
||||
- Use native password prompts (Adium)
|
||||
1. Download and execute the [Telegram-Adium bundle] (https://github.com/majn/telegram-purple/releases/download/v1.3.0/telegram-adium-1.3.0.AdiumLibpurplePlugin.zip)
|
||||
2. Restart Adium
|
||||
|
||||
Build
|
||||
-----
|
||||
#### Windows
|
||||
|
||||
Below, you will find the instructions for how to build the libpurple protocol plugin. If you just want to use the plugin in Adium, [download the precompiled packages here.](https://github.com/majn/telegram-purple/releases).
|
||||
Eion Robb provides a binary for Windows users:
|
||||
|
||||
1. Download and execute the setup from http://eion.robbmob.com/telegram/
|
||||
2. Restart Pidgin
|
||||
|
||||
#### Fedora (22, 23)
|
||||
|
||||
The package is available in the Fedora 22 and 23 testing repositories:
|
||||
|
||||
dnf config-manager --set-enabled updates-testing
|
||||
dnf install purple-telegram
|
||||
|
||||
|
||||
#### Arch Linux (AUR)
|
||||
|
||||
https://aur.archlinux.org/packages/telegram-purple/
|
||||
|
||||
|
||||
#### Debian
|
||||
|
||||
At the time of writing, the package hasn't been accepted yet.
|
||||
Please first check if it's already available to you: `sudo apt-get install telegram-purple`
|
||||
|
||||
If this doesn't work because the package doesn't exist (yet), please build it from source.
|
||||
|
||||
|
||||
Building From Source
|
||||
--------------------
|
||||
|
||||
Below, you will find the instructions for how to build the libpurple protocol plugin from source.
|
||||
|
||||
#### 1. Clone
|
||||
|
||||
|
@ -47,6 +61,21 @@ This repository has submodules, so you need to clone recursively.
|
|||
cd telegram-purple
|
||||
|
||||
|
||||
#### 1b. Cloning if you're a packager
|
||||
|
||||
If you are unsure about whether you need this, then you are not a
|
||||
packager and don't have any use for this.
|
||||
|
||||
If you need an "orig-tarball", it can be generated by `make dist`. Note
|
||||
that this automatically generates an appropriate version number like
|
||||
`1.2.4-58-g8e3cebf`. You can truncate the git suffix (`-g8e3cebf`). If
|
||||
the `-58` part exists, it means that you're using a development
|
||||
version, which is probably not what you want. If you still want to
|
||||
package this, please leave the commit number (i.e., `58`) intact, as
|
||||
this indicates that this version is in fact much further than just
|
||||
`1.2.4`.
|
||||
|
||||
|
||||
#### 2. Fetch all dependencies
|
||||
|
||||
##### Fedora
|
||||
|
@ -54,7 +83,7 @@ This repository has submodules, so you need to clone recursively.
|
|||
sudo dnf install gcc gettext libgcrypt-devel libwebp-devel libpurple-devel zlib-devel
|
||||
|
||||
|
||||
###### Debian / Ubuntu
|
||||
##### Debian / Ubuntu
|
||||
|
||||
We are working on a Debian package! Please first check if it's already available to you: `sudo apt-get install telegram-purple`
|
||||
|
||||
|
@ -62,13 +91,14 @@ If the above works, then you should stop here: It is now installed.
|
|||
|
||||
If the above fails: Don't worry, just continue building it by yourself. Next you need to install these dependencies:
|
||||
|
||||
sudo apt-get install libgcrypt20-dev libpurple-dev libwebp-dev
|
||||
sudo apt-get install libgcrypt20-dev libpurple-dev libwebp-dev gettext build-essential
|
||||
|
||||
###### OpenSUSE
|
||||
|
||||
##### OpenSUSE
|
||||
|
||||
sudo zypper install gcc glib glib-devel libpurple libpurple-devel zlib-devel libwebp-devel
|
||||
|
||||
And the development files for gcrypt, probably `gcrypt-devel` or something.
|
||||
And the development files for gcrypt, probably `gcrypt-devel` or something. (FIXME)
|
||||
|
||||
|
||||
#### 3. Compile and install
|
||||
|
@ -81,26 +111,6 @@ Please note that this is usually not necessary.
|
|||
sudo make install
|
||||
|
||||
|
||||
|
||||
Unofficial Packages
|
||||
-------------------
|
||||
|
||||
##### Fedora 21, 22, 23 / CentOS7
|
||||
|
||||
https://copr.fedoraproject.org/coprs/eischmann/purple-telegram/
|
||||
|
||||
|
||||
##### Arch AUR
|
||||
|
||||
https://aur.archlinux.org/packages/telegram-purple/
|
||||
|
||||
|
||||
##### Ubuntu PPA (webupd8)
|
||||
|
||||
https://launchpad.net/~nilarimogard/+archive/ubuntu/webupd8
|
||||
|
||||
|
||||
|
||||
Pulling Updates
|
||||
---------------
|
||||
|
||||
|
@ -108,6 +118,7 @@ This repository contains submodules, and a simple pull just won't be enough to u
|
|||
|
||||
|
||||
git pull
|
||||
git submodule sync # just in case the configuration has changed
|
||||
git submodule update --recursive
|
||||
|
||||
|
||||
|
@ -116,9 +127,9 @@ Usage
|
|||
|
||||
#### First Login
|
||||
|
||||
The username is your current phone number, including your full country prefix. For Germany, this would be '+49', resulting in a user name like '+49151123456'. Telegram will verify your phone number by sending you a code via sms. You will be prompted for this code, once that happens.
|
||||
The username is your current phone number, including your full country prefix. For Germany, this would be '+49', resulting in a user name like '+49151123456'. Telegram will verify your phone number by sending you a code via SMS. You will be prompted for this code, once that happens.
|
||||
|
||||
#### Buddy List
|
||||
#### Buddy List
|
||||
|
||||
Like in the official Telegram apps, the displayed buddy list consists of all active conversations.
|
||||
|
||||
|
@ -136,7 +147,7 @@ Self destructive messages will be ignored, since I don't know any way to delete
|
|||
|
||||
##### Confirming the key authenticity
|
||||
|
||||
Click on the buddy in the buddy list and click on "Show Info" to visualize the key fingerprint.
|
||||
Click on the buddy in the buddy list and click on "Show Info" to visualize the key fingerprint.
|
||||
|
||||
##### Initiate secret chats
|
||||
|
||||
|
@ -153,6 +164,24 @@ The Telegram phone applications for iOS and Android make use of standardized Uni
|
|||
does not display those smileys natively, but you can install a custom smiley theme like (https://github.com/stv0g/unicode-emoji) or (https://github.com/VxJasonxV/emoji-for-pidgin) and activate it under Settings > Themes > Smiley Theme.
|
||||
|
||||
|
||||
#### Code-Tags
|
||||
|
||||
Since 1.3.0 it is possible to write messages in monospaced fonts using the markdown backtick syntax.
|
||||
|
||||
##### Example
|
||||
|
||||
``` if (true) {
|
||||
// do smth
|
||||
}```
|
||||
|
||||
##### Result
|
||||
|
||||
if (true) {
|
||||
// do smth
|
||||
}
|
||||
|
||||
|
||||
|
||||
Building the Adium Plugin
|
||||
-------------------------
|
||||
|
||||
|
@ -171,7 +200,7 @@ Compiling with XCode is a little bit problematic, since it requires you to compi
|
|||
brew update
|
||||
brew upgrade webp libgcrypt
|
||||
|
||||
6. Installwith homebrew and move it into the appropriate directory so that XCode can find them. Note that the versions might differ, use the one that is
|
||||
6. Install with homebrew and move it into the appropriate directory so that XCode can find them. Note that the versions might differ, use the one that is
|
||||
|
||||
mkdir -p ./telegram-adium/Frameworks/Adium
|
||||
cp /usr/local/Cellar/webp/0.4.3/lib/libwebp.a ./telegram-adium/Frameworks
|
||||
|
@ -193,7 +222,9 @@ Building the Debian Package
|
|||
|
||||
If you just need a `.deb`, simply do:
|
||||
|
||||
sudo apt-get install debhelper
|
||||
git checkout debian-master
|
||||
git submodule update --recursive
|
||||
fakeroot ./debian/rules binary
|
||||
|
||||
And you're done! The `.deb` is in the directory at which you started.
|
||||
|
@ -211,23 +242,29 @@ maintainer), you need to produce a lot more files than that.
|
|||
|
||||
Here's how you can generate a `.orig.tar.gz`:
|
||||
|
||||
debian/genorigtar.sh
|
||||
make dist
|
||||
|
||||
Note that these are incompatible with the old `debian/genorigtar.sh`
|
||||
tarballs, and can't be made compatible easily. If you need the tarball
|
||||
from "back then", see the documentation there.
|
||||
|
||||
This command requires the original tar to exist (and will fail otherwise,
|
||||
although the error message will be misleading) will build all further files,
|
||||
specifically `.debian.tar.xz`,`.dsc`, `.deb`, and `.changes`:
|
||||
specifically `.debian.tar.xz`, `.dsc`, `.deb`, and `.changes`:
|
||||
|
||||
dpkg-buildpackage
|
||||
|
||||
And that already covers the official part of the work-flow. Of course,
|
||||
you can call small parts of the build process directly, in order to avoid
|
||||
For the upload, you should use `pbuilder` and similar to build the package
|
||||
in a more minimalistic environment. That covers the official part of the work-flow.
|
||||
|
||||
Of course, you can call small parts of the build process directly, in order to avoid
|
||||
overhead like rebuilding. For example, if you only need the `.debian.tar.xz`
|
||||
and `.dsc` files, do this:
|
||||
|
||||
debian/genorigtar.sh
|
||||
( cd .. && dpkg-source -b telegram-purple )
|
||||
make dist
|
||||
false # Move tar to parent directory, by hand
|
||||
dpkg-source -b .
|
||||
|
||||
Note that the parenthesis are important.
|
||||
|
||||
Discussion / Help
|
||||
-----------------
|
||||
|
@ -236,7 +273,7 @@ Discussion / Help
|
|||
|
||||
As we want to avoid OpenSSL, it has become necessary to replace the PEM file format. This means that if you use a custom pubkey (which you really REALLY shouldn't be doing), you have to adapt, sorry.
|
||||
|
||||
We no longer ship `tg-server.pub` (old format), but instead `tg-server.tlgpub` (new format). If you have a `.pub` and want to continue using telegram-purple, please use this (hopefully highly portable) tool: [pem2bignum](https://github.com/BenWiederhake/pem2bignum)
|
||||
We no longer ship `tg-server.pub` (old format), but instead `tg-server.tglpub` (new format). If you have a `.pub` and want to continue using telegram-purple, please use this (hopefully highly portable) tool: [pem2bignum](https://github.com/BenWiederhake/pem2bignum)
|
||||
|
||||
You can also write your own conversion tool if you prefer. The format is really simple:
|
||||
|
||||
|
@ -253,11 +290,20 @@ FAQ
|
|||
- I receive pictures in a chat, but they aren't showing up
|
||||
* A: Make sure that you don't have a plugin like "Conversation Colors" that strips HTML from messages and removes the pictures.
|
||||
|
||||
- I receive RPC_CALL_FAIL_401: SESSION REVOKED
|
||||
|
||||
* A: This basically means your session has been terminated but the program
|
||||
doesn't handle terminated sessions properly yet. You have to clean the
|
||||
~/.purple/telegram-purple/$PHONENUMBER directory to fix this issue.
|
||||
|
||||
For Arch Linux users that use Bitlbee you can find this directory in
|
||||
`/var/lib/bitlbee/purple/telegram-purple/`
|
||||
|
||||
#### Group chat
|
||||
|
||||
Telegram group chat for telegram-purple or libtgl related discussions or questions:
|
||||
|
||||
- https://goo.gl/bhmM7N
|
||||
- https://goo.gl/VudXys
|
||||
|
||||
|
||||
Submitting Bug Reports
|
||||
|
@ -275,7 +321,7 @@ Empathy / libtelepathy
|
|||
----------------------
|
||||
|
||||
Empathy doesn't natively support libpurple plugins since its based on libtelepathy, but there is a compatibillity layer called telepathy-haze that can be used to execute libpurple
|
||||
plugins. This means that you can basically run this plugin thanks to telepathy-haze but you will usually get less features and worse usabillity compared to real libpurple clients. If you use Empathy (or anything else based on libtelepathy) I recommend [telepathy-morse](https://projects.kde.org/projects/playground/network/telepathy/telepathy-morse/repository) which is a connection manager written specifically for your messenger.
|
||||
plugins. This means that you can basically run this plugin thanks to telepathy-haze but you will usually get less features and worse usability compared to real libpurple clients. If you use Empathy (or anything else based on libtelepathy) I recommend [telepathy-morse](https://projects.kde.org/projects/playground/network/telepathy/telepathy-morse/repository) which is a connection manager written specifically for your messenger.
|
||||
|
||||
Authors
|
||||
-------
|
||||
|
@ -284,10 +330,9 @@ Telegram-Purple was written by:
|
|||
|
||||
- Matthias Jentsch <mtthsjntsch@gmail.com>
|
||||
- Vitaly Valtman
|
||||
- Ben Wiederhake
|
||||
- Ben Wiederhake <Ben.Wiederhake@gmail.com>
|
||||
- Christopher Althaus <althaus.christopher@gmail.com>
|
||||
|
||||
|
||||
Acknowledgements
|
||||
----------------
|
||||
|
||||
|
|
19
autogen.sh
19
autogen.sh
|
@ -1,21 +1,16 @@
|
|||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
autoreconf
|
||||
|
||||
echo bootstrapping translation files ...
|
||||
(
|
||||
cd po
|
||||
export XGETTEXT="xgettext -kP_:1,2"
|
||||
intltool-update --pot
|
||||
## Translations are managed at https://www.transifex.com/telegram-purple-developers/telegram-purple/
|
||||
## To update the .po files, download it from there, since intltool, msginit, and transifex produce slightly different files, and I'd like to avoid gigantic git diffs that only change indentation or similar things.
|
||||
#for lang in $(cat LINGUAS); do
|
||||
# if [ -e "$lang.po" ]
|
||||
# then
|
||||
# echo "updating language file $lang.po ..."
|
||||
# intltool-update "$lang"
|
||||
# else
|
||||
# echo "creating new language file $lang.po ..."
|
||||
# msginit --locale="$lang"
|
||||
# fi
|
||||
#done
|
||||
cd ..
|
||||
)
|
||||
|
||||
test -r Makefile || (echo "Autoreconf didn't create Makefile?!"; exit 1)
|
||||
make --quiet build-nsi
|
||||
|
|
45
commit.h.gen
Executable file
45
commit.h.gen
Executable file
|
@ -0,0 +1,45 @@
|
|||
#!/bin/sh
|
||||
|
||||
# This file is part of telegram-purple
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
|
||||
#
|
||||
# Copyright Matthias Jentsch, Ben Wiederhake 2016
|
||||
|
||||
set -e
|
||||
|
||||
if ! (command -v git && git status) >/dev/null 2>&1
|
||||
then
|
||||
if test -r commit.h
|
||||
then
|
||||
echo "No git available. Assuming everything is up-to-date."
|
||||
exit 0
|
||||
else
|
||||
echo >&2 "No git available. Can't reconstruct commit.h"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
GIT_COMMIT=`git rev-parse HEAD | cut -c1-10`
|
||||
|
||||
if grep -scq "${GIT_COMMIT}" commit.h
|
||||
then
|
||||
echo "commit.h is up-to-date"
|
||||
else
|
||||
echo "Refresh commit.h"
|
||||
echo "#ifndef GIT_COMMIT" > commit.h
|
||||
echo "# define GIT_COMMIT \"${GIT_COMMIT}\"" >> commit.h
|
||||
echo "#endif" >> commit.h
|
||||
fi
|
37
configure
vendored
37
configure
vendored
|
@ -1,6 +1,6 @@
|
|||
#! /bin/sh
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# Generated by GNU Autoconf 2.69 for telegram-purple 1.2.3.
|
||||
# Generated by GNU Autoconf 2.69 for telegram-purple 1.3.1.
|
||||
#
|
||||
#
|
||||
# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
|
||||
|
@ -577,8 +577,8 @@ MAKEFLAGS=
|
|||
# Identity of this package.
|
||||
PACKAGE_NAME='telegram-purple'
|
||||
PACKAGE_TARNAME='telegram-purple'
|
||||
PACKAGE_VERSION='1.2.3'
|
||||
PACKAGE_STRING='telegram-purple 1.2.3'
|
||||
PACKAGE_VERSION='1.3.1'
|
||||
PACKAGE_STRING='telegram-purple 1.3.1'
|
||||
PACKAGE_BUGREPORT=''
|
||||
PACKAGE_URL=''
|
||||
|
||||
|
@ -625,7 +625,6 @@ MSGFMT_PATH
|
|||
CHECK_GETTEXT
|
||||
PURPLE_CPPFLAGS
|
||||
LIBOBJS
|
||||
COPY_ICONS
|
||||
PURPLE_LIBS
|
||||
PURPLE_CFLAGS
|
||||
PKG_CONFIG_LIBDIR
|
||||
|
@ -1250,7 +1249,7 @@ if test "$ac_init_help" = "long"; then
|
|||
# Omit some internal or obsolete options to make the list less imposing.
|
||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||
cat <<_ACEOF
|
||||
\`configure' configures telegram-purple 1.2.3 to adapt to many kinds of systems.
|
||||
\`configure' configures telegram-purple 1.3.1 to adapt to many kinds of systems.
|
||||
|
||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||
|
||||
|
@ -1311,7 +1310,7 @@ fi
|
|||
|
||||
if test -n "$ac_init_help"; then
|
||||
case $ac_init_help in
|
||||
short | recursive ) echo "Configuration of telegram-purple 1.2.3:";;
|
||||
short | recursive ) echo "Configuration of telegram-purple 1.3.1:";;
|
||||
esac
|
||||
cat <<\_ACEOF
|
||||
|
||||
|
@ -1323,10 +1322,8 @@ Optional Features:
|
|||
DISTRIBUTE BINARIES!
|
||||
--disable-libwebp Disable libwebp, stickers won't be displayed in the
|
||||
chat
|
||||
--disable-icons Don't copy the protocol icons for Pidgin. Only
|
||||
useful if you're using Finch of telepathy-haze.
|
||||
(Adium users shouldn't be using this build system at
|
||||
all.)
|
||||
--disable-icons Unsupported option. Use 'make noicon_install'
|
||||
instead.
|
||||
--disable-translation Disable gettext translation
|
||||
|
||||
Optional Packages:
|
||||
|
@ -1421,7 +1418,7 @@ fi
|
|||
test -n "$ac_init_help" && exit $ac_status
|
||||
if $ac_init_version; then
|
||||
cat <<\_ACEOF
|
||||
telegram-purple configure 1.2.3
|
||||
telegram-purple configure 1.3.1
|
||||
generated by GNU Autoconf 2.69
|
||||
|
||||
Copyright (C) 2012 Free Software Foundation, Inc.
|
||||
|
@ -1840,7 +1837,7 @@ cat >config.log <<_ACEOF
|
|||
This file contains any messages produced by compilers while
|
||||
running configure, to aid debugging if configure makes a mistake.
|
||||
|
||||
It was created by telegram-purple $as_me 1.2.3, which was
|
||||
It was created by telegram-purple $as_me 1.3.1, which was
|
||||
generated by GNU Autoconf 2.69. Invocation command line was
|
||||
|
||||
$ $0 $@
|
||||
|
@ -4407,19 +4404,14 @@ fi
|
|||
|
||||
fi
|
||||
|
||||
COPY_ICONS=yes
|
||||
|
||||
# Check whether --enable-icons was given.
|
||||
if test "${enable_icons+set}" = set; then :
|
||||
enableval=$enable_icons;
|
||||
fi
|
||||
|
||||
if test "x$enable_icons" == "xno"; then :
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Icons are deactivated. Pidgin needs icons. Finch and telepathy-haze don't." >&5
|
||||
$as_echo "$as_me: WARNING: Icons are deactivated. Pidgin needs icons. Finch and telepathy-haze don't." >&2;}
|
||||
COPY_ICONS=no
|
||||
if test "x$enable_icons" == "xno"; then :
|
||||
|
||||
as_fn_error $? "--disable-icons is now obsolete. Please use 'make noicon_install' for the same effect." "$LINENO" 5
|
||||
|
||||
fi
|
||||
|
||||
|
@ -5106,7 +5098,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
|||
# report actual input values of CONFIG_FILES etc. instead of their
|
||||
# values after options handling.
|
||||
ac_log="
|
||||
This file was extended by telegram-purple $as_me 1.2.3, which was
|
||||
This file was extended by telegram-purple $as_me 1.3.1, which was
|
||||
generated by GNU Autoconf 2.69. Invocation command line was
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
|
@ -5168,7 +5160,7 @@ _ACEOF
|
|||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
||||
ac_cs_version="\\
|
||||
telegram-purple config.status 1.2.3
|
||||
telegram-purple config.status 1.3.1
|
||||
configured by $0, generated by GNU Autoconf 2.69,
|
||||
with options \\"\$ac_cs_config\\"
|
||||
|
||||
|
@ -5878,6 +5870,3 @@ if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
|
|||
$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
|
||||
fi
|
||||
|
||||
|
||||
rm -f tgl/Makefile
|
||||
|
||||
|
|
15
configure.ac
15
configure.ac
|
@ -20,7 +20,7 @@
|
|||
# Process this file with autoconf to produce a configure script.
|
||||
|
||||
AC_PREREQ([2.69])
|
||||
AC_INIT([telegram-purple], [1.2.3])
|
||||
AC_INIT([telegram-purple], [1.3.1])
|
||||
AC_CONFIG_SRCDIR([config.h.in])
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
|
||||
|
@ -62,13 +62,11 @@ AS_IF([test "x$enable_libwebp" != "xno"], [
|
|||
AC_CHECK_LIB([webp], [WebPDecodeRGBA], [], [AC_MSG_ERROR([no libwebp found, try --disable-libwebp, but stickers won't be displayed in the chat])])
|
||||
])
|
||||
|
||||
AC_SUBST([COPY_ICONS], [yes])
|
||||
AC_ARG_ENABLE([icons],
|
||||
AS_HELP_STRING([--disable-icons], [Don't copy the protocol icons for Pidgin. Only useful if you're using Finch of telepathy-haze. (Adium users shouldn't be using this build system at all.)]))
|
||||
AS_IF([test "x$enable_icons" == "xno"], [
|
||||
AC_WARN([Icons are deactivated. Pidgin needs icons. Finch and telepathy-haze don't.])
|
||||
AC_SUBST([COPY_ICONS], [no])
|
||||
])
|
||||
AS_HELP_STRING([--disable-icons], [Unsupported option. Use 'make noicon_install' instead.]))
|
||||
AS_IF([test "x$enable_icons" == "xno"], [
|
||||
AC_MSG_ERROR([--disable-icons is now obsolete. Please use 'make noicon_install' for the same effect.])
|
||||
])
|
||||
|
||||
# Checks for header files.
|
||||
AC_CHECK_HEADERS([arpa/inet.h fcntl.h netdb.h netinet/in.h stdlib.h string.h sys/socket.h sys/time.h unistd.h])
|
||||
|
@ -101,6 +99,3 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, ["$GETTEXT_PACKAGE"], [Define the gettext pa
|
|||
|
||||
AC_CONFIG_FILES([Makefile])
|
||||
AC_OUTPUT
|
||||
|
||||
rm -f tgl/Makefile
|
||||
|
||||
|
|
53
gen-origtar
Executable file
53
gen-origtar
Executable file
|
@ -0,0 +1,53 @@
|
|||
#!/bin/sh
|
||||
|
||||
# This file is part of telegram-purple
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
|
||||
#
|
||||
# Copyright Matthias Jentsch, Ben Wiederhake 2016
|
||||
|
||||
set -e
|
||||
|
||||
# -- Cleanup possibly left-over artifacts
|
||||
rm -f bin/tgl_tl-parser.tar bin/tgl.tar bin/commit.h.tar bin/result.tar bin/result.tar.gz
|
||||
|
||||
# -- Create parts
|
||||
# Abuse the "bin" dir for temporary files.
|
||||
( cd tgl/tl-parser && git archive --prefix=telegram-purple/tgl/tl-parser/ --output=../../bin/tgl_tl-parser.tar HEAD )
|
||||
( cd tgl && git archive --prefix=telegram-purple/tgl/ --output=../bin/tgl.tar HEAD )
|
||||
git archive --prefix=telegram-purple/ --output=bin/result.tar HEAD
|
||||
# This is a lot of options. Here's why.
|
||||
# --sort --mtime --owner --group => be reproducible (same commit produces binarily identical files)
|
||||
# --transform => be in the same "tar-folder" as the rest
|
||||
# (absence of --numeric-ids) => have identical behavior as git-archive
|
||||
# --mode=664 => have identical behavior as git-archive
|
||||
# http://www.gelato.unsw.edu.au/archives/git/0701/36326.html
|
||||
# This is hacky. TODO: Find a better way to unify permissions.
|
||||
tar --sort=name --mtime="1970-01-01 00:00Z" --owner=root --group=root --transform s%^%telegram-purple/% --mode=664 -cf bin/commit.h.tar commit.h
|
||||
|
||||
# -- Concatenate it all
|
||||
tar --concatenate -f bin/result.tar bin/tgl.tar
|
||||
tar --concatenate -f bin/result.tar bin/tgl_tl-parser.tar
|
||||
tar --concatenate -f bin/result.tar bin/commit.h.tar
|
||||
gzip -n bin/result.tar
|
||||
|
||||
# -- Determine name and move
|
||||
TARNAME="telegram-purple_`git describe --tags | sed s/^v// `.orig.tar.gz"
|
||||
# "mv -f" means "overwrite, if necessary"
|
||||
echo mv -f bin/result.tar.gz $TARNAME
|
||||
mv -f bin/result.tar.gz $TARNAME
|
||||
|
||||
# -- Cleanup (never fail)
|
||||
rm -f bin/tgl_tl-parser.tar bin/tgl.tar bin/commit.h.tar bin/result.tar bin/result.tar.gz || true
|
|
@ -1 +0,0 @@
|
|||
tgl/mime.types
|
100
msglog.c
100
msglog.c
|
@ -72,9 +72,85 @@ void fatal(const char* format, ...) {
|
|||
info ("\n");
|
||||
}
|
||||
|
||||
const char *print_flags_update (unsigned flags) {
|
||||
const char *print_flags (const char **names, int len, unsigned flags) {
|
||||
static char *text = NULL;
|
||||
const char *names[16] = {
|
||||
if (text) {
|
||||
g_free (text);
|
||||
text = NULL;
|
||||
}
|
||||
int i;
|
||||
for (i = 0; i < len; i ++) {
|
||||
if (flags & 1) {
|
||||
char *new;
|
||||
if (text) {
|
||||
new = g_strconcat (text, " ", names[i], NULL);
|
||||
g_free (text);
|
||||
} else {
|
||||
new = g_strdup (names[i]);
|
||||
}
|
||||
text = new;
|
||||
}
|
||||
flags >>= 1;
|
||||
}
|
||||
return (const char*)text;
|
||||
}
|
||||
|
||||
const char *print_flags_peer (unsigned flags) {
|
||||
const char *names[] = {
|
||||
"CREATED",
|
||||
"HAS_PHOTO",
|
||||
"DELETED",
|
||||
"OFFICIAL",
|
||||
"KICKED",
|
||||
"ADMIN",
|
||||
"CREATOR",
|
||||
"LEFT",
|
||||
"DEACTIVATED"
|
||||
};
|
||||
return print_flags (names, 9, flags);
|
||||
}
|
||||
|
||||
const char *print_flags_channel (unsigned flags) {
|
||||
static char *text;
|
||||
if (text) {
|
||||
g_free (text);
|
||||
text = NULL;
|
||||
}
|
||||
const char *names[] = {
|
||||
"BROADCAST",
|
||||
"EDITOR",
|
||||
"MODERATOR",
|
||||
"MEGAGROUP"
|
||||
};
|
||||
text = g_strdup (print_flags_peer (flags));
|
||||
char *old = text;
|
||||
text = g_strconcat (text, " ", print_flags (names, 4, flags >> 16), NULL);
|
||||
g_free (old);
|
||||
return text;
|
||||
}
|
||||
|
||||
const char *print_flags_user (unsigned flags) {
|
||||
static char *text;
|
||||
if (text) {
|
||||
g_free (text);
|
||||
text = NULL;
|
||||
}
|
||||
const char *names[] = {
|
||||
"CONTACT",
|
||||
"MUTUAL_CONTACT",
|
||||
"BLOCKED",
|
||||
"SELF",
|
||||
"BOT"
|
||||
};
|
||||
text = g_strdup (print_flags_peer (flags));
|
||||
char *old = text;
|
||||
text = g_strconcat (text, " ", print_flags (names, 5, flags >> 16), NULL);
|
||||
g_free (old);
|
||||
return text;
|
||||
}
|
||||
|
||||
const char *print_flags_update (unsigned flags) {
|
||||
const char *names[] = {
|
||||
"CREATED",
|
||||
"DELETED",
|
||||
"PHONE",
|
||||
|
@ -92,23 +168,5 @@ const char *print_flags_update (unsigned flags) {
|
|||
"ACCESS_HASH",
|
||||
"USERNAME"
|
||||
};
|
||||
if (text) {
|
||||
g_free (text);
|
||||
text = NULL;
|
||||
}
|
||||
int i;
|
||||
for (i = 0; i < 16; i ++) {
|
||||
if (flags & 1) {
|
||||
char *new;
|
||||
if (text) {
|
||||
new = g_strconcat (text, " ", names[i], NULL);
|
||||
g_free (text);
|
||||
} else {
|
||||
new = g_strdup (names[i]);
|
||||
}
|
||||
text = new;
|
||||
}
|
||||
flags >>= 1;
|
||||
}
|
||||
return (const char*)text;
|
||||
return print_flags (names, 16, flags);
|
||||
}
|
||||
|
|
3
msglog.h
3
msglog.h
|
@ -25,3 +25,6 @@ void warning(const char* format, ...);
|
|||
void failure(const char* format, ...);
|
||||
void fatal(const char* format, ...);
|
||||
const char *print_flags_update (unsigned update);
|
||||
const char *print_flags_channel (unsigned flags);
|
||||
const char *print_flags_peer (unsigned flags);
|
||||
const char *print_flags_user (unsigned flags);
|
||||
|
|
1
po/.gitignore
vendored
Normal file
1
po/.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
/*.mo
|
17
po/HOWTO.md
17
po/HOWTO.md
|
@ -1,17 +0,0 @@
|
|||
Translation Howto
|
||||
=================
|
||||
|
||||
To add the new language, append the language code LL to po/LINGUAS, and run autogen.sh. You
|
||||
rill be prompted for a contact email. The .po files for the language should then show up in ./po/LL.po
|
||||
|
||||
|
||||
echo LL >> po/LINGUAS
|
||||
./autogen.sh
|
||||
|
||||
|
||||
To update the translatable strings:
|
||||
|
||||
|
||||
./autogen.sh
|
||||
|
||||
|
|
@ -1,7 +1,11 @@
|
|||
bg
|
||||
cs_CZ
|
||||
de_DE
|
||||
es_AR
|
||||
fr
|
||||
it_IT
|
||||
nl
|
||||
pl_PL
|
||||
pt_BR
|
||||
ru_RU
|
||||
sq
|
||||
uk
|
||||
|
|
|
@ -2,6 +2,5 @@
|
|||
# If you would like to improve the state of this, please see the translation page:
|
||||
# https://www.transifex.com/telegram-purple-developers/telegram-purple/
|
||||
|
||||
da # Only 56% complete
|
||||
fr # Bad grammar, see https://github.com/majn/telegram-purple/pull/193
|
||||
it_IT # Only 82% complete
|
||||
da # < 55% complete
|
||||
pt_BR # < 75% complete
|
||||
|
|
614
po/bg.po
Normal file
614
po/bg.po
Normal file
|
@ -0,0 +1,614 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-08-31 22:53+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Любомир Василев <lyubomirv@abv.bg>, 2016\n"
|
||||
"Language-Team: Bulgarian (https://www.transifex.com/telegram-purple-developers/teams/53149/bg/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: bg\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: ../telegram-base.c:500
|
||||
msgid "Couldn't create group"
|
||||
msgstr "Неуспешно създаване на група"
|
||||
|
||||
#: ../telegram-base.c:501
|
||||
msgid "Please select at least one other user."
|
||||
msgstr "Моля, изберете поне един друг потребител:"
|
||||
|
||||
#: ../telegram-base.c:555
|
||||
msgid "Query Failed"
|
||||
msgstr "Заявката беше неуспешна"
|
||||
|
||||
#: ../telegram-purple.c:162
|
||||
msgid "Secret chat ready."
|
||||
msgstr "Тайният разговор е готов."
|
||||
|
||||
#: ../telegram-purple.c:170
|
||||
msgid "Secret chat terminated."
|
||||
msgstr "Тайният разговор беше приключен."
|
||||
|
||||
#: ../telegram-purple.c:182
|
||||
msgid "Telegram"
|
||||
msgstr "Telegram"
|
||||
|
||||
#: ../telegram-purple.c:229
|
||||
msgid "Message marked as read."
|
||||
msgstr "Съобщението е отбелязано като прочетено."
|
||||
|
||||
#: ../telegram-purple.c:339
|
||||
#, c-format
|
||||
msgid "Invite link: %s"
|
||||
msgstr "Връзка за покана: %s"
|
||||
|
||||
#. FIXME: Can TGLCHF_MODERATOR export links?
|
||||
#: ../telegram-purple.c:350
|
||||
msgid "Creating chat link failed"
|
||||
msgstr "Създаването на връзка беше неуспешно"
|
||||
|
||||
#: ../telegram-purple.c:351
|
||||
msgid "You need to be admin of the group to do that."
|
||||
msgstr "Само администраторите на групата могат да правят това."
|
||||
|
||||
#: ../telegram-purple.c:416
|
||||
msgid "Chat joined"
|
||||
msgstr "Присъединихте се към разговора"
|
||||
|
||||
#: ../telegram-purple.c:417
|
||||
msgid "Chat added to list of chat rooms."
|
||||
msgstr "Разговорът беше добавен към списъка от стаи за разговори."
|
||||
|
||||
#: ../telegram-purple.c:443
|
||||
msgid "Start secret chat..."
|
||||
msgstr "Започване на таен разговор…"
|
||||
|
||||
#. Generate Public Link
|
||||
#: ../telegram-purple.c:450
|
||||
msgid "Invite users by link..."
|
||||
msgstr "Покана на потребители чрез връзка…"
|
||||
|
||||
#. Delete self from chat
|
||||
#: ../telegram-purple.c:458
|
||||
msgid "Delete and exit..."
|
||||
msgstr "Изтриване и изход…"
|
||||
|
||||
#: ../telegram-purple.c:546
|
||||
#, c-format
|
||||
msgid "Unable to sign on as %s: file (public key) not found."
|
||||
msgstr "Неуспешно вписване като %s: файлът (публичният ключ) не беше открит."
|
||||
|
||||
#: ../telegram-purple.c:550
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Make sure telegram-purple is installed properly,\n"
|
||||
"including the .tglpub file.\n"
|
||||
"If you're running SELinux (e.g. when using Tails),\n"
|
||||
"try 'make local_install', or simply copy\n"
|
||||
"%1$s to %2$s."
|
||||
msgstr ""
|
||||
"Уверете се, че „telegram-purple“ е инсталирано правилно,\n"
|
||||
"включително файлът „.tglpub“.\n"
|
||||
"Ако използвате SELinux (наприбер при използване на „Tails“),\n"
|
||||
"опитайте „make local_install“ или просто копирайте\n"
|
||||
"%1$s в %2$s."
|
||||
|
||||
#: ../telegram-purple.c:572
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Unable to sign on as %s: problem in the underlying library 'tgl'. Please "
|
||||
"submit a bug report with the debug log."
|
||||
msgstr ""
|
||||
"Неуспешно вписване като %s: има проблем с вътрешната библиотека „tgl“. Моля,"
|
||||
" изпратете доклад за грешката, заедно с журнала."
|
||||
|
||||
#: ../telegram-purple.c:576
|
||||
msgid "Problem in tgl"
|
||||
msgstr "Проблем в „tgl“"
|
||||
|
||||
#. TRANSLATORS: Please fill in your own prefix!
|
||||
#: ../telegram-purple.c:584
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Unable to sign on as %s: phone number lacks country prefix. Numbers must "
|
||||
"start with the full international prefix code, e.g. +1 for USA."
|
||||
msgstr ""
|
||||
"Неуспешно вписване като %s: телефонният код не съдържа код на страната. "
|
||||
"Номерата трябва да започват с пълния международен телефонен код на страната,"
|
||||
" например +359 за България."
|
||||
|
||||
#: ../telegram-purple.c:589
|
||||
msgid "Incomplete phone number"
|
||||
msgstr "Непълен телефонен номер"
|
||||
|
||||
#: ../telegram-purple.c:642
|
||||
msgid "Secret chat was already deleted"
|
||||
msgstr "Тайният разговор вече е изтрит"
|
||||
|
||||
#: ../telegram-purple.c:644
|
||||
msgid "Secret chat is not ready"
|
||||
msgstr "Тайният разговор не е готов"
|
||||
|
||||
#: ../telegram-purple.c:652
|
||||
msgid "Only the creator of a channel can post messages."
|
||||
msgstr "Само създателят на канала може да публикува съобщения."
|
||||
|
||||
#: ../telegram-purple.c:695
|
||||
msgid "Cannot invite buddy to chat"
|
||||
msgstr "Неуспешно канене на приятел в разговора"
|
||||
|
||||
#: ../telegram-purple.c:696
|
||||
msgid "Specified user does not exist."
|
||||
msgstr "Посоченият потребител не съществува."
|
||||
|
||||
#: ../telegram-purple.c:709
|
||||
msgid "phone no. (+ country prefix)"
|
||||
msgstr "тел. номер (+ код на страната)"
|
||||
|
||||
#. Login
|
||||
#: ../telegram-purple.c:817
|
||||
msgid "Password (two factor authentication)"
|
||||
msgstr "Парола (двустепенно удостоверяване)"
|
||||
|
||||
#: ../telegram-purple.c:822
|
||||
msgid ""
|
||||
"Fallback SMS verification\n"
|
||||
"(Helps when not using Pidgin and you aren't being prompted for the code)"
|
||||
msgstr ""
|
||||
"Резервно удостоверяване чрез КС\n"
|
||||
"(Помага, когато не използвате „Pidgin“ и от Вас не се изисква кода)"
|
||||
|
||||
#: ../telegram-purple.c:828
|
||||
msgid "always"
|
||||
msgstr "винаги"
|
||||
|
||||
#: ../telegram-purple.c:829
|
||||
msgid "never"
|
||||
msgstr "никога"
|
||||
|
||||
#: ../telegram-purple.c:830
|
||||
msgid "ask"
|
||||
msgstr "питане всеки път"
|
||||
|
||||
#: ../telegram-purple.c:832
|
||||
msgid "Accept secret chats"
|
||||
msgstr "Приемане на тайни разговори"
|
||||
|
||||
#: ../telegram-purple.c:836
|
||||
msgid "Display buddies offline after (days)"
|
||||
msgstr "Показване на приятелите извън линия след (брой дни)"
|
||||
|
||||
#: ../telegram-purple.c:840
|
||||
msgid ""
|
||||
"Don't fetch history older than (days)\n"
|
||||
"(0 for unlimited)"
|
||||
msgstr ""
|
||||
"Да не се изтегля историята, по-стара от (брой дни)\n"
|
||||
"(0 = неограничено)"
|
||||
|
||||
#. Media
|
||||
#: ../telegram-purple.c:845
|
||||
msgid "Autoload media size (kb)"
|
||||
msgstr "Размер за авто. зареждане на медийни файлове (кбит)"
|
||||
|
||||
#. Chats
|
||||
#: ../telegram-purple.c:850
|
||||
msgid "Add all group chats to buddy list"
|
||||
msgstr "Добавяне на всички групови разговори в списъка с приятели"
|
||||
|
||||
#. Read notifications
|
||||
#: ../telegram-purple.c:855
|
||||
msgid "Display notices of receipt"
|
||||
msgstr "Показване на уведомления за получаване"
|
||||
|
||||
#: ../telegram-purple.c:859
|
||||
msgid "Send notices of receipt when present"
|
||||
msgstr "Изпращане на уведомления за получаване при присъствие"
|
||||
|
||||
#: ../telegram-purple.c:884
|
||||
msgid "Telegram Protocol Plugin."
|
||||
msgstr "Добавка за протокола „Telegram“."
|
||||
|
||||
#: ../tgp-msg.c:58
|
||||
#, c-format
|
||||
msgid "%2$s created chat %1$s."
|
||||
msgstr "%2$s създаде разговор %1$s."
|
||||
|
||||
#: ../tgp-msg.c:61
|
||||
#, c-format
|
||||
msgid "%2$s changed title to %1$s."
|
||||
msgstr "%2$s промени заглавието на „%1$s“."
|
||||
|
||||
#: ../tgp-msg.c:64
|
||||
#, c-format
|
||||
msgid "%s changed photo."
|
||||
msgstr "%s промени снимката си."
|
||||
|
||||
#: ../tgp-msg.c:67
|
||||
#, c-format
|
||||
msgid "%s deleted photo."
|
||||
msgstr "%s изтри снимка."
|
||||
|
||||
#: ../tgp-msg.c:75
|
||||
#, c-format
|
||||
msgid "%1$s added user %2$s by link."
|
||||
msgstr "%1$s добави потребителя %2$s чрез връзка."
|
||||
|
||||
#: ../tgp-msg.c:90
|
||||
#, c-format
|
||||
msgid "%2$s added user %1$s."
|
||||
msgstr "%2$s добави потребителя %1$s."
|
||||
|
||||
#: ../tgp-msg.c:114 ../tgp-msg.c:131
|
||||
#, c-format
|
||||
msgid "%2$s deleted user %1$s."
|
||||
msgstr "%2$s изтри потребителя %1$s."
|
||||
|
||||
#: ../tgp-msg.c:138
|
||||
#, c-format
|
||||
msgid "%2$s set self destruction timer to %1$d second."
|
||||
msgid_plural "%2$s set self destruction timer to %1$d seconds."
|
||||
msgstr[0] "%2$s настрои брояч за самоунищожение на %1$d секунда."
|
||||
msgstr[1] "%2$s настрои брояч за самоунищожение на %1$d секунди."
|
||||
|
||||
#: ../tgp-msg.c:144
|
||||
#, c-format
|
||||
msgid "%2$s marked %1$d message read."
|
||||
msgid_plural "%2$s marked %1$d messages read."
|
||||
msgstr[0] "%2$s отбеляза %1$d съобщение като прочетено."
|
||||
msgstr[1] "%2$s отбеляза %1$d съобщения като прочетени."
|
||||
|
||||
#: ../tgp-msg.c:150
|
||||
#, c-format
|
||||
msgid "%2$s deleted %1$d message."
|
||||
msgid_plural "%2$s deleted %1$d messages."
|
||||
msgstr[0] "%2$s изтри %1$d съобщение."
|
||||
msgstr[1] "%2$s изтри %1$d съобщения."
|
||||
|
||||
#: ../tgp-msg.c:156
|
||||
#, c-format
|
||||
msgid "%2$s made a screenshot of %1$d message."
|
||||
msgid_plural "%2$s made a screenshot of %1$d messages."
|
||||
msgstr[0] "%2$s направи снимка на %1$d съобщение."
|
||||
msgstr[1] "%2$s направи снимка на %1$d съобщения."
|
||||
|
||||
#: ../tgp-msg.c:162
|
||||
#, c-format
|
||||
msgid "Channel %1$s created"
|
||||
msgstr "Каналът „%1$s“ беше създаден"
|
||||
|
||||
#. FIXME: check if this makes sense
|
||||
#: ../tgp-msg.c:165 ../tgp-chat.c:124 ../tgp-chat.c:576
|
||||
msgid "Telegram Channels"
|
||||
msgstr "Канали в Telegram"
|
||||
|
||||
#: ../tgp-msg.c:191
|
||||
msgid "Sending message failed."
|
||||
msgstr "Неуспешно изпращане на съобщението."
|
||||
|
||||
#: ../tgp-msg.c:253
|
||||
msgid "Sending image failed."
|
||||
msgstr "Неуспешно изпращане на изображениео."
|
||||
|
||||
#: ../tgp-msg.c:417
|
||||
#, c-format
|
||||
msgid "%s sent a sticker."
|
||||
msgstr "%s изпрати стикер."
|
||||
|
||||
#: ../tgp-msg.c:463
|
||||
msgid "failed loading message"
|
||||
msgstr "неуспешно зареждане на съобщение"
|
||||
|
||||
#: ../tgp-msg.c:498
|
||||
msgid "[animation]"
|
||||
msgstr "[анимация]"
|
||||
|
||||
#: ../tgp-msg.c:515
|
||||
msgid "[audio]"
|
||||
msgstr "[звук]"
|
||||
|
||||
#: ../tgp-msg.c:515
|
||||
msgid "[video]"
|
||||
msgstr "[видео]"
|
||||
|
||||
#: ../tgp-msg.c:604
|
||||
#, c-format
|
||||
msgid "<b>Forwarded message from: %s</b><br>%s"
|
||||
msgstr "<b>Препратено съобщение от: %s</b><br>%s"
|
||||
|
||||
#. FIXME: sometimes users aren't part of the response when receiving a
|
||||
#. forwarded message
|
||||
#: ../tgp-msg.c:607
|
||||
#, c-format
|
||||
msgid "<b>Forwarded message:</b><br>%s"
|
||||
msgstr "<b>Препратено съобщение:</b><br>%s"
|
||||
|
||||
#: ../tgp-msg.c:720
|
||||
msgid "loading document or picture failed"
|
||||
msgstr "неуспешно зареждане на документ или изображение"
|
||||
|
||||
#: ../tgp-net.c:281
|
||||
msgid "Cannot connect to main server"
|
||||
msgstr "Неуспешно свързване с главния сървър"
|
||||
|
||||
#: ../tgp-net.c:322
|
||||
msgid "Cannot connect to server: Ping timeout."
|
||||
msgstr "Неуспешно свързване със сървъра. Изтече времето за изчакване."
|
||||
|
||||
#: ../tgp-net.c:365
|
||||
msgid "Lost connection to the server..."
|
||||
msgstr "Връзката със сървъра беше прекъсната…"
|
||||
|
||||
#: ../tgp-request.c:51
|
||||
msgid ""
|
||||
"Telegram wants to verify your identity. Please enter the login code that you"
|
||||
" have received via SMS."
|
||||
msgstr ""
|
||||
"Telegram иска да потвърди самоличността Ви. Моля, въведете кода за влизане, "
|
||||
"който трябва да сте получили чрез КС."
|
||||
|
||||
#: ../tgp-request.c:54
|
||||
msgid "Login code"
|
||||
msgstr "Код за влизане"
|
||||
|
||||
#: ../tgp-request.c:54
|
||||
msgid "Enter login code"
|
||||
msgstr "Въведете кода за влизане"
|
||||
|
||||
#: ../tgp-request.c:54
|
||||
msgid "the code"
|
||||
msgstr "кодът"
|
||||
|
||||
#: ../tgp-request.c:54 ../tgp-request.c:104 ../tgp-request.c:198
|
||||
#: ../tgp-request.c:233 ../tgp-request.c:263
|
||||
msgid "OK"
|
||||
msgstr "Добре"
|
||||
|
||||
#: ../tgp-request.c:55 ../tgp-request.c:104 ../tgp-request.c:123
|
||||
#: ../tgp-request.c:199 ../tgp-request.c:234 ../tgp-request.c:264
|
||||
msgid "Cancel"
|
||||
msgstr "Отказ"
|
||||
|
||||
#: ../tgp-request.c:95
|
||||
msgid "Registration"
|
||||
msgstr "Регистрация"
|
||||
|
||||
#: ../tgp-request.c:96
|
||||
msgid "First name"
|
||||
msgstr "Собствено име"
|
||||
|
||||
#: ../tgp-request.c:99
|
||||
msgid "Last name"
|
||||
msgstr "Фамилия"
|
||||
|
||||
#: ../tgp-request.c:103
|
||||
msgid "Register"
|
||||
msgstr "Регистриране"
|
||||
|
||||
#: ../tgp-request.c:103
|
||||
msgid "Please register your phone number."
|
||||
msgstr "Моля, регистрирайте телефонния си номер"
|
||||
|
||||
#. purple_request API not available
|
||||
#: ../tgp-request.c:108
|
||||
msgid ""
|
||||
"Phone number is not registered. Please register your phone on a different "
|
||||
"client."
|
||||
msgstr ""
|
||||
"Телефонният номер не е регистриран. Моля, регистрирайте телефона си чрез "
|
||||
"друг клиент."
|
||||
|
||||
#: ../tgp-request.c:110
|
||||
msgid "Not registered"
|
||||
msgstr "Нерегистриран"
|
||||
|
||||
#: ../tgp-request.c:122
|
||||
msgid "Password needed"
|
||||
msgstr "Нужна е парола"
|
||||
|
||||
#: ../tgp-request.c:122
|
||||
msgid "Enter password for two factor authentication"
|
||||
msgstr "Въведете парола за двустепенно удостоверяване"
|
||||
|
||||
#: ../tgp-request.c:123
|
||||
msgid "Ok"
|
||||
msgstr "Добре"
|
||||
|
||||
#: ../tgp-request.c:125
|
||||
msgid ""
|
||||
"No password set for two factor authentication. Please enter it in the "
|
||||
"extended settings."
|
||||
msgstr ""
|
||||
"Няма зададена парола за двустепенно удостоверяване. Моля, въведете я в "
|
||||
"разширените настройки."
|
||||
|
||||
#: ../tgp-request.c:127
|
||||
msgid "Password invalid"
|
||||
msgstr "Паролата е грешна"
|
||||
|
||||
#: ../tgp-request.c:150
|
||||
#, c-format
|
||||
msgid "Accept secret chat '%s' on this device?"
|
||||
msgstr "Приемане на тайния разговор „%s“ на това устройство?"
|
||||
|
||||
#: ../tgp-request.c:151
|
||||
msgid "Secret chat"
|
||||
msgstr "Таен разговор"
|
||||
|
||||
#: ../tgp-request.c:151
|
||||
msgid ""
|
||||
"Secret chats can only have one end point. If you accept a secret chat on "
|
||||
"this device, its messages will not be available anywhere else. If you "
|
||||
"decline, you can still accept the chat on other devices."
|
||||
msgstr ""
|
||||
"Тайните разговори могат да се провеждат само на едно устройство. Ако "
|
||||
"приемете таен разговор на това устройство, той няма да бъде достъпен никъде "
|
||||
"другаде. Ако откажете, ще можете да го приемете на друго устройство."
|
||||
|
||||
#: ../tgp-request.c:182
|
||||
msgid ""
|
||||
"Invite at least one additional user by specifying\n"
|
||||
" their full name (autocompletion available).\n"
|
||||
"You can add more users once the chat was created."
|
||||
msgstr ""
|
||||
"Поканете поне още един потребител, като посочите\n"
|
||||
" пълното му име (разполагате с авт. допълване).\n"
|
||||
"Можете да добавите повече потребители и след началото на разговора."
|
||||
|
||||
#: ../tgp-request.c:185 ../tgp-request.c:189 ../tgp-request.c:193
|
||||
msgid "Username"
|
||||
msgstr "Потребителско име"
|
||||
|
||||
#: ../tgp-request.c:198
|
||||
msgid "Create group chat"
|
||||
msgstr "Създаване на групов разговор"
|
||||
|
||||
#: ../tgp-request.c:198
|
||||
msgid "Invite users"
|
||||
msgstr "Канене на потребители"
|
||||
|
||||
#: ../tgp-request.c:217 ../tgp-request.c:232
|
||||
msgid "Change password"
|
||||
msgstr "Промяна на паролата"
|
||||
|
||||
#: ../tgp-request.c:219
|
||||
msgid "Current"
|
||||
msgstr "Текуща"
|
||||
|
||||
#: ../tgp-request.c:223 ../tgp-request.c:253
|
||||
msgid "Password"
|
||||
msgstr "Парола"
|
||||
|
||||
#: ../tgp-request.c:227 ../tgp-request.c:257
|
||||
msgid "Confirm"
|
||||
msgstr "Потвърждаване"
|
||||
|
||||
#: ../tgp-request.c:251 ../tgp-request.c:262
|
||||
msgid "New password"
|
||||
msgstr "Нова парола"
|
||||
|
||||
#. if we arrive here for the second time the specified phone number is not
|
||||
#. valid. We do not
|
||||
#. ask for the phone number directly, cause in that case the account would
|
||||
#. still be created
|
||||
#. named with the invalid phone number, even though the login will work
|
||||
#: ../tgp-request.c:300
|
||||
msgid "Invalid phone number"
|
||||
msgstr "Грешен телефонен номер"
|
||||
|
||||
#: ../tgp-request.c:301
|
||||
msgid ""
|
||||
"Please enter only numbers in the international phone number format, a leading + following by the country prefix and the phone number.\n"
|
||||
"Do not use any other special chars."
|
||||
msgstr ""
|
||||
"Моля, въвеждайте само цифри във формата за международен телефонен номер: знака +, следван от кода на страната и телефонния номер.\n"
|
||||
"Не използвайте други специални знаци."
|
||||
|
||||
#: ../tgp-request.c:370
|
||||
msgid "Leave Chat"
|
||||
msgstr "Напускане на разговора"
|
||||
|
||||
#: ../tgp-request.c:372
|
||||
msgid "Do you want to leave this chat permantently?"
|
||||
msgstr "Наистина ли искате да напуснете този разговор завинаги?"
|
||||
|
||||
#: ../tgp-request.c:377
|
||||
msgid "Abort Secret Chat"
|
||||
msgstr "Край на тайния разговор"
|
||||
|
||||
#: ../tgp-request.c:379
|
||||
msgid "Do you want to terminate this secret chat permantently?"
|
||||
msgstr "Наистина ли искате да прекратите този таен разговор завинаги?"
|
||||
|
||||
#: ../tgp-request.c:384
|
||||
msgid "Delete Contact"
|
||||
msgstr "Изтриване на контакта"
|
||||
|
||||
#: ../tgp-request.c:386
|
||||
msgid "Do you want to remove this user from your global contact list?"
|
||||
msgstr ""
|
||||
"Наистина ли искате да премахнете този потребител от общия си списък с "
|
||||
"контакти?"
|
||||
|
||||
#: ../tgp-request.c:401
|
||||
msgid "Leave Channel"
|
||||
msgstr "Напускане на канала"
|
||||
|
||||
#: ../tgp-request.c:403
|
||||
msgid "Do you want to leave this channel?"
|
||||
msgstr "Наистина ли искате да напуснете този канал?"
|
||||
|
||||
#. This should be the language's timestamp format. This is preceded by a
|
||||
#. colon.
|
||||
#: ../tgp-utils.c:27
|
||||
msgid "%d.%m.%Y %H:%M"
|
||||
msgstr "%d.%m.%Y %H:%M"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:48
|
||||
msgid "recently"
|
||||
msgstr "наскоро"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:52
|
||||
msgid "last week"
|
||||
msgstr "последната седмица"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:56
|
||||
msgid "last month"
|
||||
msgstr "последния месец"
|
||||
|
||||
#. This is preceded by a colon. It refers to a point on time.
|
||||
#: ../tgp-utils.c:60
|
||||
msgid "unknown"
|
||||
msgstr "неизвестно"
|
||||
|
||||
#: ../tgp-chat.c:108 ../tgp-chat.c:582
|
||||
msgid "Telegram Chats"
|
||||
msgstr "Разговори в Telegram"
|
||||
|
||||
#: ../tgp-chat.c:113
|
||||
msgid "You have already left this chat."
|
||||
msgstr "Вече сте напуснали този разговор"
|
||||
|
||||
#: ../tgp-chat.c:224
|
||||
msgid "Subject:"
|
||||
msgstr "Тема:"
|
||||
|
||||
#: ../tgp-chat.c:230
|
||||
msgid "Invite link:"
|
||||
msgstr "Връзка за покана:"
|
||||
|
||||
#: ../tgp-chat.c:236
|
||||
msgid "Chat ID:"
|
||||
msgstr "Ид. на разговора:"
|
||||
|
||||
#: ../tgp-chat.c:342
|
||||
msgid "Supergroup"
|
||||
msgstr "Надгрупа"
|
||||
|
||||
#: ../tgp-chat.c:342
|
||||
msgid "Channel"
|
||||
msgstr "Канал"
|
||||
|
||||
#: ../tgp-chat.c:345
|
||||
msgid "Group"
|
||||
msgstr "Група"
|
||||
|
||||
#: ../tgp-chat.c:367
|
||||
msgid "Users in chat"
|
||||
msgstr "Потребители в разговора"
|
||||
|
||||
#: ../tgp-chat.c:370
|
||||
msgid "Type"
|
||||
msgstr "Вид"
|
616
po/cs_CZ.po
Normal file
616
po/cs_CZ.po
Normal file
|
@ -0,0 +1,616 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-08-31 22:53+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Jiri Eischmann <jiri@eischmann.cz>, 2017\n"
|
||||
"Language-Team: Czech (Czech Republic) (https://www.transifex.com/telegram-purple-developers/teams/53149/cs_CZ/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: cs_CZ\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||
|
||||
#: ../telegram-base.c:500
|
||||
msgid "Couldn't create group"
|
||||
msgstr "Nelze vytvořit skupinu"
|
||||
|
||||
#: ../telegram-base.c:501
|
||||
msgid "Please select at least one other user."
|
||||
msgstr "Prosím vyberte alespoň jednoho dalšího uživatele."
|
||||
|
||||
#: ../telegram-base.c:555
|
||||
msgid "Query Failed"
|
||||
msgstr "Dotaz selhal"
|
||||
|
||||
#: ../telegram-purple.c:162
|
||||
msgid "Secret chat ready."
|
||||
msgstr "Tajný chat připraven."
|
||||
|
||||
#: ../telegram-purple.c:170
|
||||
msgid "Secret chat terminated."
|
||||
msgstr "Tajný chat ukončen."
|
||||
|
||||
#: ../telegram-purple.c:182
|
||||
msgid "Telegram"
|
||||
msgstr "Telegram"
|
||||
|
||||
#: ../telegram-purple.c:229
|
||||
msgid "Message marked as read."
|
||||
msgstr "Zpráva označena jako přečtená."
|
||||
|
||||
#: ../telegram-purple.c:339
|
||||
#, c-format
|
||||
msgid "Invite link: %s"
|
||||
msgstr "Odkaz pozvánky: %s"
|
||||
|
||||
#. FIXME: Can TGLCHF_MODERATOR export links?
|
||||
#: ../telegram-purple.c:350
|
||||
msgid "Creating chat link failed"
|
||||
msgstr "Vytváření odkazu pro chat selhalo"
|
||||
|
||||
#: ../telegram-purple.c:351
|
||||
msgid "You need to be admin of the group to do that."
|
||||
msgstr "K tomuto úkonu potřebujete být administrátorem skupiny."
|
||||
|
||||
#: ../telegram-purple.c:416
|
||||
msgid "Chat joined"
|
||||
msgstr "Připojeno k chatu"
|
||||
|
||||
#: ../telegram-purple.c:417
|
||||
msgid "Chat added to list of chat rooms."
|
||||
msgstr "Chat přidán do seznamu chatovacích místností"
|
||||
|
||||
#: ../telegram-purple.c:443
|
||||
msgid "Start secret chat..."
|
||||
msgstr "Začít tajný chat..."
|
||||
|
||||
#. Generate Public Link
|
||||
#: ../telegram-purple.c:450
|
||||
msgid "Invite users by link..."
|
||||
msgstr "Pozvat uživatele odkazem..."
|
||||
|
||||
#. Delete self from chat
|
||||
#: ../telegram-purple.c:458
|
||||
msgid "Delete and exit..."
|
||||
msgstr "Smazat a ukončit..."
|
||||
|
||||
#: ../telegram-purple.c:546
|
||||
#, c-format
|
||||
msgid "Unable to sign on as %s: file (public key) not found."
|
||||
msgstr "Nelze se přihlásit jako %s: soubor (veřejný klíč) nenalezen."
|
||||
|
||||
#: ../telegram-purple.c:550
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Make sure telegram-purple is installed properly,\n"
|
||||
"including the .tglpub file.\n"
|
||||
"If you're running SELinux (e.g. when using Tails),\n"
|
||||
"try 'make local_install', or simply copy\n"
|
||||
"%1$s to %2$s."
|
||||
msgstr ""
|
||||
"Ověřte, jestli je telegram-purple nainstalován správně\n"
|
||||
"včetně souboru .tglpub.\n"
|
||||
"Pokud používáte SELinux (například při použití Tails),\n"
|
||||
"zkuste 'make local_install', nebo jen nakopírujte\n"
|
||||
"%1$s do %2$s."
|
||||
|
||||
#: ../telegram-purple.c:572
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Unable to sign on as %s: problem in the underlying library 'tgl'. Please "
|
||||
"submit a bug report with the debug log."
|
||||
msgstr ""
|
||||
"Nelze se přihlásit jako %s: problém v použité knihovně \"tgl\". Prosím "
|
||||
"nahlaste chybu včetně chybového protokolu."
|
||||
|
||||
#: ../telegram-purple.c:576
|
||||
msgid "Problem in tgl"
|
||||
msgstr "Problém v tgl"
|
||||
|
||||
#. TRANSLATORS: Please fill in your own prefix!
|
||||
#: ../telegram-purple.c:584
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Unable to sign on as %s: phone number lacks country prefix. Numbers must "
|
||||
"start with the full international prefix code, e.g. +1 for USA."
|
||||
msgstr ""
|
||||
"Nelze se přihlásit jako %s: telefonnímu číslu chybí předčíslí země. Čísla "
|
||||
"musí začínat s plným mezinárodním předčíslím, např. +420 pro Českou "
|
||||
"republiku."
|
||||
|
||||
#: ../telegram-purple.c:589
|
||||
msgid "Incomplete phone number"
|
||||
msgstr "Nekompletní telefonní číslo"
|
||||
|
||||
#: ../telegram-purple.c:642
|
||||
msgid "Secret chat was already deleted"
|
||||
msgstr "Tajný chat byl již smazán"
|
||||
|
||||
#: ../telegram-purple.c:644
|
||||
msgid "Secret chat is not ready"
|
||||
msgstr "Tajný chat není připraven"
|
||||
|
||||
#: ../telegram-purple.c:652
|
||||
msgid "Only the creator of a channel can post messages."
|
||||
msgstr "Pouze tvůrce kanálu může zasílat zprávy."
|
||||
|
||||
#: ../telegram-purple.c:695
|
||||
msgid "Cannot invite buddy to chat"
|
||||
msgstr "Nelze pozvat kamaráda do chatu"
|
||||
|
||||
#: ../telegram-purple.c:696
|
||||
msgid "Specified user does not exist."
|
||||
msgstr "Zadaný uživatel neexistuje."
|
||||
|
||||
#: ../telegram-purple.c:709
|
||||
msgid "phone no. (+ country prefix)"
|
||||
msgstr "telefonní číslo (+ předčíslí země)"
|
||||
|
||||
#. Login
|
||||
#: ../telegram-purple.c:817
|
||||
msgid "Password (two factor authentication)"
|
||||
msgstr "Heslo (dvoufaktorová autentizace)"
|
||||
|
||||
#: ../telegram-purple.c:822
|
||||
msgid ""
|
||||
"Fallback SMS verification\n"
|
||||
"(Helps when not using Pidgin and you aren't being prompted for the code)"
|
||||
msgstr ""
|
||||
"Záložní ověřovací SMS\n"
|
||||
"(Pomáhá, když nepoužíváte Pidgin a nejste vyzváni k zadání kódu)"
|
||||
|
||||
#: ../telegram-purple.c:828
|
||||
msgid "always"
|
||||
msgstr "vždy"
|
||||
|
||||
#: ../telegram-purple.c:829
|
||||
msgid "never"
|
||||
msgstr "nikdy"
|
||||
|
||||
#: ../telegram-purple.c:830
|
||||
msgid "ask"
|
||||
msgstr "zeptat se"
|
||||
|
||||
#: ../telegram-purple.c:832
|
||||
msgid "Accept secret chats"
|
||||
msgstr "Přijímat tajné chaty"
|
||||
|
||||
#: ../telegram-purple.c:836
|
||||
msgid "Display buddies offline after (days)"
|
||||
msgstr "Zobrazit odpojené kamarády po (dny)"
|
||||
|
||||
#: ../telegram-purple.c:840
|
||||
msgid ""
|
||||
"Don't fetch history older than (days)\n"
|
||||
"(0 for unlimited)"
|
||||
msgstr ""
|
||||
"Nestahovat historii starší než (dny)\n"
|
||||
"(0 pro neomezeně)"
|
||||
|
||||
#. Media
|
||||
#: ../telegram-purple.c:845
|
||||
msgid "Autoload media size (kb)"
|
||||
msgstr "Velikost automaticky nahraných médií (kb)"
|
||||
|
||||
#. Chats
|
||||
#: ../telegram-purple.c:850
|
||||
msgid "Add all group chats to buddy list"
|
||||
msgstr "Přidat všechny chatovací skupiny do seznamu kamarádů"
|
||||
|
||||
#. Read notifications
|
||||
#: ../telegram-purple.c:855
|
||||
msgid "Display notices of receipt"
|
||||
msgstr "Zobrazit oznámení o doručení"
|
||||
|
||||
#: ../telegram-purple.c:859
|
||||
msgid "Send notices of receipt when present"
|
||||
msgstr "V přítomnosti zasílat oznámení o doručení"
|
||||
|
||||
#: ../telegram-purple.c:884
|
||||
msgid "Telegram Protocol Plugin."
|
||||
msgstr "Zásuvný modul protokolu Telegram."
|
||||
|
||||
#: ../tgp-msg.c:58
|
||||
#, c-format
|
||||
msgid "%2$s created chat %1$s."
|
||||
msgstr "%2$s vytvořil(a) chat %1$s."
|
||||
|
||||
#: ../tgp-msg.c:61
|
||||
#, c-format
|
||||
msgid "%2$s changed title to %1$s."
|
||||
msgstr "%2$s změnil(a) titulek na %1$s."
|
||||
|
||||
#: ../tgp-msg.c:64
|
||||
#, c-format
|
||||
msgid "%s changed photo."
|
||||
msgstr "%s změnil(a) fotografii."
|
||||
|
||||
#: ../tgp-msg.c:67
|
||||
#, c-format
|
||||
msgid "%s deleted photo."
|
||||
msgstr "%s smazal(a) fotografii."
|
||||
|
||||
#: ../tgp-msg.c:75
|
||||
#, c-format
|
||||
msgid "%1$s added user %2$s by link."
|
||||
msgstr "%1$s přidal(a) uživatele %2$s odkazem."
|
||||
|
||||
#: ../tgp-msg.c:90
|
||||
#, c-format
|
||||
msgid "%2$s added user %1$s."
|
||||
msgstr "%2$s přidal(a) uživatele %1$s."
|
||||
|
||||
#: ../tgp-msg.c:114 ../tgp-msg.c:131
|
||||
#, c-format
|
||||
msgid "%2$s deleted user %1$s."
|
||||
msgstr "%2$s smazal(a) uživatele %1$s."
|
||||
|
||||
#: ../tgp-msg.c:138
|
||||
#, c-format
|
||||
msgid "%2$s set self destruction timer to %1$d second."
|
||||
msgid_plural "%2$s set self destruction timer to %1$d seconds."
|
||||
msgstr[0] "%2$s nastavil(a) sebedestrukční časovač na %1$d sekundu."
|
||||
msgstr[1] "%2$s nastavil(a) sebedestrukční časovač na %1$d sekundy."
|
||||
msgstr[2] "%2$s nastavil(a) sebedestrukční časovač na %1$d sekund."
|
||||
|
||||
#: ../tgp-msg.c:144
|
||||
#, c-format
|
||||
msgid "%2$s marked %1$d message read."
|
||||
msgid_plural "%2$s marked %1$d messages read."
|
||||
msgstr[0] "%2$s označil(a) %1$d zprávu jako přečtenou."
|
||||
msgstr[1] "%2$s označil(a) %1$d zprávy jako přečtené."
|
||||
msgstr[2] "%2$s označil(a) %1$d zpráv jako přečtené."
|
||||
|
||||
#: ../tgp-msg.c:150
|
||||
#, c-format
|
||||
msgid "%2$s deleted %1$d message."
|
||||
msgid_plural "%2$s deleted %1$d messages."
|
||||
msgstr[0] "%2$s smazal(a) %1$d zprávu."
|
||||
msgstr[1] "%2$s smazal(a) %1$d zprávy."
|
||||
msgstr[2] "%2$s smazal(a) %1$d zpráv."
|
||||
|
||||
#: ../tgp-msg.c:156
|
||||
#, c-format
|
||||
msgid "%2$s made a screenshot of %1$d message."
|
||||
msgid_plural "%2$s made a screenshot of %1$d messages."
|
||||
msgstr[0] "%2$s vytvořil(a) screenshot %1$d zprávy."
|
||||
msgstr[1] "%2$s vytvořil(a) screenshot %1$d zpráv."
|
||||
msgstr[2] "%2$s vytvořil(a) screenshot %1$d zpráv."
|
||||
|
||||
#: ../tgp-msg.c:162
|
||||
#, c-format
|
||||
msgid "Channel %1$s created"
|
||||
msgstr "Kanál %1$s vytvořen"
|
||||
|
||||
#. FIXME: check if this makes sense
|
||||
#: ../tgp-msg.c:165 ../tgp-chat.c:124 ../tgp-chat.c:576
|
||||
msgid "Telegram Channels"
|
||||
msgstr "Kanály Telegramu"
|
||||
|
||||
#: ../tgp-msg.c:191
|
||||
msgid "Sending message failed."
|
||||
msgstr "Odeslání zprávy selhalo."
|
||||
|
||||
#: ../tgp-msg.c:253
|
||||
msgid "Sending image failed."
|
||||
msgstr "Odeslání obrázku selhalo."
|
||||
|
||||
#: ../tgp-msg.c:417
|
||||
#, c-format
|
||||
msgid "%s sent a sticker."
|
||||
msgstr "%s odeslal nálepku."
|
||||
|
||||
#: ../tgp-msg.c:463
|
||||
msgid "failed loading message"
|
||||
msgstr "selhalo načítání zprávy"
|
||||
|
||||
#: ../tgp-msg.c:498
|
||||
msgid "[animation]"
|
||||
msgstr "[animace]"
|
||||
|
||||
#: ../tgp-msg.c:515
|
||||
msgid "[audio]"
|
||||
msgstr "[audio]"
|
||||
|
||||
#: ../tgp-msg.c:515
|
||||
msgid "[video]"
|
||||
msgstr "[video]"
|
||||
|
||||
#: ../tgp-msg.c:604
|
||||
#, c-format
|
||||
msgid "<b>Forwarded message from: %s</b><br>%s"
|
||||
msgstr "<b>Zpráva přeposlaná od:%s</b><br>%s"
|
||||
|
||||
#. FIXME: sometimes users aren't part of the response when receiving a
|
||||
#. forwarded message
|
||||
#: ../tgp-msg.c:607
|
||||
#, c-format
|
||||
msgid "<b>Forwarded message:</b><br>%s"
|
||||
msgstr "<b>Přeposlaná zpráva:</b><br>%s"
|
||||
|
||||
#: ../tgp-msg.c:720
|
||||
msgid "loading document or picture failed"
|
||||
msgstr "nahrávání dokumentu nebo obrázku sehlalo"
|
||||
|
||||
#: ../tgp-net.c:281
|
||||
msgid "Cannot connect to main server"
|
||||
msgstr "Nelze se připojit k hlavnímu serveru"
|
||||
|
||||
#: ../tgp-net.c:322
|
||||
msgid "Cannot connect to server: Ping timeout."
|
||||
msgstr "Nelze se připojit k serveru: Vypršel časový limit pingu"
|
||||
|
||||
#: ../tgp-net.c:365
|
||||
msgid "Lost connection to the server..."
|
||||
msgstr "Ztraceno spojení se serverem..."
|
||||
|
||||
#: ../tgp-request.c:51
|
||||
msgid ""
|
||||
"Telegram wants to verify your identity. Please enter the login code that you"
|
||||
" have received via SMS."
|
||||
msgstr ""
|
||||
"Telegram potřebuje ověřit identitu. Prosím zadejte přihlašovací kód, který "
|
||||
"jste obdrželi v SMS."
|
||||
|
||||
#: ../tgp-request.c:54
|
||||
msgid "Login code"
|
||||
msgstr "Přihlašovací kód"
|
||||
|
||||
#: ../tgp-request.c:54
|
||||
msgid "Enter login code"
|
||||
msgstr "Zadejte přihlašovací kód"
|
||||
|
||||
#: ../tgp-request.c:54
|
||||
msgid "the code"
|
||||
msgstr "kód"
|
||||
|
||||
#: ../tgp-request.c:54 ../tgp-request.c:104 ../tgp-request.c:198
|
||||
#: ../tgp-request.c:233 ../tgp-request.c:263
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
|
||||
#: ../tgp-request.c:55 ../tgp-request.c:104 ../tgp-request.c:123
|
||||
#: ../tgp-request.c:199 ../tgp-request.c:234 ../tgp-request.c:264
|
||||
msgid "Cancel"
|
||||
msgstr "Zrušit"
|
||||
|
||||
#: ../tgp-request.c:95
|
||||
msgid "Registration"
|
||||
msgstr "Registrace"
|
||||
|
||||
#: ../tgp-request.c:96
|
||||
msgid "First name"
|
||||
msgstr "Jméno"
|
||||
|
||||
#: ../tgp-request.c:99
|
||||
msgid "Last name"
|
||||
msgstr "Příjmení"
|
||||
|
||||
#: ../tgp-request.c:103
|
||||
msgid "Register"
|
||||
msgstr "Registrovat"
|
||||
|
||||
#: ../tgp-request.c:103
|
||||
msgid "Please register your phone number."
|
||||
msgstr "Prosím zaregistrujte své telefonní číslo."
|
||||
|
||||
#. purple_request API not available
|
||||
#: ../tgp-request.c:108
|
||||
msgid ""
|
||||
"Phone number is not registered. Please register your phone on a different "
|
||||
"client."
|
||||
msgstr ""
|
||||
"Telefonní číslo není zaregistrované. Prosím zaregistrujte své telefonní "
|
||||
"číslo v jiné aplikaci."
|
||||
|
||||
#: ../tgp-request.c:110
|
||||
msgid "Not registered"
|
||||
msgstr "Neregistrován"
|
||||
|
||||
#: ../tgp-request.c:122
|
||||
msgid "Password needed"
|
||||
msgstr "Vyžadováno heslo"
|
||||
|
||||
#: ../tgp-request.c:122
|
||||
msgid "Enter password for two factor authentication"
|
||||
msgstr "Zadejte heslo pro dvoufaktorovou autentizaci"
|
||||
|
||||
#: ../tgp-request.c:123
|
||||
msgid "Ok"
|
||||
msgstr "Ok"
|
||||
|
||||
#: ../tgp-request.c:125
|
||||
msgid ""
|
||||
"No password set for two factor authentication. Please enter it in the "
|
||||
"extended settings."
|
||||
msgstr ""
|
||||
"Není zadáno heslo pro dvoufaktorovou autentizaci. Prosím zadejte jej v "
|
||||
"pokročilém nastavení."
|
||||
|
||||
#: ../tgp-request.c:127
|
||||
msgid "Password invalid"
|
||||
msgstr "Neplatné heslo"
|
||||
|
||||
#: ../tgp-request.c:150
|
||||
#, c-format
|
||||
msgid "Accept secret chat '%s' on this device?"
|
||||
msgstr "Přijmout tajný chat '%s' na tomto zařízení?"
|
||||
|
||||
#: ../tgp-request.c:151
|
||||
msgid "Secret chat"
|
||||
msgstr "Tajný chat"
|
||||
|
||||
#: ../tgp-request.c:151
|
||||
msgid ""
|
||||
"Secret chats can only have one end point. If you accept a secret chat on "
|
||||
"this device, its messages will not be available anywhere else. If you "
|
||||
"decline, you can still accept the chat on other devices."
|
||||
msgstr ""
|
||||
"Tajný chat může mít pouze jeden koncový bod. Pokud přijmete tajný chat na "
|
||||
"tomto zařízení, zprávy nebudou dostupné nikde jinde. Pokud odmítnete, můžete"
|
||||
" stále přijmout chat na jiném zařízení."
|
||||
|
||||
#: ../tgp-request.c:182
|
||||
msgid ""
|
||||
"Invite at least one additional user by specifying\n"
|
||||
" their full name (autocompletion available).\n"
|
||||
"You can add more users once the chat was created."
|
||||
msgstr ""
|
||||
"Pozvěte minimálně jednoho dalšího uživatele tím,\n"
|
||||
"že zadáte jeho celé jméno (automatické doplňování dostupné).\n"
|
||||
"Můžete přidat více uživatelů po té, co je chat vytvořen."
|
||||
|
||||
#: ../tgp-request.c:185 ../tgp-request.c:189 ../tgp-request.c:193
|
||||
msgid "Username"
|
||||
msgstr "Uživatelské jméno"
|
||||
|
||||
#: ../tgp-request.c:198
|
||||
msgid "Create group chat"
|
||||
msgstr "Vytvořit skupinový chat"
|
||||
|
||||
#: ../tgp-request.c:198
|
||||
msgid "Invite users"
|
||||
msgstr "Pozvat uživatele"
|
||||
|
||||
#: ../tgp-request.c:217 ../tgp-request.c:232
|
||||
msgid "Change password"
|
||||
msgstr "Změnit heslo"
|
||||
|
||||
#: ../tgp-request.c:219
|
||||
msgid "Current"
|
||||
msgstr "Aktuální"
|
||||
|
||||
#: ../tgp-request.c:223 ../tgp-request.c:253
|
||||
msgid "Password"
|
||||
msgstr "Heslo"
|
||||
|
||||
#: ../tgp-request.c:227 ../tgp-request.c:257
|
||||
msgid "Confirm"
|
||||
msgstr "Potvrdit"
|
||||
|
||||
#: ../tgp-request.c:251 ../tgp-request.c:262
|
||||
msgid "New password"
|
||||
msgstr "Nové heslo"
|
||||
|
||||
#. if we arrive here for the second time the specified phone number is not
|
||||
#. valid. We do not
|
||||
#. ask for the phone number directly, cause in that case the account would
|
||||
#. still be created
|
||||
#. named with the invalid phone number, even though the login will work
|
||||
#: ../tgp-request.c:300
|
||||
msgid "Invalid phone number"
|
||||
msgstr "Neplatné telefonní číslo"
|
||||
|
||||
#: ../tgp-request.c:301
|
||||
msgid ""
|
||||
"Please enter only numbers in the international phone number format, a leading + following by the country prefix and the phone number.\n"
|
||||
"Do not use any other special chars."
|
||||
msgstr ""
|
||||
"Prosím zadejte pouze čísla v mezinárodním telefonním formátu, počáteční + následované mezinárodním předčíslím a telefonním číslem.\n"
|
||||
"Nepoužívejte žádné jiné speciální znaky."
|
||||
|
||||
#: ../tgp-request.c:370
|
||||
msgid "Leave Chat"
|
||||
msgstr "Opustit chat"
|
||||
|
||||
#: ../tgp-request.c:372
|
||||
msgid "Do you want to leave this chat permantently?"
|
||||
msgstr "Chcete tento chat opustit trvale?"
|
||||
|
||||
#: ../tgp-request.c:377
|
||||
msgid "Abort Secret Chat"
|
||||
msgstr "Ukončit tajný chat"
|
||||
|
||||
#: ../tgp-request.c:379
|
||||
msgid "Do you want to terminate this secret chat permantently?"
|
||||
msgstr "Chcete ukončit tento tajný chat trvale?"
|
||||
|
||||
#: ../tgp-request.c:384
|
||||
msgid "Delete Contact"
|
||||
msgstr "Smazat kontant"
|
||||
|
||||
#: ../tgp-request.c:386
|
||||
msgid "Do you want to remove this user from your global contact list?"
|
||||
msgstr "Chcete tohoto uživatele odstranit ze seznamu kontaktů?"
|
||||
|
||||
#: ../tgp-request.c:401
|
||||
msgid "Leave Channel"
|
||||
msgstr "Opustit kanál"
|
||||
|
||||
#: ../tgp-request.c:403
|
||||
msgid "Do you want to leave this channel?"
|
||||
msgstr "Chcete opustit tento kanál?"
|
||||
|
||||
#. This should be the language's timestamp format. This is preceded by a
|
||||
#. colon.
|
||||
#: ../tgp-utils.c:27
|
||||
msgid "%d.%m.%Y %H:%M"
|
||||
msgstr "%d.%m.%Y %H:%M"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:48
|
||||
msgid "recently"
|
||||
msgstr "nedávno"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:52
|
||||
msgid "last week"
|
||||
msgstr "poslední týden"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:56
|
||||
msgid "last month"
|
||||
msgstr "poslední měsíc"
|
||||
|
||||
#. This is preceded by a colon. It refers to a point on time.
|
||||
#: ../tgp-utils.c:60
|
||||
msgid "unknown"
|
||||
msgstr "neznámé"
|
||||
|
||||
#: ../tgp-chat.c:108 ../tgp-chat.c:582
|
||||
msgid "Telegram Chats"
|
||||
msgstr "Chaty Telegramu"
|
||||
|
||||
#: ../tgp-chat.c:113
|
||||
msgid "You have already left this chat."
|
||||
msgstr "Již jste tento chat opistili."
|
||||
|
||||
#: ../tgp-chat.c:224
|
||||
msgid "Subject:"
|
||||
msgstr "Předmět:"
|
||||
|
||||
#: ../tgp-chat.c:230
|
||||
msgid "Invite link:"
|
||||
msgstr "Odkaz pozvánky:"
|
||||
|
||||
#: ../tgp-chat.c:236
|
||||
msgid "Chat ID:"
|
||||
msgstr "ID Chatu:"
|
||||
|
||||
#: ../tgp-chat.c:342
|
||||
msgid "Supergroup"
|
||||
msgstr "Superskupina"
|
||||
|
||||
#: ../tgp-chat.c:342
|
||||
msgid "Channel"
|
||||
msgstr "Kanál"
|
||||
|
||||
#: ../tgp-chat.c:345
|
||||
msgid "Group"
|
||||
msgstr "Skupina"
|
||||
|
||||
#: ../tgp-chat.c:367
|
||||
msgid "Users in chat"
|
||||
msgstr "Uživatelé v chatu"
|
||||
|
||||
#: ../tgp-chat.c:370
|
||||
msgid "Type"
|
||||
msgstr "Typ"
|
419
po/da.po
419
po/da.po
|
@ -1,88 +1,93 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
# Translators:
|
||||
# Titanus Eramius <titanus@aptget.dk>, 2015
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: telegram-purple\n"
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2015-11-21 14:37+0100\n"
|
||||
"PO-Revision-Date: 2015-12-18 13:05+0000\n"
|
||||
"Last-Translator: Ben Wiederhake <BenWiederhake.GitHub@gmx.de>\n"
|
||||
"Language-Team: Danish (http://www.transifex.com/telegram-purple-developers/telegram-purple/language/da/)\n"
|
||||
"POT-Creation-Date: 2016-08-31 22:53+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: TitanusEramius <titanus@aptget.dk>, 2016\n"
|
||||
"Language-Team: Danish (https://www.transifex.com/telegram-purple-developers/teams/53149/da/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: da\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: ../telegram-base.c:515
|
||||
#: ../telegram-base.c:500
|
||||
msgid "Couldn't create group"
|
||||
msgstr "Kunne ikke lave gruppe"
|
||||
|
||||
#: ../telegram-base.c:515
|
||||
#: ../telegram-base.c:501
|
||||
msgid "Please select at least one other user."
|
||||
msgstr ""
|
||||
msgstr "Vælg mindst én anden bruger."
|
||||
|
||||
#: ../telegram-base.c:570
|
||||
#: ../telegram-base.c:555
|
||||
msgid "Query Failed"
|
||||
msgstr ""
|
||||
msgstr "Forespørgsel fejlede"
|
||||
|
||||
#: ../telegram-purple.c:193
|
||||
#: ../telegram-purple.c:162
|
||||
msgid "Secret chat ready."
|
||||
msgstr ""
|
||||
msgstr "Hemmelig chat klar."
|
||||
|
||||
#: ../telegram-purple.c:200
|
||||
#: ../telegram-purple.c:170
|
||||
msgid "Secret chat terminated."
|
||||
msgstr "Hemmelig chat afsluttet."
|
||||
|
||||
#: ../telegram-purple.c:268
|
||||
#: ../telegram-purple.c:182
|
||||
msgid "Telegram"
|
||||
msgstr "Telegram"
|
||||
|
||||
#: ../telegram-purple.c:229
|
||||
msgid "Message marked as read."
|
||||
msgstr "Besked markeret som læst."
|
||||
|
||||
#: ../telegram-purple.c:486
|
||||
#: ../telegram-purple.c:339
|
||||
#, c-format
|
||||
msgid "Invite link: %s"
|
||||
msgstr "Invitationslink: %s"
|
||||
|
||||
#: ../telegram-purple.c:506 ../telegram-purple.c:507
|
||||
#. FIXME: Can TGLCHF_MODERATOR export links?
|
||||
#: ../telegram-purple.c:350
|
||||
msgid "Creating chat link failed"
|
||||
msgstr "Oprettelse af chatlink fejlede"
|
||||
|
||||
#: ../telegram-purple.c:508
|
||||
#: ../telegram-purple.c:351
|
||||
msgid "You need to be admin of the group to do that."
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:531
|
||||
#: ../telegram-purple.c:416
|
||||
msgid "Chat joined"
|
||||
msgstr "Chat tilsluttet"
|
||||
|
||||
#: ../telegram-purple.c:532
|
||||
#: ../telegram-purple.c:417
|
||||
msgid "Chat added to list of chat rooms."
|
||||
msgstr "Chat tilføjet listen af chatrum."
|
||||
|
||||
#: ../telegram-purple.c:552
|
||||
#: ../telegram-purple.c:443
|
||||
msgid "Start secret chat..."
|
||||
msgstr ""
|
||||
msgstr "Start hemmelig chat..."
|
||||
|
||||
#. Generate Public Link
|
||||
#: ../telegram-purple.c:558
|
||||
#: ../telegram-purple.c:450
|
||||
msgid "Invite users by link..."
|
||||
msgstr ""
|
||||
msgstr "Invitér brugere med link..."
|
||||
|
||||
#. Delete self from chat
|
||||
#: ../telegram-purple.c:564
|
||||
#: ../telegram-purple.c:458
|
||||
msgid "Delete and exit..."
|
||||
msgstr ""
|
||||
msgstr "Slet og afslut..."
|
||||
|
||||
#: ../telegram-purple.c:632
|
||||
#: ../telegram-purple.c:546
|
||||
#, c-format
|
||||
msgid "Unable to sign on as %s: pubkey not found."
|
||||
msgid "Unable to sign on as %s: file (public key) not found."
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:636
|
||||
#: ../telegram-purple.c:550
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Make sure telegram-purple is installed properly,\n"
|
||||
|
@ -92,334 +97,380 @@ msgid ""
|
|||
"%1$s to %2$s."
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:657
|
||||
#: ../telegram-purple.c:572
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Unable to sign on as %s: problem in the underlying library 'tgl'. Please "
|
||||
"submit a bug report with the debug log."
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:576
|
||||
msgid "Problem in tgl"
|
||||
msgstr "Problem i tgl"
|
||||
|
||||
#. TRANSLATORS: Please fill in your own prefix!
|
||||
#: ../telegram-purple.c:584
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Unable to sign on as %s: phone number lacks country prefix. Numbers must "
|
||||
"start with the full international prefix code, e.g. +49 for Germany."
|
||||
"start with the full international prefix code, e.g. +1 for USA."
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:662
|
||||
#: ../telegram-purple.c:589
|
||||
msgid "Incomplete phone number"
|
||||
msgstr ""
|
||||
msgstr "Ugyldigt telefonnummer"
|
||||
|
||||
#: ../telegram-purple.c:788 ../telegram-purple.c:789
|
||||
#: ../telegram-purple.c:642
|
||||
msgid "Secret chat was already deleted"
|
||||
msgstr "Hemmelig chat er allerede slettet"
|
||||
|
||||
#: ../telegram-purple.c:644
|
||||
msgid "Secret chat is not ready"
|
||||
msgstr "Hemmelig chat er ikke klar"
|
||||
|
||||
#: ../telegram-purple.c:652
|
||||
msgid "Only the creator of a channel can post messages."
|
||||
msgstr "Kun den der opretter en kanal kan skrive beskeder."
|
||||
|
||||
#: ../telegram-purple.c:695
|
||||
msgid "Cannot invite buddy to chat"
|
||||
msgstr "Kan ikke invitere ven til chat"
|
||||
|
||||
#: ../telegram-purple.c:790
|
||||
#: ../telegram-purple.c:696
|
||||
msgid "Specified user does not exist."
|
||||
msgstr "Angivet bruger eksisterer ikke."
|
||||
|
||||
#: ../telegram-purple.c:709
|
||||
msgid "phone no. (+ country prefix)"
|
||||
msgstr "Telefon nr. (+ landekode)"
|
||||
|
||||
#. Login
|
||||
#: ../telegram-purple.c:932
|
||||
#: ../telegram-purple.c:817
|
||||
msgid "Password (two factor authentication)"
|
||||
msgstr "Kodeord (to-vejs godkendelse)"
|
||||
|
||||
#: ../telegram-purple.c:938
|
||||
#: ../telegram-purple.c:822
|
||||
msgid ""
|
||||
"Fallback SMS verification\n"
|
||||
"(Helps when not using Pidgin and you aren't being prompted for the code)"
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:946
|
||||
msgid "ask"
|
||||
msgstr "spørg"
|
||||
|
||||
#: ../telegram-purple.c:947
|
||||
#: ../telegram-purple.c:828
|
||||
msgid "always"
|
||||
msgstr "altid"
|
||||
|
||||
#: ../telegram-purple.c:948
|
||||
#: ../telegram-purple.c:829
|
||||
msgid "never"
|
||||
msgstr "aldrig"
|
||||
|
||||
#: ../telegram-purple.c:950
|
||||
#: ../telegram-purple.c:830
|
||||
msgid "ask"
|
||||
msgstr "spørg"
|
||||
|
||||
#: ../telegram-purple.c:832
|
||||
msgid "Accept secret chats"
|
||||
msgstr "Acceptér hemmelige chats"
|
||||
|
||||
#: ../telegram-purple.c:955
|
||||
#: ../telegram-purple.c:836
|
||||
msgid "Display buddies offline after (days)"
|
||||
msgstr ""
|
||||
msgstr "Vis venner som offline efter (dage)"
|
||||
|
||||
#: ../telegram-purple.c:960
|
||||
msgid "Fetch past history on first login"
|
||||
msgstr "Hent historie ved første log ind"
|
||||
|
||||
#: ../telegram-purple.c:965
|
||||
#: ../telegram-purple.c:840
|
||||
msgid ""
|
||||
"Don't fetch history older than (days)\n"
|
||||
"(0 for unlimited)"
|
||||
msgstr "Hent ikke historie ældre end (dage)\n(0 for ubegrænset)"
|
||||
msgstr ""
|
||||
"Hent ikke historie ældre end (dage)\n"
|
||||
"(0 for ubegrænset)"
|
||||
|
||||
#. Media
|
||||
#: ../telegram-purple.c:845
|
||||
msgid "Autoload media size (kb)"
|
||||
msgstr ""
|
||||
|
||||
#. Chats
|
||||
#: ../telegram-purple.c:973
|
||||
#: ../telegram-purple.c:850
|
||||
msgid "Add all group chats to buddy list"
|
||||
msgstr ""
|
||||
|
||||
#. Read notifications
|
||||
#: ../telegram-purple.c:981
|
||||
#: ../telegram-purple.c:855
|
||||
msgid "Display notices of receipt"
|
||||
msgstr "Vis modtagelseskvittering"
|
||||
|
||||
#: ../telegram-purple.c:986
|
||||
#: ../telegram-purple.c:859
|
||||
msgid "Send notices of receipt when present"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-2prpl.c:178 ../tgp-request.c:108
|
||||
msgid "First name"
|
||||
msgstr "Fornavn"
|
||||
|
||||
#: ../tgp-2prpl.c:179 ../tgp-request.c:111
|
||||
msgid "Last name"
|
||||
msgstr "Efternavn"
|
||||
|
||||
#: ../tgp-2prpl.c:181
|
||||
msgid "Name"
|
||||
msgstr "Navn"
|
||||
|
||||
#: ../tgp-2prpl.c:186 ../tgp-request.c:197 ../tgp-request.c:201
|
||||
#: ../tgp-request.c:205
|
||||
msgid "Username"
|
||||
msgstr "Brugernavn"
|
||||
|
||||
#: ../tgp-2prpl.c:191
|
||||
msgid "Last seen"
|
||||
msgstr "Sidst set"
|
||||
|
||||
#: ../tgp-2prpl.c:196
|
||||
msgid "Phone"
|
||||
msgstr "Telefon"
|
||||
|
||||
#: ../tgp-2prpl.c:208
|
||||
msgid "Waiting for the user to get online..."
|
||||
#: ../telegram-purple.c:884
|
||||
msgid "Telegram Protocol Plugin."
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-2prpl.c:212
|
||||
msgid "Self destruction timer"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-2prpl.c:218
|
||||
msgid "Timer is not enabled."
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-2prpl.c:225
|
||||
msgid "Secret key"
|
||||
msgstr "Hemmelig nøgle"
|
||||
|
||||
#: ../tgp-msg.c:72
|
||||
#: ../tgp-msg.c:58
|
||||
#, c-format
|
||||
msgid "%2$s created chat %1$s."
|
||||
msgstr "%2$s oprettede chat %1$s."
|
||||
|
||||
#: ../tgp-msg.c:75
|
||||
#: ../tgp-msg.c:61
|
||||
#, c-format
|
||||
msgid "%2$s changed title to %1$s."
|
||||
msgstr "%2$s ændrede titel til %1$s."
|
||||
|
||||
#: ../tgp-msg.c:78
|
||||
#: ../tgp-msg.c:64
|
||||
#, c-format
|
||||
msgid "%s changed photo."
|
||||
msgstr "%s ændrede foto."
|
||||
|
||||
#: ../tgp-msg.c:81
|
||||
#: ../tgp-msg.c:67
|
||||
#, c-format
|
||||
msgid "%s deleted photo."
|
||||
msgstr "%s slettede foto."
|
||||
|
||||
#: ../tgp-msg.c:89
|
||||
#: ../tgp-msg.c:75
|
||||
#, c-format
|
||||
msgid "%1$s added user %2$s by link."
|
||||
msgstr "%1$s tilføjede bruger %2$s med link."
|
||||
|
||||
#: ../tgp-msg.c:102
|
||||
#: ../tgp-msg.c:90
|
||||
#, c-format
|
||||
msgid "%2$s added user %1$s."
|
||||
msgstr "%2$s tilføjede bruger %1$s."
|
||||
|
||||
#: ../tgp-msg.c:125 ../tgp-msg.c:140
|
||||
#: ../tgp-msg.c:114 ../tgp-msg.c:131
|
||||
#, c-format
|
||||
msgid "%2$s deleted user %1$s."
|
||||
msgstr "%2$s slettede bruger %1$s."
|
||||
|
||||
#: ../tgp-msg.c:146
|
||||
#: ../tgp-msg.c:138
|
||||
#, c-format
|
||||
msgid "%2$s set self destruction timer to %1$d second."
|
||||
msgid_plural "%2$s set self destruction timer to %1$d seconds."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: ../tgp-msg.c:152
|
||||
#: ../tgp-msg.c:144
|
||||
#, c-format
|
||||
msgid "%2$s marked %1$d message read."
|
||||
msgid_plural "%2$s marked %1$d messages read."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: ../tgp-msg.c:158
|
||||
#: ../tgp-msg.c:150
|
||||
#, c-format
|
||||
msgid "%2$s deleted %1$d message."
|
||||
msgid_plural "%2$s deleted %1$d messages."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: ../tgp-msg.c:164
|
||||
#: ../tgp-msg.c:156
|
||||
#, c-format
|
||||
msgid "%2$s made a screenshot of %1$d message."
|
||||
msgid_plural "%2$s made a screenshot of %1$d messages."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: ../tgp-msg.c:162
|
||||
#, c-format
|
||||
msgid "Channel %1$s created"
|
||||
msgstr ""
|
||||
|
||||
#. FIXME: check if this makes sense
|
||||
#: ../tgp-msg.c:165 ../tgp-chat.c:124 ../tgp-chat.c:576
|
||||
msgid "Telegram Channels"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-msg.c:191
|
||||
msgid "Sending message failed."
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-msg.c:296
|
||||
#: ../tgp-msg.c:253
|
||||
msgid "Sending image failed."
|
||||
msgstr "Afsendelse af billede fejlede."
|
||||
|
||||
#: ../tgp-msg.c:310
|
||||
msgid "Sorry, sending documents to encrypted chats not yet supported."
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-msg.c:400
|
||||
#: ../tgp-msg.c:417
|
||||
#, c-format
|
||||
msgid "%s sent a sticker."
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-net.c:286
|
||||
#: ../tgp-msg.c:463
|
||||
msgid "failed loading message"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-msg.c:498
|
||||
msgid "[animation]"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-msg.c:515
|
||||
msgid "[audio]"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-msg.c:515
|
||||
msgid "[video]"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-msg.c:604
|
||||
#, c-format
|
||||
msgid "<b>Forwarded message from: %s</b><br>%s"
|
||||
msgstr ""
|
||||
|
||||
#. FIXME: sometimes users aren't part of the response when receiving a
|
||||
#. forwarded message
|
||||
#: ../tgp-msg.c:607
|
||||
#, c-format
|
||||
msgid "<b>Forwarded message:</b><br>%s"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-msg.c:720
|
||||
msgid "loading document or picture failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-net.c:281
|
||||
msgid "Cannot connect to main server"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-net.c:342
|
||||
#: ../tgp-net.c:322
|
||||
msgid "Cannot connect to server: Ping timeout."
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-net.c:387
|
||||
#: ../tgp-net.c:365
|
||||
msgid "Lost connection to the server..."
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:64
|
||||
#: ../tgp-request.c:51
|
||||
msgid ""
|
||||
"Telegram wants to verify your identity. Please enter the login code that you"
|
||||
" have received via SMS."
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:67
|
||||
#: ../tgp-request.c:54
|
||||
msgid "Login code"
|
||||
msgstr "Log ind kode"
|
||||
|
||||
#: ../tgp-request.c:67
|
||||
#: ../tgp-request.c:54
|
||||
msgid "Enter login code"
|
||||
msgstr "Indtast log ind kode"
|
||||
|
||||
#: ../tgp-request.c:67
|
||||
#: ../tgp-request.c:54
|
||||
msgid "the code"
|
||||
msgstr "koden"
|
||||
|
||||
#: ../tgp-request.c:67 ../tgp-request.c:116 ../tgp-request.c:210
|
||||
#: ../tgp-request.c:245 ../tgp-request.c:275
|
||||
#: ../tgp-request.c:54 ../tgp-request.c:104 ../tgp-request.c:198
|
||||
#: ../tgp-request.c:233 ../tgp-request.c:263
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
|
||||
#: ../tgp-request.c:68 ../tgp-request.c:116 ../tgp-request.c:135
|
||||
#: ../tgp-request.c:211 ../tgp-request.c:246 ../tgp-request.c:276
|
||||
#: ../tgp-request.c:55 ../tgp-request.c:104 ../tgp-request.c:123
|
||||
#: ../tgp-request.c:199 ../tgp-request.c:234 ../tgp-request.c:264
|
||||
msgid "Cancel"
|
||||
msgstr "Afbryd"
|
||||
|
||||
#: ../tgp-request.c:107
|
||||
#: ../tgp-request.c:95
|
||||
msgid "Registration"
|
||||
msgstr "Registrering"
|
||||
|
||||
#: ../tgp-request.c:115
|
||||
#: ../tgp-request.c:96
|
||||
msgid "First name"
|
||||
msgstr "Fornavn"
|
||||
|
||||
#: ../tgp-request.c:99
|
||||
msgid "Last name"
|
||||
msgstr "Efternavn"
|
||||
|
||||
#: ../tgp-request.c:103
|
||||
msgid "Register"
|
||||
msgstr "Registrér"
|
||||
|
||||
#: ../tgp-request.c:115
|
||||
#: ../tgp-request.c:103
|
||||
msgid "Please register your phone number."
|
||||
msgstr "Registrér venligst dit telefonnummer"
|
||||
|
||||
#. purple_request API not available
|
||||
#: ../tgp-request.c:120
|
||||
#: ../tgp-request.c:108
|
||||
msgid ""
|
||||
"Phone number is not registered. Please register your phone on a different "
|
||||
"client."
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:122
|
||||
#: ../tgp-request.c:110
|
||||
msgid "Not registered"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:134
|
||||
#: ../tgp-request.c:122
|
||||
msgid "Password needed"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:134
|
||||
#: ../tgp-request.c:122
|
||||
msgid "Enter password for two factor authentication"
|
||||
msgstr "Indtast kodeord til to-vejs godkendelse"
|
||||
|
||||
#: ../tgp-request.c:135
|
||||
#: ../tgp-request.c:123
|
||||
msgid "Ok"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:137
|
||||
#: ../tgp-request.c:125
|
||||
msgid ""
|
||||
"No password set for two factor authentication. Please enter it in the "
|
||||
"extended settings."
|
||||
msgstr "Intet kodeord sat til to-vejs godkendelse. Indtast det venligst i de udvidede indstillinger."
|
||||
msgstr ""
|
||||
"Intet kodeord sat til to-vejs godkendelse. Indtast det venligst i de "
|
||||
"udvidede indstillinger."
|
||||
|
||||
#: ../tgp-request.c:139
|
||||
#: ../tgp-request.c:127
|
||||
msgid "Password invalid"
|
||||
msgstr "Ugyldigt kodeord"
|
||||
|
||||
#: ../tgp-request.c:162
|
||||
#: ../tgp-request.c:150
|
||||
#, c-format
|
||||
msgid "Accept secret chat '%s' on this device?"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:163
|
||||
#: ../tgp-request.c:151
|
||||
msgid "Secret chat"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:163
|
||||
#: ../tgp-request.c:151
|
||||
msgid ""
|
||||
"Secret chats can only have one end point. If you accept a secret chat on "
|
||||
"this device, its messages will not be available anywhere else. If you "
|
||||
"decline, you can still accept the chat on other devices."
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:194
|
||||
#: ../tgp-request.c:182
|
||||
msgid ""
|
||||
"Invite at least one additional user by specifying\n"
|
||||
" their full name (autocompletion available).\n"
|
||||
"You can add more users once the chat was created."
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:210
|
||||
#: ../tgp-request.c:185 ../tgp-request.c:189 ../tgp-request.c:193
|
||||
msgid "Username"
|
||||
msgstr "Brugernavn"
|
||||
|
||||
#: ../tgp-request.c:198
|
||||
msgid "Create group chat"
|
||||
msgstr "Lav gruppechat"
|
||||
|
||||
#: ../tgp-request.c:210
|
||||
#: ../tgp-request.c:198
|
||||
msgid "Invite users"
|
||||
msgstr "Invitér brugere"
|
||||
|
||||
#: ../tgp-request.c:229 ../tgp-request.c:244
|
||||
#: ../tgp-request.c:217 ../tgp-request.c:232
|
||||
msgid "Change password"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:231
|
||||
#: ../tgp-request.c:219
|
||||
msgid "Current"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:235 ../tgp-request.c:265
|
||||
#: ../tgp-request.c:223 ../tgp-request.c:253
|
||||
msgid "Password"
|
||||
msgstr "Kodeord"
|
||||
|
||||
#: ../tgp-request.c:239 ../tgp-request.c:269
|
||||
#: ../tgp-request.c:227 ../tgp-request.c:257
|
||||
msgid "Confirm"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:263 ../tgp-request.c:274
|
||||
#: ../tgp-request.c:251 ../tgp-request.c:262
|
||||
msgid "New password"
|
||||
msgstr ""
|
||||
|
||||
|
@ -428,58 +479,110 @@ msgstr ""
|
|||
#. ask for the phone number directly, cause in that case the account would
|
||||
#. still be created
|
||||
#. named with the invalid phone number, even though the login will work
|
||||
#: ../tgp-request.c:312
|
||||
#: ../tgp-request.c:300
|
||||
msgid "Invalid phone number"
|
||||
msgstr "Ugyldigt telefonnummer"
|
||||
|
||||
#: ../tgp-request.c:313
|
||||
#: ../tgp-request.c:301
|
||||
msgid ""
|
||||
"Please enter only numbers in the international phone number format, a leading + following by the country prefix and the phone number.\n"
|
||||
"Do not use any other special chars."
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:370
|
||||
msgid "Leave Chat"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:372
|
||||
msgid "Do you want to leave this chat permantently?"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:377
|
||||
msgid "Abort Secret Chat"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:379
|
||||
msgid "Do you want to terminate this secret chat permantently?"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:384
|
||||
msgid "Delete Contact"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:386
|
||||
msgid "Do you want to remove this user from your global contact list?"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:401
|
||||
msgid "Leave Channel"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:403
|
||||
msgid "Do you want to leave this channel?"
|
||||
msgstr ""
|
||||
|
||||
#. This should be the language's timestamp format. This is preceded by a
|
||||
#. colon.
|
||||
#: ../tgp-utils.c:32
|
||||
#: ../tgp-utils.c:27
|
||||
msgid "%d.%m.%Y %H:%M"
|
||||
msgstr "%d.%m.%Y %H:%M"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:53
|
||||
#: ../tgp-utils.c:48
|
||||
msgid "recently"
|
||||
msgstr "for nyligt"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:57
|
||||
#: ../tgp-utils.c:52
|
||||
msgid "last week"
|
||||
msgstr "sidste uge"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:61
|
||||
#: ../tgp-utils.c:56
|
||||
msgid "last month"
|
||||
msgstr "sidste måned"
|
||||
|
||||
#. This is preceded by a colon. It refers to a point on time.
|
||||
#: ../tgp-utils.c:65
|
||||
#: ../tgp-utils.c:60
|
||||
msgid "unknown"
|
||||
msgstr "ukendt"
|
||||
|
||||
#: ../tgp-chat.c:79
|
||||
#: ../tgp-chat.c:108 ../tgp-chat.c:582
|
||||
msgid "Telegram Chats"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-chat.c:113
|
||||
msgid "You have already left this chat."
|
||||
msgstr "Du har allerede forladt denne chat."
|
||||
|
||||
#: ../tgp-chat.c:127
|
||||
#: ../tgp-chat.c:224
|
||||
msgid "Subject:"
|
||||
msgstr "Emne:"
|
||||
|
||||
#: ../tgp-chat.c:133
|
||||
#: ../tgp-chat.c:230
|
||||
msgid "Invite link:"
|
||||
msgstr "Invitationslink:"
|
||||
|
||||
#: ../tgp-chat.c:139
|
||||
#: ../tgp-chat.c:236
|
||||
msgid "Chat ID:"
|
||||
msgstr "Chat ID:"
|
||||
|
||||
#: ../tgp-chat.c:238
|
||||
#: ../tgp-chat.c:342
|
||||
msgid "Supergroup"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-chat.c:342
|
||||
msgid "Channel"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-chat.c:345
|
||||
msgid "Group"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-chat.c:367
|
||||
msgid "Users in chat"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-chat.c:370
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
|
|
455
po/de_DE.po
455
po/de_DE.po
|
@ -1,89 +1,94 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
# Translators:
|
||||
# Ben Wiederhake <BenWiederhake.GitHub@gmx.de>, 2015
|
||||
# M J <mtthsjntsch@gmail.com>, 2015
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: telegram-purple\n"
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2015-11-21 14:37+0100\n"
|
||||
"PO-Revision-Date: 2015-12-18 13:05+0000\n"
|
||||
"Last-Translator: Ben Wiederhake <BenWiederhake.GitHub@gmx.de>\n"
|
||||
"Language-Team: German (Germany) (http://www.transifex.com/telegram-purple-developers/telegram-purple/language/de_DE/)\n"
|
||||
"POT-Creation-Date: 2016-08-31 22:53+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Ben Wiederhake <BenWiederhake.GitHub@gmx.de>, 2016\n"
|
||||
"Language-Team: German (Germany) (https://www.transifex.com/telegram-purple-developers/teams/53149/de_DE/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: de_DE\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: ../telegram-base.c:515
|
||||
#: ../telegram-base.c:500
|
||||
msgid "Couldn't create group"
|
||||
msgstr "Konnte Gruppe nicht erstellen."
|
||||
|
||||
#: ../telegram-base.c:515
|
||||
#: ../telegram-base.c:501
|
||||
msgid "Please select at least one other user."
|
||||
msgstr "Wählen Sie mindestens einen weiteren Benutzer."
|
||||
|
||||
#: ../telegram-base.c:570
|
||||
#: ../telegram-base.c:555
|
||||
msgid "Query Failed"
|
||||
msgstr "Anfrage fehlgeschlagen"
|
||||
|
||||
#: ../telegram-purple.c:193
|
||||
#: ../telegram-purple.c:162
|
||||
msgid "Secret chat ready."
|
||||
msgstr "Geheimer Chat ist bereit."
|
||||
|
||||
#: ../telegram-purple.c:200
|
||||
#: ../telegram-purple.c:170
|
||||
msgid "Secret chat terminated."
|
||||
msgstr "Geheimer Chat wurde beendet."
|
||||
|
||||
#: ../telegram-purple.c:268
|
||||
#: ../telegram-purple.c:182
|
||||
msgid "Telegram"
|
||||
msgstr "Telegram"
|
||||
|
||||
#: ../telegram-purple.c:229
|
||||
msgid "Message marked as read."
|
||||
msgstr "Nachricht als gelesen markiert."
|
||||
|
||||
#: ../telegram-purple.c:486
|
||||
#: ../telegram-purple.c:339
|
||||
#, c-format
|
||||
msgid "Invite link: %s"
|
||||
msgstr "Einladungslink: %s"
|
||||
|
||||
#: ../telegram-purple.c:506 ../telegram-purple.c:507
|
||||
#. FIXME: Can TGLCHF_MODERATOR export links?
|
||||
#: ../telegram-purple.c:350
|
||||
msgid "Creating chat link failed"
|
||||
msgstr "Konnte keinen Link zum Chat erstellen"
|
||||
|
||||
#: ../telegram-purple.c:508
|
||||
#: ../telegram-purple.c:351
|
||||
msgid "You need to be admin of the group to do that."
|
||||
msgstr "Sie müssen Gruppenadmin sein, um das zu tun."
|
||||
|
||||
#: ../telegram-purple.c:531
|
||||
#: ../telegram-purple.c:416
|
||||
msgid "Chat joined"
|
||||
msgstr "Chat beigetreten"
|
||||
|
||||
#: ../telegram-purple.c:532
|
||||
#: ../telegram-purple.c:417
|
||||
msgid "Chat added to list of chat rooms."
|
||||
msgstr "Chat der Liste von Chat-Räumen hinzugefügt."
|
||||
|
||||
#: ../telegram-purple.c:552
|
||||
#: ../telegram-purple.c:443
|
||||
msgid "Start secret chat..."
|
||||
msgstr "Beginne geheimen Chat ..."
|
||||
|
||||
#. Generate Public Link
|
||||
#: ../telegram-purple.c:558
|
||||
#: ../telegram-purple.c:450
|
||||
msgid "Invite users by link..."
|
||||
msgstr "Nutzer per Link einladen ..."
|
||||
|
||||
#. Delete self from chat
|
||||
#: ../telegram-purple.c:564
|
||||
#: ../telegram-purple.c:458
|
||||
msgid "Delete and exit..."
|
||||
msgstr "Löschen und verlassen ..."
|
||||
|
||||
#: ../telegram-purple.c:632
|
||||
#: ../telegram-purple.c:546
|
||||
#, c-format
|
||||
msgid "Unable to sign on as %s: pubkey not found."
|
||||
msgstr "Konnte nicht als %s einloggen: Öffentlichen Schlüssel nicht gefunden"
|
||||
msgid "Unable to sign on as %s: file (public key) not found."
|
||||
msgstr ""
|
||||
"Konnte nicht als %s einloggen: Datei (öffentlichen Schlüssel) nicht gefunden"
|
||||
|
||||
#: ../telegram-purple.c:636
|
||||
#: ../telegram-purple.c:550
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Make sure telegram-purple is installed properly,\n"
|
||||
|
@ -91,336 +96,408 @@ msgid ""
|
|||
"If you're running SELinux (e.g. when using Tails),\n"
|
||||
"try 'make local_install', or simply copy\n"
|
||||
"%1$s to %2$s."
|
||||
msgstr "Stellen Sie eine korrekte Installation sicher,\ninklusive der .tglpub-Datei.\nFalls Sie SELinux benutzen (z.B. innerhalb von Tails),\nversuchen Sie 'make local_install', oder kopieren Sie einfach\n%1$s nach %2$s."
|
||||
msgstr ""
|
||||
"Stellen Sie eine korrekte Installation sicher,\n"
|
||||
"inklusive der .tglpub-Datei.\n"
|
||||
"Falls Sie SELinux benutzen (z.B. innerhalb von Tails),\n"
|
||||
"versuchen Sie 'make local_install', oder kopieren Sie einfach\n"
|
||||
"%1$s nach %2$s."
|
||||
|
||||
#: ../telegram-purple.c:657
|
||||
#: ../telegram-purple.c:572
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Unable to sign on as %s: problem in the underlying library 'tgl'. Please "
|
||||
"submit a bug report with the debug log."
|
||||
msgstr ""
|
||||
"Konnte nicht als %s einloggen: Problem in der Bibliothek 'tgl'. Bitte "
|
||||
"erstelle einen Bigreport mit Debug-Log."
|
||||
|
||||
#: ../telegram-purple.c:576
|
||||
msgid "Problem in tgl"
|
||||
msgstr "Problem in tgl"
|
||||
|
||||
#. TRANSLATORS: Please fill in your own prefix!
|
||||
#: ../telegram-purple.c:584
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Unable to sign on as %s: phone number lacks country prefix. Numbers must "
|
||||
"start with the full international prefix code, e.g. +49 for Germany."
|
||||
msgstr "Konnte nicht als %s einloggen: Telefonnummer hat scheinbar keinen internationalen\nPräfix-Code, z.B. +49 für Deutschland."
|
||||
"start with the full international prefix code, e.g. +1 for USA."
|
||||
msgstr ""
|
||||
"Konnte nicht als %s einloggen: Telefonnummer hat kein Präfix. Telefonnummern"
|
||||
" müssen mit dem vollen internationalen Präfix-Code starten, z.B. +49 für "
|
||||
"Deutschland."
|
||||
|
||||
#: ../telegram-purple.c:662
|
||||
#: ../telegram-purple.c:589
|
||||
msgid "Incomplete phone number"
|
||||
msgstr "Unvollständige Telefonnummer"
|
||||
|
||||
#: ../telegram-purple.c:788 ../telegram-purple.c:789
|
||||
#: ../telegram-purple.c:642
|
||||
msgid "Secret chat was already deleted"
|
||||
msgstr "Geheimer Chat wurde bereits gelöscht."
|
||||
|
||||
#: ../telegram-purple.c:644
|
||||
msgid "Secret chat is not ready"
|
||||
msgstr "Geheimer Chat ist noch nicht bereit."
|
||||
|
||||
#: ../telegram-purple.c:652
|
||||
msgid "Only the creator of a channel can post messages."
|
||||
msgstr "Nur der Ersteller eines Kanals kann Nachrichten senden."
|
||||
|
||||
#: ../telegram-purple.c:695
|
||||
msgid "Cannot invite buddy to chat"
|
||||
msgstr "Kann den Freund nicht zum Chat einladen"
|
||||
|
||||
#: ../telegram-purple.c:790
|
||||
#: ../telegram-purple.c:696
|
||||
msgid "Specified user does not exist."
|
||||
msgstr "Angegebener Benutzer existiert nicht."
|
||||
|
||||
#: ../telegram-purple.c:709
|
||||
msgid "phone no. (+ country prefix)"
|
||||
msgstr "Telefonnummer (+ Länder-Präfix)"
|
||||
|
||||
#. Login
|
||||
#: ../telegram-purple.c:932
|
||||
#: ../telegram-purple.c:817
|
||||
msgid "Password (two factor authentication)"
|
||||
msgstr "Passwort (Zwei-Faktor-Authentifizierung)"
|
||||
|
||||
#: ../telegram-purple.c:938
|
||||
#: ../telegram-purple.c:822
|
||||
msgid ""
|
||||
"Fallback SMS verification\n"
|
||||
"(Helps when not using Pidgin and you aren't being prompted for the code)"
|
||||
msgstr "Ausweich SMS-Verifizierung\n(Hilfreich wenn Sie nicht Pidgin verwenden, und die Frage\nnach dem SMS-Code aus bleibt)"
|
||||
msgstr ""
|
||||
"Ausweich SMS-Verifizierung\n"
|
||||
"(Hilfreich wenn Sie nicht Pidgin verwenden, und die Frage\n"
|
||||
"nach dem SMS-Code aus bleibt)"
|
||||
|
||||
#: ../telegram-purple.c:946
|
||||
msgid "ask"
|
||||
msgstr "nachfragen"
|
||||
|
||||
#: ../telegram-purple.c:947
|
||||
#: ../telegram-purple.c:828
|
||||
msgid "always"
|
||||
msgstr "immer"
|
||||
|
||||
#: ../telegram-purple.c:948
|
||||
#: ../telegram-purple.c:829
|
||||
msgid "never"
|
||||
msgstr "nie"
|
||||
|
||||
#: ../telegram-purple.c:950
|
||||
#: ../telegram-purple.c:830
|
||||
msgid "ask"
|
||||
msgstr "nachfragen"
|
||||
|
||||
#: ../telegram-purple.c:832
|
||||
msgid "Accept secret chats"
|
||||
msgstr "Geheime Chats akzeptieren"
|
||||
|
||||
#: ../telegram-purple.c:955
|
||||
#: ../telegram-purple.c:836
|
||||
msgid "Display buddies offline after (days)"
|
||||
msgstr "Freunde als offline anzeigen nach (Tage)"
|
||||
|
||||
#: ../telegram-purple.c:960
|
||||
msgid "Fetch past history on first login"
|
||||
msgstr "Abrufen des bisherigen Verlaufs beim ersten Login"
|
||||
|
||||
#: ../telegram-purple.c:965
|
||||
#: ../telegram-purple.c:840
|
||||
msgid ""
|
||||
"Don't fetch history older than (days)\n"
|
||||
"(0 for unlimited)"
|
||||
msgstr "Abrufen des Verlaufs begrenzen auf (Tage)\n(0 für unbegrenzt)"
|
||||
msgstr ""
|
||||
"Abrufen des Verlaufs begrenzen auf (Tage)\n"
|
||||
"(0 für unbegrenzt)"
|
||||
|
||||
#. Media
|
||||
#: ../telegram-purple.c:845
|
||||
msgid "Autoload media size (kb)"
|
||||
msgstr "Lade automatisch ab Größe (KB)"
|
||||
|
||||
#. Chats
|
||||
#: ../telegram-purple.c:973
|
||||
#: ../telegram-purple.c:850
|
||||
msgid "Add all group chats to buddy list"
|
||||
msgstr "Alle Gruppenchats in die Freundesliste einfügen"
|
||||
|
||||
#. Read notifications
|
||||
#: ../telegram-purple.c:981
|
||||
#: ../telegram-purple.c:855
|
||||
msgid "Display notices of receipt"
|
||||
msgstr "Empfangsbestätigungen anzeigen"
|
||||
|
||||
#: ../telegram-purple.c:986
|
||||
#: ../telegram-purple.c:859
|
||||
msgid "Send notices of receipt when present"
|
||||
msgstr "Empfangsbestätigungen senden wenn anwesend"
|
||||
|
||||
#: ../tgp-2prpl.c:178 ../tgp-request.c:108
|
||||
msgid "First name"
|
||||
msgstr "Vorname"
|
||||
#: ../telegram-purple.c:884
|
||||
msgid "Telegram Protocol Plugin."
|
||||
msgstr "Plugin für das Telegram Protokoll."
|
||||
|
||||
#: ../tgp-2prpl.c:179 ../tgp-request.c:111
|
||||
msgid "Last name"
|
||||
msgstr "Nachname"
|
||||
|
||||
#: ../tgp-2prpl.c:181
|
||||
msgid "Name"
|
||||
msgstr "Name"
|
||||
|
||||
#: ../tgp-2prpl.c:186 ../tgp-request.c:197 ../tgp-request.c:201
|
||||
#: ../tgp-request.c:205
|
||||
msgid "Username"
|
||||
msgstr "Benutzername"
|
||||
|
||||
#: ../tgp-2prpl.c:191
|
||||
msgid "Last seen"
|
||||
msgstr "Zuletzt gesehen"
|
||||
|
||||
#: ../tgp-2prpl.c:196
|
||||
msgid "Phone"
|
||||
msgstr "Telefonnummer"
|
||||
|
||||
#: ../tgp-2prpl.c:208
|
||||
msgid "Waiting for the user to get online..."
|
||||
msgstr "Warte auf Anmeldung des Benutzers ..."
|
||||
|
||||
#: ../tgp-2prpl.c:212
|
||||
msgid "Self destruction timer"
|
||||
msgstr "Selbstzerstörungs-Timer"
|
||||
|
||||
#: ../tgp-2prpl.c:218
|
||||
msgid "Timer is not enabled."
|
||||
msgstr "Timer ist nicht aktiv."
|
||||
|
||||
#: ../tgp-2prpl.c:225
|
||||
msgid "Secret key"
|
||||
msgstr "Geheimer Schlüssel"
|
||||
|
||||
#: ../tgp-msg.c:72
|
||||
#: ../tgp-msg.c:58
|
||||
#, c-format
|
||||
msgid "%2$s created chat %1$s."
|
||||
msgstr "%2$s hat den Chat %1$s erstellt."
|
||||
|
||||
#: ../tgp-msg.c:75
|
||||
#: ../tgp-msg.c:61
|
||||
#, c-format
|
||||
msgid "%2$s changed title to %1$s."
|
||||
msgstr "%2$s hat den Titel zu %1$s geändert."
|
||||
|
||||
#: ../tgp-msg.c:78
|
||||
#: ../tgp-msg.c:64
|
||||
#, c-format
|
||||
msgid "%s changed photo."
|
||||
msgstr "%s hat das Photo geändert."
|
||||
|
||||
#: ../tgp-msg.c:81
|
||||
#: ../tgp-msg.c:67
|
||||
#, c-format
|
||||
msgid "%s deleted photo."
|
||||
msgstr "%s hat das Photo gelöscht."
|
||||
|
||||
#: ../tgp-msg.c:89
|
||||
#: ../tgp-msg.c:75
|
||||
#, c-format
|
||||
msgid "%1$s added user %2$s by link."
|
||||
msgstr "%1$s fügte Benutzer %2$s per Link hinzu."
|
||||
|
||||
#: ../tgp-msg.c:102
|
||||
#: ../tgp-msg.c:90
|
||||
#, c-format
|
||||
msgid "%2$s added user %1$s."
|
||||
msgstr "%2$s hat den Nutzer %1$s hinzufügt."
|
||||
|
||||
#: ../tgp-msg.c:125 ../tgp-msg.c:140
|
||||
#: ../tgp-msg.c:114 ../tgp-msg.c:131
|
||||
#, c-format
|
||||
msgid "%2$s deleted user %1$s."
|
||||
msgstr "%2$s entfernte Benutzer %1$s."
|
||||
|
||||
#: ../tgp-msg.c:146
|
||||
#: ../tgp-msg.c:138
|
||||
#, c-format
|
||||
msgid "%2$s set self destruction timer to %1$d second."
|
||||
msgid_plural "%2$s set self destruction timer to %1$d seconds."
|
||||
msgstr[0] "%2$s setzte Selbstzerstörungs-Timer auf %1$d Sekunde."
|
||||
msgstr[1] "%2$s setzte Selbstzerstörungs-Timer auf %1$d Sekunden."
|
||||
|
||||
#: ../tgp-msg.c:152
|
||||
#: ../tgp-msg.c:144
|
||||
#, c-format
|
||||
msgid "%2$s marked %1$d message read."
|
||||
msgid_plural "%2$s marked %1$d messages read."
|
||||
msgstr[0] "%2$s markierte %1$d Nachricht als gelesen."
|
||||
msgstr[1] "%2$s markierte %1$d Nachrichten als gelesen."
|
||||
|
||||
#: ../tgp-msg.c:158
|
||||
#: ../tgp-msg.c:150
|
||||
#, c-format
|
||||
msgid "%2$s deleted %1$d message."
|
||||
msgid_plural "%2$s deleted %1$d messages."
|
||||
msgstr[0] "%2$s entfernte %1$d Nachricht."
|
||||
msgstr[1] "%2$s entfernte %1$d Nachrichten."
|
||||
|
||||
#: ../tgp-msg.c:164
|
||||
#: ../tgp-msg.c:156
|
||||
#, c-format
|
||||
msgid "%2$s made a screenshot of %1$d message."
|
||||
msgid_plural "%2$s made a screenshot of %1$d messages."
|
||||
msgstr[0] "%2$s machte einen Screenshot von %1$d Nachricht."
|
||||
msgstr[1] "%2$s machte einen Screenshot von %1$d Nachrichten."
|
||||
|
||||
#: ../tgp-msg.c:162
|
||||
#, c-format
|
||||
msgid "Channel %1$s created"
|
||||
msgstr "Kanal %1$s erstellt"
|
||||
|
||||
#. FIXME: check if this makes sense
|
||||
#: ../tgp-msg.c:165 ../tgp-chat.c:124 ../tgp-chat.c:576
|
||||
msgid "Telegram Channels"
|
||||
msgstr "Telegram Kanäle"
|
||||
|
||||
#: ../tgp-msg.c:191
|
||||
msgid "Sending message failed."
|
||||
msgstr "Absenden der Nachricht fehlgeschlagen."
|
||||
|
||||
#: ../tgp-msg.c:296
|
||||
#: ../tgp-msg.c:253
|
||||
msgid "Sending image failed."
|
||||
msgstr "Absenden des Bilds fehlgeschlagen."
|
||||
|
||||
#: ../tgp-msg.c:310
|
||||
msgid "Sorry, sending documents to encrypted chats not yet supported."
|
||||
msgstr "Tut uns Leid, aber das Versenden von Dokumenten in verschlüsselten Chats wird noch nicht unterstützt."
|
||||
|
||||
#: ../tgp-msg.c:400
|
||||
#: ../tgp-msg.c:417
|
||||
#, c-format
|
||||
msgid "%s sent a sticker."
|
||||
msgstr "%s hat einen Sticker gesendet."
|
||||
|
||||
#: ../tgp-net.c:286
|
||||
#: ../tgp-msg.c:463
|
||||
msgid "failed loading message"
|
||||
msgstr "konnte Nachricht nicht laden."
|
||||
|
||||
#: ../tgp-msg.c:498
|
||||
msgid "[animation]"
|
||||
msgstr "[Animation]"
|
||||
|
||||
#: ../tgp-msg.c:515
|
||||
msgid "[audio]"
|
||||
msgstr "[Audio]"
|
||||
|
||||
#: ../tgp-msg.c:515
|
||||
msgid "[video]"
|
||||
msgstr "[Video]"
|
||||
|
||||
#: ../tgp-msg.c:604
|
||||
#, c-format
|
||||
msgid "<b>Forwarded message from: %s</b><br>%s"
|
||||
msgstr "<b>Weitergeleitet von: %s</b> %s"
|
||||
|
||||
#. FIXME: sometimes users aren't part of the response when receiving a
|
||||
#. forwarded message
|
||||
#: ../tgp-msg.c:607
|
||||
#, c-format
|
||||
msgid "<b>Forwarded message:</b><br>%s"
|
||||
msgstr "<b>Weitergeleitete Nachricht:</b> %s"
|
||||
|
||||
#: ../tgp-msg.c:720
|
||||
msgid "loading document or picture failed"
|
||||
msgstr "konnte Dokument oder Datei nicht laden"
|
||||
|
||||
#: ../tgp-net.c:281
|
||||
msgid "Cannot connect to main server"
|
||||
msgstr "Keine Verbindung zum Haupt-Server"
|
||||
|
||||
#: ../tgp-net.c:342
|
||||
#: ../tgp-net.c:322
|
||||
msgid "Cannot connect to server: Ping timeout."
|
||||
msgstr "Keine Verbindung zum Server: Zeitpüberschreitung"
|
||||
msgstr "Keine Verbindung zum Server: Zeitüberschreitung"
|
||||
|
||||
#: ../tgp-net.c:387
|
||||
#: ../tgp-net.c:365
|
||||
msgid "Lost connection to the server..."
|
||||
msgstr "Verbindung zum Server verloren ..."
|
||||
|
||||
#: ../tgp-request.c:64
|
||||
#: ../tgp-request.c:51
|
||||
msgid ""
|
||||
"Telegram wants to verify your identity. Please enter the login code that you"
|
||||
" have received via SMS."
|
||||
msgstr "Telegram möchte Ihre Identität prüfen. Bitte geben Sie den Login-Code ein, den Sie per SMS erhalten haben."
|
||||
msgstr ""
|
||||
"Telegram möchte Ihre Identität prüfen. Bitte geben Sie den Login-Code ein, "
|
||||
"den Sie per SMS erhalten haben."
|
||||
|
||||
#: ../tgp-request.c:67
|
||||
#: ../tgp-request.c:54
|
||||
msgid "Login code"
|
||||
msgstr "Login-Code"
|
||||
|
||||
#: ../tgp-request.c:67
|
||||
#: ../tgp-request.c:54
|
||||
msgid "Enter login code"
|
||||
msgstr "Login-Code eingeben"
|
||||
|
||||
#: ../tgp-request.c:67
|
||||
#: ../tgp-request.c:54
|
||||
msgid "the code"
|
||||
msgstr "der Login-Code"
|
||||
|
||||
#: ../tgp-request.c:67 ../tgp-request.c:116 ../tgp-request.c:210
|
||||
#: ../tgp-request.c:245 ../tgp-request.c:275
|
||||
#: ../tgp-request.c:54 ../tgp-request.c:104 ../tgp-request.c:198
|
||||
#: ../tgp-request.c:233 ../tgp-request.c:263
|
||||
msgid "OK"
|
||||
msgstr "Ok"
|
||||
|
||||
#: ../tgp-request.c:68 ../tgp-request.c:116 ../tgp-request.c:135
|
||||
#: ../tgp-request.c:211 ../tgp-request.c:246 ../tgp-request.c:276
|
||||
#: ../tgp-request.c:55 ../tgp-request.c:104 ../tgp-request.c:123
|
||||
#: ../tgp-request.c:199 ../tgp-request.c:234 ../tgp-request.c:264
|
||||
msgid "Cancel"
|
||||
msgstr "Abbrechen"
|
||||
|
||||
#: ../tgp-request.c:107
|
||||
#: ../tgp-request.c:95
|
||||
msgid "Registration"
|
||||
msgstr "Anmeldung"
|
||||
|
||||
#: ../tgp-request.c:115
|
||||
#: ../tgp-request.c:96
|
||||
msgid "First name"
|
||||
msgstr "Vorname"
|
||||
|
||||
#: ../tgp-request.c:99
|
||||
msgid "Last name"
|
||||
msgstr "Nachname"
|
||||
|
||||
#: ../tgp-request.c:103
|
||||
msgid "Register"
|
||||
msgstr "Anmelden"
|
||||
|
||||
#: ../tgp-request.c:115
|
||||
#: ../tgp-request.c:103
|
||||
msgid "Please register your phone number."
|
||||
msgstr "Bitte registriere deine Telefonnummer."
|
||||
|
||||
#. purple_request API not available
|
||||
#: ../tgp-request.c:120
|
||||
#: ../tgp-request.c:108
|
||||
msgid ""
|
||||
"Phone number is not registered. Please register your phone on a different "
|
||||
"client."
|
||||
msgstr "Telefonnummer wurde noch nicht bei Telegram registriert. Bitte registrieren Sie Ihre Telefonnummer mit einem anderen Client."
|
||||
msgstr ""
|
||||
"Telefonnummer wurde noch nicht bei Telegram registriert. Bitte registrieren "
|
||||
"Sie Ihre Telefonnummer mit einem anderen Client."
|
||||
|
||||
#: ../tgp-request.c:122
|
||||
#: ../tgp-request.c:110
|
||||
msgid "Not registered"
|
||||
msgstr "Nicht registriert"
|
||||
|
||||
#: ../tgp-request.c:134
|
||||
#: ../tgp-request.c:122
|
||||
msgid "Password needed"
|
||||
msgstr "Passwort benötigt"
|
||||
|
||||
#: ../tgp-request.c:134
|
||||
#: ../tgp-request.c:122
|
||||
msgid "Enter password for two factor authentication"
|
||||
msgstr "Passwort für die Zwei-Faktor-Authentifizierung angeben"
|
||||
|
||||
#: ../tgp-request.c:135
|
||||
#: ../tgp-request.c:123
|
||||
msgid "Ok"
|
||||
msgstr "Ok"
|
||||
|
||||
#: ../tgp-request.c:137
|
||||
#: ../tgp-request.c:125
|
||||
msgid ""
|
||||
"No password set for two factor authentication. Please enter it in the "
|
||||
"extended settings."
|
||||
msgstr "Kein Passwort für die Zwei-Faktor-Authentifizierung gesetzt, bitte\nspezifizieren Sie dies in den erweiterten Einstellungen."
|
||||
msgstr ""
|
||||
"Kein Passwort für die Zwei-Faktor-Authentifizierung gesetzt, bitte\n"
|
||||
"spezifizieren Sie dies in den erweiterten Einstellungen."
|
||||
|
||||
#: ../tgp-request.c:139
|
||||
#: ../tgp-request.c:127
|
||||
msgid "Password invalid"
|
||||
msgstr "Passwort ungültig"
|
||||
|
||||
#: ../tgp-request.c:162
|
||||
#: ../tgp-request.c:150
|
||||
#, c-format
|
||||
msgid "Accept secret chat '%s' on this device?"
|
||||
msgstr "Geheimen Chat '%s' auf diesem Gerät akzeptieren?"
|
||||
|
||||
#: ../tgp-request.c:163
|
||||
#: ../tgp-request.c:151
|
||||
msgid "Secret chat"
|
||||
msgstr "Geheimer Chat"
|
||||
|
||||
#: ../tgp-request.c:163
|
||||
#: ../tgp-request.c:151
|
||||
msgid ""
|
||||
"Secret chats can only have one end point. If you accept a secret chat on "
|
||||
"this device, its messages will not be available anywhere else. If you "
|
||||
"decline, you can still accept the chat on other devices."
|
||||
msgstr "Geheime Chats können nur einen Endpunkt haben. Wenn du den geheimen Chat auf diesem Geräte akzeptierst werden die Nachrichten nirgendwo anders verfügbar sein. Wenn du ablehnst kannst du den Chat immernoch auf anderen Geräten akzeptieren."
|
||||
msgstr ""
|
||||
"Geheime Chats können nur einen Endpunkt haben. Wenn du den geheimen Chat auf"
|
||||
" diesem Geräte akzeptierst werden die Nachrichten nirgendwo anders verfügbar"
|
||||
" sein. Wenn du ablehnst kannst du den Chat immernoch auf anderen Geräten "
|
||||
"akzeptieren."
|
||||
|
||||
#: ../tgp-request.c:194
|
||||
#: ../tgp-request.c:182
|
||||
msgid ""
|
||||
"Invite at least one additional user by specifying\n"
|
||||
" their full name (autocompletion available).\n"
|
||||
"You can add more users once the chat was created."
|
||||
msgstr "Lade noch mindestens einen zusätzlichen Benutzer\ndurch Eingabe des vollständigen Namens ein\n(Autovervollständigung verfügbar).\nSie können später weitere Nutzer einladen, sobald\nder Chat erstellt wurde."
|
||||
msgstr ""
|
||||
"Lade noch mindestens einen zusätzlichen Benutzer\n"
|
||||
"durch Eingabe des vollständigen Namens ein\n"
|
||||
"(Autovervollständigung verfügbar).\n"
|
||||
"Sie können später weitere Nutzer einladen, sobald\n"
|
||||
"der Chat erstellt wurde."
|
||||
|
||||
#: ../tgp-request.c:210
|
||||
#: ../tgp-request.c:185 ../tgp-request.c:189 ../tgp-request.c:193
|
||||
msgid "Username"
|
||||
msgstr "Benutzername"
|
||||
|
||||
#: ../tgp-request.c:198
|
||||
msgid "Create group chat"
|
||||
msgstr "Gruppenchat erstellen"
|
||||
|
||||
#: ../tgp-request.c:210
|
||||
#: ../tgp-request.c:198
|
||||
msgid "Invite users"
|
||||
msgstr "Benutzer einladen"
|
||||
|
||||
#: ../tgp-request.c:229 ../tgp-request.c:244
|
||||
#: ../tgp-request.c:217 ../tgp-request.c:232
|
||||
msgid "Change password"
|
||||
msgstr "Passwort ändern"
|
||||
|
||||
#: ../tgp-request.c:231
|
||||
#: ../tgp-request.c:219
|
||||
msgid "Current"
|
||||
msgstr "Momentan"
|
||||
|
||||
#: ../tgp-request.c:235 ../tgp-request.c:265
|
||||
#: ../tgp-request.c:223 ../tgp-request.c:253
|
||||
msgid "Password"
|
||||
msgstr "Passwort"
|
||||
|
||||
#: ../tgp-request.c:239 ../tgp-request.c:269
|
||||
#: ../tgp-request.c:227 ../tgp-request.c:257
|
||||
msgid "Confirm"
|
||||
msgstr "Bestätigen"
|
||||
|
||||
#: ../tgp-request.c:263 ../tgp-request.c:274
|
||||
#: ../tgp-request.c:251 ../tgp-request.c:262
|
||||
msgid "New password"
|
||||
msgstr "Neues Passwort"
|
||||
|
||||
|
@ -429,58 +506,112 @@ msgstr "Neues Passwort"
|
|||
#. ask for the phone number directly, cause in that case the account would
|
||||
#. still be created
|
||||
#. named with the invalid phone number, even though the login will work
|
||||
#: ../tgp-request.c:312
|
||||
#: ../tgp-request.c:300
|
||||
msgid "Invalid phone number"
|
||||
msgstr "Ungültige Telefonnummer"
|
||||
|
||||
#: ../tgp-request.c:313
|
||||
#: ../tgp-request.c:301
|
||||
msgid ""
|
||||
"Please enter only numbers in the international phone number format, a leading + following by the country prefix and the phone number.\n"
|
||||
"Do not use any other special chars."
|
||||
msgstr "Bitte geben Sie Telefonnummern im internationalen Format ein, bestehend aus einem führenden + gefolgt vom Länderprefix\nund der Rufnummer. Verwenden Sie keine anderen Sonderzeichen."
|
||||
msgstr ""
|
||||
"Bitte geben Sie Telefonnummern im internationalen Format ein, bestehend aus einem führenden + gefolgt vom Länderpräfix\n"
|
||||
"und der Rufnummer. Verwenden Sie keine anderen Sonderzeichen."
|
||||
|
||||
#: ../tgp-request.c:370
|
||||
msgid "Leave Chat"
|
||||
msgstr "Chat verlassen"
|
||||
|
||||
#: ../tgp-request.c:372
|
||||
msgid "Do you want to leave this chat permantently?"
|
||||
msgstr "Möchten Sie diesen Chat dauerhaft verlassen?"
|
||||
|
||||
#: ../tgp-request.c:377
|
||||
msgid "Abort Secret Chat"
|
||||
msgstr "Geheimen Chat abbrechen"
|
||||
|
||||
#: ../tgp-request.c:379
|
||||
msgid "Do you want to terminate this secret chat permantently?"
|
||||
msgstr "Möchten Sie diesen geheimen Chat dauerhaft verlassen?"
|
||||
|
||||
#: ../tgp-request.c:384
|
||||
msgid "Delete Contact"
|
||||
msgstr "Kontakt löschen"
|
||||
|
||||
#: ../tgp-request.c:386
|
||||
msgid "Do you want to remove this user from your global contact list?"
|
||||
msgstr "Möchten Sie diesen Kontakt global löschen?"
|
||||
|
||||
#: ../tgp-request.c:401
|
||||
msgid "Leave Channel"
|
||||
msgstr "Kanal verlassen"
|
||||
|
||||
#: ../tgp-request.c:403
|
||||
msgid "Do you want to leave this channel?"
|
||||
msgstr "Möchten Sie diesen Kanal dauerhaft verlassen?"
|
||||
|
||||
#. This should be the language's timestamp format. This is preceded by a
|
||||
#. colon.
|
||||
#: ../tgp-utils.c:32
|
||||
#: ../tgp-utils.c:27
|
||||
msgid "%d.%m.%Y %H:%M"
|
||||
msgstr "%d.%m.%Y %H:%M"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:53
|
||||
#: ../tgp-utils.c:48
|
||||
msgid "recently"
|
||||
msgstr "Kürzlich"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:57
|
||||
#: ../tgp-utils.c:52
|
||||
msgid "last week"
|
||||
msgstr "Letzte Woche"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:61
|
||||
#: ../tgp-utils.c:56
|
||||
msgid "last month"
|
||||
msgstr "Letzten Monat"
|
||||
|
||||
#. This is preceded by a colon. It refers to a point on time.
|
||||
#: ../tgp-utils.c:65
|
||||
#: ../tgp-utils.c:60
|
||||
msgid "unknown"
|
||||
msgstr "Unbekannt"
|
||||
|
||||
#: ../tgp-chat.c:79
|
||||
#: ../tgp-chat.c:108 ../tgp-chat.c:582
|
||||
msgid "Telegram Chats"
|
||||
msgstr "Telegram Unterhaltugen"
|
||||
|
||||
#: ../tgp-chat.c:113
|
||||
msgid "You have already left this chat."
|
||||
msgstr "Du hast diesen Chat bereits verlassen."
|
||||
|
||||
#: ../tgp-chat.c:127
|
||||
#: ../tgp-chat.c:224
|
||||
msgid "Subject:"
|
||||
msgstr "Thema:"
|
||||
|
||||
#: ../tgp-chat.c:133
|
||||
#: ../tgp-chat.c:230
|
||||
msgid "Invite link:"
|
||||
msgstr "Einladungslink:"
|
||||
|
||||
#: ../tgp-chat.c:139
|
||||
#: ../tgp-chat.c:236
|
||||
msgid "Chat ID:"
|
||||
msgstr "Chat ID:"
|
||||
|
||||
#: ../tgp-chat.c:238
|
||||
#: ../tgp-chat.c:342
|
||||
msgid "Supergroup"
|
||||
msgstr "Über-Gruppe"
|
||||
|
||||
#: ../tgp-chat.c:342
|
||||
msgid "Channel"
|
||||
msgstr "Kanal"
|
||||
|
||||
#: ../tgp-chat.c:345
|
||||
msgid "Group"
|
||||
msgstr "Gruppe"
|
||||
|
||||
#: ../tgp-chat.c:367
|
||||
msgid "Users in chat"
|
||||
msgstr "Benutzer im Chat"
|
||||
|
||||
#: ../tgp-chat.c:370
|
||||
msgid "Type"
|
||||
msgstr "Typ"
|
||||
|
|
615
po/es.po
Normal file
615
po/es.po
Normal file
|
@ -0,0 +1,615 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-08-31 22:53+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: aguador <aguador@openmailbox.org>, 2017\n"
|
||||
"Language-Team: Spanish (https://www.transifex.com/telegram-purple-developers/teams/53149/es/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: es\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: ../telegram-base.c:500
|
||||
msgid "Couldn't create group"
|
||||
msgstr "No se pudo crear el grupo"
|
||||
|
||||
#: ../telegram-base.c:501
|
||||
msgid "Please select at least one other user."
|
||||
msgstr "Por favor, seleccioná al menos otro usuario."
|
||||
|
||||
#: ../telegram-base.c:555
|
||||
msgid "Query Failed"
|
||||
msgstr "Falló la consulta"
|
||||
|
||||
#: ../telegram-purple.c:162
|
||||
msgid "Secret chat ready."
|
||||
msgstr "Conversación secreta lista."
|
||||
|
||||
#: ../telegram-purple.c:170
|
||||
msgid "Secret chat terminated."
|
||||
msgstr "Finalizó la conversación secreta."
|
||||
|
||||
#: ../telegram-purple.c:182
|
||||
msgid "Telegram"
|
||||
msgstr "Telegram"
|
||||
|
||||
#: ../telegram-purple.c:229
|
||||
msgid "Message marked as read."
|
||||
msgstr "Mensaje marcado como leído."
|
||||
|
||||
#: ../telegram-purple.c:339
|
||||
#, c-format
|
||||
msgid "Invite link: %s"
|
||||
msgstr "Enlace de invitación: %s"
|
||||
|
||||
#. FIXME: Can TGLCHF_MODERATOR export links?
|
||||
#: ../telegram-purple.c:350
|
||||
msgid "Creating chat link failed"
|
||||
msgstr "Falló la creación del enlace de converesación"
|
||||
|
||||
#: ../telegram-purple.c:351
|
||||
msgid "You need to be admin of the group to do that."
|
||||
msgstr "Necesite ser administrador del grupo para hacer eso."
|
||||
|
||||
#: ../telegram-purple.c:416
|
||||
msgid "Chat joined"
|
||||
msgstr "Unido a la conversación"
|
||||
|
||||
#: ../telegram-purple.c:417
|
||||
msgid "Chat added to list of chat rooms."
|
||||
msgstr "Conversación agregada a la lista de salas de conversaciones."
|
||||
|
||||
#: ../telegram-purple.c:443
|
||||
msgid "Start secret chat..."
|
||||
msgstr "Iniciar conversación secreta..."
|
||||
|
||||
#. Generate Public Link
|
||||
#: ../telegram-purple.c:450
|
||||
msgid "Invite users by link..."
|
||||
msgstr "Invitar a usuarios por enlace..."
|
||||
|
||||
#. Delete self from chat
|
||||
#: ../telegram-purple.c:458
|
||||
msgid "Delete and exit..."
|
||||
msgstr "Eliminar y salir..."
|
||||
|
||||
#: ../telegram-purple.c:546
|
||||
#, c-format
|
||||
msgid "Unable to sign on as %s: file (public key) not found."
|
||||
msgstr ""
|
||||
"No se pudo iniciar sesión como %s: no se encontró el archivo (clave "
|
||||
"pública)."
|
||||
|
||||
#: ../telegram-purple.c:550
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Make sure telegram-purple is installed properly,\n"
|
||||
"including the .tglpub file.\n"
|
||||
"If you're running SELinux (e.g. when using Tails),\n"
|
||||
"try 'make local_install', or simply copy\n"
|
||||
"%1$s to %2$s."
|
||||
msgstr ""
|
||||
"Asegurarse de que telegram-purple está instalado apropiadamente,\n"
|
||||
"incluyendo el archivo .tglpub.\n"
|
||||
"Si esta ejecutando SELinux (por ejemplo, al usar Tails),\n"
|
||||
"intente probar 'make local_install', o simplemente copie\n"
|
||||
"%1$s a %2$s."
|
||||
|
||||
#: ../telegram-purple.c:572
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Unable to sign on as %s: problem in the underlying library 'tgl'. Please "
|
||||
"submit a bug report with the debug log."
|
||||
msgstr ""
|
||||
"No se pudo iniciar sesión como %s: problema con la biblioteca 'tgl'. Por "
|
||||
"favor, envíe un informe de error con el registro de depuración."
|
||||
|
||||
#: ../telegram-purple.c:576
|
||||
msgid "Problem in tgl"
|
||||
msgstr "Problema en tgl"
|
||||
|
||||
#. TRANSLATORS: Please fill in your own prefix!
|
||||
#: ../telegram-purple.c:584
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Unable to sign on as %s: phone number lacks country prefix. Numbers must "
|
||||
"start with the full international prefix code, e.g. +1 for USA."
|
||||
msgstr ""
|
||||
"No se pudo iniciar sesión como %s: al número de teléfono le falta el prefijo"
|
||||
" del país. Los números deben comenzar con el código de prefijo "
|
||||
"internacional, por ejemplo: +34 para España."
|
||||
|
||||
#: ../telegram-purple.c:589
|
||||
msgid "Incomplete phone number"
|
||||
msgstr "Número de teléfono incompleto"
|
||||
|
||||
#: ../telegram-purple.c:642
|
||||
msgid "Secret chat was already deleted"
|
||||
msgstr "Ya se eliminó la conversación secreta"
|
||||
|
||||
#: ../telegram-purple.c:644
|
||||
msgid "Secret chat is not ready"
|
||||
msgstr "La conversación secreta no está lista"
|
||||
|
||||
#: ../telegram-purple.c:652
|
||||
msgid "Only the creator of a channel can post messages."
|
||||
msgstr "Sólo el creador de un canal puede publicar mensajes."
|
||||
|
||||
#: ../telegram-purple.c:695
|
||||
msgid "Cannot invite buddy to chat"
|
||||
msgstr "No se pudo invitar al contacto a la conversación"
|
||||
|
||||
#: ../telegram-purple.c:696
|
||||
msgid "Specified user does not exist."
|
||||
msgstr "El usuario especificado no existe."
|
||||
|
||||
#: ../telegram-purple.c:709
|
||||
msgid "phone no. (+ country prefix)"
|
||||
msgstr "Núm. tlf. (+ prefijo país)"
|
||||
|
||||
#. Login
|
||||
#: ../telegram-purple.c:817
|
||||
msgid "Password (two factor authentication)"
|
||||
msgstr "Contraseña (autenticación de dos pasos)"
|
||||
|
||||
#: ../telegram-purple.c:822
|
||||
msgid ""
|
||||
"Fallback SMS verification\n"
|
||||
"(Helps when not using Pidgin and you aren't being prompted for the code)"
|
||||
msgstr ""
|
||||
"Verificación por mensaje de texto\n"
|
||||
"(Sirve para cuando no está usando Pidgin y no se le pido el código)"
|
||||
|
||||
#: ../telegram-purple.c:828
|
||||
msgid "always"
|
||||
msgstr "siempre"
|
||||
|
||||
#: ../telegram-purple.c:829
|
||||
msgid "never"
|
||||
msgstr "nunca"
|
||||
|
||||
#: ../telegram-purple.c:830
|
||||
msgid "ask"
|
||||
msgstr "pedir"
|
||||
|
||||
#: ../telegram-purple.c:832
|
||||
msgid "Accept secret chats"
|
||||
msgstr "Aceptar conversaciones secretas"
|
||||
|
||||
#: ../telegram-purple.c:836
|
||||
msgid "Display buddies offline after (days)"
|
||||
msgstr "Mostrar contactos desconectados después de (días)"
|
||||
|
||||
#: ../telegram-purple.c:840
|
||||
msgid ""
|
||||
"Don't fetch history older than (days)\n"
|
||||
"(0 for unlimited)"
|
||||
msgstr ""
|
||||
"No recuperar el historial anterior a (días)\n"
|
||||
"(introducir '0' para no aplicar límites)"
|
||||
|
||||
#. Media
|
||||
#: ../telegram-purple.c:845
|
||||
msgid "Autoload media size (kb)"
|
||||
msgstr "Tamaño del medio de carga automático (kb)"
|
||||
|
||||
#. Chats
|
||||
#: ../telegram-purple.c:850
|
||||
msgid "Add all group chats to buddy list"
|
||||
msgstr "Agregar todas las conversaciones grupales a la lista del contacto"
|
||||
|
||||
#. Read notifications
|
||||
#: ../telegram-purple.c:855
|
||||
msgid "Display notices of receipt"
|
||||
msgstr "Mostrar acuses de recibo"
|
||||
|
||||
#: ../telegram-purple.c:859
|
||||
msgid "Send notices of receipt when present"
|
||||
msgstr "Enviar acuses de recibo al estar presente"
|
||||
|
||||
#: ../telegram-purple.c:884
|
||||
msgid "Telegram Protocol Plugin."
|
||||
msgstr "Plugin de protocolo de Telegram."
|
||||
|
||||
#: ../tgp-msg.c:58
|
||||
#, c-format
|
||||
msgid "%2$s created chat %1$s."
|
||||
msgstr "%2$s creó la conversación %1$s."
|
||||
|
||||
#: ../tgp-msg.c:61
|
||||
#, c-format
|
||||
msgid "%2$s changed title to %1$s."
|
||||
msgstr "%2$s cambió el título a %1$s."
|
||||
|
||||
#: ../tgp-msg.c:64
|
||||
#, c-format
|
||||
msgid "%s changed photo."
|
||||
msgstr "%s cambió la foto."
|
||||
|
||||
#: ../tgp-msg.c:67
|
||||
#, c-format
|
||||
msgid "%s deleted photo."
|
||||
msgstr "%s eliminó la foto."
|
||||
|
||||
#: ../tgp-msg.c:75
|
||||
#, c-format
|
||||
msgid "%1$s added user %2$s by link."
|
||||
msgstr "%1$s agregó al usuario %2$s mediante un enlace."
|
||||
|
||||
#: ../tgp-msg.c:90
|
||||
#, c-format
|
||||
msgid "%2$s added user %1$s."
|
||||
msgstr "%2$s agregó al usuario %1$s."
|
||||
|
||||
#: ../tgp-msg.c:114 ../tgp-msg.c:131
|
||||
#, c-format
|
||||
msgid "%2$s deleted user %1$s."
|
||||
msgstr "%2$s eliminó al usuario %1$s."
|
||||
|
||||
#: ../tgp-msg.c:138
|
||||
#, c-format
|
||||
msgid "%2$s set self destruction timer to %1$d second."
|
||||
msgid_plural "%2$s set self destruction timer to %1$d seconds."
|
||||
msgstr[0] "%2$s estableció un temporizador autodestructivo a %1$d segundo."
|
||||
msgstr[1] "%2$s estableció un temporizador autodestructivo a %1$d segundos."
|
||||
|
||||
#: ../tgp-msg.c:144
|
||||
#, c-format
|
||||
msgid "%2$s marked %1$d message read."
|
||||
msgid_plural "%2$s marked %1$d messages read."
|
||||
msgstr[0] "%2$s marcó %1$d mensaje como leído."
|
||||
msgstr[1] "%2$s marcó %1$d mensajes como leídos."
|
||||
|
||||
#: ../tgp-msg.c:150
|
||||
#, c-format
|
||||
msgid "%2$s deleted %1$d message."
|
||||
msgid_plural "%2$s deleted %1$d messages."
|
||||
msgstr[0] "%2$s eliminó %1$d mensaje."
|
||||
msgstr[1] "%2$s eliminó %1$d mensajes."
|
||||
|
||||
#: ../tgp-msg.c:156
|
||||
#, c-format
|
||||
msgid "%2$s made a screenshot of %1$d message."
|
||||
msgid_plural "%2$s made a screenshot of %1$d messages."
|
||||
msgstr[0] "%2$s tomó una captura de pantalla de %1$d mensaje."
|
||||
msgstr[1] "%2$s tomó una captura de pantalla de %1$d mensajes."
|
||||
|
||||
#: ../tgp-msg.c:162
|
||||
#, c-format
|
||||
msgid "Channel %1$s created"
|
||||
msgstr "Canal %1$s creado"
|
||||
|
||||
#. FIXME: check if this makes sense
|
||||
#: ../tgp-msg.c:165 ../tgp-chat.c:124 ../tgp-chat.c:576
|
||||
msgid "Telegram Channels"
|
||||
msgstr "Canales de Telegram"
|
||||
|
||||
#: ../tgp-msg.c:191
|
||||
msgid "Sending message failed."
|
||||
msgstr "Falló el envío de mensajes."
|
||||
|
||||
#: ../tgp-msg.c:253
|
||||
msgid "Sending image failed."
|
||||
msgstr "Falló el envío de imágenes."
|
||||
|
||||
#: ../tgp-msg.c:417
|
||||
#, c-format
|
||||
msgid "%s sent a sticker."
|
||||
msgstr "%s envió un sticker."
|
||||
|
||||
#: ../tgp-msg.c:463
|
||||
msgid "failed loading message"
|
||||
msgstr "falló la carga del mensaje"
|
||||
|
||||
#: ../tgp-msg.c:498
|
||||
msgid "[animation]"
|
||||
msgstr "[animación]"
|
||||
|
||||
#: ../tgp-msg.c:515
|
||||
msgid "[audio]"
|
||||
msgstr "[audio]"
|
||||
|
||||
#: ../tgp-msg.c:515
|
||||
msgid "[video]"
|
||||
msgstr "[vídeo]"
|
||||
|
||||
#: ../tgp-msg.c:604
|
||||
#, c-format
|
||||
msgid "<b>Forwarded message from: %s</b><br>%s"
|
||||
msgstr "<b>Mensaje reenviado de: %s</b><br>%s"
|
||||
|
||||
#. FIXME: sometimes users aren't part of the response when receiving a
|
||||
#. forwarded message
|
||||
#: ../tgp-msg.c:607
|
||||
#, c-format
|
||||
msgid "<b>Forwarded message:</b><br>%s"
|
||||
msgstr "<b>Mensaje reenviado:</b><br>%s"
|
||||
|
||||
#: ../tgp-msg.c:720
|
||||
msgid "loading document or picture failed"
|
||||
msgstr "falló la carga del documento o imagen"
|
||||
|
||||
#: ../tgp-net.c:281
|
||||
msgid "Cannot connect to main server"
|
||||
msgstr "No se puede conectar al servidor principal"
|
||||
|
||||
#: ../tgp-net.c:322
|
||||
msgid "Cannot connect to server: Ping timeout."
|
||||
msgstr "No se puede conectar al servidor: tiempo de espera agotado."
|
||||
|
||||
#: ../tgp-net.c:365
|
||||
msgid "Lost connection to the server..."
|
||||
msgstr "Se perdió la conexión con el servidor..."
|
||||
|
||||
#: ../tgp-request.c:51
|
||||
msgid ""
|
||||
"Telegram wants to verify your identity. Please enter the login code that you"
|
||||
" have received via SMS."
|
||||
msgstr ""
|
||||
"Telegram quiere verificar su identidad. Por favor, introduce el código que "
|
||||
"recibió en un mensaje de texto."
|
||||
|
||||
#: ../tgp-request.c:54
|
||||
msgid "Login code"
|
||||
msgstr "Código de inicio de sesión"
|
||||
|
||||
#: ../tgp-request.c:54
|
||||
msgid "Enter login code"
|
||||
msgstr "Intoducir código de inicio de sesión"
|
||||
|
||||
#: ../tgp-request.c:54
|
||||
msgid "the code"
|
||||
msgstr "el código"
|
||||
|
||||
#: ../tgp-request.c:54 ../tgp-request.c:104 ../tgp-request.c:198
|
||||
#: ../tgp-request.c:233 ../tgp-request.c:263
|
||||
msgid "OK"
|
||||
msgstr "Aceptar"
|
||||
|
||||
#: ../tgp-request.c:55 ../tgp-request.c:104 ../tgp-request.c:123
|
||||
#: ../tgp-request.c:199 ../tgp-request.c:234 ../tgp-request.c:264
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
#: ../tgp-request.c:95
|
||||
msgid "Registration"
|
||||
msgstr "Registro"
|
||||
|
||||
#: ../tgp-request.c:96
|
||||
msgid "First name"
|
||||
msgstr "Nombre"
|
||||
|
||||
#: ../tgp-request.c:99
|
||||
msgid "Last name"
|
||||
msgstr "Apellido"
|
||||
|
||||
#: ../tgp-request.c:103
|
||||
msgid "Register"
|
||||
msgstr "Registrar"
|
||||
|
||||
#: ../tgp-request.c:103
|
||||
msgid "Please register your phone number."
|
||||
msgstr "Por favor, registre su número de teléfono."
|
||||
|
||||
#. purple_request API not available
|
||||
#: ../tgp-request.c:108
|
||||
msgid ""
|
||||
"Phone number is not registered. Please register your phone on a different "
|
||||
"client."
|
||||
msgstr ""
|
||||
"No se registró el número de teléfono. Por favor, registre su teléfono en un "
|
||||
"cliente diferente."
|
||||
|
||||
#: ../tgp-request.c:110
|
||||
msgid "Not registered"
|
||||
msgstr "No registrado"
|
||||
|
||||
#: ../tgp-request.c:122
|
||||
msgid "Password needed"
|
||||
msgstr "Se necesita la contraseña"
|
||||
|
||||
#: ../tgp-request.c:122
|
||||
msgid "Enter password for two factor authentication"
|
||||
msgstr "Introducir contraseña para la autenticación de dos pasos"
|
||||
|
||||
#: ../tgp-request.c:123
|
||||
msgid "Ok"
|
||||
msgstr "Aceptar"
|
||||
|
||||
#: ../tgp-request.c:125
|
||||
msgid ""
|
||||
"No password set for two factor authentication. Please enter it in the "
|
||||
"extended settings."
|
||||
msgstr ""
|
||||
"No se estableció contraseña para la autenticación de dos pasos. Por favor, "
|
||||
"introdúcela en la configuración extendida."
|
||||
|
||||
#: ../tgp-request.c:127
|
||||
msgid "Password invalid"
|
||||
msgstr "Contraseña no válida"
|
||||
|
||||
#: ../tgp-request.c:150
|
||||
#, c-format
|
||||
msgid "Accept secret chat '%s' on this device?"
|
||||
msgstr "¿Acepte la conversación secreta '%s' en este dispositivo?"
|
||||
|
||||
#: ../tgp-request.c:151
|
||||
msgid "Secret chat"
|
||||
msgstr "Conversación secreta"
|
||||
|
||||
#: ../tgp-request.c:151
|
||||
msgid ""
|
||||
"Secret chats can only have one end point. If you accept a secret chat on "
|
||||
"this device, its messages will not be available anywhere else. If you "
|
||||
"decline, you can still accept the chat on other devices."
|
||||
msgstr ""
|
||||
"Las conversaciones secretas son uno a uno. Si acepte una conversación "
|
||||
"secreta en este dispositivo, la misma no estará disponible en ningún otro "
|
||||
"lado. Si decline, pueda aceptar la conversación en otro dispositivo."
|
||||
|
||||
#: ../tgp-request.c:182
|
||||
msgid ""
|
||||
"Invite at least one additional user by specifying\n"
|
||||
" their full name (autocompletion available).\n"
|
||||
"You can add more users once the chat was created."
|
||||
msgstr ""
|
||||
"Invite al menos a un usuario más especificando\n"
|
||||
"su nombre completo (disponible autocompletado).\n"
|
||||
"Pueda agregar más usuarios una vez que se cree la conversación."
|
||||
|
||||
#: ../tgp-request.c:185 ../tgp-request.c:189 ../tgp-request.c:193
|
||||
msgid "Username"
|
||||
msgstr "Nombre de usuario"
|
||||
|
||||
#: ../tgp-request.c:198
|
||||
msgid "Create group chat"
|
||||
msgstr "Crear conversación grupal"
|
||||
|
||||
#: ../tgp-request.c:198
|
||||
msgid "Invite users"
|
||||
msgstr "Invitar a los usuarios"
|
||||
|
||||
#: ../tgp-request.c:217 ../tgp-request.c:232
|
||||
msgid "Change password"
|
||||
msgstr "Cambiar contraseña"
|
||||
|
||||
#: ../tgp-request.c:219
|
||||
msgid "Current"
|
||||
msgstr "Actual"
|
||||
|
||||
#: ../tgp-request.c:223 ../tgp-request.c:253
|
||||
msgid "Password"
|
||||
msgstr "Contraseña"
|
||||
|
||||
#: ../tgp-request.c:227 ../tgp-request.c:257
|
||||
msgid "Confirm"
|
||||
msgstr "Confirmar"
|
||||
|
||||
#: ../tgp-request.c:251 ../tgp-request.c:262
|
||||
msgid "New password"
|
||||
msgstr "Nueva contraseña"
|
||||
|
||||
#. if we arrive here for the second time the specified phone number is not
|
||||
#. valid. We do not
|
||||
#. ask for the phone number directly, cause in that case the account would
|
||||
#. still be created
|
||||
#. named with the invalid phone number, even though the login will work
|
||||
#: ../tgp-request.c:300
|
||||
msgid "Invalid phone number"
|
||||
msgstr "Número de teléfono no válido"
|
||||
|
||||
#: ../tgp-request.c:301
|
||||
msgid ""
|
||||
"Please enter only numbers in the international phone number format, a leading + following by the country prefix and the phone number.\n"
|
||||
"Do not use any other special chars."
|
||||
msgstr ""
|
||||
"Por favor, introduce sólo números en el formato de números de teléfono internacional, con el signo '+' seguido del código de país [más prefijo para el acceso a la red celular, si corresponde] y el número de teléfono.\n"
|
||||
"No use ningún otro carácter."
|
||||
|
||||
#: ../tgp-request.c:370
|
||||
msgid "Leave Chat"
|
||||
msgstr "Abandonar conversación"
|
||||
|
||||
#: ../tgp-request.c:372
|
||||
msgid "Do you want to leave this chat permantently?"
|
||||
msgstr "¿Querés abandonar esta conversación permanentemente?"
|
||||
|
||||
#: ../tgp-request.c:377
|
||||
msgid "Abort Secret Chat"
|
||||
msgstr "Cancelar conversación secreta"
|
||||
|
||||
#: ../tgp-request.c:379
|
||||
msgid "Do you want to terminate this secret chat permantently?"
|
||||
msgstr ""
|
||||
"¿Esté seguro que quiere eliminar esta conversación secreta permanentemente?"
|
||||
|
||||
#: ../tgp-request.c:384
|
||||
msgid "Delete Contact"
|
||||
msgstr "Eliminar contacto"
|
||||
|
||||
#: ../tgp-request.c:386
|
||||
msgid "Do you want to remove this user from your global contact list?"
|
||||
msgstr "¿Quiere quitar este usuario de su lista global de contactos?"
|
||||
|
||||
#: ../tgp-request.c:401
|
||||
msgid "Leave Channel"
|
||||
msgstr "Abandonar canal"
|
||||
|
||||
#: ../tgp-request.c:403
|
||||
msgid "Do you want to leave this channel?"
|
||||
msgstr "¿Quiere abandonar este canal?"
|
||||
|
||||
#. This should be the language's timestamp format. This is preceded by a
|
||||
#. colon.
|
||||
#: ../tgp-utils.c:27
|
||||
msgid "%d.%m.%Y %H:%M"
|
||||
msgstr "%d.%m.%Y - %H:%M"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:48
|
||||
msgid "recently"
|
||||
msgstr "recientemente"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:52
|
||||
msgid "last week"
|
||||
msgstr "la semana pasada"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:56
|
||||
msgid "last month"
|
||||
msgstr "el mes pasado"
|
||||
|
||||
#. This is preceded by a colon. It refers to a point on time.
|
||||
#: ../tgp-utils.c:60
|
||||
msgid "unknown"
|
||||
msgstr "desconocido"
|
||||
|
||||
#: ../tgp-chat.c:108 ../tgp-chat.c:582
|
||||
msgid "Telegram Chats"
|
||||
msgstr "Conversaciones de Telegram"
|
||||
|
||||
#: ../tgp-chat.c:113
|
||||
msgid "You have already left this chat."
|
||||
msgstr "Ya ha abandonado esta conversación."
|
||||
|
||||
#: ../tgp-chat.c:224
|
||||
msgid "Subject:"
|
||||
msgstr "Asunto:"
|
||||
|
||||
#: ../tgp-chat.c:230
|
||||
msgid "Invite link:"
|
||||
msgstr "Enlace de invitación:"
|
||||
|
||||
#: ../tgp-chat.c:236
|
||||
msgid "Chat ID:"
|
||||
msgstr "Identificación de conversación:"
|
||||
|
||||
#: ../tgp-chat.c:342
|
||||
msgid "Supergroup"
|
||||
msgstr "Súpergrupo"
|
||||
|
||||
#: ../tgp-chat.c:342
|
||||
msgid "Channel"
|
||||
msgstr "Canal"
|
||||
|
||||
#: ../tgp-chat.c:345
|
||||
msgid "Group"
|
||||
msgstr "Grupo"
|
||||
|
||||
#: ../tgp-chat.c:367
|
||||
msgid "Users in chat"
|
||||
msgstr "Usuarios en la conversación"
|
||||
|
||||
#: ../tgp-chat.c:370
|
||||
msgid "Type"
|
||||
msgstr "Tipo"
|
477
po/es_AR.po
477
po/es_AR.po
|
@ -1,88 +1,95 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
# Translators:
|
||||
# KNTRO <tskuhn@gmail.com>, 2015
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: telegram-purple\n"
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2015-11-21 14:37+0100\n"
|
||||
"PO-Revision-Date: 2015-12-18 17:23+0000\n"
|
||||
"Last-Translator: KNTRO <tskuhn@gmail.com>\n"
|
||||
"Language-Team: Spanish (Argentina) (http://www.transifex.com/telegram-purple-developers/telegram-purple/language/es_AR/)\n"
|
||||
"POT-Creation-Date: 2016-08-31 22:53+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: KNTRO <kntro@msn.com>, 2016\n"
|
||||
"Language-Team: Spanish (Argentina) (https://www.transifex.com/telegram-purple-developers/teams/53149/es_AR/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: es_AR\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: ../telegram-base.c:515
|
||||
#: ../telegram-base.c:500
|
||||
msgid "Couldn't create group"
|
||||
msgstr "No se pudo crear el grupo"
|
||||
|
||||
#: ../telegram-base.c:515
|
||||
#: ../telegram-base.c:501
|
||||
msgid "Please select at least one other user."
|
||||
msgstr "Por favor, seleccioná al menos otro usuario."
|
||||
|
||||
#: ../telegram-base.c:570
|
||||
#: ../telegram-base.c:555
|
||||
msgid "Query Failed"
|
||||
msgstr "Falló la consulta"
|
||||
|
||||
#: ../telegram-purple.c:193
|
||||
#: ../telegram-purple.c:162
|
||||
msgid "Secret chat ready."
|
||||
msgstr "Conversación secreta lista."
|
||||
|
||||
#: ../telegram-purple.c:200
|
||||
#: ../telegram-purple.c:170
|
||||
msgid "Secret chat terminated."
|
||||
msgstr "Finalizó la conversación secreta."
|
||||
|
||||
#: ../telegram-purple.c:268
|
||||
#: ../telegram-purple.c:182
|
||||
msgid "Telegram"
|
||||
msgstr "Telegram"
|
||||
|
||||
#: ../telegram-purple.c:229
|
||||
msgid "Message marked as read."
|
||||
msgstr "Mensaje marcado como leído."
|
||||
|
||||
#: ../telegram-purple.c:486
|
||||
#: ../telegram-purple.c:339
|
||||
#, c-format
|
||||
msgid "Invite link: %s"
|
||||
msgstr "Enlace de invitación: %s"
|
||||
|
||||
#: ../telegram-purple.c:506 ../telegram-purple.c:507
|
||||
#. FIXME: Can TGLCHF_MODERATOR export links?
|
||||
#: ../telegram-purple.c:350
|
||||
msgid "Creating chat link failed"
|
||||
msgstr "Falló la creación del enlace de conversación"
|
||||
|
||||
#: ../telegram-purple.c:508
|
||||
#: ../telegram-purple.c:351
|
||||
msgid "You need to be admin of the group to do that."
|
||||
msgstr "Necesitás ser administrador del grupo para hacer eso."
|
||||
|
||||
#: ../telegram-purple.c:531
|
||||
#: ../telegram-purple.c:416
|
||||
msgid "Chat joined"
|
||||
msgstr "Unido a la conversación"
|
||||
|
||||
#: ../telegram-purple.c:532
|
||||
#: ../telegram-purple.c:417
|
||||
msgid "Chat added to list of chat rooms."
|
||||
msgstr "Conversación agregada a la lista de salas de conversaciones."
|
||||
|
||||
#: ../telegram-purple.c:552
|
||||
#: ../telegram-purple.c:443
|
||||
msgid "Start secret chat..."
|
||||
msgstr "Iniciar conversación secreta"
|
||||
msgstr "Iniciar conversación secreta..."
|
||||
|
||||
#. Generate Public Link
|
||||
#: ../telegram-purple.c:558
|
||||
#: ../telegram-purple.c:450
|
||||
msgid "Invite users by link..."
|
||||
msgstr "Invitar a usuarios por enlace"
|
||||
msgstr "Invitar a usuarios por enlace..."
|
||||
|
||||
#. Delete self from chat
|
||||
#: ../telegram-purple.c:564
|
||||
#: ../telegram-purple.c:458
|
||||
msgid "Delete and exit..."
|
||||
msgstr "Eliminar y salir…"
|
||||
msgstr "Eliminar y salir..."
|
||||
|
||||
#: ../telegram-purple.c:632
|
||||
#: ../telegram-purple.c:546
|
||||
#, c-format
|
||||
msgid "Unable to sign on as %s: pubkey not found."
|
||||
msgstr "No se pudo iniciar sesión como %s: no se encontró la clave pública."
|
||||
msgid "Unable to sign on as %s: file (public key) not found."
|
||||
msgstr ""
|
||||
"No se pudo iniciar sesión como %s: no se encontró el archivo (clave "
|
||||
"pública)."
|
||||
|
||||
#: ../telegram-purple.c:636
|
||||
#: ../telegram-purple.c:550
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Make sure telegram-purple is installed properly,\n"
|
||||
|
@ -90,336 +97,405 @@ msgid ""
|
|||
"If you're running SELinux (e.g. when using Tails),\n"
|
||||
"try 'make local_install', or simply copy\n"
|
||||
"%1$s to %2$s."
|
||||
msgstr "Asegurate de que telegram-purple está instalado apropiadamente,\nincluyendo el archivo .tglpub.\nSi estás ejecutando SELinux (por ejemplo, al usar Tails),\nintentá probar \"make local:_install\", o simplemente copiá\n%1$s a %2$s."
|
||||
msgstr ""
|
||||
"Asegurate de que telegram-purple está instalado apropiadamente,\n"
|
||||
"incluyendo el archivo .tglpub.\n"
|
||||
"Si estás ejecutando SELinux (por ejemplo, al usar Tails),\n"
|
||||
"intentá probar \"make local:_install\", o simplemente copiá\n"
|
||||
"%1$s a %2$s."
|
||||
|
||||
#: ../telegram-purple.c:657
|
||||
#: ../telegram-purple.c:572
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Unable to sign on as %s: problem in the underlying library 'tgl'. Please "
|
||||
"submit a bug report with the debug log."
|
||||
msgstr ""
|
||||
"No se pudo iniciar sesión como %s: hay un problema con la biblioteca "
|
||||
"\"tgl\". Por favor, enviá un informe de errores con el registro de "
|
||||
"depuración."
|
||||
|
||||
#: ../telegram-purple.c:576
|
||||
msgid "Problem in tgl"
|
||||
msgstr "Problema en tgl"
|
||||
|
||||
#. TRANSLATORS: Please fill in your own prefix!
|
||||
#: ../telegram-purple.c:584
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Unable to sign on as %s: phone number lacks country prefix. Numbers must "
|
||||
"start with the full international prefix code, e.g. +49 for Germany."
|
||||
msgstr "No se pudo iniciar sesión como %s: al número de teléfono le falta el prefijo del país. Los números deben comenzar con el código de prefijo internacional, por ejemplo: +54 para Argentina."
|
||||
"start with the full international prefix code, e.g. +1 for USA."
|
||||
msgstr ""
|
||||
"No se pudo iniciar sesión como %s: al número de teléfono le falta el prefijo"
|
||||
" del país. Los números deben comenzar con el código de prefijo "
|
||||
"internacional, por ejemplo: +54 para Argentina."
|
||||
|
||||
#: ../telegram-purple.c:662
|
||||
#: ../telegram-purple.c:589
|
||||
msgid "Incomplete phone number"
|
||||
msgstr "Número de teléfono incompleto"
|
||||
|
||||
#: ../telegram-purple.c:788 ../telegram-purple.c:789
|
||||
#: ../telegram-purple.c:642
|
||||
msgid "Secret chat was already deleted"
|
||||
msgstr "Ya se eliminó la conversación secreta"
|
||||
|
||||
#: ../telegram-purple.c:644
|
||||
msgid "Secret chat is not ready"
|
||||
msgstr "La conversación secreta no está lista"
|
||||
|
||||
#: ../telegram-purple.c:652
|
||||
msgid "Only the creator of a channel can post messages."
|
||||
msgstr "Sólo el creador de un canal puede publicar mensajes."
|
||||
|
||||
#: ../telegram-purple.c:695
|
||||
msgid "Cannot invite buddy to chat"
|
||||
msgstr "No se pudo invitar al contacto a la conversación"
|
||||
|
||||
#: ../telegram-purple.c:790
|
||||
#: ../telegram-purple.c:696
|
||||
msgid "Specified user does not exist."
|
||||
msgstr "El usuario especificado no existe."
|
||||
|
||||
#: ../telegram-purple.c:709
|
||||
msgid "phone no. (+ country prefix)"
|
||||
msgstr "Número de teléfono (+ prefijo de país)"
|
||||
|
||||
#. Login
|
||||
#: ../telegram-purple.c:932
|
||||
#: ../telegram-purple.c:817
|
||||
msgid "Password (two factor authentication)"
|
||||
msgstr "Contraseña (autenticación de 2 pasos)"
|
||||
|
||||
#: ../telegram-purple.c:938
|
||||
#: ../telegram-purple.c:822
|
||||
msgid ""
|
||||
"Fallback SMS verification\n"
|
||||
"(Helps when not using Pidgin and you aren't being prompted for the code)"
|
||||
msgstr "Verificación por mensaje de texto\n(Sirve para cuando no estás usando Pidgin y no se te pide el código)"
|
||||
msgstr ""
|
||||
"Verificación por mensaje de texto\n"
|
||||
"(Sirve para cuando no estás usando Pidgin y no se te pide el código)"
|
||||
|
||||
#: ../telegram-purple.c:946
|
||||
msgid "ask"
|
||||
msgstr "pedir"
|
||||
|
||||
#: ../telegram-purple.c:947
|
||||
#: ../telegram-purple.c:828
|
||||
msgid "always"
|
||||
msgstr "siempre"
|
||||
|
||||
#: ../telegram-purple.c:948
|
||||
#: ../telegram-purple.c:829
|
||||
msgid "never"
|
||||
msgstr "nunca"
|
||||
|
||||
#: ../telegram-purple.c:950
|
||||
#: ../telegram-purple.c:830
|
||||
msgid "ask"
|
||||
msgstr "preguntar"
|
||||
|
||||
#: ../telegram-purple.c:832
|
||||
msgid "Accept secret chats"
|
||||
msgstr "Aceptar conversaciones secretas"
|
||||
|
||||
#: ../telegram-purple.c:955
|
||||
#: ../telegram-purple.c:836
|
||||
msgid "Display buddies offline after (days)"
|
||||
msgstr "Mostrar contactos desconectados después de (días)"
|
||||
|
||||
#: ../telegram-purple.c:960
|
||||
msgid "Fetch past history on first login"
|
||||
msgstr "Recuperar historial en el primer inicio de sesión"
|
||||
|
||||
#: ../telegram-purple.c:965
|
||||
#: ../telegram-purple.c:840
|
||||
msgid ""
|
||||
"Don't fetch history older than (days)\n"
|
||||
"(0 for unlimited)"
|
||||
msgstr "No recuperar el historial anterior a (días)\n(ingresá \"0\" para no aplicar límites)"
|
||||
msgstr ""
|
||||
"No recuperar el historial anterior a (días)\n"
|
||||
"(ingresá \"0\" para no aplicar límites)"
|
||||
|
||||
#. Media
|
||||
#: ../telegram-purple.c:845
|
||||
msgid "Autoload media size (kb)"
|
||||
msgstr "Tamaño de medio de descarga automática (kb)"
|
||||
|
||||
#. Chats
|
||||
#: ../telegram-purple.c:973
|
||||
#: ../telegram-purple.c:850
|
||||
msgid "Add all group chats to buddy list"
|
||||
msgstr "Agregar todas las conversaciones grupales a la lista del contacto"
|
||||
|
||||
#. Read notifications
|
||||
#: ../telegram-purple.c:981
|
||||
#: ../telegram-purple.c:855
|
||||
msgid "Display notices of receipt"
|
||||
msgstr "Mostrar acuses de recibo"
|
||||
|
||||
#: ../telegram-purple.c:986
|
||||
#: ../telegram-purple.c:859
|
||||
msgid "Send notices of receipt when present"
|
||||
msgstr "Enviar acuses de recibo al estar presente"
|
||||
|
||||
#: ../tgp-2prpl.c:178 ../tgp-request.c:108
|
||||
msgid "First name"
|
||||
msgstr "Nombre"
|
||||
#: ../telegram-purple.c:884
|
||||
msgid "Telegram Protocol Plugin."
|
||||
msgstr "Plugin de protocolo de Telegram."
|
||||
|
||||
#: ../tgp-2prpl.c:179 ../tgp-request.c:111
|
||||
msgid "Last name"
|
||||
msgstr "Apellido"
|
||||
|
||||
#: ../tgp-2prpl.c:181
|
||||
msgid "Name"
|
||||
msgstr "Apodo"
|
||||
|
||||
#: ../tgp-2prpl.c:186 ../tgp-request.c:197 ../tgp-request.c:201
|
||||
#: ../tgp-request.c:205
|
||||
msgid "Username"
|
||||
msgstr "Nombre de usuario"
|
||||
|
||||
#: ../tgp-2prpl.c:191
|
||||
msgid "Last seen"
|
||||
msgstr "Último inicio de sesión"
|
||||
|
||||
#: ../tgp-2prpl.c:196
|
||||
msgid "Phone"
|
||||
msgstr "Teléfono"
|
||||
|
||||
#: ../tgp-2prpl.c:208
|
||||
msgid "Waiting for the user to get online..."
|
||||
msgstr "Esperando a que el usuario se conecte…"
|
||||
|
||||
#: ../tgp-2prpl.c:212
|
||||
msgid "Self destruction timer"
|
||||
msgstr "Contador autodestructivo"
|
||||
|
||||
#: ../tgp-2prpl.c:218
|
||||
msgid "Timer is not enabled."
|
||||
msgstr "El temporizador no está habilitado."
|
||||
|
||||
#: ../tgp-2prpl.c:225
|
||||
msgid "Secret key"
|
||||
msgstr "Clave secreta"
|
||||
|
||||
#: ../tgp-msg.c:72
|
||||
#: ../tgp-msg.c:58
|
||||
#, c-format
|
||||
msgid "%2$s created chat %1$s."
|
||||
msgstr "%2$s creó la conversación %1$s."
|
||||
|
||||
#: ../tgp-msg.c:75
|
||||
#: ../tgp-msg.c:61
|
||||
#, c-format
|
||||
msgid "%2$s changed title to %1$s."
|
||||
msgstr "%2$s cambió el título a %1$s."
|
||||
|
||||
#: ../tgp-msg.c:78
|
||||
#: ../tgp-msg.c:64
|
||||
#, c-format
|
||||
msgid "%s changed photo."
|
||||
msgstr "%s cambió la foto."
|
||||
|
||||
#: ../tgp-msg.c:81
|
||||
#: ../tgp-msg.c:67
|
||||
#, c-format
|
||||
msgid "%s deleted photo."
|
||||
msgstr "%s eliminó la foto."
|
||||
|
||||
#: ../tgp-msg.c:89
|
||||
#: ../tgp-msg.c:75
|
||||
#, c-format
|
||||
msgid "%1$s added user %2$s by link."
|
||||
msgstr "%1$s agregó al usuario %2$s mediante un enlace."
|
||||
|
||||
#: ../tgp-msg.c:102
|
||||
#: ../tgp-msg.c:90
|
||||
#, c-format
|
||||
msgid "%2$s added user %1$s."
|
||||
msgstr "%2$s agregó al usuario %1$s."
|
||||
|
||||
#: ../tgp-msg.c:125 ../tgp-msg.c:140
|
||||
#: ../tgp-msg.c:114 ../tgp-msg.c:131
|
||||
#, c-format
|
||||
msgid "%2$s deleted user %1$s."
|
||||
msgstr "%2$s eliminó al usuario %1$s."
|
||||
|
||||
#: ../tgp-msg.c:146
|
||||
#: ../tgp-msg.c:138
|
||||
#, c-format
|
||||
msgid "%2$s set self destruction timer to %1$d second."
|
||||
msgid_plural "%2$s set self destruction timer to %1$d seconds."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "%2$s estableció un contador autodestructivo a %1$d segundo."
|
||||
msgstr[1] "%2$s estableció un contador autodestructivo a %1$d segundos."
|
||||
|
||||
#: ../tgp-msg.c:152
|
||||
#: ../tgp-msg.c:144
|
||||
#, c-format
|
||||
msgid "%2$s marked %1$d message read."
|
||||
msgid_plural "%2$s marked %1$d messages read."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "%2$s marcó %1$d mensaje como leído."
|
||||
msgstr[1] "%2$s marcó %1$d mensajes como leídos."
|
||||
|
||||
#: ../tgp-msg.c:158
|
||||
#: ../tgp-msg.c:150
|
||||
#, c-format
|
||||
msgid "%2$s deleted %1$d message."
|
||||
msgid_plural "%2$s deleted %1$d messages."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "%2$s eliminó %1$d mensaje."
|
||||
msgstr[1] "%2$s eliminó %1$d mensajes."
|
||||
|
||||
#: ../tgp-msg.c:164
|
||||
#: ../tgp-msg.c:156
|
||||
#, c-format
|
||||
msgid "%2$s made a screenshot of %1$d message."
|
||||
msgid_plural "%2$s made a screenshot of %1$d messages."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "%2$s tomó una captura de pantalla de %1$d mensaje."
|
||||
msgstr[1] "%2$s tomó una captura de pantalla de %1$d mensajes."
|
||||
|
||||
#: ../tgp-msg.c:162
|
||||
#, c-format
|
||||
msgid "Channel %1$s created"
|
||||
msgstr "Canal %1$s creado"
|
||||
|
||||
#. FIXME: check if this makes sense
|
||||
#: ../tgp-msg.c:165 ../tgp-chat.c:124 ../tgp-chat.c:576
|
||||
msgid "Telegram Channels"
|
||||
msgstr "Canales de Telegram"
|
||||
|
||||
#: ../tgp-msg.c:191
|
||||
msgid "Sending message failed."
|
||||
msgstr "Falló el envío de mensajes."
|
||||
|
||||
#: ../tgp-msg.c:296
|
||||
#: ../tgp-msg.c:253
|
||||
msgid "Sending image failed."
|
||||
msgstr "Falló el envío de imágenes."
|
||||
|
||||
#: ../tgp-msg.c:310
|
||||
msgid "Sorry, sending documents to encrypted chats not yet supported."
|
||||
msgstr "Lo sentimos, pero no se soporta el envío de documentos a conversaciones cifradas."
|
||||
|
||||
#: ../tgp-msg.c:400
|
||||
#: ../tgp-msg.c:417
|
||||
#, c-format
|
||||
msgid "%s sent a sticker."
|
||||
msgstr "%s envió un sticker."
|
||||
|
||||
#: ../tgp-net.c:286
|
||||
#: ../tgp-msg.c:463
|
||||
msgid "failed loading message"
|
||||
msgstr "falló la carga del mensaje"
|
||||
|
||||
#: ../tgp-msg.c:498
|
||||
msgid "[animation]"
|
||||
msgstr "[animación]"
|
||||
|
||||
#: ../tgp-msg.c:515
|
||||
msgid "[audio]"
|
||||
msgstr "[audio]"
|
||||
|
||||
#: ../tgp-msg.c:515
|
||||
msgid "[video]"
|
||||
msgstr "[video]"
|
||||
|
||||
#: ../tgp-msg.c:604
|
||||
#, c-format
|
||||
msgid "<b>Forwarded message from: %s</b><br>%s"
|
||||
msgstr "<b>Mensaje reenviado de: %s</b><br>%s"
|
||||
|
||||
#. FIXME: sometimes users aren't part of the response when receiving a
|
||||
#. forwarded message
|
||||
#: ../tgp-msg.c:607
|
||||
#, c-format
|
||||
msgid "<b>Forwarded message:</b><br>%s"
|
||||
msgstr "<b>Mensaje reenviado:</b><br>%s"
|
||||
|
||||
#: ../tgp-msg.c:720
|
||||
msgid "loading document or picture failed"
|
||||
msgstr "falló la carga del documento o imagen"
|
||||
|
||||
#: ../tgp-net.c:281
|
||||
msgid "Cannot connect to main server"
|
||||
msgstr "No se puede conectar al servidor principal"
|
||||
|
||||
#: ../tgp-net.c:342
|
||||
#: ../tgp-net.c:322
|
||||
msgid "Cannot connect to server: Ping timeout."
|
||||
msgstr "No se puede conectar al servidor: tiempo agotado de ping."
|
||||
msgstr "No se puede conectar al servidor: tiempo de respuesta agotado."
|
||||
|
||||
#: ../tgp-net.c:387
|
||||
#: ../tgp-net.c:365
|
||||
msgid "Lost connection to the server..."
|
||||
msgstr "Se perdió la conexión con el servidor…"
|
||||
msgstr "Se perdió la conexión con el servidor..."
|
||||
|
||||
#: ../tgp-request.c:64
|
||||
#: ../tgp-request.c:51
|
||||
msgid ""
|
||||
"Telegram wants to verify your identity. Please enter the login code that you"
|
||||
" have received via SMS."
|
||||
msgstr "Telegram quiere verificar tu identidad. Por favor, ingresá el código que recibiste en un mensaje de texto."
|
||||
msgstr ""
|
||||
"Telegram quiere verificar tu identidad. Por favor, ingresá el código que "
|
||||
"recibiste en un mensaje de texto."
|
||||
|
||||
#: ../tgp-request.c:67
|
||||
#: ../tgp-request.c:54
|
||||
msgid "Login code"
|
||||
msgstr "Código de inicio de sesión"
|
||||
|
||||
#: ../tgp-request.c:67
|
||||
#: ../tgp-request.c:54
|
||||
msgid "Enter login code"
|
||||
msgstr "Ingresar código de inicio de sesión"
|
||||
|
||||
#: ../tgp-request.c:67
|
||||
#: ../tgp-request.c:54
|
||||
msgid "the code"
|
||||
msgstr "el código"
|
||||
|
||||
#: ../tgp-request.c:67 ../tgp-request.c:116 ../tgp-request.c:210
|
||||
#: ../tgp-request.c:245 ../tgp-request.c:275
|
||||
#: ../tgp-request.c:54 ../tgp-request.c:104 ../tgp-request.c:198
|
||||
#: ../tgp-request.c:233 ../tgp-request.c:263
|
||||
msgid "OK"
|
||||
msgstr "Aceptar"
|
||||
|
||||
#: ../tgp-request.c:68 ../tgp-request.c:116 ../tgp-request.c:135
|
||||
#: ../tgp-request.c:211 ../tgp-request.c:246 ../tgp-request.c:276
|
||||
#: ../tgp-request.c:55 ../tgp-request.c:104 ../tgp-request.c:123
|
||||
#: ../tgp-request.c:199 ../tgp-request.c:234 ../tgp-request.c:264
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
#: ../tgp-request.c:107
|
||||
#: ../tgp-request.c:95
|
||||
msgid "Registration"
|
||||
msgstr "Registro"
|
||||
|
||||
#: ../tgp-request.c:115
|
||||
#: ../tgp-request.c:96
|
||||
msgid "First name"
|
||||
msgstr "Nombre"
|
||||
|
||||
#: ../tgp-request.c:99
|
||||
msgid "Last name"
|
||||
msgstr "Apellido"
|
||||
|
||||
#: ../tgp-request.c:103
|
||||
msgid "Register"
|
||||
msgstr "Registrar"
|
||||
|
||||
#: ../tgp-request.c:115
|
||||
#: ../tgp-request.c:103
|
||||
msgid "Please register your phone number."
|
||||
msgstr "Por favor, registrá tu número de teléfono."
|
||||
|
||||
#. purple_request API not available
|
||||
#: ../tgp-request.c:120
|
||||
#: ../tgp-request.c:108
|
||||
msgid ""
|
||||
"Phone number is not registered. Please register your phone on a different "
|
||||
"client."
|
||||
msgstr "No se registró el número de teléfono. Por favor, registrá tu teléfono en un cliente diferente."
|
||||
msgstr ""
|
||||
"No se registró el número de teléfono. Por favor, registrá tu teléfono en un "
|
||||
"cliente diferente."
|
||||
|
||||
#: ../tgp-request.c:122
|
||||
#: ../tgp-request.c:110
|
||||
msgid "Not registered"
|
||||
msgstr "No registrado"
|
||||
|
||||
#: ../tgp-request.c:134
|
||||
#: ../tgp-request.c:122
|
||||
msgid "Password needed"
|
||||
msgstr "Se necesita la contraseña"
|
||||
|
||||
#: ../tgp-request.c:134
|
||||
#: ../tgp-request.c:122
|
||||
msgid "Enter password for two factor authentication"
|
||||
msgstr "Ingresar contraseña para la autenticación de 2 pasos"
|
||||
|
||||
#: ../tgp-request.c:135
|
||||
#: ../tgp-request.c:123
|
||||
msgid "Ok"
|
||||
msgstr "Aceptar"
|
||||
|
||||
#: ../tgp-request.c:137
|
||||
#: ../tgp-request.c:125
|
||||
msgid ""
|
||||
"No password set for two factor authentication. Please enter it in the "
|
||||
"extended settings."
|
||||
msgstr "No se estableció contraseña para la autenticación de 2 pasos. Por favor, ingresala en la configuración extendida."
|
||||
msgstr ""
|
||||
"No se estableció contraseña para la autenticación de 2 pasos. Por favor, "
|
||||
"ingresala en la configuración extendida."
|
||||
|
||||
#: ../tgp-request.c:139
|
||||
#: ../tgp-request.c:127
|
||||
msgid "Password invalid"
|
||||
msgstr "Contraseña no válida"
|
||||
|
||||
#: ../tgp-request.c:162
|
||||
#: ../tgp-request.c:150
|
||||
#, c-format
|
||||
msgid "Accept secret chat '%s' on this device?"
|
||||
msgstr "¿Aceptás la conversación secreta \"%s\" en este dispositivo?"
|
||||
|
||||
#: ../tgp-request.c:163
|
||||
#: ../tgp-request.c:151
|
||||
msgid "Secret chat"
|
||||
msgstr "Conversación secreta"
|
||||
|
||||
#: ../tgp-request.c:163
|
||||
#: ../tgp-request.c:151
|
||||
msgid ""
|
||||
"Secret chats can only have one end point. If you accept a secret chat on "
|
||||
"this device, its messages will not be available anywhere else. If you "
|
||||
"decline, you can still accept the chat on other devices."
|
||||
msgstr "Las conversaciones secretas son uno a uno. Si aceptás una conversación secreta en este dispositivo, la misma no estará disponible en ningún otro lado. Si declinás, podés aceptar la conversación en otro dispositivo."
|
||||
msgstr ""
|
||||
"Las conversaciones secretas son uno a uno. Si aceptás una conversación "
|
||||
"secreta en este dispositivo, la misma no estará disponible en ningún otro "
|
||||
"lado. Si declinás, podés aceptar la conversación en otro dispositivo."
|
||||
|
||||
#: ../tgp-request.c:194
|
||||
#: ../tgp-request.c:182
|
||||
msgid ""
|
||||
"Invite at least one additional user by specifying\n"
|
||||
" their full name (autocompletion available).\n"
|
||||
"You can add more users once the chat was created."
|
||||
msgstr "Invitá al menos a un usuario más especificando\nsu nombre completo (disponible autocompletado).\nPodés agregar más usuarios una vez que se cree la conversación."
|
||||
msgstr ""
|
||||
"Invitá al menos a un usuario más especificando\n"
|
||||
"su nombre completo (disponible autocompletado).\n"
|
||||
"Podés agregar más usuarios una vez que se cree la conversación."
|
||||
|
||||
#: ../tgp-request.c:210
|
||||
#: ../tgp-request.c:185 ../tgp-request.c:189 ../tgp-request.c:193
|
||||
msgid "Username"
|
||||
msgstr "Nombre de usuario"
|
||||
|
||||
#: ../tgp-request.c:198
|
||||
msgid "Create group chat"
|
||||
msgstr "Crear conversación grupal"
|
||||
|
||||
#: ../tgp-request.c:210
|
||||
#: ../tgp-request.c:198
|
||||
msgid "Invite users"
|
||||
msgstr "Invitar a usuarios"
|
||||
|
||||
#: ../tgp-request.c:229 ../tgp-request.c:244
|
||||
#: ../tgp-request.c:217 ../tgp-request.c:232
|
||||
msgid "Change password"
|
||||
msgstr "Cambiar contraseña"
|
||||
|
||||
#: ../tgp-request.c:231
|
||||
#: ../tgp-request.c:219
|
||||
msgid "Current"
|
||||
msgstr "Actual"
|
||||
|
||||
#: ../tgp-request.c:235 ../tgp-request.c:265
|
||||
#: ../tgp-request.c:223 ../tgp-request.c:253
|
||||
msgid "Password"
|
||||
msgstr "Contraseña"
|
||||
|
||||
#: ../tgp-request.c:239 ../tgp-request.c:269
|
||||
#: ../tgp-request.c:227 ../tgp-request.c:257
|
||||
msgid "Confirm"
|
||||
msgstr "Confirmar"
|
||||
|
||||
#: ../tgp-request.c:263 ../tgp-request.c:274
|
||||
#: ../tgp-request.c:251 ../tgp-request.c:262
|
||||
msgid "New password"
|
||||
msgstr "Nueva contraseña"
|
||||
|
||||
|
@ -428,58 +504,113 @@ msgstr "Nueva contraseña"
|
|||
#. ask for the phone number directly, cause in that case the account would
|
||||
#. still be created
|
||||
#. named with the invalid phone number, even though the login will work
|
||||
#: ../tgp-request.c:312
|
||||
#: ../tgp-request.c:300
|
||||
msgid "Invalid phone number"
|
||||
msgstr "Número de teléfono no válido"
|
||||
|
||||
#: ../tgp-request.c:313
|
||||
#: ../tgp-request.c:301
|
||||
msgid ""
|
||||
"Please enter only numbers in the international phone number format, a leading + following by the country prefix and the phone number.\n"
|
||||
"Do not use any other special chars."
|
||||
msgstr "Por favor, ingresá sólo números en el formato de números de teléfono internacional, con el signo \"+\" seguido del código de país [más prefijo para el acceso a la red celular, si corresponde] y el número de teléfono.\nNo usés ningún otro caracter."
|
||||
msgstr ""
|
||||
"Por favor, ingresá sólo números en el formato de números de teléfono internacional, con el signo \"+\" seguido del código de país [más prefijo para el acceso a la red celular, si corresponde] y el número de teléfono.\n"
|
||||
"No usés ningún otro caracter."
|
||||
|
||||
#: ../tgp-request.c:370
|
||||
msgid "Leave Chat"
|
||||
msgstr "Abandonar conversación"
|
||||
|
||||
#: ../tgp-request.c:372
|
||||
msgid "Do you want to leave this chat permantently?"
|
||||
msgstr "¿Querés abandonar esta conversación permanentemente?"
|
||||
|
||||
#: ../tgp-request.c:377
|
||||
msgid "Abort Secret Chat"
|
||||
msgstr "Cancelar conversación secreta"
|
||||
|
||||
#: ../tgp-request.c:379
|
||||
msgid "Do you want to terminate this secret chat permantently?"
|
||||
msgstr ""
|
||||
"¿Estás seguro que querés eliminar esta conversación secreta permanentemente?"
|
||||
|
||||
#: ../tgp-request.c:384
|
||||
msgid "Delete Contact"
|
||||
msgstr "Eliminar contacto"
|
||||
|
||||
#: ../tgp-request.c:386
|
||||
msgid "Do you want to remove this user from your global contact list?"
|
||||
msgstr "¿Querés quitar este usuario de tu lista global de contactos?"
|
||||
|
||||
#: ../tgp-request.c:401
|
||||
msgid "Leave Channel"
|
||||
msgstr "Abandonar canal"
|
||||
|
||||
#: ../tgp-request.c:403
|
||||
msgid "Do you want to leave this channel?"
|
||||
msgstr "¿Querés abandonar este canal?"
|
||||
|
||||
#. This should be the language's timestamp format. This is preceded by a
|
||||
#. colon.
|
||||
#: ../tgp-utils.c:32
|
||||
#: ../tgp-utils.c:27
|
||||
msgid "%d.%m.%Y %H:%M"
|
||||
msgstr "%Y.%m.%d - %H:%M"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:53
|
||||
#: ../tgp-utils.c:48
|
||||
msgid "recently"
|
||||
msgstr "recientemente"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:57
|
||||
#: ../tgp-utils.c:52
|
||||
msgid "last week"
|
||||
msgstr "la semana pasada"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:61
|
||||
#: ../tgp-utils.c:56
|
||||
msgid "last month"
|
||||
msgstr "el mes pasado"
|
||||
|
||||
#. This is preceded by a colon. It refers to a point on time.
|
||||
#: ../tgp-utils.c:65
|
||||
#: ../tgp-utils.c:60
|
||||
msgid "unknown"
|
||||
msgstr "[desconocido]"
|
||||
|
||||
#: ../tgp-chat.c:79
|
||||
#: ../tgp-chat.c:108 ../tgp-chat.c:582
|
||||
msgid "Telegram Chats"
|
||||
msgstr "Conversaciones de Telegram"
|
||||
|
||||
#: ../tgp-chat.c:113
|
||||
msgid "You have already left this chat."
|
||||
msgstr "Ya abandonaste esta conversación."
|
||||
|
||||
#: ../tgp-chat.c:127
|
||||
#: ../tgp-chat.c:224
|
||||
msgid "Subject:"
|
||||
msgstr "Asunto:"
|
||||
|
||||
#: ../tgp-chat.c:133
|
||||
#: ../tgp-chat.c:230
|
||||
msgid "Invite link:"
|
||||
msgstr "Enlace de invitación:"
|
||||
|
||||
#: ../tgp-chat.c:139
|
||||
#: ../tgp-chat.c:236
|
||||
msgid "Chat ID:"
|
||||
msgstr "Identificación de conversación:"
|
||||
|
||||
#: ../tgp-chat.c:238
|
||||
#: ../tgp-chat.c:342
|
||||
msgid "Supergroup"
|
||||
msgstr "Súpergrupo"
|
||||
|
||||
#: ../tgp-chat.c:342
|
||||
msgid "Channel"
|
||||
msgstr "Canal"
|
||||
|
||||
#: ../tgp-chat.c:345
|
||||
msgid "Group"
|
||||
msgstr "Grupo"
|
||||
|
||||
#: ../tgp-chat.c:367
|
||||
msgid "Users in chat"
|
||||
msgstr "Usuarios en la conversación"
|
||||
|
||||
#: ../tgp-chat.c:370
|
||||
msgid "Type"
|
||||
msgstr "Tipo"
|
||||
|
|
542
po/fr.po
542
po/fr.po
|
@ -1,88 +1,94 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
# Translators:
|
||||
# Hugues Morisset <hugues.m@hotmail.fr>, 2015
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: telegram-purple\n"
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2015-11-21 14:37+0100\n"
|
||||
"PO-Revision-Date: 2015-12-19 05:23+0000\n"
|
||||
"Last-Translator: Hugues Morisset <hugues.m@hotmail.fr>\n"
|
||||
"Language-Team: French (http://www.transifex.com/telegram-purple-developers/telegram-purple/language/fr/)\n"
|
||||
"POT-Creation-Date: 2016-08-31 22:53+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: kekh <tukhnet@gmail.com>, 2016\n"
|
||||
"Language-Team: French (https://www.transifex.com/telegram-purple-developers/teams/53149/fr/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: fr\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
|
||||
#: ../telegram-base.c:515
|
||||
#: ../telegram-base.c:500
|
||||
msgid "Couldn't create group"
|
||||
msgstr "N'a pas pu créer le groupe"
|
||||
|
||||
#: ../telegram-base.c:515
|
||||
#: ../telegram-base.c:501
|
||||
msgid "Please select at least one other user."
|
||||
msgstr "Veuillez sélectionné au moins un autre utilisateur."
|
||||
msgstr "Veuillez sélectionner au moins un autre utilisateur."
|
||||
|
||||
#: ../telegram-base.c:570
|
||||
#: ../telegram-base.c:555
|
||||
msgid "Query Failed"
|
||||
msgstr "Requête échoué"
|
||||
msgstr "Requête échouée"
|
||||
|
||||
#: ../telegram-purple.c:193
|
||||
#: ../telegram-purple.c:162
|
||||
msgid "Secret chat ready."
|
||||
msgstr "Conversation secrète prête."
|
||||
|
||||
#: ../telegram-purple.c:200
|
||||
#: ../telegram-purple.c:170
|
||||
msgid "Secret chat terminated."
|
||||
msgstr "Conversation secrète terminé."
|
||||
msgstr "Conversation secrète terminée."
|
||||
|
||||
#: ../telegram-purple.c:268
|
||||
#: ../telegram-purple.c:182
|
||||
msgid "Telegram"
|
||||
msgstr "Telegram"
|
||||
|
||||
#: ../telegram-purple.c:229
|
||||
msgid "Message marked as read."
|
||||
msgstr "Message marqué comme lu."
|
||||
|
||||
#: ../telegram-purple.c:486
|
||||
#: ../telegram-purple.c:339
|
||||
#, c-format
|
||||
msgid "Invite link: %s"
|
||||
msgstr "Lien d'invitation: %s"
|
||||
msgstr "Lien d'invitation : %s"
|
||||
|
||||
#: ../telegram-purple.c:506 ../telegram-purple.c:507
|
||||
#. FIXME: Can TGLCHF_MODERATOR export links?
|
||||
#: ../telegram-purple.c:350
|
||||
msgid "Creating chat link failed"
|
||||
msgstr "Création du lien d'invitation échoué"
|
||||
msgstr "Création du lien d'invitation échouée"
|
||||
|
||||
#: ../telegram-purple.c:508
|
||||
#: ../telegram-purple.c:351
|
||||
msgid "You need to be admin of the group to do that."
|
||||
msgstr "Vous devez être administrateur du groupe pour faire cela."
|
||||
|
||||
#: ../telegram-purple.c:531
|
||||
#: ../telegram-purple.c:416
|
||||
msgid "Chat joined"
|
||||
msgstr "Conversation jointe."
|
||||
msgstr "Conversation atteinte."
|
||||
|
||||
#: ../telegram-purple.c:532
|
||||
#: ../telegram-purple.c:417
|
||||
msgid "Chat added to list of chat rooms."
|
||||
msgstr "Conversation ajouté dans la liste de conversations."
|
||||
msgstr "Conversation ajoutée dans la liste des conversations."
|
||||
|
||||
#: ../telegram-purple.c:552
|
||||
#: ../telegram-purple.c:443
|
||||
msgid "Start secret chat..."
|
||||
msgstr "Commencé une conversation secrète ..."
|
||||
msgstr "Commencer une conversation secrète..."
|
||||
|
||||
#. Generate Public Link
|
||||
#: ../telegram-purple.c:558
|
||||
#: ../telegram-purple.c:450
|
||||
msgid "Invite users by link..."
|
||||
msgstr "Invité des utilisateurs avec un lien ..."
|
||||
msgstr "Inviter des utilisateurs avec un lien..."
|
||||
|
||||
#. Delete self from chat
|
||||
#: ../telegram-purple.c:564
|
||||
#: ../telegram-purple.c:458
|
||||
msgid "Delete and exit..."
|
||||
msgstr "Supprimer et quitter ..."
|
||||
msgstr "Supprimer et quitter..."
|
||||
|
||||
#: ../telegram-purple.c:632
|
||||
#: ../telegram-purple.c:546
|
||||
#, c-format
|
||||
msgid "Unable to sign on as %s: pubkey not found."
|
||||
msgstr "Impossible de se connecté comme %s: clé publique manquante."
|
||||
msgid "Unable to sign on as %s: file (public key) not found."
|
||||
msgstr ""
|
||||
"Impossible de se connecter comme %s : fichier de clé publique manquant."
|
||||
|
||||
#: ../telegram-purple.c:636
|
||||
#: ../telegram-purple.c:550
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Make sure telegram-purple is installed properly,\n"
|
||||
|
@ -90,336 +96,405 @@ msgid ""
|
|||
"If you're running SELinux (e.g. when using Tails),\n"
|
||||
"try 'make local_install', or simply copy\n"
|
||||
"%1$s to %2$s."
|
||||
msgstr "Soyez sur que telegram-purple est installé proprement,\nparticulièrement le fichier .tglpub.\nSi vous avez SELinux (ex: En utilisant Tails),\nessayer 'make local_install', ou copier simplement\n%1$s dans %2$s."
|
||||
msgstr ""
|
||||
"Soyez sûr que telegram-purple est installé proprement,\n"
|
||||
"particulièrement le fichier .tglpub.\n"
|
||||
"Si vous avez SELinux (ex: En utilisant Tails),\n"
|
||||
"essayez 'make local_install', ou copiez simplement\n"
|
||||
"%1$s dans %2$s."
|
||||
|
||||
#: ../telegram-purple.c:657
|
||||
#: ../telegram-purple.c:572
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Unable to sign on as %s: problem in the underlying library 'tgl'. Please "
|
||||
"submit a bug report with the debug log."
|
||||
msgstr ""
|
||||
"Impossible de s'identifier comme %s : Problème avec la librairie sous-"
|
||||
"jacente 'tgl'. Veuillez svp soumettre un rapport de bug incluant des "
|
||||
"informations de débug."
|
||||
|
||||
#: ../telegram-purple.c:576
|
||||
msgid "Problem in tgl"
|
||||
msgstr "Problème relatif à Tgl"
|
||||
|
||||
#. TRANSLATORS: Please fill in your own prefix!
|
||||
#: ../telegram-purple.c:584
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Unable to sign on as %s: phone number lacks country prefix. Numbers must "
|
||||
"start with the full international prefix code, e.g. +49 for Germany."
|
||||
msgstr "Impossible de se connecter avec %s: le préfixe de pays est manquant. Le numéro de téléphone doit commencé avec le numéro de préfixe international, ex: +33 pour la France."
|
||||
"start with the full international prefix code, e.g. +1 for USA."
|
||||
msgstr ""
|
||||
"Impossible de se connecter avec %s : le préfixe de pays est manquant. Le "
|
||||
"numéro de téléphone doit commencer avec le numéro de préfixe international, "
|
||||
"ex: +33 pour la France."
|
||||
|
||||
#: ../telegram-purple.c:662
|
||||
#: ../telegram-purple.c:589
|
||||
msgid "Incomplete phone number"
|
||||
msgstr "Numéro de téléphone incomplet"
|
||||
|
||||
#: ../telegram-purple.c:788 ../telegram-purple.c:789
|
||||
msgid "Cannot invite buddy to chat"
|
||||
msgstr "Impossible d'ajouté le contact á la conversation"
|
||||
#: ../telegram-purple.c:642
|
||||
msgid "Secret chat was already deleted"
|
||||
msgstr "Conversation secrète déjà supprimée."
|
||||
|
||||
#: ../telegram-purple.c:790
|
||||
#: ../telegram-purple.c:644
|
||||
msgid "Secret chat is not ready"
|
||||
msgstr "Conversation secrète non prête"
|
||||
|
||||
#: ../telegram-purple.c:652
|
||||
msgid "Only the creator of a channel can post messages."
|
||||
msgstr "Seul le créateur du canal peut publier des messages"
|
||||
|
||||
#: ../telegram-purple.c:695
|
||||
msgid "Cannot invite buddy to chat"
|
||||
msgstr "Impossible d'ajouter le contact à la conversation"
|
||||
|
||||
#: ../telegram-purple.c:696
|
||||
msgid "Specified user does not exist."
|
||||
msgstr "L'utilisateur spécifier n'existe pas."
|
||||
msgstr "L'utilisateur spécifié n'existe pas."
|
||||
|
||||
#: ../telegram-purple.c:709
|
||||
msgid "phone no. (+ country prefix)"
|
||||
msgstr "n° téléphone (+ préfixe pays)"
|
||||
|
||||
#. Login
|
||||
#: ../telegram-purple.c:932
|
||||
#: ../telegram-purple.c:817
|
||||
msgid "Password (two factor authentication)"
|
||||
msgstr "Mot de passe (authentification á deux facteurs)"
|
||||
msgstr "Mot de passe (authentification à deux facteurs)"
|
||||
|
||||
#: ../telegram-purple.c:938
|
||||
#: ../telegram-purple.c:822
|
||||
msgid ""
|
||||
"Fallback SMS verification\n"
|
||||
"(Helps when not using Pidgin and you aren't being prompted for the code)"
|
||||
msgstr "Vérification par SMS\n(Cela aide si vous n’utilisé pas Pidgin et que vous n'êtes pas notifier pour le code)"
|
||||
msgstr ""
|
||||
"Vérification par SMS\n"
|
||||
"(Cela aide si vous n’utilisez pas Pidgin et que vous n'êtes pas notifié pour le code)"
|
||||
|
||||
#: ../telegram-purple.c:946
|
||||
msgid "ask"
|
||||
msgstr "demander"
|
||||
|
||||
#: ../telegram-purple.c:947
|
||||
#: ../telegram-purple.c:828
|
||||
msgid "always"
|
||||
msgstr "toujours"
|
||||
|
||||
#: ../telegram-purple.c:948
|
||||
#: ../telegram-purple.c:829
|
||||
msgid "never"
|
||||
msgstr "jamais"
|
||||
|
||||
#: ../telegram-purple.c:950
|
||||
#: ../telegram-purple.c:830
|
||||
msgid "ask"
|
||||
msgstr "demander"
|
||||
|
||||
#: ../telegram-purple.c:832
|
||||
msgid "Accept secret chats"
|
||||
msgstr "Accepté la conversation secrète"
|
||||
msgstr "Accepter la conversation secrète"
|
||||
|
||||
#: ../telegram-purple.c:955
|
||||
#: ../telegram-purple.c:836
|
||||
msgid "Display buddies offline after (days)"
|
||||
msgstr "Affiché les contact déconnecté après (jours)"
|
||||
msgstr "Afficher les contacts déconnectés après (jours)"
|
||||
|
||||
#: ../telegram-purple.c:960
|
||||
msgid "Fetch past history on first login"
|
||||
msgstr "Récupérer l'historique á la première connexion"
|
||||
|
||||
#: ../telegram-purple.c:965
|
||||
#: ../telegram-purple.c:840
|
||||
msgid ""
|
||||
"Don't fetch history older than (days)\n"
|
||||
"(0 for unlimited)"
|
||||
msgstr "Ne pas récupérer l'historique plus vieux de (jours)\n(0 pour infinie)"
|
||||
msgstr ""
|
||||
"Ne pas récupérer l'historique plus vieux que (jours)\n"
|
||||
"(0 pour infinie)"
|
||||
|
||||
#. Media
|
||||
#: ../telegram-purple.c:845
|
||||
msgid "Autoload media size (kb)"
|
||||
msgstr "Taille max. chargement auto. des médias (Kb)"
|
||||
|
||||
#. Chats
|
||||
#: ../telegram-purple.c:973
|
||||
#: ../telegram-purple.c:850
|
||||
msgid "Add all group chats to buddy list"
|
||||
msgstr "Ajouté tous les membre de la conversation dans la liste de contact"
|
||||
msgstr "Ajouter tous les membres de la conversation dans la liste de contact"
|
||||
|
||||
#. Read notifications
|
||||
#: ../telegram-purple.c:981
|
||||
#: ../telegram-purple.c:855
|
||||
msgid "Display notices of receipt"
|
||||
msgstr "Affiché les notifications de réception"
|
||||
msgstr "Afficher les notifications de réception"
|
||||
|
||||
#: ../telegram-purple.c:986
|
||||
#: ../telegram-purple.c:859
|
||||
msgid "Send notices of receipt when present"
|
||||
msgstr "Envoyé des notification de réception quand vous êtes présent."
|
||||
msgstr "Envoyer des notifications de réception quand vous êtes présent."
|
||||
|
||||
#: ../tgp-2prpl.c:178 ../tgp-request.c:108
|
||||
msgid "First name"
|
||||
msgstr "Prénom"
|
||||
#: ../telegram-purple.c:884
|
||||
msgid "Telegram Protocol Plugin."
|
||||
msgstr "Extension Protocole Telegram"
|
||||
|
||||
#: ../tgp-2prpl.c:179 ../tgp-request.c:111
|
||||
msgid "Last name"
|
||||
msgstr "Nom de famille"
|
||||
|
||||
#: ../tgp-2prpl.c:181
|
||||
msgid "Name"
|
||||
msgstr "Nom"
|
||||
|
||||
#: ../tgp-2prpl.c:186 ../tgp-request.c:197 ../tgp-request.c:201
|
||||
#: ../tgp-request.c:205
|
||||
msgid "Username"
|
||||
msgstr "Nom d'utilisateur"
|
||||
|
||||
#: ../tgp-2prpl.c:191
|
||||
msgid "Last seen"
|
||||
msgstr "Dernière fois vu"
|
||||
|
||||
#: ../tgp-2prpl.c:196
|
||||
msgid "Phone"
|
||||
msgstr "Téléphone"
|
||||
|
||||
#: ../tgp-2prpl.c:208
|
||||
msgid "Waiting for the user to get online..."
|
||||
msgstr "En attente de connexion de l'utilisateur ..."
|
||||
|
||||
#: ../tgp-2prpl.c:212
|
||||
msgid "Self destruction timer"
|
||||
msgstr "Compte a rebours d’auto destruction"
|
||||
|
||||
#: ../tgp-2prpl.c:218
|
||||
msgid "Timer is not enabled."
|
||||
msgstr "Le minuteur n'est pas activé."
|
||||
|
||||
#: ../tgp-2prpl.c:225
|
||||
msgid "Secret key"
|
||||
msgstr "Clé secrète"
|
||||
|
||||
#: ../tgp-msg.c:72
|
||||
#: ../tgp-msg.c:58
|
||||
#, c-format
|
||||
msgid "%2$s created chat %1$s."
|
||||
msgstr "%2$s a créer la conversation %1$s."
|
||||
msgstr "%2$s a créé la conversation %1$s."
|
||||
|
||||
#: ../tgp-msg.c:75
|
||||
#: ../tgp-msg.c:61
|
||||
#, c-format
|
||||
msgid "%2$s changed title to %1$s."
|
||||
msgstr "%2$s a changé le titre pour %1$s."
|
||||
|
||||
#: ../tgp-msg.c:78
|
||||
#: ../tgp-msg.c:64
|
||||
#, c-format
|
||||
msgid "%s changed photo."
|
||||
msgstr "%s á changé ca photo."
|
||||
msgstr "%s a changé sa photo."
|
||||
|
||||
#: ../tgp-msg.c:81
|
||||
#: ../tgp-msg.c:67
|
||||
#, c-format
|
||||
msgid "%s deleted photo."
|
||||
msgstr "%s a supprimé la photo."
|
||||
|
||||
#: ../tgp-msg.c:89
|
||||
#: ../tgp-msg.c:75
|
||||
#, c-format
|
||||
msgid "%1$s added user %2$s by link."
|
||||
msgstr "%1$s a ajouté l'utilisateur %2$s avec un lien."
|
||||
|
||||
#: ../tgp-msg.c:102
|
||||
#: ../tgp-msg.c:90
|
||||
#, c-format
|
||||
msgid "%2$s added user %1$s."
|
||||
msgstr "%2$s a ajouté l'utilisateur %1$s."
|
||||
|
||||
#: ../tgp-msg.c:125 ../tgp-msg.c:140
|
||||
#: ../tgp-msg.c:114 ../tgp-msg.c:131
|
||||
#, c-format
|
||||
msgid "%2$s deleted user %1$s."
|
||||
msgstr "%2$s a supprimé l'utilisateur %1$s."
|
||||
|
||||
#: ../tgp-msg.c:146
|
||||
#: ../tgp-msg.c:138
|
||||
#, c-format
|
||||
msgid "%2$s set self destruction timer to %1$d second."
|
||||
msgid_plural "%2$s set self destruction timer to %1$d seconds."
|
||||
msgstr[0] "%2$s a mis le compte a rebours d'auto destruction a %1$d secondes."
|
||||
msgstr[1] "%2$s a mis le compte a rebours d'auto destruction a %1$d secondes."
|
||||
msgstr[0] "%2$s a mis le compte a rebours d'auto destruction à %1$d secondes."
|
||||
msgstr[1] "%2$s a mis le compte à rebours d'auto destruction à %1$d secondes."
|
||||
|
||||
#: ../tgp-msg.c:152
|
||||
#: ../tgp-msg.c:144
|
||||
#, c-format
|
||||
msgid "%2$s marked %1$d message read."
|
||||
msgid_plural "%2$s marked %1$d messages read."
|
||||
msgstr[0] "%2$s a marqué les messages de %1$d lu."
|
||||
msgstr[1] "%2$s a marqué les messages de %1$d lu."
|
||||
msgstr[1] "%2$s a marqué les messages de %1$d lus."
|
||||
|
||||
#: ../tgp-msg.c:158
|
||||
#: ../tgp-msg.c:150
|
||||
#, c-format
|
||||
msgid "%2$s deleted %1$d message."
|
||||
msgid_plural "%2$s deleted %1$d messages."
|
||||
msgstr[0] "%2$s a supprimé les messages de %1$d."
|
||||
msgstr[1] "%2$s a supprimé les messages de %1$d."
|
||||
|
||||
#: ../tgp-msg.c:164
|
||||
#: ../tgp-msg.c:156
|
||||
#, c-format
|
||||
msgid "%2$s made a screenshot of %1$d message."
|
||||
msgid_plural "%2$s made a screenshot of %1$d messages."
|
||||
msgstr[0] "%2$s a pris un copie d'écran des messages de %1$d."
|
||||
msgstr[1] "%2$s a pris un copie d'écran des messages de %1$d."
|
||||
msgstr[1] "%2$s a pris une copie d'écran des messages de %1$d."
|
||||
|
||||
#: ../tgp-msg.c:162
|
||||
#, c-format
|
||||
msgid "Channel %1$s created"
|
||||
msgstr "Canal %1$s créé"
|
||||
|
||||
#. FIXME: check if this makes sense
|
||||
#: ../tgp-msg.c:165 ../tgp-chat.c:124 ../tgp-chat.c:576
|
||||
msgid "Telegram Channels"
|
||||
msgstr "Canaux Telegram"
|
||||
|
||||
#: ../tgp-msg.c:191
|
||||
msgid "Sending message failed."
|
||||
msgstr "L'envoie du message a échoué."
|
||||
msgstr "L'envoi du message a échoué."
|
||||
|
||||
#: ../tgp-msg.c:296
|
||||
#: ../tgp-msg.c:253
|
||||
msgid "Sending image failed."
|
||||
msgstr "L'envoie de l'image á échoué."
|
||||
msgstr "L'envoi de l'image a échoué."
|
||||
|
||||
#: ../tgp-msg.c:310
|
||||
msgid "Sorry, sending documents to encrypted chats not yet supported."
|
||||
msgstr "Envoyé des documents dans un conversation secrète n'est pas encore supporté."
|
||||
|
||||
#: ../tgp-msg.c:400
|
||||
#: ../tgp-msg.c:417
|
||||
#, c-format
|
||||
msgid "%s sent a sticker."
|
||||
msgstr "%s a envoyé un sticker."
|
||||
|
||||
#: ../tgp-net.c:286
|
||||
#: ../tgp-msg.c:463
|
||||
msgid "failed loading message"
|
||||
msgstr "échec au chargement du message"
|
||||
|
||||
#: ../tgp-msg.c:498
|
||||
msgid "[animation]"
|
||||
msgstr "[animation]"
|
||||
|
||||
#: ../tgp-msg.c:515
|
||||
msgid "[audio]"
|
||||
msgstr "[audio]"
|
||||
|
||||
#: ../tgp-msg.c:515
|
||||
msgid "[video]"
|
||||
msgstr "[video]"
|
||||
|
||||
#: ../tgp-msg.c:604
|
||||
#, c-format
|
||||
msgid "<b>Forwarded message from: %s</b><br>%s"
|
||||
msgstr "<b>Message transféré depuis : %s</b><br>%s"
|
||||
|
||||
#. FIXME: sometimes users aren't part of the response when receiving a
|
||||
#. forwarded message
|
||||
#: ../tgp-msg.c:607
|
||||
#, c-format
|
||||
msgid "<b>Forwarded message:</b><br>%s"
|
||||
msgstr "<b>Message transféré :</b><br>%s"
|
||||
|
||||
#: ../tgp-msg.c:720
|
||||
msgid "loading document or picture failed"
|
||||
msgstr "échec au chargement du document ou de l'image"
|
||||
|
||||
#: ../tgp-net.c:281
|
||||
msgid "Cannot connect to main server"
|
||||
msgstr "Impossible de se connecté au serveur principal"
|
||||
msgstr "Impossible de se connecter au serveur principal"
|
||||
|
||||
#: ../tgp-net.c:342
|
||||
#: ../tgp-net.c:322
|
||||
msgid "Cannot connect to server: Ping timeout."
|
||||
msgstr "Impossible de se connecté avec le serveur: Délai d'attente dépassé."
|
||||
msgstr "Impossible de se connecter avec le serveur : Délai d'attente dépassé."
|
||||
|
||||
#: ../tgp-net.c:387
|
||||
#: ../tgp-net.c:365
|
||||
msgid "Lost connection to the server..."
|
||||
msgstr "Connexion au serveur perdu ..."
|
||||
msgstr "Connexion au serveur perdue..."
|
||||
|
||||
#: ../tgp-request.c:64
|
||||
#: ../tgp-request.c:51
|
||||
msgid ""
|
||||
"Telegram wants to verify your identity. Please enter the login code that you"
|
||||
" have received via SMS."
|
||||
msgstr "Telegram veut vérifié votre identité, Entré le code que vous avez reçu par SMS."
|
||||
msgstr ""
|
||||
"Telegram veut vérifier votre identité, Entrez le code que vous avez reçu par"
|
||||
" SMS."
|
||||
|
||||
#: ../tgp-request.c:67
|
||||
#: ../tgp-request.c:54
|
||||
msgid "Login code"
|
||||
msgstr "Code de connexion"
|
||||
|
||||
#: ../tgp-request.c:67
|
||||
#: ../tgp-request.c:54
|
||||
msgid "Enter login code"
|
||||
msgstr "Entré le code de connexion"
|
||||
msgstr "Entrez le code de connexion"
|
||||
|
||||
#: ../tgp-request.c:67
|
||||
#: ../tgp-request.c:54
|
||||
msgid "the code"
|
||||
msgstr "le code"
|
||||
|
||||
#: ../tgp-request.c:67 ../tgp-request.c:116 ../tgp-request.c:210
|
||||
#: ../tgp-request.c:245 ../tgp-request.c:275
|
||||
#: ../tgp-request.c:54 ../tgp-request.c:104 ../tgp-request.c:198
|
||||
#: ../tgp-request.c:233 ../tgp-request.c:263
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
|
||||
#: ../tgp-request.c:68 ../tgp-request.c:116 ../tgp-request.c:135
|
||||
#: ../tgp-request.c:211 ../tgp-request.c:246 ../tgp-request.c:276
|
||||
#: ../tgp-request.c:55 ../tgp-request.c:104 ../tgp-request.c:123
|
||||
#: ../tgp-request.c:199 ../tgp-request.c:234 ../tgp-request.c:264
|
||||
msgid "Cancel"
|
||||
msgstr "Annulé"
|
||||
msgstr "Annuler"
|
||||
|
||||
#: ../tgp-request.c:107
|
||||
#: ../tgp-request.c:95
|
||||
msgid "Registration"
|
||||
msgstr "Enregistrement"
|
||||
|
||||
#: ../tgp-request.c:115
|
||||
msgid "Register"
|
||||
msgstr "Enregistré"
|
||||
#: ../tgp-request.c:96
|
||||
msgid "First name"
|
||||
msgstr "Prénom"
|
||||
|
||||
#: ../tgp-request.c:115
|
||||
#: ../tgp-request.c:99
|
||||
msgid "Last name"
|
||||
msgstr "Nom de famille"
|
||||
|
||||
#: ../tgp-request.c:103
|
||||
msgid "Register"
|
||||
msgstr "Enregistrer"
|
||||
|
||||
#: ../tgp-request.c:103
|
||||
msgid "Please register your phone number."
|
||||
msgstr "Enregistré votre numéro de téléphone."
|
||||
msgstr "Enregistrez votre numéro de téléphone."
|
||||
|
||||
#. purple_request API not available
|
||||
#: ../tgp-request.c:120
|
||||
#: ../tgp-request.c:108
|
||||
msgid ""
|
||||
"Phone number is not registered. Please register your phone on a different "
|
||||
"client."
|
||||
msgstr "Numéro téléphone non enregistré. Enregistré un numéro de téléphone sur un appareils différent."
|
||||
msgstr ""
|
||||
"Numéro de téléphone non enregistré. Enregistrez un numéro de téléphone sur "
|
||||
"un appareil différent."
|
||||
|
||||
#: ../tgp-request.c:122
|
||||
#: ../tgp-request.c:110
|
||||
msgid "Not registered"
|
||||
msgstr "Non enregistré"
|
||||
|
||||
#: ../tgp-request.c:134
|
||||
#: ../tgp-request.c:122
|
||||
msgid "Password needed"
|
||||
msgstr "Besoin du mot de passe"
|
||||
|
||||
#: ../tgp-request.c:134
|
||||
#: ../tgp-request.c:122
|
||||
msgid "Enter password for two factor authentication"
|
||||
msgstr "Entré le mot de passe pour l'authentification a deux facteur"
|
||||
msgstr "Entrez le mot de passe pour l'authentification à deux facteurs"
|
||||
|
||||
#: ../tgp-request.c:135
|
||||
#: ../tgp-request.c:123
|
||||
msgid "Ok"
|
||||
msgstr "Ok"
|
||||
|
||||
#: ../tgp-request.c:137
|
||||
#: ../tgp-request.c:125
|
||||
msgid ""
|
||||
"No password set for two factor authentication. Please enter it in the "
|
||||
"extended settings."
|
||||
msgstr "Pas de mot de passe a deux facteur spécifié. Entré en un dans la configuration étendu."
|
||||
msgstr ""
|
||||
"Pas de mot de passe à deux facteurs spécifié. Entrez-en un dans la "
|
||||
"configuration étendue."
|
||||
|
||||
#: ../tgp-request.c:139
|
||||
#: ../tgp-request.c:127
|
||||
msgid "Password invalid"
|
||||
msgstr "Mot de passe invalide"
|
||||
|
||||
#: ../tgp-request.c:162
|
||||
#: ../tgp-request.c:150
|
||||
#, c-format
|
||||
msgid "Accept secret chat '%s' on this device?"
|
||||
msgstr "Accepté la conversation secrète %s sur cette appareil ? "
|
||||
msgstr "Accepter la conversation secrète %s sur cet appareil ?"
|
||||
|
||||
#: ../tgp-request.c:163
|
||||
#: ../tgp-request.c:151
|
||||
msgid "Secret chat"
|
||||
msgstr "Conversation secrète"
|
||||
|
||||
#: ../tgp-request.c:163
|
||||
#: ../tgp-request.c:151
|
||||
msgid ""
|
||||
"Secret chats can only have one end point. If you accept a secret chat on "
|
||||
"this device, its messages will not be available anywhere else. If you "
|
||||
"decline, you can still accept the chat on other devices."
|
||||
msgstr "Les conversation secrète ne peuvent être vu que sur un seul appareil. Si vous accepté la conversation secrète sur cette appareil, elle ne sera pas disponible ailleurs. Si vous refusé, vous pourrai toujours accepté cette conversation sur un autre appareil."
|
||||
msgstr ""
|
||||
"Les conversations secrètes ne peuvent être vues que sur un seul appareil. Si"
|
||||
" vous acceptez la conversation secrète sur cet appareil, elle ne sera pas "
|
||||
"disponible ailleurs. Si vous refusez, vous pourrez toujours accepter cette "
|
||||
"conversation sur un autre appareil."
|
||||
|
||||
#: ../tgp-request.c:194
|
||||
#: ../tgp-request.c:182
|
||||
msgid ""
|
||||
"Invite at least one additional user by specifying\n"
|
||||
" their full name (autocompletion available).\n"
|
||||
"You can add more users once the chat was created."
|
||||
msgstr "Invité au moins un autre utilisateur (auto-complétion disponible).\nVous pouvez ajouté plus d'utilisateur une fois la conversation créer."
|
||||
msgstr ""
|
||||
"Invitez au moins un autre utilisateur (auto-complétion disponible).\n"
|
||||
"Vous pouvez ajouter plus d'utilisateurs une fois la conversation créée."
|
||||
|
||||
#: ../tgp-request.c:210
|
||||
#: ../tgp-request.c:185 ../tgp-request.c:189 ../tgp-request.c:193
|
||||
msgid "Username"
|
||||
msgstr "Nom d'utilisateur"
|
||||
|
||||
#: ../tgp-request.c:198
|
||||
msgid "Create group chat"
|
||||
msgstr "Créer un groupe de conversation"
|
||||
msgstr "Créer une conversation de groupe"
|
||||
|
||||
#: ../tgp-request.c:210
|
||||
#: ../tgp-request.c:198
|
||||
msgid "Invite users"
|
||||
msgstr "Invité des utilisateurs"
|
||||
msgstr "Inviter des utilisateurs"
|
||||
|
||||
#: ../tgp-request.c:229 ../tgp-request.c:244
|
||||
#: ../tgp-request.c:217 ../tgp-request.c:232
|
||||
msgid "Change password"
|
||||
msgstr "Changé le mot de passe"
|
||||
msgstr "Changer le mot de passe"
|
||||
|
||||
#: ../tgp-request.c:231
|
||||
#: ../tgp-request.c:219
|
||||
msgid "Current"
|
||||
msgstr "Courent"
|
||||
msgstr "Courrant"
|
||||
|
||||
#: ../tgp-request.c:235 ../tgp-request.c:265
|
||||
#: ../tgp-request.c:223 ../tgp-request.c:253
|
||||
msgid "Password"
|
||||
msgstr "Mot de passe"
|
||||
|
||||
#: ../tgp-request.c:239 ../tgp-request.c:269
|
||||
#: ../tgp-request.c:227 ../tgp-request.c:257
|
||||
msgid "Confirm"
|
||||
msgstr "Confirmer"
|
||||
|
||||
#: ../tgp-request.c:263 ../tgp-request.c:274
|
||||
#: ../tgp-request.c:251 ../tgp-request.c:262
|
||||
msgid "New password"
|
||||
msgstr "Nouveau mot de passe"
|
||||
|
||||
|
@ -428,58 +503,113 @@ msgstr "Nouveau mot de passe"
|
|||
#. ask for the phone number directly, cause in that case the account would
|
||||
#. still be created
|
||||
#. named with the invalid phone number, even though the login will work
|
||||
#: ../tgp-request.c:312
|
||||
#: ../tgp-request.c:300
|
||||
msgid "Invalid phone number"
|
||||
msgstr "Numéro de téléphone invalide"
|
||||
|
||||
#: ../tgp-request.c:313
|
||||
#: ../tgp-request.c:301
|
||||
msgid ""
|
||||
"Please enter only numbers in the international phone number format, a leading + following by the country prefix and the phone number.\n"
|
||||
"Do not use any other special chars."
|
||||
msgstr "Entré seulement des numéro dans le champs pour le numéro international, un + suivi du préfixe de pays et du numéro de téléphone.\nN’utilise aucun autre caractère spécial."
|
||||
msgstr ""
|
||||
"Entrez seulement des numéros dans le champs pour le numéro international, un + suivi du préfixe de pays et du numéro de téléphone.\n"
|
||||
"N'utilisez aucun autre caractère spécial."
|
||||
|
||||
#: ../tgp-request.c:370
|
||||
msgid "Leave Chat"
|
||||
msgstr "Quitter la conversation"
|
||||
|
||||
#: ../tgp-request.c:372
|
||||
msgid "Do you want to leave this chat permantently?"
|
||||
msgstr "Voulez-vous quitter cette discussion définitivement ?"
|
||||
|
||||
#: ../tgp-request.c:377
|
||||
msgid "Abort Secret Chat"
|
||||
msgstr "Abandonner la conversation secrète"
|
||||
|
||||
#: ../tgp-request.c:379
|
||||
msgid "Do you want to terminate this secret chat permantently?"
|
||||
msgstr "Voulez-vous clore cette conversation définitivement ?"
|
||||
|
||||
#: ../tgp-request.c:384
|
||||
msgid "Delete Contact"
|
||||
msgstr "Supprimer ce contact"
|
||||
|
||||
#: ../tgp-request.c:386
|
||||
msgid "Do you want to remove this user from your global contact list?"
|
||||
msgstr ""
|
||||
"Voulez-vous supprimer cet utilisateur de votre liste de contacts globale ?"
|
||||
|
||||
#: ../tgp-request.c:401
|
||||
msgid "Leave Channel"
|
||||
msgstr "Quitter le canal"
|
||||
|
||||
#: ../tgp-request.c:403
|
||||
msgid "Do you want to leave this channel?"
|
||||
msgstr "Voulez-vous quitter ce canal ?"
|
||||
|
||||
#. This should be the language's timestamp format. This is preceded by a
|
||||
#. colon.
|
||||
#: ../tgp-utils.c:32
|
||||
#: ../tgp-utils.c:27
|
||||
msgid "%d.%m.%Y %H:%M"
|
||||
msgstr "%d.%m.%Y %H:%M"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:53
|
||||
#: ../tgp-utils.c:48
|
||||
msgid "recently"
|
||||
msgstr "récamment"
|
||||
msgstr "récemment"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:57
|
||||
#: ../tgp-utils.c:52
|
||||
msgid "last week"
|
||||
msgstr "semaine précédente"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:61
|
||||
#: ../tgp-utils.c:56
|
||||
msgid "last month"
|
||||
msgstr "mois précédent"
|
||||
|
||||
#. This is preceded by a colon. It refers to a point on time.
|
||||
#: ../tgp-utils.c:65
|
||||
#: ../tgp-utils.c:60
|
||||
msgid "unknown"
|
||||
msgstr "inconnue"
|
||||
|
||||
#: ../tgp-chat.c:79
|
||||
#: ../tgp-chat.c:108 ../tgp-chat.c:582
|
||||
msgid "Telegram Chats"
|
||||
msgstr "Conversations de Telegram"
|
||||
|
||||
#: ../tgp-chat.c:113
|
||||
msgid "You have already left this chat."
|
||||
msgstr "Vous avez déjá quitté cette conversation."
|
||||
msgstr "Vous avez déjà quitté cette conversation."
|
||||
|
||||
#: ../tgp-chat.c:127
|
||||
#: ../tgp-chat.c:224
|
||||
msgid "Subject:"
|
||||
msgstr "Sujet:"
|
||||
msgstr "Sujet :"
|
||||
|
||||
#: ../tgp-chat.c:133
|
||||
#: ../tgp-chat.c:230
|
||||
msgid "Invite link:"
|
||||
msgstr "Lien d'invitation:"
|
||||
msgstr "Lien d'invitation :"
|
||||
|
||||
#: ../tgp-chat.c:139
|
||||
#: ../tgp-chat.c:236
|
||||
msgid "Chat ID:"
|
||||
msgstr "Chat ID:"
|
||||
msgstr "Chat ID :"
|
||||
|
||||
#: ../tgp-chat.c:238
|
||||
#: ../tgp-chat.c:342
|
||||
msgid "Supergroup"
|
||||
msgstr "Supergroup"
|
||||
|
||||
#: ../tgp-chat.c:342
|
||||
msgid "Channel"
|
||||
msgstr "Canal"
|
||||
|
||||
#: ../tgp-chat.c:345
|
||||
msgid "Group"
|
||||
msgstr "Groupe"
|
||||
|
||||
#: ../tgp-chat.c:367
|
||||
msgid "Users in chat"
|
||||
msgstr "Utilisateurs dans la conversation"
|
||||
|
||||
#: ../tgp-chat.c:370
|
||||
msgid "Type"
|
||||
msgstr "Type"
|
||||
|
|
469
po/it_IT.po
469
po/it_IT.po
|
@ -1,89 +1,93 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
# Translators:
|
||||
# Giuseppe Pignataro <rogepix@gmail.com>, 2015
|
||||
# Ste <plurimoste@openmailbox.org>, 2015
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: telegram-purple\n"
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2015-11-21 14:37+0100\n"
|
||||
"PO-Revision-Date: 2015-12-18 13:05+0000\n"
|
||||
"Last-Translator: Ben Wiederhake <BenWiederhake.GitHub@gmx.de>\n"
|
||||
"Language-Team: Italian (Italy) (http://www.transifex.com/telegram-purple-developers/telegram-purple/language/it_IT/)\n"
|
||||
"POT-Creation-Date: 2016-08-31 22:53+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Giuseppe Pignataro (Fasbyte01) <rogepix@gmail.com>, 2017\n"
|
||||
"Language-Team: Italian (Italy) (https://www.transifex.com/telegram-purple-developers/teams/53149/it_IT/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: it_IT\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: ../telegram-base.c:515
|
||||
#: ../telegram-base.c:500
|
||||
msgid "Couldn't create group"
|
||||
msgstr "Impossibile creare un gruppo"
|
||||
|
||||
#: ../telegram-base.c:515
|
||||
#: ../telegram-base.c:501
|
||||
msgid "Please select at least one other user."
|
||||
msgstr "Seleziona almeno un altro utente"
|
||||
|
||||
#: ../telegram-base.c:570
|
||||
#: ../telegram-base.c:555
|
||||
msgid "Query Failed"
|
||||
msgstr "Richiesta fallita"
|
||||
|
||||
#: ../telegram-purple.c:193
|
||||
#: ../telegram-purple.c:162
|
||||
msgid "Secret chat ready."
|
||||
msgstr ""
|
||||
msgstr "Chat segreta pronta."
|
||||
|
||||
#: ../telegram-purple.c:200
|
||||
#: ../telegram-purple.c:170
|
||||
msgid "Secret chat terminated."
|
||||
msgstr "Chat segreta terminata."
|
||||
|
||||
#: ../telegram-purple.c:268
|
||||
#: ../telegram-purple.c:182
|
||||
msgid "Telegram"
|
||||
msgstr "Telegram"
|
||||
|
||||
#: ../telegram-purple.c:229
|
||||
msgid "Message marked as read."
|
||||
msgstr "Messaggio contrassegnato come letto."
|
||||
|
||||
#: ../telegram-purple.c:486
|
||||
#: ../telegram-purple.c:339
|
||||
#, c-format
|
||||
msgid "Invite link: %s"
|
||||
msgstr "Link d'invito: %s"
|
||||
|
||||
#: ../telegram-purple.c:506 ../telegram-purple.c:507
|
||||
#. FIXME: Can TGLCHF_MODERATOR export links?
|
||||
#: ../telegram-purple.c:350
|
||||
msgid "Creating chat link failed"
|
||||
msgstr "Creazione del link della chat fallito"
|
||||
|
||||
#: ../telegram-purple.c:508
|
||||
#: ../telegram-purple.c:351
|
||||
msgid "You need to be admin of the group to do that."
|
||||
msgstr ""
|
||||
msgstr "Devi essere admin del gruppo per eseguire questa operazione."
|
||||
|
||||
#: ../telegram-purple.c:531
|
||||
#: ../telegram-purple.c:416
|
||||
msgid "Chat joined"
|
||||
msgstr "Entrato nella chat"
|
||||
|
||||
#: ../telegram-purple.c:532
|
||||
#: ../telegram-purple.c:417
|
||||
msgid "Chat added to list of chat rooms."
|
||||
msgstr "Chat aggiunta alla lista delle chat rooms"
|
||||
|
||||
#: ../telegram-purple.c:552
|
||||
#: ../telegram-purple.c:443
|
||||
msgid "Start secret chat..."
|
||||
msgstr ""
|
||||
msgstr "Inizia chat segreta..."
|
||||
|
||||
#. Generate Public Link
|
||||
#: ../telegram-purple.c:558
|
||||
#: ../telegram-purple.c:450
|
||||
msgid "Invite users by link..."
|
||||
msgstr ""
|
||||
msgstr "Invita utenti tramite link..."
|
||||
|
||||
#. Delete self from chat
|
||||
#: ../telegram-purple.c:564
|
||||
#: ../telegram-purple.c:458
|
||||
msgid "Delete and exit..."
|
||||
msgstr ""
|
||||
msgstr "Elimina ed esci..."
|
||||
|
||||
#: ../telegram-purple.c:632
|
||||
#: ../telegram-purple.c:546
|
||||
#, c-format
|
||||
msgid "Unable to sign on as %s: pubkey not found."
|
||||
msgstr ""
|
||||
msgid "Unable to sign on as %s: file (public key) not found."
|
||||
msgstr "Impossibile accedere come %s: file (chiave pubblica) non trovato."
|
||||
|
||||
#: ../telegram-purple.c:636
|
||||
#: ../telegram-purple.c:550
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Make sure telegram-purple is installed properly,\n"
|
||||
|
@ -92,395 +96,518 @@ msgid ""
|
|||
"try 'make local_install', or simply copy\n"
|
||||
"%1$s to %2$s."
|
||||
msgstr ""
|
||||
"Assicurati che telegram-purple sia installato correttamente,\n"
|
||||
"includendo il file .tglpub.\n"
|
||||
"Se hai avviato SELinux (p.e. quando si usa Tails),\n"
|
||||
"prova 'make local_install', o semplicemente copia\n"
|
||||
"%1$s a %2$s."
|
||||
|
||||
#: ../telegram-purple.c:657
|
||||
#: ../telegram-purple.c:572
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Unable to sign on as %s: problem in the underlying library 'tgl'. Please "
|
||||
"submit a bug report with the debug log."
|
||||
msgstr ""
|
||||
"Impossibile entrare come %s: problema con la libreria 'tgl'. Invia un bug "
|
||||
"report con il log di debug."
|
||||
|
||||
#: ../telegram-purple.c:576
|
||||
msgid "Problem in tgl"
|
||||
msgstr "Problema in tgl"
|
||||
|
||||
#. TRANSLATORS: Please fill in your own prefix!
|
||||
#: ../telegram-purple.c:584
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Unable to sign on as %s: phone number lacks country prefix. Numbers must "
|
||||
"start with the full international prefix code, e.g. +49 for Germany."
|
||||
msgstr "Impossibile accedere come %s: il numero telefonico manca del prefisso internazionale.I numeri devono iniziare con il prefisso internazionale completo, e.s. +39 per Italia."
|
||||
"start with the full international prefix code, e.g. +1 for USA."
|
||||
msgstr ""
|
||||
"Impossibile accedere come %s: il numero telefonico manca del prefisso "
|
||||
"internazionale.I numeri devono iniziare con il prefisso internazionale "
|
||||
"completo, p.e. +39 per Italia."
|
||||
|
||||
#: ../telegram-purple.c:662
|
||||
#: ../telegram-purple.c:589
|
||||
msgid "Incomplete phone number"
|
||||
msgstr "Numero di telefono incompleto"
|
||||
|
||||
#: ../telegram-purple.c:788 ../telegram-purple.c:789
|
||||
#: ../telegram-purple.c:642
|
||||
msgid "Secret chat was already deleted"
|
||||
msgstr "La chat segreta è già stata eliminata"
|
||||
|
||||
#: ../telegram-purple.c:644
|
||||
msgid "Secret chat is not ready"
|
||||
msgstr "La chat segreta non è pronta"
|
||||
|
||||
#: ../telegram-purple.c:652
|
||||
msgid "Only the creator of a channel can post messages."
|
||||
msgstr "Solo il creatore di un canale può postare messaggi."
|
||||
|
||||
#: ../telegram-purple.c:695
|
||||
msgid "Cannot invite buddy to chat"
|
||||
msgstr "Impossibile invitare il contatto alla chat."
|
||||
|
||||
#: ../telegram-purple.c:790
|
||||
#: ../telegram-purple.c:696
|
||||
msgid "Specified user does not exist."
|
||||
msgstr "L'utente specificato non esiste."
|
||||
|
||||
#: ../telegram-purple.c:709
|
||||
msgid "phone no. (+ country prefix)"
|
||||
msgstr "num. telefono ( + prefisso internazionale)"
|
||||
|
||||
#. Login
|
||||
#: ../telegram-purple.c:932
|
||||
#: ../telegram-purple.c:817
|
||||
msgid "Password (two factor authentication)"
|
||||
msgstr "Password (autenticazione a due fattori)"
|
||||
|
||||
#: ../telegram-purple.c:938
|
||||
#: ../telegram-purple.c:822
|
||||
msgid ""
|
||||
"Fallback SMS verification\n"
|
||||
"(Helps when not using Pidgin and you aren't being prompted for the code)"
|
||||
msgstr "Verifica via SMS di scorta.\n(Aiuta quando non si usa Pidgin e non viene richiesto il codice)"
|
||||
msgstr ""
|
||||
"Verifica via SMS di scorta.\n"
|
||||
"(Aiuta quando non si usa Pidgin e non viene richiesto il codice)"
|
||||
|
||||
#: ../telegram-purple.c:946
|
||||
msgid "ask"
|
||||
msgstr "chiedi"
|
||||
|
||||
#: ../telegram-purple.c:947
|
||||
#: ../telegram-purple.c:828
|
||||
msgid "always"
|
||||
msgstr "sempre"
|
||||
|
||||
#: ../telegram-purple.c:948
|
||||
#: ../telegram-purple.c:829
|
||||
msgid "never"
|
||||
msgstr "mai"
|
||||
|
||||
#: ../telegram-purple.c:950
|
||||
#: ../telegram-purple.c:830
|
||||
msgid "ask"
|
||||
msgstr "chiedi"
|
||||
|
||||
#: ../telegram-purple.c:832
|
||||
msgid "Accept secret chats"
|
||||
msgstr "Accetta chat segrete"
|
||||
|
||||
#: ../telegram-purple.c:955
|
||||
#: ../telegram-purple.c:836
|
||||
msgid "Display buddies offline after (days)"
|
||||
msgstr "Mostra utenti offline dopo (giorni)"
|
||||
|
||||
#: ../telegram-purple.c:960
|
||||
msgid "Fetch past history on first login"
|
||||
msgstr "Mostra la cronologia passata al primo accesso"
|
||||
|
||||
#: ../telegram-purple.c:965
|
||||
#: ../telegram-purple.c:840
|
||||
msgid ""
|
||||
"Don't fetch history older than (days)\n"
|
||||
"(0 for unlimited)"
|
||||
msgstr "Non recuperare la cronologia meno recente che (giorni)\n(0 per illimitato)"
|
||||
msgstr ""
|
||||
"Non recuperare la cronologia meno recente che (giorni)\n"
|
||||
"(0 per illimitato)"
|
||||
|
||||
#. Media
|
||||
#: ../telegram-purple.c:845
|
||||
msgid "Autoload media size (kb)"
|
||||
msgstr "Grandezza media autocaricato (kb)"
|
||||
|
||||
#. Chats
|
||||
#: ../telegram-purple.c:973
|
||||
#: ../telegram-purple.c:850
|
||||
msgid "Add all group chats to buddy list"
|
||||
msgstr "Aggiungi tutte le chat di gruppo alla lista contatti"
|
||||
|
||||
#. Read notifications
|
||||
#: ../telegram-purple.c:981
|
||||
#: ../telegram-purple.c:855
|
||||
msgid "Display notices of receipt"
|
||||
msgstr "Mostra notifiche di ricezione"
|
||||
|
||||
#: ../telegram-purple.c:986
|
||||
#: ../telegram-purple.c:859
|
||||
msgid "Send notices of receipt when present"
|
||||
msgstr "Invia notifiche di ricezione quando presente"
|
||||
|
||||
#: ../tgp-2prpl.c:178 ../tgp-request.c:108
|
||||
msgid "First name"
|
||||
msgstr "Nome"
|
||||
#: ../telegram-purple.c:884
|
||||
msgid "Telegram Protocol Plugin."
|
||||
msgstr "Plugin di protocollo Telegram"
|
||||
|
||||
#: ../tgp-2prpl.c:179 ../tgp-request.c:111
|
||||
msgid "Last name"
|
||||
msgstr "Cognome"
|
||||
|
||||
#: ../tgp-2prpl.c:181
|
||||
msgid "Name"
|
||||
msgstr "Nome"
|
||||
|
||||
#: ../tgp-2prpl.c:186 ../tgp-request.c:197 ../tgp-request.c:201
|
||||
#: ../tgp-request.c:205
|
||||
msgid "Username"
|
||||
msgstr "Nome utente"
|
||||
|
||||
#: ../tgp-2prpl.c:191
|
||||
msgid "Last seen"
|
||||
msgstr "Visto l'ultima volta"
|
||||
|
||||
#: ../tgp-2prpl.c:196
|
||||
msgid "Phone"
|
||||
msgstr "Telefono"
|
||||
|
||||
#: ../tgp-2prpl.c:208
|
||||
msgid "Waiting for the user to get online..."
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-2prpl.c:212
|
||||
msgid "Self destruction timer"
|
||||
msgstr "Timer di autodistruzione"
|
||||
|
||||
#: ../tgp-2prpl.c:218
|
||||
msgid "Timer is not enabled."
|
||||
msgstr "Timer non attivato."
|
||||
|
||||
#: ../tgp-2prpl.c:225
|
||||
msgid "Secret key"
|
||||
msgstr "Chiave segreta"
|
||||
|
||||
#: ../tgp-msg.c:72
|
||||
#: ../tgp-msg.c:58
|
||||
#, c-format
|
||||
msgid "%2$s created chat %1$s."
|
||||
msgstr "%2$s ha creato la chat %1$s."
|
||||
|
||||
#: ../tgp-msg.c:75
|
||||
#: ../tgp-msg.c:61
|
||||
#, c-format
|
||||
msgid "%2$s changed title to %1$s."
|
||||
msgstr "%2$s ha cambiato titolo a %1$s."
|
||||
|
||||
#: ../tgp-msg.c:78
|
||||
#: ../tgp-msg.c:64
|
||||
#, c-format
|
||||
msgid "%s changed photo."
|
||||
msgstr "%s ha cambiato la foto."
|
||||
|
||||
#: ../tgp-msg.c:81
|
||||
#: ../tgp-msg.c:67
|
||||
#, c-format
|
||||
msgid "%s deleted photo."
|
||||
msgstr "%s ha cancellato la foto."
|
||||
|
||||
#: ../tgp-msg.c:89
|
||||
#: ../tgp-msg.c:75
|
||||
#, c-format
|
||||
msgid "%1$s added user %2$s by link."
|
||||
msgstr "%1$s ha aggiunto l'utente %2$s tramite link."
|
||||
|
||||
#: ../tgp-msg.c:102
|
||||
#: ../tgp-msg.c:90
|
||||
#, c-format
|
||||
msgid "%2$s added user %1$s."
|
||||
msgstr "%2$s ha aggiunto l'utente %1$s."
|
||||
|
||||
#: ../tgp-msg.c:125 ../tgp-msg.c:140
|
||||
#: ../tgp-msg.c:114 ../tgp-msg.c:131
|
||||
#, c-format
|
||||
msgid "%2$s deleted user %1$s."
|
||||
msgstr "%2$s ha eliminato l'utente %1$s."
|
||||
|
||||
#: ../tgp-msg.c:146
|
||||
#: ../tgp-msg.c:138
|
||||
#, c-format
|
||||
msgid "%2$s set self destruction timer to %1$d second."
|
||||
msgid_plural "%2$s set self destruction timer to %1$d seconds."
|
||||
msgstr[0] "%2$s ha impostato il timer di autodistruzione a %1$d secondi."
|
||||
msgstr[1] "%2$s ha impostato il timer di autodistruzione a %1$d secondi."
|
||||
|
||||
#: ../tgp-msg.c:152
|
||||
#: ../tgp-msg.c:144
|
||||
#, c-format
|
||||
msgid "%2$s marked %1$d message read."
|
||||
msgid_plural "%2$s marked %1$d messages read."
|
||||
msgstr[0] "%2$s ha contrassegnato come letti i messaggi %1$d "
|
||||
msgstr[1] "%2$s ha contrassegnato come letti i messaggi %1$d "
|
||||
|
||||
#: ../tgp-msg.c:158
|
||||
#: ../tgp-msg.c:150
|
||||
#, c-format
|
||||
msgid "%2$s deleted %1$d message."
|
||||
msgid_plural "%2$s deleted %1$d messages."
|
||||
msgstr[0] "%2$s ha cancellato %1$d messaggi."
|
||||
msgstr[1] "%2$s ha cancellato %1$d messaggi."
|
||||
|
||||
#: ../tgp-msg.c:164
|
||||
#: ../tgp-msg.c:156
|
||||
#, c-format
|
||||
msgid "%2$s made a screenshot of %1$d message."
|
||||
msgid_plural "%2$s made a screenshot of %1$d messages."
|
||||
msgstr[0] "%2$s ha creato una immagine dello schermo dei messaggi %1$d."
|
||||
msgstr[1] "%2$s ha creato una immagine dello schermo dei messaggi %1$d."
|
||||
|
||||
#: ../tgp-msg.c:162
|
||||
#, c-format
|
||||
msgid "Channel %1$s created"
|
||||
msgstr "Canale %1$s creato"
|
||||
|
||||
#. FIXME: check if this makes sense
|
||||
#: ../tgp-msg.c:165 ../tgp-chat.c:124 ../tgp-chat.c:576
|
||||
msgid "Telegram Channels"
|
||||
msgstr "Canali Telegram"
|
||||
|
||||
#: ../tgp-msg.c:191
|
||||
msgid "Sending message failed."
|
||||
msgstr "Invio immagine fallito."
|
||||
|
||||
#: ../tgp-msg.c:296
|
||||
#: ../tgp-msg.c:253
|
||||
msgid "Sending image failed."
|
||||
msgstr "Invio immagine fallito."
|
||||
|
||||
#: ../tgp-msg.c:310
|
||||
msgid "Sorry, sending documents to encrypted chats not yet supported."
|
||||
msgstr "Spiacente, l'invio di documenti nelle chat criptate non ancora supportato."
|
||||
|
||||
#: ../tgp-msg.c:400
|
||||
#: ../tgp-msg.c:417
|
||||
#, c-format
|
||||
msgid "%s sent a sticker."
|
||||
msgstr "%s ha inviato uno sticker."
|
||||
|
||||
#: ../tgp-net.c:286
|
||||
#: ../tgp-msg.c:463
|
||||
msgid "failed loading message"
|
||||
msgstr "caricamento del messaggio fallito"
|
||||
|
||||
#: ../tgp-msg.c:498
|
||||
msgid "[animation]"
|
||||
msgstr "[animazione]"
|
||||
|
||||
#: ../tgp-msg.c:515
|
||||
msgid "[audio]"
|
||||
msgstr "[audio]"
|
||||
|
||||
#: ../tgp-msg.c:515
|
||||
msgid "[video]"
|
||||
msgstr "[video]"
|
||||
|
||||
#: ../tgp-msg.c:604
|
||||
#, c-format
|
||||
msgid "<b>Forwarded message from: %s</b><br>%s"
|
||||
msgstr "<b>Messaggio inoltrato da: %s</b><br>%s"
|
||||
|
||||
#. FIXME: sometimes users aren't part of the response when receiving a
|
||||
#. forwarded message
|
||||
#: ../tgp-msg.c:607
|
||||
#, c-format
|
||||
msgid "<b>Forwarded message:</b><br>%s"
|
||||
msgstr "<b>Messaggio inoltrato:</b><br>%s"
|
||||
|
||||
#: ../tgp-msg.c:720
|
||||
msgid "loading document or picture failed"
|
||||
msgstr "caricamento del documento o della foto fallito"
|
||||
|
||||
#: ../tgp-net.c:281
|
||||
msgid "Cannot connect to main server"
|
||||
msgstr "Impossibile connettersi col server"
|
||||
|
||||
#: ../tgp-net.c:342
|
||||
#: ../tgp-net.c:322
|
||||
msgid "Cannot connect to server: Ping timeout."
|
||||
msgstr "Impossibile connettersi col server: Ping timeout."
|
||||
msgstr "Impossibile connettersi al server: Ping timeout."
|
||||
|
||||
#: ../tgp-net.c:387
|
||||
#: ../tgp-net.c:365
|
||||
msgid "Lost connection to the server..."
|
||||
msgstr ""
|
||||
msgstr "Connessione al server fallita..."
|
||||
|
||||
#: ../tgp-request.c:64
|
||||
#: ../tgp-request.c:51
|
||||
msgid ""
|
||||
"Telegram wants to verify your identity. Please enter the login code that you"
|
||||
" have received via SMS."
|
||||
msgstr "Telegram vuole verificare la tua identità, Prego inserisci il codice ricevuto via SMS."
|
||||
msgstr ""
|
||||
"Telegram vuole verificare la tua identità, Prego inserisci il codice "
|
||||
"ricevuto via SMS."
|
||||
|
||||
#: ../tgp-request.c:67
|
||||
#: ../tgp-request.c:54
|
||||
msgid "Login code"
|
||||
msgstr "Codice di accesso (login)"
|
||||
|
||||
#: ../tgp-request.c:67
|
||||
#: ../tgp-request.c:54
|
||||
msgid "Enter login code"
|
||||
msgstr "Inserire codice d'accesso (login)"
|
||||
|
||||
#: ../tgp-request.c:67
|
||||
#: ../tgp-request.c:54
|
||||
msgid "the code"
|
||||
msgstr "il codice"
|
||||
|
||||
#: ../tgp-request.c:67 ../tgp-request.c:116 ../tgp-request.c:210
|
||||
#: ../tgp-request.c:245 ../tgp-request.c:275
|
||||
#: ../tgp-request.c:54 ../tgp-request.c:104 ../tgp-request.c:198
|
||||
#: ../tgp-request.c:233 ../tgp-request.c:263
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
|
||||
#: ../tgp-request.c:68 ../tgp-request.c:116 ../tgp-request.c:135
|
||||
#: ../tgp-request.c:211 ../tgp-request.c:246 ../tgp-request.c:276
|
||||
#: ../tgp-request.c:55 ../tgp-request.c:104 ../tgp-request.c:123
|
||||
#: ../tgp-request.c:199 ../tgp-request.c:234 ../tgp-request.c:264
|
||||
msgid "Cancel"
|
||||
msgstr "Annulla"
|
||||
|
||||
#: ../tgp-request.c:107
|
||||
#: ../tgp-request.c:95
|
||||
msgid "Registration"
|
||||
msgstr "Registrazione"
|
||||
|
||||
#: ../tgp-request.c:115
|
||||
#: ../tgp-request.c:96
|
||||
msgid "First name"
|
||||
msgstr "Nome"
|
||||
|
||||
#: ../tgp-request.c:99
|
||||
msgid "Last name"
|
||||
msgstr "Cognome"
|
||||
|
||||
#: ../tgp-request.c:103
|
||||
msgid "Register"
|
||||
msgstr "Registrati"
|
||||
|
||||
#: ../tgp-request.c:115
|
||||
#: ../tgp-request.c:103
|
||||
msgid "Please register your phone number."
|
||||
msgstr "Per favore registra il tuo numero di telefono."
|
||||
|
||||
#. purple_request API not available
|
||||
#: ../tgp-request.c:120
|
||||
#: ../tgp-request.c:108
|
||||
msgid ""
|
||||
"Phone number is not registered. Please register your phone on a different "
|
||||
"client."
|
||||
msgstr "Numero telefonico non registrato. Per favore registra il tuo numero telefonico con un client differente."
|
||||
msgstr ""
|
||||
"Numero telefonico non registrato. Per favore registra il tuo numero "
|
||||
"telefonico con un client differente."
|
||||
|
||||
#: ../tgp-request.c:122
|
||||
#: ../tgp-request.c:110
|
||||
msgid "Not registered"
|
||||
msgstr "Non registrato"
|
||||
|
||||
#: ../tgp-request.c:134
|
||||
#: ../tgp-request.c:122
|
||||
msgid "Password needed"
|
||||
msgstr ""
|
||||
msgstr "Password necessaria"
|
||||
|
||||
#: ../tgp-request.c:134
|
||||
#: ../tgp-request.c:122
|
||||
msgid "Enter password for two factor authentication"
|
||||
msgstr "Inserire password per autenticazione a due fattori"
|
||||
|
||||
#: ../tgp-request.c:135
|
||||
#: ../tgp-request.c:123
|
||||
msgid "Ok"
|
||||
msgstr ""
|
||||
msgstr "Ok"
|
||||
|
||||
#: ../tgp-request.c:137
|
||||
#: ../tgp-request.c:125
|
||||
msgid ""
|
||||
"No password set for two factor authentication. Please enter it in the "
|
||||
"extended settings."
|
||||
msgstr "Nessuna password impostata per l'autenticazione a due fattori.Prego impostarla nelle impostazioni estese"
|
||||
msgstr ""
|
||||
"Nessuna password impostata per l'autenticazione a due fattori.Prego "
|
||||
"impostarla nelle impostazioni estese"
|
||||
|
||||
#: ../tgp-request.c:139
|
||||
#: ../tgp-request.c:127
|
||||
msgid "Password invalid"
|
||||
msgstr "Password non valida"
|
||||
|
||||
#: ../tgp-request.c:162
|
||||
#: ../tgp-request.c:150
|
||||
#, c-format
|
||||
msgid "Accept secret chat '%s' on this device?"
|
||||
msgstr "Accetti la Chat Segreta '%s'?"
|
||||
|
||||
#: ../tgp-request.c:163
|
||||
#: ../tgp-request.c:151
|
||||
msgid "Secret chat"
|
||||
msgstr "Chat Segreta"
|
||||
|
||||
#: ../tgp-request.c:163
|
||||
#: ../tgp-request.c:151
|
||||
msgid ""
|
||||
"Secret chats can only have one end point. If you accept a secret chat on "
|
||||
"this device, its messages will not be available anywhere else. If you "
|
||||
"decline, you can still accept the chat on other devices."
|
||||
msgstr "Le Chat Segrete possono avere un solo punto terminale. Se accetti la chat segreta su questo dispositivo, i messaggi dentro di essa non saranno disponibili da nessun altra parte. Se declini, potrai accettare la chat su altri dispositivi."
|
||||
msgstr ""
|
||||
"Le Chat Segrete possono avere un solo punto terminale. Se accetti la chat "
|
||||
"segreta su questo dispositivo, i messaggi dentro di essa non saranno "
|
||||
"disponibili da nessun altra parte. Se declini, potrai accettare la chat su "
|
||||
"altri dispositivi."
|
||||
|
||||
#: ../tgp-request.c:194
|
||||
#: ../tgp-request.c:182
|
||||
msgid ""
|
||||
"Invite at least one additional user by specifying\n"
|
||||
" their full name (autocompletion available).\n"
|
||||
"You can add more users once the chat was created."
|
||||
msgstr ""
|
||||
"Invita almeno un altro utente specificando\n"
|
||||
" il suo nome completo (autocompletamento disponibile).\n"
|
||||
"Puoi aggiungere più utenti una volta che la chat è stata creata."
|
||||
|
||||
#: ../tgp-request.c:210
|
||||
#: ../tgp-request.c:185 ../tgp-request.c:189 ../tgp-request.c:193
|
||||
msgid "Username"
|
||||
msgstr "Nome utente"
|
||||
|
||||
#: ../tgp-request.c:198
|
||||
msgid "Create group chat"
|
||||
msgstr "Crea chat di gruppo"
|
||||
|
||||
#: ../tgp-request.c:210
|
||||
#: ../tgp-request.c:198
|
||||
msgid "Invite users"
|
||||
msgstr "Invita utenti"
|
||||
|
||||
#: ../tgp-request.c:229 ../tgp-request.c:244
|
||||
#: ../tgp-request.c:217 ../tgp-request.c:232
|
||||
msgid "Change password"
|
||||
msgstr ""
|
||||
msgstr "Cambia password"
|
||||
|
||||
#: ../tgp-request.c:231
|
||||
#: ../tgp-request.c:219
|
||||
msgid "Current"
|
||||
msgstr ""
|
||||
msgstr "Corrente"
|
||||
|
||||
#: ../tgp-request.c:235 ../tgp-request.c:265
|
||||
#: ../tgp-request.c:223 ../tgp-request.c:253
|
||||
msgid "Password"
|
||||
msgstr "Password"
|
||||
|
||||
#: ../tgp-request.c:239 ../tgp-request.c:269
|
||||
#: ../tgp-request.c:227 ../tgp-request.c:257
|
||||
msgid "Confirm"
|
||||
msgstr ""
|
||||
msgstr "Conferma"
|
||||
|
||||
#: ../tgp-request.c:263 ../tgp-request.c:274
|
||||
#: ../tgp-request.c:251 ../tgp-request.c:262
|
||||
msgid "New password"
|
||||
msgstr ""
|
||||
msgstr "Nuova password"
|
||||
|
||||
#. if we arrive here for the second time the specified phone number is not
|
||||
#. valid. We do not
|
||||
#. ask for the phone number directly, cause in that case the account would
|
||||
#. still be created
|
||||
#. named with the invalid phone number, even though the login will work
|
||||
#: ../tgp-request.c:312
|
||||
#: ../tgp-request.c:300
|
||||
msgid "Invalid phone number"
|
||||
msgstr "Numero di telefono non valido"
|
||||
|
||||
#: ../tgp-request.c:313
|
||||
#: ../tgp-request.c:301
|
||||
msgid ""
|
||||
"Please enter only numbers in the international phone number format, a leading + following by the country prefix and the phone number.\n"
|
||||
"Do not use any other special chars."
|
||||
msgstr ""
|
||||
"Inserire solo numeri nel formato telefonico internazionale, un + iniziale, seguito dal prefisso internazionale e al numero telefonico completo. \n"
|
||||
"Non usare altri caratteri speciali."
|
||||
|
||||
#: ../tgp-request.c:370
|
||||
msgid "Leave Chat"
|
||||
msgstr "Lascia chat"
|
||||
|
||||
#: ../tgp-request.c:372
|
||||
msgid "Do you want to leave this chat permantently?"
|
||||
msgstr "Vuoi lasciare questa chat in modo permanente?"
|
||||
|
||||
#: ../tgp-request.c:377
|
||||
msgid "Abort Secret Chat"
|
||||
msgstr "Annulla Chat Segreta"
|
||||
|
||||
#: ../tgp-request.c:379
|
||||
msgid "Do you want to terminate this secret chat permantently?"
|
||||
msgstr "Vuoi terminare questa chat segreta in modo permanente?"
|
||||
|
||||
#: ../tgp-request.c:384
|
||||
msgid "Delete Contact"
|
||||
msgstr "Elimina contatto"
|
||||
|
||||
#: ../tgp-request.c:386
|
||||
msgid "Do you want to remove this user from your global contact list?"
|
||||
msgstr "Vuoi rimuovere questo utente dal tuo elenco dei contatti globale?"
|
||||
|
||||
#: ../tgp-request.c:401
|
||||
msgid "Leave Channel"
|
||||
msgstr "Lascia il canale"
|
||||
|
||||
#: ../tgp-request.c:403
|
||||
msgid "Do you want to leave this channel?"
|
||||
msgstr "Vuoi lasciare questo canale?"
|
||||
|
||||
#. This should be the language's timestamp format. This is preceded by a
|
||||
#. colon.
|
||||
#: ../tgp-utils.c:32
|
||||
#: ../tgp-utils.c:27
|
||||
msgid "%d.%m.%Y %H:%M"
|
||||
msgstr "%d.%m.%Y %H:%M"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:53
|
||||
#: ../tgp-utils.c:48
|
||||
msgid "recently"
|
||||
msgstr "recentemente"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:57
|
||||
#: ../tgp-utils.c:52
|
||||
msgid "last week"
|
||||
msgstr "ultima settimana"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:61
|
||||
#: ../tgp-utils.c:56
|
||||
msgid "last month"
|
||||
msgstr "ultimo mese"
|
||||
|
||||
#. This is preceded by a colon. It refers to a point on time.
|
||||
#: ../tgp-utils.c:65
|
||||
#: ../tgp-utils.c:60
|
||||
msgid "unknown"
|
||||
msgstr "sconosciuto"
|
||||
|
||||
#: ../tgp-chat.c:79
|
||||
#: ../tgp-chat.c:108 ../tgp-chat.c:582
|
||||
msgid "Telegram Chats"
|
||||
msgstr "Chat di Telegram"
|
||||
|
||||
#: ../tgp-chat.c:113
|
||||
msgid "You have already left this chat."
|
||||
msgstr "Hai già lasciato questa chat."
|
||||
|
||||
#: ../tgp-chat.c:127
|
||||
#: ../tgp-chat.c:224
|
||||
msgid "Subject:"
|
||||
msgstr "Oggetto:"
|
||||
|
||||
#: ../tgp-chat.c:133
|
||||
#: ../tgp-chat.c:230
|
||||
msgid "Invite link:"
|
||||
msgstr "Link d'invito:"
|
||||
|
||||
#: ../tgp-chat.c:139
|
||||
#: ../tgp-chat.c:236
|
||||
msgid "Chat ID:"
|
||||
msgstr "ID chat:"
|
||||
|
||||
#: ../tgp-chat.c:238
|
||||
#: ../tgp-chat.c:342
|
||||
msgid "Supergroup"
|
||||
msgstr "Supergruppo"
|
||||
|
||||
#: ../tgp-chat.c:342
|
||||
msgid "Channel"
|
||||
msgstr "Canale"
|
||||
|
||||
#: ../tgp-chat.c:345
|
||||
msgid "Group"
|
||||
msgstr "Gruppo"
|
||||
|
||||
#: ../tgp-chat.c:367
|
||||
msgid "Users in chat"
|
||||
msgstr "Utenti in chat."
|
||||
|
||||
#: ../tgp-chat.c:370
|
||||
msgid "Type"
|
||||
msgstr "Tipo"
|
||||
|
|
613
po/nl.po
Normal file
613
po/nl.po
Normal file
|
@ -0,0 +1,613 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-08-31 22:53+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: justin [notsupplied] <inactive+justin50@transifex.com>, 2016\n"
|
||||
"Language-Team: Dutch (https://www.transifex.com/telegram-purple-developers/teams/53149/nl/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: nl\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: ../telegram-base.c:500
|
||||
msgid "Couldn't create group"
|
||||
msgstr "Kon groep niet aanmaken"
|
||||
|
||||
#: ../telegram-base.c:501
|
||||
msgid "Please select at least one other user."
|
||||
msgstr "Selecteer minimaal één andere gebruiker."
|
||||
|
||||
#: ../telegram-base.c:555
|
||||
msgid "Query Failed"
|
||||
msgstr "Zoekopdracht mislukt"
|
||||
|
||||
#: ../telegram-purple.c:162
|
||||
msgid "Secret chat ready."
|
||||
msgstr "Geheime chat gereed."
|
||||
|
||||
#: ../telegram-purple.c:170
|
||||
msgid "Secret chat terminated."
|
||||
msgstr "Geheime chat beëindigd."
|
||||
|
||||
#: ../telegram-purple.c:182
|
||||
msgid "Telegram"
|
||||
msgstr "Telegram"
|
||||
|
||||
#: ../telegram-purple.c:229
|
||||
msgid "Message marked as read."
|
||||
msgstr "Bericht gemarkeerd als gelezen."
|
||||
|
||||
#: ../telegram-purple.c:339
|
||||
#, c-format
|
||||
msgid "Invite link: %s"
|
||||
msgstr "Uitnodigingkoppeling: %s"
|
||||
|
||||
#. FIXME: Can TGLCHF_MODERATOR export links?
|
||||
#: ../telegram-purple.c:350
|
||||
msgid "Creating chat link failed"
|
||||
msgstr "Chatkoppeling aanmaken mislukt"
|
||||
|
||||
#: ../telegram-purple.c:351
|
||||
msgid "You need to be admin of the group to do that."
|
||||
msgstr "U moet administrator van de groep zijn om dat te kunnen doen."
|
||||
|
||||
#: ../telegram-purple.c:416
|
||||
msgid "Chat joined"
|
||||
msgstr "Bij chat binnengekomen"
|
||||
|
||||
#: ../telegram-purple.c:417
|
||||
msgid "Chat added to list of chat rooms."
|
||||
msgstr "Chat toegevoegd aan de chatruimtelijst."
|
||||
|
||||
#: ../telegram-purple.c:443
|
||||
msgid "Start secret chat..."
|
||||
msgstr "Geheime chat starten..."
|
||||
|
||||
#. Generate Public Link
|
||||
#: ../telegram-purple.c:450
|
||||
msgid "Invite users by link..."
|
||||
msgstr "Gebruikers met koppeling uitnodigen..."
|
||||
|
||||
#. Delete self from chat
|
||||
#: ../telegram-purple.c:458
|
||||
msgid "Delete and exit..."
|
||||
msgstr "Verwijderen en afsluiten..."
|
||||
|
||||
#: ../telegram-purple.c:546
|
||||
#, c-format
|
||||
msgid "Unable to sign on as %s: file (public key) not found."
|
||||
msgstr "Kan niet aanmelden als %s: (publieke sleutel) niet gevonden."
|
||||
|
||||
#: ../telegram-purple.c:550
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Make sure telegram-purple is installed properly,\n"
|
||||
"including the .tglpub file.\n"
|
||||
"If you're running SELinux (e.g. when using Tails),\n"
|
||||
"try 'make local_install', or simply copy\n"
|
||||
"%1$s to %2$s."
|
||||
msgstr ""
|
||||
"Zorg ervoor dat telegram-purple juist is \n"
|
||||
"geïnstalleerd, alsmede het .tglpub-bestand.\n"
|
||||
"Als u SELinux uitvoert (bijv. bij gebruik van Tails),\n"
|
||||
"probeer ‘make local_install’, of kopieer simpelweg\n"
|
||||
"%1$s naar %2$s."
|
||||
|
||||
#: ../telegram-purple.c:572
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Unable to sign on as %s: problem in the underlying library 'tgl'. Please "
|
||||
"submit a bug report with the debug log."
|
||||
msgstr ""
|
||||
"Kon niet aanmelden als %s: probleem in de onderliggende bibliotheek ‘tgl’. "
|
||||
"Verstuur alstublieft een foutenrapport met het debuglogboek."
|
||||
|
||||
#: ../telegram-purple.c:576
|
||||
msgid "Problem in tgl"
|
||||
msgstr "Probleem in tgl"
|
||||
|
||||
#. TRANSLATORS: Please fill in your own prefix!
|
||||
#: ../telegram-purple.c:584
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Unable to sign on as %s: phone number lacks country prefix. Numbers must "
|
||||
"start with the full international prefix code, e.g. +1 for USA."
|
||||
msgstr ""
|
||||
"Kon niet aanmelden als %s: landnummer ontbreekt in telefoonnummer. Nummers "
|
||||
"moeten starten met het volledige internationale landnummer, bijvoorbeeld +31"
|
||||
" voor Nederland."
|
||||
|
||||
#: ../telegram-purple.c:589
|
||||
msgid "Incomplete phone number"
|
||||
msgstr "Onvolledig telefoonnummer"
|
||||
|
||||
#: ../telegram-purple.c:642
|
||||
msgid "Secret chat was already deleted"
|
||||
msgstr "Geheime chat was al verwijderd"
|
||||
|
||||
#: ../telegram-purple.c:644
|
||||
msgid "Secret chat is not ready"
|
||||
msgstr "Geheime chat is niet gereed"
|
||||
|
||||
#: ../telegram-purple.c:652
|
||||
msgid "Only the creator of a channel can post messages."
|
||||
msgstr "Alleen de maker van een kanaal kan berichten plaatsen."
|
||||
|
||||
#: ../telegram-purple.c:695
|
||||
msgid "Cannot invite buddy to chat"
|
||||
msgstr "Kan vriend niet uitnodigen om te chatten"
|
||||
|
||||
#: ../telegram-purple.c:696
|
||||
msgid "Specified user does not exist."
|
||||
msgstr "Opgegeven gebruiker bestaat niet."
|
||||
|
||||
#: ../telegram-purple.c:709
|
||||
msgid "phone no. (+ country prefix)"
|
||||
msgstr "telefoonnummer (+ landnummer)"
|
||||
|
||||
#. Login
|
||||
#: ../telegram-purple.c:817
|
||||
msgid "Password (two factor authentication)"
|
||||
msgstr "Wachtwoord (authentificatie in twee stappen)"
|
||||
|
||||
#: ../telegram-purple.c:822
|
||||
msgid ""
|
||||
"Fallback SMS verification\n"
|
||||
"(Helps when not using Pidgin and you aren't being prompted for the code)"
|
||||
msgstr ""
|
||||
"SMS-verificatie om op terug te vallen\n"
|
||||
"(Helpt wanneer u Pidgin niet gebruikt en niet wordt gevraagd om de code)"
|
||||
|
||||
#: ../telegram-purple.c:828
|
||||
msgid "always"
|
||||
msgstr "altijd"
|
||||
|
||||
#: ../telegram-purple.c:829
|
||||
msgid "never"
|
||||
msgstr "nooit"
|
||||
|
||||
#: ../telegram-purple.c:830
|
||||
msgid "ask"
|
||||
msgstr "vragen"
|
||||
|
||||
#: ../telegram-purple.c:832
|
||||
msgid "Accept secret chats"
|
||||
msgstr "Geheime chats accepteren"
|
||||
|
||||
#: ../telegram-purple.c:836
|
||||
msgid "Display buddies offline after (days)"
|
||||
msgstr "Vrienden offline weergeven na (dagen)"
|
||||
|
||||
#: ../telegram-purple.c:840
|
||||
msgid ""
|
||||
"Don't fetch history older than (days)\n"
|
||||
"(0 for unlimited)"
|
||||
msgstr ""
|
||||
"Geschiedenis niet ophalen voor ouder\n"
|
||||
"dan (dagen) (0 voor oneindig)"
|
||||
|
||||
#. Media
|
||||
#: ../telegram-purple.c:845
|
||||
msgid "Autoload media size (kb)"
|
||||
msgstr "Mediagrootte automatisch laden (kb)"
|
||||
|
||||
#. Chats
|
||||
#: ../telegram-purple.c:850
|
||||
msgid "Add all group chats to buddy list"
|
||||
msgstr "Alle groepschats aan de vriendenlijst toevoegen"
|
||||
|
||||
#. Read notifications
|
||||
#: ../telegram-purple.c:855
|
||||
msgid "Display notices of receipt"
|
||||
msgstr "Ontvangstmeldingen tonen"
|
||||
|
||||
#: ../telegram-purple.c:859
|
||||
msgid "Send notices of receipt when present"
|
||||
msgstr "Ontvangstmeldingen versturen indien aanwezig"
|
||||
|
||||
#: ../telegram-purple.c:884
|
||||
msgid "Telegram Protocol Plugin."
|
||||
msgstr "Telegram-protocol-plug-in."
|
||||
|
||||
#: ../tgp-msg.c:58
|
||||
#, c-format
|
||||
msgid "%2$s created chat %1$s."
|
||||
msgstr "%2$s heeft geheime chat %1$s aangemaakt."
|
||||
|
||||
#: ../tgp-msg.c:61
|
||||
#, c-format
|
||||
msgid "%2$s changed title to %1$s."
|
||||
msgstr "%2$s heeft titel naar %1$s gewijzigd."
|
||||
|
||||
#: ../tgp-msg.c:64
|
||||
#, c-format
|
||||
msgid "%s changed photo."
|
||||
msgstr "%s heeft foto gewijzigd."
|
||||
|
||||
#: ../tgp-msg.c:67
|
||||
#, c-format
|
||||
msgid "%s deleted photo."
|
||||
msgstr "%s heeft foto verwijderd."
|
||||
|
||||
#: ../tgp-msg.c:75
|
||||
#, c-format
|
||||
msgid "%1$s added user %2$s by link."
|
||||
msgstr "%1$s heeft gebruiker %2$s toegevoegd met koppeling."
|
||||
|
||||
#: ../tgp-msg.c:90
|
||||
#, c-format
|
||||
msgid "%2$s added user %1$s."
|
||||
msgstr "%2$s heeft gebruiker %1$s toegevoegd."
|
||||
|
||||
#: ../tgp-msg.c:114 ../tgp-msg.c:131
|
||||
#, c-format
|
||||
msgid "%2$s deleted user %1$s."
|
||||
msgstr "%2$s heeft gebruiker %1$s verwijderd."
|
||||
|
||||
#: ../tgp-msg.c:138
|
||||
#, c-format
|
||||
msgid "%2$s set self destruction timer to %1$d second."
|
||||
msgid_plural "%2$s set self destruction timer to %1$d seconds."
|
||||
msgstr[0] "%2$s heeft zelfvernietigingstimer ingesteld op %1$d seconde."
|
||||
msgstr[1] "%2$s heeft zelfvernietigingstimer ingesteld op %1$d seconden."
|
||||
|
||||
#: ../tgp-msg.c:144
|
||||
#, c-format
|
||||
msgid "%2$s marked %1$d message read."
|
||||
msgid_plural "%2$s marked %1$d messages read."
|
||||
msgstr[0] "%2$s heeft %1$d bericht als gelezen gemarkeerd."
|
||||
msgstr[1] "%2$s heeft %1$d berichten als gelezen gemarkeerd."
|
||||
|
||||
#: ../tgp-msg.c:150
|
||||
#, c-format
|
||||
msgid "%2$s deleted %1$d message."
|
||||
msgid_plural "%2$s deleted %1$d messages."
|
||||
msgstr[0] "%2$s heeft %1$d bericht verwijderd."
|
||||
msgstr[1] "%2$s heeft %1$d berichten verwijderd."
|
||||
|
||||
#: ../tgp-msg.c:156
|
||||
#, c-format
|
||||
msgid "%2$s made a screenshot of %1$d message."
|
||||
msgid_plural "%2$s made a screenshot of %1$d messages."
|
||||
msgstr[0] "%2$s heeft een schermafdruk gemaakt van %1$d bericht."
|
||||
msgstr[1] "%2$s heeft een schermafdruk gemaakt van %1$d berichten."
|
||||
|
||||
#: ../tgp-msg.c:162
|
||||
#, c-format
|
||||
msgid "Channel %1$s created"
|
||||
msgstr "Kanaal %1$s aangemaakt"
|
||||
|
||||
#. FIXME: check if this makes sense
|
||||
#: ../tgp-msg.c:165 ../tgp-chat.c:124 ../tgp-chat.c:576
|
||||
msgid "Telegram Channels"
|
||||
msgstr "Telegram-kanalen"
|
||||
|
||||
#: ../tgp-msg.c:191
|
||||
msgid "Sending message failed."
|
||||
msgstr "Bericht versturen mislukt."
|
||||
|
||||
#: ../tgp-msg.c:253
|
||||
msgid "Sending image failed."
|
||||
msgstr "Afbeelding versturen mislukt."
|
||||
|
||||
#: ../tgp-msg.c:417
|
||||
#, c-format
|
||||
msgid "%s sent a sticker."
|
||||
msgstr "%s heeft een sticker verzonden."
|
||||
|
||||
#: ../tgp-msg.c:463
|
||||
msgid "failed loading message"
|
||||
msgstr "bericht laden mislukt"
|
||||
|
||||
#: ../tgp-msg.c:498
|
||||
msgid "[animation]"
|
||||
msgstr "[animatie]"
|
||||
|
||||
#: ../tgp-msg.c:515
|
||||
msgid "[audio]"
|
||||
msgstr "[audio]"
|
||||
|
||||
#: ../tgp-msg.c:515
|
||||
msgid "[video]"
|
||||
msgstr "[video]"
|
||||
|
||||
#: ../tgp-msg.c:604
|
||||
#, c-format
|
||||
msgid "<b>Forwarded message from: %s</b><br>%s"
|
||||
msgstr "<b>Doorgestuurd bericht van: %s</b><br>%s"
|
||||
|
||||
#. FIXME: sometimes users aren't part of the response when receiving a
|
||||
#. forwarded message
|
||||
#: ../tgp-msg.c:607
|
||||
#, c-format
|
||||
msgid "<b>Forwarded message:</b><br>%s"
|
||||
msgstr "<b>Doorgestuurd bericht:</b><br>%s"
|
||||
|
||||
#: ../tgp-msg.c:720
|
||||
msgid "loading document or picture failed"
|
||||
msgstr "document of foto laden mislukt"
|
||||
|
||||
#: ../tgp-net.c:281
|
||||
msgid "Cannot connect to main server"
|
||||
msgstr "Kan niet verbinden met hoofdserver"
|
||||
|
||||
#: ../tgp-net.c:322
|
||||
msgid "Cannot connect to server: Ping timeout."
|
||||
msgstr "Kan niet verbinden met server: ping-timeout"
|
||||
|
||||
#: ../tgp-net.c:365
|
||||
msgid "Lost connection to the server..."
|
||||
msgstr "Verbinding met de server verloren..."
|
||||
|
||||
#: ../tgp-request.c:51
|
||||
msgid ""
|
||||
"Telegram wants to verify your identity. Please enter the login code that you"
|
||||
" have received via SMS."
|
||||
msgstr ""
|
||||
"Telegram wil uw identiteit graag controleren. Voer de inlogcode in die u per"
|
||||
" SMS heeft ontvangen."
|
||||
|
||||
#: ../tgp-request.c:54
|
||||
msgid "Login code"
|
||||
msgstr "Inlogcode"
|
||||
|
||||
#: ../tgp-request.c:54
|
||||
msgid "Enter login code"
|
||||
msgstr "Inlogcode invoeren"
|
||||
|
||||
#: ../tgp-request.c:54
|
||||
msgid "the code"
|
||||
msgstr "de code"
|
||||
|
||||
#: ../tgp-request.c:54 ../tgp-request.c:104 ../tgp-request.c:198
|
||||
#: ../tgp-request.c:233 ../tgp-request.c:263
|
||||
msgid "OK"
|
||||
msgstr "Ok"
|
||||
|
||||
#: ../tgp-request.c:55 ../tgp-request.c:104 ../tgp-request.c:123
|
||||
#: ../tgp-request.c:199 ../tgp-request.c:234 ../tgp-request.c:264
|
||||
msgid "Cancel"
|
||||
msgstr "Annuleren"
|
||||
|
||||
#: ../tgp-request.c:95
|
||||
msgid "Registration"
|
||||
msgstr "Registratie"
|
||||
|
||||
#: ../tgp-request.c:96
|
||||
msgid "First name"
|
||||
msgstr "Voornaam"
|
||||
|
||||
#: ../tgp-request.c:99
|
||||
msgid "Last name"
|
||||
msgstr "Achternaam"
|
||||
|
||||
#: ../tgp-request.c:103
|
||||
msgid "Register"
|
||||
msgstr "Registreren"
|
||||
|
||||
#: ../tgp-request.c:103
|
||||
msgid "Please register your phone number."
|
||||
msgstr "Registreer uw telefoonnummer."
|
||||
|
||||
#. purple_request API not available
|
||||
#: ../tgp-request.c:108
|
||||
msgid ""
|
||||
"Phone number is not registered. Please register your phone on a different "
|
||||
"client."
|
||||
msgstr ""
|
||||
"Uw telefoonnummer is niet geregistreerd. Registreer uw telefoon op een ander"
|
||||
" apparaat."
|
||||
|
||||
#: ../tgp-request.c:110
|
||||
msgid "Not registered"
|
||||
msgstr "Niet geregistreerd"
|
||||
|
||||
#: ../tgp-request.c:122
|
||||
msgid "Password needed"
|
||||
msgstr "Wachtwoord benodigd"
|
||||
|
||||
#: ../tgp-request.c:122
|
||||
msgid "Enter password for two factor authentication"
|
||||
msgstr "Wachtwoord invoeren voor authentificatie in twee stappen"
|
||||
|
||||
#: ../tgp-request.c:123
|
||||
msgid "Ok"
|
||||
msgstr "Ok"
|
||||
|
||||
#: ../tgp-request.c:125
|
||||
msgid ""
|
||||
"No password set for two factor authentication. Please enter it in the "
|
||||
"extended settings."
|
||||
msgstr ""
|
||||
"Geen wachtwoord ingesteld voor authentificatie in twee stappen. Voer deze in"
|
||||
" bij de uitgebreide instellingen."
|
||||
|
||||
#: ../tgp-request.c:127
|
||||
msgid "Password invalid"
|
||||
msgstr "Wachtwoord ongeldig"
|
||||
|
||||
#: ../tgp-request.c:150
|
||||
#, c-format
|
||||
msgid "Accept secret chat '%s' on this device?"
|
||||
msgstr "Geheime chat ‘%s’ op dit apparaat accepteren?"
|
||||
|
||||
#: ../tgp-request.c:151
|
||||
msgid "Secret chat"
|
||||
msgstr "Geheime chat"
|
||||
|
||||
#: ../tgp-request.c:151
|
||||
msgid ""
|
||||
"Secret chats can only have one end point. If you accept a secret chat on "
|
||||
"this device, its messages will not be available anywhere else. If you "
|
||||
"decline, you can still accept the chat on other devices."
|
||||
msgstr ""
|
||||
"Geheime chat kunnen slechts één afleverpunt bevatten. Als u een geheime chat"
|
||||
" op dit apparaat accepteert kunt u deze berichten nergens anders bekijken. "
|
||||
"Als u weigert kunt u de chat nog steeds op andere apparaten accepteren."
|
||||
|
||||
#: ../tgp-request.c:182
|
||||
msgid ""
|
||||
"Invite at least one additional user by specifying\n"
|
||||
" their full name (autocompletion available).\n"
|
||||
"You can add more users once the chat was created."
|
||||
msgstr ""
|
||||
"Nodig minimaal één andere gebruiker uit door\n"
|
||||
" volledige namen op te geven (automatisch \n"
|
||||
"aanvullen is beschikbaar). U kunt meer gebruikers\n"
|
||||
"toevoegen als de chat aangemaakt is."
|
||||
|
||||
#: ../tgp-request.c:185 ../tgp-request.c:189 ../tgp-request.c:193
|
||||
msgid "Username"
|
||||
msgstr "Gebruikersnaam"
|
||||
|
||||
#: ../tgp-request.c:198
|
||||
msgid "Create group chat"
|
||||
msgstr "Groepschat aanmaken"
|
||||
|
||||
#: ../tgp-request.c:198
|
||||
msgid "Invite users"
|
||||
msgstr "Gebruikers uitnodigen"
|
||||
|
||||
#: ../tgp-request.c:217 ../tgp-request.c:232
|
||||
msgid "Change password"
|
||||
msgstr "Wachtwoord wijzigen"
|
||||
|
||||
#: ../tgp-request.c:219
|
||||
msgid "Current"
|
||||
msgstr "Huidig"
|
||||
|
||||
#: ../tgp-request.c:223 ../tgp-request.c:253
|
||||
msgid "Password"
|
||||
msgstr "Wachtwoord"
|
||||
|
||||
#: ../tgp-request.c:227 ../tgp-request.c:257
|
||||
msgid "Confirm"
|
||||
msgstr "Bevestigen"
|
||||
|
||||
#: ../tgp-request.c:251 ../tgp-request.c:262
|
||||
msgid "New password"
|
||||
msgstr "Nieuw wachtwoord"
|
||||
|
||||
#. if we arrive here for the second time the specified phone number is not
|
||||
#. valid. We do not
|
||||
#. ask for the phone number directly, cause in that case the account would
|
||||
#. still be created
|
||||
#. named with the invalid phone number, even though the login will work
|
||||
#: ../tgp-request.c:300
|
||||
msgid "Invalid phone number"
|
||||
msgstr "Onvolledig telefoonnummer"
|
||||
|
||||
#: ../tgp-request.c:301
|
||||
msgid ""
|
||||
"Please enter only numbers in the international phone number format, a leading + following by the country prefix and the phone number.\n"
|
||||
"Do not use any other special chars."
|
||||
msgstr ""
|
||||
"Voer alleen cijfers in in het internationale telefoonnummerformaat, dus om te beginnen een + gevolgd door het landnummer en het telefoonnummer.\n"
|
||||
"Gebruik geen andere speciale tekens."
|
||||
|
||||
#: ../tgp-request.c:370
|
||||
msgid "Leave Chat"
|
||||
msgstr "Chat verlaten"
|
||||
|
||||
#: ../tgp-request.c:372
|
||||
msgid "Do you want to leave this chat permantently?"
|
||||
msgstr "Wilt u deze chat permanent verlaten?"
|
||||
|
||||
#: ../tgp-request.c:377
|
||||
msgid "Abort Secret Chat"
|
||||
msgstr "Geheime chat beëindigen"
|
||||
|
||||
#: ../tgp-request.c:379
|
||||
msgid "Do you want to terminate this secret chat permantently?"
|
||||
msgstr "Wilt u deze geheime chat permanent beëindigen?"
|
||||
|
||||
#: ../tgp-request.c:384
|
||||
msgid "Delete Contact"
|
||||
msgstr "Contact verwijderen"
|
||||
|
||||
#: ../tgp-request.c:386
|
||||
msgid "Do you want to remove this user from your global contact list?"
|
||||
msgstr "Wil u deze gebruiker uit uw algemene contactenlijst verwijderen?"
|
||||
|
||||
#: ../tgp-request.c:401
|
||||
msgid "Leave Channel"
|
||||
msgstr "Kanaal verlaten"
|
||||
|
||||
#: ../tgp-request.c:403
|
||||
msgid "Do you want to leave this channel?"
|
||||
msgstr "Wilt u dit kanaal verlaten?"
|
||||
|
||||
#. This should be the language's timestamp format. This is preceded by a
|
||||
#. colon.
|
||||
#: ../tgp-utils.c:27
|
||||
msgid "%d.%m.%Y %H:%M"
|
||||
msgstr "%d-%m-%Y %H:%M"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:48
|
||||
msgid "recently"
|
||||
msgstr "recent"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:52
|
||||
msgid "last week"
|
||||
msgstr "afgelopen week"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:56
|
||||
msgid "last month"
|
||||
msgstr "afgelopen maand"
|
||||
|
||||
#. This is preceded by a colon. It refers to a point on time.
|
||||
#: ../tgp-utils.c:60
|
||||
msgid "unknown"
|
||||
msgstr "onbekend"
|
||||
|
||||
#: ../tgp-chat.c:108 ../tgp-chat.c:582
|
||||
msgid "Telegram Chats"
|
||||
msgstr "Telegram-chats"
|
||||
|
||||
#: ../tgp-chat.c:113
|
||||
msgid "You have already left this chat."
|
||||
msgstr "U heeft dit kanaal al verlaten."
|
||||
|
||||
#: ../tgp-chat.c:224
|
||||
msgid "Subject:"
|
||||
msgstr "Onderwerp:"
|
||||
|
||||
#: ../tgp-chat.c:230
|
||||
msgid "Invite link:"
|
||||
msgstr "Uitnodigingskoppeling:"
|
||||
|
||||
#: ../tgp-chat.c:236
|
||||
msgid "Chat ID:"
|
||||
msgstr "Chat-ID:"
|
||||
|
||||
#: ../tgp-chat.c:342
|
||||
msgid "Supergroup"
|
||||
msgstr "Supergroep"
|
||||
|
||||
#: ../tgp-chat.c:342
|
||||
msgid "Channel"
|
||||
msgstr "Kanaal"
|
||||
|
||||
#: ../tgp-chat.c:345
|
||||
msgid "Group"
|
||||
msgstr "Groep"
|
||||
|
||||
#: ../tgp-chat.c:367
|
||||
msgid "Users in chat"
|
||||
msgstr "Gebruikers in chat"
|
||||
|
||||
#: ../tgp-chat.c:370
|
||||
msgid "Type"
|
||||
msgstr "Soort"
|
476
po/pl_PL.po
476
po/pl_PL.po
|
@ -1,88 +1,94 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
# Translators:
|
||||
# Piotr Drąg <piotrdrag@gmail.com>, 2015
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: telegram-purple\n"
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2015-11-21 14:37+0100\n"
|
||||
"PO-Revision-Date: 2015-12-18 13:05+0000\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Polish (Poland) (http://www.transifex.com/telegram-purple-developers/telegram-purple/language/pl_PL/)\n"
|
||||
"POT-Creation-Date: 2016-08-31 22:53+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>, 2016\n"
|
||||
"Language-Team: Polish (Poland) (https://www.transifex.com/telegram-purple-developers/teams/53149/pl_PL/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: pl_PL\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>=14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
|
||||
|
||||
#: ../telegram-base.c:515
|
||||
#: ../telegram-base.c:500
|
||||
msgid "Couldn't create group"
|
||||
msgstr "Nie można utworzyć grupy"
|
||||
|
||||
#: ../telegram-base.c:515
|
||||
#: ../telegram-base.c:501
|
||||
msgid "Please select at least one other user."
|
||||
msgstr "Należy wybrać co najmniej jednego użytkownika."
|
||||
|
||||
#: ../telegram-base.c:570
|
||||
#: ../telegram-base.c:555
|
||||
msgid "Query Failed"
|
||||
msgstr "Zapytanie się nie powiodło"
|
||||
|
||||
#: ../telegram-purple.c:193
|
||||
#: ../telegram-purple.c:162
|
||||
msgid "Secret chat ready."
|
||||
msgstr "Tajna rozmowa jest gotowa."
|
||||
|
||||
#: ../telegram-purple.c:200
|
||||
#: ../telegram-purple.c:170
|
||||
msgid "Secret chat terminated."
|
||||
msgstr "Zakończono tajną rozmowę."
|
||||
|
||||
#: ../telegram-purple.c:268
|
||||
#: ../telegram-purple.c:182
|
||||
msgid "Telegram"
|
||||
msgstr "Telegram"
|
||||
|
||||
#: ../telegram-purple.c:229
|
||||
msgid "Message marked as read."
|
||||
msgstr "Oznaczono wiadomość jako przeczytaną."
|
||||
|
||||
#: ../telegram-purple.c:486
|
||||
#: ../telegram-purple.c:339
|
||||
#, c-format
|
||||
msgid "Invite link: %s"
|
||||
msgstr "Odnośnik do zaproszenia: %s"
|
||||
|
||||
#: ../telegram-purple.c:506 ../telegram-purple.c:507
|
||||
#. FIXME: Can TGLCHF_MODERATOR export links?
|
||||
#: ../telegram-purple.c:350
|
||||
msgid "Creating chat link failed"
|
||||
msgstr "Utworzenie odnośnika do rozmowy się nie powiodło"
|
||||
|
||||
#: ../telegram-purple.c:508
|
||||
#: ../telegram-purple.c:351
|
||||
msgid "You need to be admin of the group to do that."
|
||||
msgstr "Należy być administratorem grupy, aby to zrobić."
|
||||
|
||||
#: ../telegram-purple.c:531
|
||||
#: ../telegram-purple.c:416
|
||||
msgid "Chat joined"
|
||||
msgstr "Dołączono do rozmowy"
|
||||
|
||||
#: ../telegram-purple.c:532
|
||||
#: ../telegram-purple.c:417
|
||||
msgid "Chat added to list of chat rooms."
|
||||
msgstr "Dodano rozmowę do listy pokojów rozmów."
|
||||
|
||||
#: ../telegram-purple.c:552
|
||||
#: ../telegram-purple.c:443
|
||||
msgid "Start secret chat..."
|
||||
msgstr "Rozpocznij tajną rozmowę…"
|
||||
|
||||
#. Generate Public Link
|
||||
#: ../telegram-purple.c:558
|
||||
#: ../telegram-purple.c:450
|
||||
msgid "Invite users by link..."
|
||||
msgstr "Zaproś użytkowników przez odnośnik…"
|
||||
|
||||
#. Delete self from chat
|
||||
#: ../telegram-purple.c:564
|
||||
#: ../telegram-purple.c:458
|
||||
msgid "Delete and exit..."
|
||||
msgstr "Usuń i wyjdź…"
|
||||
msgstr "Usuń i wyjdź…"
|
||||
|
||||
#: ../telegram-purple.c:632
|
||||
#: ../telegram-purple.c:546
|
||||
#, c-format
|
||||
msgid "Unable to sign on as %s: pubkey not found."
|
||||
msgstr "Nie można zalogować jako %s: nie odnaleziono klucza publicznego."
|
||||
msgid "Unable to sign on as %s: file (public key) not found."
|
||||
msgstr ""
|
||||
"Nie można zalogować jako %s: nie odnaleziono pliku (klucza publicznego)."
|
||||
|
||||
#: ../telegram-purple.c:636
|
||||
#: ../telegram-purple.c:550
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Make sure telegram-purple is installed properly,\n"
|
||||
|
@ -90,340 +96,414 @@ msgid ""
|
|||
"If you're running SELinux (e.g. when using Tails),\n"
|
||||
"try 'make local_install', or simply copy\n"
|
||||
"%1$s to %2$s."
|
||||
msgstr "Proszę się upewnić, że telegram-purple jest poprawnie zainstalowane,\nw tym plik .tglpub.\nJeśli używany jest SELinux (np. podczas używania Tails),\nto proszę spróbować polecenia „make local_install” lub po prostu skopiować\n%1$s do %2$s."
|
||||
msgstr ""
|
||||
"Proszę się upewnić, że telegram-purple jest poprawnie zainstalowane,\n"
|
||||
"w tym plik .tglpub.\n"
|
||||
"Jeśli używany jest SELinux (np. podczas używania Tails),\n"
|
||||
"to proszę spróbować polecenia „make local_install” lub po prostu skopiować\n"
|
||||
"%1$s do %2$s."
|
||||
|
||||
#: ../telegram-purple.c:657
|
||||
#: ../telegram-purple.c:572
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Unable to sign on as %s: problem in the underlying library 'tgl'. Please "
|
||||
"submit a bug report with the debug log."
|
||||
msgstr ""
|
||||
"Nie można zalogować jako %s: problem w bibliotece „tgl”. Proszę zgłosić błąd"
|
||||
" z dziennikiem debugowania."
|
||||
|
||||
#: ../telegram-purple.c:576
|
||||
msgid "Problem in tgl"
|
||||
msgstr "Problem w bibliotece tgl"
|
||||
|
||||
#. TRANSLATORS: Please fill in your own prefix!
|
||||
#: ../telegram-purple.c:584
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Unable to sign on as %s: phone number lacks country prefix. Numbers must "
|
||||
"start with the full international prefix code, e.g. +49 for Germany."
|
||||
msgstr "Nie można zalogować jako %s: numer telefonu nie ma przedrostka kraju. Numery muszą zaczynać się od pełnego międzynarodowego przedrostka, np. +48 dla Polski."
|
||||
"start with the full international prefix code, e.g. +1 for USA."
|
||||
msgstr ""
|
||||
"Nie można zalogować jako %s: numer telefonu nie ma przedrostka kraju. Numery"
|
||||
" muszą zaczynać się od pełnego międzynarodowego przedrostka, np. +48 dla "
|
||||
"Polski."
|
||||
|
||||
#: ../telegram-purple.c:662
|
||||
#: ../telegram-purple.c:589
|
||||
msgid "Incomplete phone number"
|
||||
msgstr "Niepełny numer telefonu"
|
||||
|
||||
#: ../telegram-purple.c:788 ../telegram-purple.c:789
|
||||
#: ../telegram-purple.c:642
|
||||
msgid "Secret chat was already deleted"
|
||||
msgstr "Już usunięto tajną rozmowę"
|
||||
|
||||
#: ../telegram-purple.c:644
|
||||
msgid "Secret chat is not ready"
|
||||
msgstr "Tajna rozmowa nie jest gotowa"
|
||||
|
||||
#: ../telegram-purple.c:652
|
||||
msgid "Only the creator of a channel can post messages."
|
||||
msgstr "Tylko twórca kanału może wysyłać wiadomości."
|
||||
|
||||
#: ../telegram-purple.c:695
|
||||
msgid "Cannot invite buddy to chat"
|
||||
msgstr "Nie można zaprosić znajomego do rozmowy"
|
||||
|
||||
#: ../telegram-purple.c:790
|
||||
#: ../telegram-purple.c:696
|
||||
msgid "Specified user does not exist."
|
||||
msgstr "Podany użytkownik nie istnieje."
|
||||
|
||||
#: ../telegram-purple.c:709
|
||||
msgid "phone no. (+ country prefix)"
|
||||
msgstr "numer telefonu (+ przedrostek kraju)"
|
||||
|
||||
#. Login
|
||||
#: ../telegram-purple.c:932
|
||||
#: ../telegram-purple.c:817
|
||||
msgid "Password (two factor authentication)"
|
||||
msgstr "Hasło (uwierzytelnianie dwustopniowe)"
|
||||
|
||||
#: ../telegram-purple.c:938
|
||||
#: ../telegram-purple.c:822
|
||||
msgid ""
|
||||
"Fallback SMS verification\n"
|
||||
"(Helps when not using Pidgin and you aren't being prompted for the code)"
|
||||
msgstr "Zapasowa weryfikacja przez SMS\n(Pomaga w przypadkach, kiedy nie jest używany program Pidgin i użytkownik nie jest pytany o kod)"
|
||||
msgstr ""
|
||||
"Zapasowa weryfikacja przez SMS\n"
|
||||
"(Pomaga w przypadkach, kiedy nie jest używany program Pidgin i użytkownik nie jest pytany o kod)"
|
||||
|
||||
#: ../telegram-purple.c:946
|
||||
msgid "ask"
|
||||
msgstr "pytanie"
|
||||
|
||||
#: ../telegram-purple.c:947
|
||||
#: ../telegram-purple.c:828
|
||||
msgid "always"
|
||||
msgstr "zawsze"
|
||||
|
||||
#: ../telegram-purple.c:948
|
||||
#: ../telegram-purple.c:829
|
||||
msgid "never"
|
||||
msgstr "nigdy"
|
||||
|
||||
#: ../telegram-purple.c:950
|
||||
#: ../telegram-purple.c:830
|
||||
msgid "ask"
|
||||
msgstr "pytanie"
|
||||
|
||||
#: ../telegram-purple.c:832
|
||||
msgid "Accept secret chats"
|
||||
msgstr "Akceptowanie tajnych rozmów"
|
||||
msgstr "Odbieranie tajnych rozmów"
|
||||
|
||||
#: ../telegram-purple.c:955
|
||||
#: ../telegram-purple.c:836
|
||||
msgid "Display buddies offline after (days)"
|
||||
msgstr "Wyświetlanie znajomych jako w trybie offline po (w dniach)"
|
||||
msgstr "Wyświetlanie znajomych jako w trybie offline po (w dniach)"
|
||||
|
||||
#: ../telegram-purple.c:960
|
||||
msgid "Fetch past history on first login"
|
||||
msgstr "Pobieranie historii podczas pierwszego logowania"
|
||||
|
||||
#: ../telegram-purple.c:965
|
||||
#: ../telegram-purple.c:840
|
||||
msgid ""
|
||||
"Don't fetch history older than (days)\n"
|
||||
"(0 for unlimited)"
|
||||
msgstr "Bez pobierania historii starszej niż (w dniach)\n(0 oznacza brak ograniczenia)"
|
||||
msgstr ""
|
||||
"Bez pobierania historii starszej niż (w dniach)\n"
|
||||
"(0 oznacza brak ograniczenia)"
|
||||
|
||||
#. Media
|
||||
#: ../telegram-purple.c:845
|
||||
msgid "Autoload media size (kb)"
|
||||
msgstr "Rozmiar automatycznie wczytywanych multimediów (w kilobajtach)"
|
||||
|
||||
#. Chats
|
||||
#: ../telegram-purple.c:973
|
||||
#: ../telegram-purple.c:850
|
||||
msgid "Add all group chats to buddy list"
|
||||
msgstr "Dodawanie wszystkich rozmów grupowych do listy znajomych"
|
||||
|
||||
#. Read notifications
|
||||
#: ../telegram-purple.c:981
|
||||
#: ../telegram-purple.c:855
|
||||
msgid "Display notices of receipt"
|
||||
msgstr "Wyświetlanie powiadomień o odebraniu"
|
||||
msgstr "Wyświetlanie powiadomień o odebraniu"
|
||||
|
||||
#: ../telegram-purple.c:986
|
||||
#: ../telegram-purple.c:859
|
||||
msgid "Send notices of receipt when present"
|
||||
msgstr "Wysyłanie powiadomień o odebraniu podczas obecności"
|
||||
msgstr "Wysyłanie powiadomień o odebraniu podczas obecności"
|
||||
|
||||
#: ../tgp-2prpl.c:178 ../tgp-request.c:108
|
||||
msgid "First name"
|
||||
msgstr "Imię"
|
||||
#: ../telegram-purple.c:884
|
||||
msgid "Telegram Protocol Plugin."
|
||||
msgstr "Wtyczka protokołu Telegram."
|
||||
|
||||
#: ../tgp-2prpl.c:179 ../tgp-request.c:111
|
||||
msgid "Last name"
|
||||
msgstr "Nazwisko"
|
||||
|
||||
#: ../tgp-2prpl.c:181
|
||||
msgid "Name"
|
||||
msgstr "Nazwa"
|
||||
|
||||
#: ../tgp-2prpl.c:186 ../tgp-request.c:197 ../tgp-request.c:201
|
||||
#: ../tgp-request.c:205
|
||||
msgid "Username"
|
||||
msgstr "Nazwa użytkownika"
|
||||
|
||||
#: ../tgp-2prpl.c:191
|
||||
msgid "Last seen"
|
||||
msgstr "Ostatnio widziany"
|
||||
|
||||
#: ../tgp-2prpl.c:196
|
||||
msgid "Phone"
|
||||
msgstr "Telefon"
|
||||
|
||||
#: ../tgp-2prpl.c:208
|
||||
msgid "Waiting for the user to get online..."
|
||||
msgstr "Oczekiwanie, aż użytkownik przejdzie do trybu online…"
|
||||
|
||||
#: ../tgp-2prpl.c:212
|
||||
msgid "Self destruction timer"
|
||||
msgstr "Czas samozniszczenia"
|
||||
|
||||
#: ../tgp-2prpl.c:218
|
||||
msgid "Timer is not enabled."
|
||||
msgstr "Licznik nie jest włączony."
|
||||
|
||||
#: ../tgp-2prpl.c:225
|
||||
msgid "Secret key"
|
||||
msgstr "Tajny klucz"
|
||||
|
||||
#: ../tgp-msg.c:72
|
||||
#: ../tgp-msg.c:58
|
||||
#, c-format
|
||||
msgid "%2$s created chat %1$s."
|
||||
msgstr "Użytkownik %2$s utworzył rozmowę %1$s."
|
||||
|
||||
#: ../tgp-msg.c:75
|
||||
#: ../tgp-msg.c:61
|
||||
#, c-format
|
||||
msgid "%2$s changed title to %1$s."
|
||||
msgstr "Użytkownik %2$s zmienił tytuł na %1$s."
|
||||
|
||||
#: ../tgp-msg.c:78
|
||||
#: ../tgp-msg.c:64
|
||||
#, c-format
|
||||
msgid "%s changed photo."
|
||||
msgstr "Użytkownik %s zmienił zdjęcie."
|
||||
|
||||
#: ../tgp-msg.c:81
|
||||
#: ../tgp-msg.c:67
|
||||
#, c-format
|
||||
msgid "%s deleted photo."
|
||||
msgstr "Użytkownik %s usunął zdjęcie."
|
||||
|
||||
#: ../tgp-msg.c:89
|
||||
#: ../tgp-msg.c:75
|
||||
#, c-format
|
||||
msgid "%1$s added user %2$s by link."
|
||||
msgstr "Użytkownik %1$s dodał użytkownika %2$s przez odnośnik."
|
||||
|
||||
#: ../tgp-msg.c:102
|
||||
#: ../tgp-msg.c:90
|
||||
#, c-format
|
||||
msgid "%2$s added user %1$s."
|
||||
msgstr "Użytkownik %2$s dodał użytkownika %1$s."
|
||||
|
||||
#: ../tgp-msg.c:125 ../tgp-msg.c:140
|
||||
#: ../tgp-msg.c:114 ../tgp-msg.c:131
|
||||
#, c-format
|
||||
msgid "%2$s deleted user %1$s."
|
||||
msgstr "Użytkownik %2$s usunął użytkownika %1$s."
|
||||
|
||||
#: ../tgp-msg.c:146
|
||||
#: ../tgp-msg.c:138
|
||||
#, c-format
|
||||
msgid "%2$s set self destruction timer to %1$d second."
|
||||
msgid_plural "%2$s set self destruction timer to %1$d seconds."
|
||||
msgstr[0] "Użytkownik %2$s ustawił czas samozniszczenia na %1$d sekundę."
|
||||
msgstr[1] "Użytkownik %2$s ustawił czas samozniszczenia na %1$d sekundy."
|
||||
msgstr[2] "Użytkownik %2$s ustawił czas samozniszczenia na %1$d sekund."
|
||||
msgstr[3] "Użytkownik %2$s ustawił czas samozniszczenia na %1$d sekund."
|
||||
|
||||
#: ../tgp-msg.c:152
|
||||
#: ../tgp-msg.c:144
|
||||
#, c-format
|
||||
msgid "%2$s marked %1$d message read."
|
||||
msgid_plural "%2$s marked %1$d messages read."
|
||||
msgstr[0] "Użytkownik %2$s oznaczył %1$d wiadomość jako przeczytaną."
|
||||
msgstr[1] "Użytkownik %2$s oznaczył %1$d wiadomości jako przeczytane."
|
||||
msgstr[2] "Użytkownik %2$s oznaczył %1$d wiadomości jako przeczytane."
|
||||
msgstr[3] "Użytkownik %2$s oznaczył %1$d wiadomości jako przeczytane."
|
||||
|
||||
#: ../tgp-msg.c:158
|
||||
#: ../tgp-msg.c:150
|
||||
#, c-format
|
||||
msgid "%2$s deleted %1$d message."
|
||||
msgid_plural "%2$s deleted %1$d messages."
|
||||
msgstr[0] "Użytkownik %2$s usunął %1$d wiadomość."
|
||||
msgstr[1] "Użytkownik %2$s usunął %1$d wiadomości."
|
||||
msgstr[2] "Użytkownik %2$s usunął %1$d wiadomości."
|
||||
msgstr[3] "Użytkownik %2$s usunął %1$d wiadomości."
|
||||
|
||||
#: ../tgp-msg.c:164
|
||||
#: ../tgp-msg.c:156
|
||||
#, c-format
|
||||
msgid "%2$s made a screenshot of %1$d message."
|
||||
msgid_plural "%2$s made a screenshot of %1$d messages."
|
||||
msgstr[0] "Użytkownik %2$s utworzył zrzut ekranu %1$d wiadomości."
|
||||
msgstr[1] "Użytkownik %2$s utworzył zrzut ekranu %1$d wiadomości."
|
||||
msgstr[2] "Użytkownik %2$s utworzył zrzut ekranu %1$d wiadomości."
|
||||
msgstr[3] "Użytkownik %2$s utworzył zrzut ekranu %1$d wiadomości."
|
||||
|
||||
#: ../tgp-msg.c:162
|
||||
#, c-format
|
||||
msgid "Channel %1$s created"
|
||||
msgstr "Utworzono kanał %1$s"
|
||||
|
||||
#. FIXME: check if this makes sense
|
||||
#: ../tgp-msg.c:165 ../tgp-chat.c:124 ../tgp-chat.c:576
|
||||
msgid "Telegram Channels"
|
||||
msgstr "Kanały Telegram"
|
||||
|
||||
#: ../tgp-msg.c:191
|
||||
msgid "Sending message failed."
|
||||
msgstr "Wysłanie wiadomości się nie powiodło."
|
||||
|
||||
#: ../tgp-msg.c:296
|
||||
#: ../tgp-msg.c:253
|
||||
msgid "Sending image failed."
|
||||
msgstr "Wysłanie obrazu się nie powiodło."
|
||||
|
||||
#: ../tgp-msg.c:310
|
||||
msgid "Sorry, sending documents to encrypted chats not yet supported."
|
||||
msgstr "Wysyłanie dokumentów do zaszyfrowanych rozmów nie jest jeszcze obsługiwane."
|
||||
|
||||
#: ../tgp-msg.c:400
|
||||
#: ../tgp-msg.c:417
|
||||
#, c-format
|
||||
msgid "%s sent a sticker."
|
||||
msgstr "Użytkownik %s wysłał naklejkę."
|
||||
|
||||
#: ../tgp-net.c:286
|
||||
#: ../tgp-msg.c:463
|
||||
msgid "failed loading message"
|
||||
msgstr "wczytanie wiadomości się nie powiodło"
|
||||
|
||||
#: ../tgp-msg.c:498
|
||||
msgid "[animation]"
|
||||
msgstr "[animacja]"
|
||||
|
||||
#: ../tgp-msg.c:515
|
||||
msgid "[audio]"
|
||||
msgstr "[dźwięk]"
|
||||
|
||||
#: ../tgp-msg.c:515
|
||||
msgid "[video]"
|
||||
msgstr "[film]"
|
||||
|
||||
#: ../tgp-msg.c:604
|
||||
#, c-format
|
||||
msgid "<b>Forwarded message from: %s</b><br>%s"
|
||||
msgstr "<b>Przekazana wiadomość od: %s</b><br>%s"
|
||||
|
||||
#. FIXME: sometimes users aren't part of the response when receiving a
|
||||
#. forwarded message
|
||||
#: ../tgp-msg.c:607
|
||||
#, c-format
|
||||
msgid "<b>Forwarded message:</b><br>%s"
|
||||
msgstr "<b>Przekazana wiadomość:</b><br>%s"
|
||||
|
||||
#: ../tgp-msg.c:720
|
||||
msgid "loading document or picture failed"
|
||||
msgstr "wczytywanie dokumentu lub obrazu się nie powiodło"
|
||||
|
||||
#: ../tgp-net.c:281
|
||||
msgid "Cannot connect to main server"
|
||||
msgstr "Nie można połączyć z głównym serwerem"
|
||||
msgstr "Nie można połączyć z głównym serwerem"
|
||||
|
||||
#: ../tgp-net.c:342
|
||||
#: ../tgp-net.c:322
|
||||
msgid "Cannot connect to server: Ping timeout."
|
||||
msgstr "Nie można połączyć z serwerem: przekroczono czas oczekiwania na ping."
|
||||
msgstr ""
|
||||
"Nie można połączyć z serwerem: przekroczono czas oczekiwania na odpowiedź."
|
||||
|
||||
#: ../tgp-net.c:387
|
||||
#: ../tgp-net.c:365
|
||||
msgid "Lost connection to the server..."
|
||||
msgstr "Utracono połączenie z serwerem…"
|
||||
msgstr "Utracono połączenie z serwerem…"
|
||||
|
||||
#: ../tgp-request.c:64
|
||||
#: ../tgp-request.c:51
|
||||
msgid ""
|
||||
"Telegram wants to verify your identity. Please enter the login code that you"
|
||||
" have received via SMS."
|
||||
msgstr "Usługa Telegram musi zweryfikować tożsamość użytkownika. Proszę podać kod logowania otrzymany w wiadomości SMS."
|
||||
msgstr ""
|
||||
"Usługa Telegram musi zweryfikować tożsamość użytkownika. Proszę podać kod "
|
||||
"logowania otrzymany w wiadomości SMS."
|
||||
|
||||
#: ../tgp-request.c:67
|
||||
#: ../tgp-request.c:54
|
||||
msgid "Login code"
|
||||
msgstr "Kod logowania"
|
||||
|
||||
#: ../tgp-request.c:67
|
||||
#: ../tgp-request.c:54
|
||||
msgid "Enter login code"
|
||||
msgstr "Proszę podać kod logowania"
|
||||
|
||||
#: ../tgp-request.c:67
|
||||
#: ../tgp-request.c:54
|
||||
msgid "the code"
|
||||
msgstr "kod"
|
||||
|
||||
#: ../tgp-request.c:67 ../tgp-request.c:116 ../tgp-request.c:210
|
||||
#: ../tgp-request.c:245 ../tgp-request.c:275
|
||||
#: ../tgp-request.c:54 ../tgp-request.c:104 ../tgp-request.c:198
|
||||
#: ../tgp-request.c:233 ../tgp-request.c:263
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
|
||||
#: ../tgp-request.c:68 ../tgp-request.c:116 ../tgp-request.c:135
|
||||
#: ../tgp-request.c:211 ../tgp-request.c:246 ../tgp-request.c:276
|
||||
#: ../tgp-request.c:55 ../tgp-request.c:104 ../tgp-request.c:123
|
||||
#: ../tgp-request.c:199 ../tgp-request.c:234 ../tgp-request.c:264
|
||||
msgid "Cancel"
|
||||
msgstr "Anuluj"
|
||||
|
||||
#: ../tgp-request.c:107
|
||||
#: ../tgp-request.c:95
|
||||
msgid "Registration"
|
||||
msgstr "Rejestracja"
|
||||
|
||||
#: ../tgp-request.c:115
|
||||
#: ../tgp-request.c:96
|
||||
msgid "First name"
|
||||
msgstr "Imię"
|
||||
|
||||
#: ../tgp-request.c:99
|
||||
msgid "Last name"
|
||||
msgstr "Nazwisko"
|
||||
|
||||
#: ../tgp-request.c:103
|
||||
msgid "Register"
|
||||
msgstr "Zarejestruj"
|
||||
|
||||
#: ../tgp-request.c:115
|
||||
#: ../tgp-request.c:103
|
||||
msgid "Please register your phone number."
|
||||
msgstr "Proszę zarejestrować numer telefonu."
|
||||
|
||||
#. purple_request API not available
|
||||
#: ../tgp-request.c:120
|
||||
#: ../tgp-request.c:108
|
||||
msgid ""
|
||||
"Phone number is not registered. Please register your phone on a different "
|
||||
"client."
|
||||
msgstr "Numer telefonu nie jest zarejestrowany. Proszę go zarejestrować w innym kliencie."
|
||||
msgstr ""
|
||||
"Numer telefonu nie jest zarejestrowany. Proszę go zarejestrować w innym "
|
||||
"kliencie."
|
||||
|
||||
#: ../tgp-request.c:122
|
||||
#: ../tgp-request.c:110
|
||||
msgid "Not registered"
|
||||
msgstr "Niezarejestrowany"
|
||||
|
||||
#: ../tgp-request.c:134
|
||||
#: ../tgp-request.c:122
|
||||
msgid "Password needed"
|
||||
msgstr "Wymagane jest hasło"
|
||||
|
||||
#: ../tgp-request.c:134
|
||||
#: ../tgp-request.c:122
|
||||
msgid "Enter password for two factor authentication"
|
||||
msgstr "Proszę podać hasło dla uwierzytelniania dwustopniowego"
|
||||
|
||||
#: ../tgp-request.c:135
|
||||
#: ../tgp-request.c:123
|
||||
msgid "Ok"
|
||||
msgstr "OK"
|
||||
|
||||
#: ../tgp-request.c:137
|
||||
#: ../tgp-request.c:125
|
||||
msgid ""
|
||||
"No password set for two factor authentication. Please enter it in the "
|
||||
"extended settings."
|
||||
msgstr "Nie ustawiono hasła dla uwierzytelniania dwustopniowego. Proszę podać je w rozszerzonych ustawieniach."
|
||||
msgstr ""
|
||||
"Nie ustawiono hasła dla uwierzytelniania dwustopniowego. Proszę podać je w "
|
||||
"rozszerzonych ustawieniach."
|
||||
|
||||
#: ../tgp-request.c:139
|
||||
#: ../tgp-request.c:127
|
||||
msgid "Password invalid"
|
||||
msgstr "Nieprawidłowe hasło"
|
||||
|
||||
#: ../tgp-request.c:162
|
||||
#: ../tgp-request.c:150
|
||||
#, c-format
|
||||
msgid "Accept secret chat '%s' on this device?"
|
||||
msgstr "Zaakceptować tajną rozmowę „%s” na tym urządzeniu?"
|
||||
msgstr "Odebrać tajną rozmowę „%s” na tym urządzeniu?"
|
||||
|
||||
#: ../tgp-request.c:163
|
||||
#: ../tgp-request.c:151
|
||||
msgid "Secret chat"
|
||||
msgstr "Tajna rozmowa"
|
||||
|
||||
#: ../tgp-request.c:163
|
||||
#: ../tgp-request.c:151
|
||||
msgid ""
|
||||
"Secret chats can only have one end point. If you accept a secret chat on "
|
||||
"this device, its messages will not be available anywhere else. If you "
|
||||
"decline, you can still accept the chat on other devices."
|
||||
msgstr "Tajne rozmowy mogą mieć tylko jeden punkt wyjściowy. Jeśli tajna rozmowa zostanie zaakceptowana na tym urządzeniu, to jej wiadomości nie będą dostępne nigdzie indziej. Jeśli zostanie odrzucona, to nadal można ją zaakceptować na innych urządzeniach."
|
||||
msgstr ""
|
||||
"Tajne rozmowy mogą mieć tylko jeden punkt wyjściowy. Jeśli tajna rozmowa "
|
||||
"zostanie odebrana na tym urządzeniu, to jej wiadomości nie będą dostępne "
|
||||
"nigdzie indziej. Jeśli zostanie odrzucona, to nadal można ją odebrać na "
|
||||
"innych urządzeniach."
|
||||
|
||||
#: ../tgp-request.c:194
|
||||
#: ../tgp-request.c:182
|
||||
msgid ""
|
||||
"Invite at least one additional user by specifying\n"
|
||||
" their full name (autocompletion available).\n"
|
||||
"You can add more users once the chat was created."
|
||||
msgstr "Należy zaprosić co najmniej jednego użytkownika podając\njego imię i nazwisko (automatyczne uzupełnianie jest dostępne).\nMożna dodać więcej użytkowników po utworzeniu rozmowy."
|
||||
msgstr ""
|
||||
"Należy zaprosić co najmniej jednego użytkownika podając\n"
|
||||
"jego imię i nazwisko (automatyczne uzupełnianie jest dostępne).\n"
|
||||
"Można dodać więcej użytkowników po utworzeniu rozmowy."
|
||||
|
||||
#: ../tgp-request.c:210
|
||||
#: ../tgp-request.c:185 ../tgp-request.c:189 ../tgp-request.c:193
|
||||
msgid "Username"
|
||||
msgstr "Nazwa użytkownika"
|
||||
|
||||
#: ../tgp-request.c:198
|
||||
msgid "Create group chat"
|
||||
msgstr "Utwórz rozmowę grupową"
|
||||
|
||||
#: ../tgp-request.c:210
|
||||
#: ../tgp-request.c:198
|
||||
msgid "Invite users"
|
||||
msgstr "Zaproś użytkowników"
|
||||
|
||||
#: ../tgp-request.c:229 ../tgp-request.c:244
|
||||
#: ../tgp-request.c:217 ../tgp-request.c:232
|
||||
msgid "Change password"
|
||||
msgstr "Zmień hasło"
|
||||
|
||||
#: ../tgp-request.c:231
|
||||
#: ../tgp-request.c:219
|
||||
msgid "Current"
|
||||
msgstr "Bieżące"
|
||||
|
||||
#: ../tgp-request.c:235 ../tgp-request.c:265
|
||||
#: ../tgp-request.c:223 ../tgp-request.c:253
|
||||
msgid "Password"
|
||||
msgstr "Hasło"
|
||||
|
||||
#: ../tgp-request.c:239 ../tgp-request.c:269
|
||||
#: ../tgp-request.c:227 ../tgp-request.c:257
|
||||
msgid "Confirm"
|
||||
msgstr "Potwierdzenie"
|
||||
|
||||
#: ../tgp-request.c:263 ../tgp-request.c:274
|
||||
#: ../tgp-request.c:251 ../tgp-request.c:262
|
||||
msgid "New password"
|
||||
msgstr "Nowe hasło"
|
||||
|
||||
|
@ -432,58 +512,112 @@ msgstr "Nowe hasło"
|
|||
#. ask for the phone number directly, cause in that case the account would
|
||||
#. still be created
|
||||
#. named with the invalid phone number, even though the login will work
|
||||
#: ../tgp-request.c:312
|
||||
#: ../tgp-request.c:300
|
||||
msgid "Invalid phone number"
|
||||
msgstr "Nieprawidłowy numer telefonu"
|
||||
|
||||
#: ../tgp-request.c:313
|
||||
#: ../tgp-request.c:301
|
||||
msgid ""
|
||||
"Please enter only numbers in the international phone number format, a leading + following by the country prefix and the phone number.\n"
|
||||
"Do not use any other special chars."
|
||||
msgstr "Proszę podać tylko numery w międzynarodowym formacie numerów telefonu, czyli + z przedrostkiem kraju i numer telefonu.\nNie należy używać innych znaków specjalnych."
|
||||
msgstr ""
|
||||
"Proszę podać tylko numery w międzynarodowym formacie numerów telefonu, czyli + z przedrostkiem kraju i numer telefonu.\n"
|
||||
"Nie należy używać innych znaków specjalnych."
|
||||
|
||||
#: ../tgp-request.c:370
|
||||
msgid "Leave Chat"
|
||||
msgstr "Opuść rozmowę"
|
||||
|
||||
#: ../tgp-request.c:372
|
||||
msgid "Do you want to leave this chat permantently?"
|
||||
msgstr "Trwale opuścić tę rozmowę?"
|
||||
|
||||
#: ../tgp-request.c:377
|
||||
msgid "Abort Secret Chat"
|
||||
msgstr "Przerwij tajną rozmowę"
|
||||
|
||||
#: ../tgp-request.c:379
|
||||
msgid "Do you want to terminate this secret chat permantently?"
|
||||
msgstr "Trwale zakończyć tę tajną rozmowę?"
|
||||
|
||||
#: ../tgp-request.c:384
|
||||
msgid "Delete Contact"
|
||||
msgstr "Usuń kontakt"
|
||||
|
||||
#: ../tgp-request.c:386
|
||||
msgid "Do you want to remove this user from your global contact list?"
|
||||
msgstr "Usunąć tego użytkownika z globalnej listy kontaktów?"
|
||||
|
||||
#: ../tgp-request.c:401
|
||||
msgid "Leave Channel"
|
||||
msgstr "Opuść kanał"
|
||||
|
||||
#: ../tgp-request.c:403
|
||||
msgid "Do you want to leave this channel?"
|
||||
msgstr "Opuścić ten kanał?"
|
||||
|
||||
#. This should be the language's timestamp format. This is preceded by a
|
||||
#. colon.
|
||||
#: ../tgp-utils.c:32
|
||||
#: ../tgp-utils.c:27
|
||||
msgid "%d.%m.%Y %H:%M"
|
||||
msgstr "%d.%m.%Y %H∶%M"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:53
|
||||
#: ../tgp-utils.c:48
|
||||
msgid "recently"
|
||||
msgstr "niedawno"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:57
|
||||
#: ../tgp-utils.c:52
|
||||
msgid "last week"
|
||||
msgstr "ostatni tydzień"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:61
|
||||
#: ../tgp-utils.c:56
|
||||
msgid "last month"
|
||||
msgstr "ostatni miesiąc"
|
||||
|
||||
#. This is preceded by a colon. It refers to a point on time.
|
||||
#: ../tgp-utils.c:65
|
||||
#: ../tgp-utils.c:60
|
||||
msgid "unknown"
|
||||
msgstr "nieznane"
|
||||
|
||||
#: ../tgp-chat.c:79
|
||||
#: ../tgp-chat.c:108 ../tgp-chat.c:582
|
||||
msgid "Telegram Chats"
|
||||
msgstr "Rozmowy Telegram"
|
||||
|
||||
#: ../tgp-chat.c:113
|
||||
msgid "You have already left this chat."
|
||||
msgstr "Już opuszczoną tę rozmowę."
|
||||
|
||||
#: ../tgp-chat.c:127
|
||||
#: ../tgp-chat.c:224
|
||||
msgid "Subject:"
|
||||
msgstr "Temat:"
|
||||
|
||||
#: ../tgp-chat.c:133
|
||||
#: ../tgp-chat.c:230
|
||||
msgid "Invite link:"
|
||||
msgstr "Odnośnik do zaproszenia:"
|
||||
|
||||
#: ../tgp-chat.c:139
|
||||
#: ../tgp-chat.c:236
|
||||
msgid "Chat ID:"
|
||||
msgstr "Identyfikator rozmowy:"
|
||||
|
||||
#: ../tgp-chat.c:238
|
||||
#: ../tgp-chat.c:342
|
||||
msgid "Supergroup"
|
||||
msgstr "Supergrupa"
|
||||
|
||||
#: ../tgp-chat.c:342
|
||||
msgid "Channel"
|
||||
msgstr "Kanał"
|
||||
|
||||
#: ../tgp-chat.c:345
|
||||
msgid "Group"
|
||||
msgstr "Grupa"
|
||||
|
||||
#: ../tgp-chat.c:367
|
||||
msgid "Users in chat"
|
||||
msgstr "Użytkownicy w rozmowie"
|
||||
msgstr "Użytkownicy w rozmowie"
|
||||
|
||||
#: ../tgp-chat.c:370
|
||||
msgid "Type"
|
||||
msgstr "Typ"
|
||||
|
|
444
po/pt_BR.po
444
po/pt_BR.po
|
@ -1,89 +1,93 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
# Translators:
|
||||
# Denis Brandl <denisbr@gmail.com>, 2015
|
||||
# Gilberto Coutinho <gilberto.jsc@gmail.com>, 2015
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: telegram-purple\n"
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2015-11-21 14:37+0100\n"
|
||||
"PO-Revision-Date: 2015-12-18 13:05+0000\n"
|
||||
"Last-Translator: Gilberto Coutinho <gilberto.jsc@gmail.com>\n"
|
||||
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/telegram-purple-developers/telegram-purple/language/pt_BR/)\n"
|
||||
"POT-Creation-Date: 2016-08-31 22:53+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Ben Wiederhake <BenWiederhake.GitHub@gmx.de>, 2016\n"
|
||||
"Language-Team: Portuguese (Brazil) (https://www.transifex.com/telegram-purple-developers/teams/53149/pt_BR/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: pt_BR\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
|
||||
#: ../telegram-base.c:515
|
||||
#: ../telegram-base.c:500
|
||||
msgid "Couldn't create group"
|
||||
msgstr "Não foi possível criar o grupo"
|
||||
|
||||
#: ../telegram-base.c:515
|
||||
#: ../telegram-base.c:501
|
||||
msgid "Please select at least one other user."
|
||||
msgstr "Por favor, selecione pelo menos 1 usuário."
|
||||
|
||||
#: ../telegram-base.c:570
|
||||
#: ../telegram-base.c:555
|
||||
msgid "Query Failed"
|
||||
msgstr "Falha na fila"
|
||||
|
||||
#: ../telegram-purple.c:193
|
||||
#: ../telegram-purple.c:162
|
||||
msgid "Secret chat ready."
|
||||
msgstr "Conversa secreta pronta"
|
||||
|
||||
#: ../telegram-purple.c:200
|
||||
#: ../telegram-purple.c:170
|
||||
msgid "Secret chat terminated."
|
||||
msgstr "Conversa secreta terminada."
|
||||
|
||||
#: ../telegram-purple.c:268
|
||||
#: ../telegram-purple.c:182
|
||||
msgid "Telegram"
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:229
|
||||
msgid "Message marked as read."
|
||||
msgstr "Mensagem marcada como \"lida\"."
|
||||
|
||||
#: ../telegram-purple.c:486
|
||||
#: ../telegram-purple.c:339
|
||||
#, c-format
|
||||
msgid "Invite link: %s"
|
||||
msgstr "Link de convite: %s"
|
||||
|
||||
#: ../telegram-purple.c:506 ../telegram-purple.c:507
|
||||
#. FIXME: Can TGLCHF_MODERATOR export links?
|
||||
#: ../telegram-purple.c:350
|
||||
msgid "Creating chat link failed"
|
||||
msgstr "Falha na criação do link para a conversa"
|
||||
|
||||
#: ../telegram-purple.c:508
|
||||
#: ../telegram-purple.c:351
|
||||
msgid "You need to be admin of the group to do that."
|
||||
msgstr "Você precisa ser Administrador do grupo para fazer isso"
|
||||
|
||||
#: ../telegram-purple.c:531
|
||||
#: ../telegram-purple.c:416
|
||||
msgid "Chat joined"
|
||||
msgstr "Entrou na conversa"
|
||||
|
||||
#: ../telegram-purple.c:532
|
||||
#: ../telegram-purple.c:417
|
||||
msgid "Chat added to list of chat rooms."
|
||||
msgstr "Conversa adicionada a listas de salas de conversa"
|
||||
|
||||
#: ../telegram-purple.c:552
|
||||
#: ../telegram-purple.c:443
|
||||
msgid "Start secret chat..."
|
||||
msgstr "Começar conversa secreta..."
|
||||
|
||||
#. Generate Public Link
|
||||
#: ../telegram-purple.c:558
|
||||
#: ../telegram-purple.c:450
|
||||
msgid "Invite users by link..."
|
||||
msgstr "Convidar usuários pelo link..."
|
||||
|
||||
#. Delete self from chat
|
||||
#: ../telegram-purple.c:564
|
||||
#: ../telegram-purple.c:458
|
||||
msgid "Delete and exit..."
|
||||
msgstr "Deletar e sair..."
|
||||
|
||||
#: ../telegram-purple.c:632
|
||||
#: ../telegram-purple.c:546
|
||||
#, c-format
|
||||
msgid "Unable to sign on as %s: pubkey not found."
|
||||
msgstr "Impossível de assinar como %s: chave-pública não encontrada"
|
||||
msgid "Unable to sign on as %s: file (public key) not found."
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:636
|
||||
#: ../telegram-purple.c:550
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Make sure telegram-purple is installed properly,\n"
|
||||
|
@ -91,336 +95,400 @@ msgid ""
|
|||
"If you're running SELinux (e.g. when using Tails),\n"
|
||||
"try 'make local_install', or simply copy\n"
|
||||
"%1$s to %2$s."
|
||||
msgstr "Tenha certeza que o telegram-purple está devidamente instalado,\nincluindo o arquivo .tglpub.\nSe vocês estiver rodando SELinux (por exemplo: quando usa o Tails),\ntente fazer uma \"instalação local\", ou simplesmente compie\n%1$s para %2$s."
|
||||
msgstr ""
|
||||
"Tenha certeza que o telegram-purple está devidamente instalado,\n"
|
||||
"incluindo o arquivo .tglpub.\n"
|
||||
"Se vocês estiver rodando SELinux (por exemplo: quando usa o Tails),\n"
|
||||
"tente fazer uma \"instalação local\", ou simplesmente compie\n"
|
||||
"%1$s para %2$s."
|
||||
|
||||
#: ../telegram-purple.c:657
|
||||
#: ../telegram-purple.c:572
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Unable to sign on as %s: problem in the underlying library 'tgl'. Please "
|
||||
"submit a bug report with the debug log."
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:576
|
||||
msgid "Problem in tgl"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Please fill in your own prefix!
|
||||
#: ../telegram-purple.c:584
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Unable to sign on as %s: phone number lacks country prefix. Numbers must "
|
||||
"start with the full international prefix code, e.g. +49 for Germany."
|
||||
msgstr "Não é possível assinar como %s: número de telefone sem prefixo do país.\nNúmeros precisam começar com o prefixo internacional,\npor exemplo: +55 para o Brasil."
|
||||
"start with the full international prefix code, e.g. +1 for USA."
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:662
|
||||
#: ../telegram-purple.c:589
|
||||
msgid "Incomplete phone number"
|
||||
msgstr "Número de telefone inválido"
|
||||
|
||||
#: ../telegram-purple.c:788 ../telegram-purple.c:789
|
||||
#: ../telegram-purple.c:642
|
||||
msgid "Secret chat was already deleted"
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:644
|
||||
msgid "Secret chat is not ready"
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:652
|
||||
msgid "Only the creator of a channel can post messages."
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:695
|
||||
msgid "Cannot invite buddy to chat"
|
||||
msgstr "Não foi possível convidar o amigo para a conversa"
|
||||
|
||||
#: ../telegram-purple.c:790
|
||||
#: ../telegram-purple.c:696
|
||||
msgid "Specified user does not exist."
|
||||
msgstr "O usuário especificado não existe."
|
||||
|
||||
#: ../telegram-purple.c:709
|
||||
msgid "phone no. (+ country prefix)"
|
||||
msgstr ""
|
||||
|
||||
#. Login
|
||||
#: ../telegram-purple.c:932
|
||||
#: ../telegram-purple.c:817
|
||||
msgid "Password (two factor authentication)"
|
||||
msgstr "Senha (dois processos de autenticação)"
|
||||
|
||||
#: ../telegram-purple.c:938
|
||||
#: ../telegram-purple.c:822
|
||||
msgid ""
|
||||
"Fallback SMS verification\n"
|
||||
"(Helps when not using Pidgin and you aren't being prompted for the code)"
|
||||
msgstr "Retorno de verificaçao via SMS\n(Ajuda quando não estiver usando o Pidgin e não é apresentado a janela com o código)"
|
||||
msgstr ""
|
||||
"Retorno de verificaçao via SMS\n"
|
||||
"(Ajuda quando não estiver usando o Pidgin e não é apresentado a janela com o código)"
|
||||
|
||||
#: ../telegram-purple.c:946
|
||||
msgid "ask"
|
||||
msgstr "pergunta"
|
||||
|
||||
#: ../telegram-purple.c:947
|
||||
#: ../telegram-purple.c:828
|
||||
msgid "always"
|
||||
msgstr "sempre"
|
||||
|
||||
#: ../telegram-purple.c:948
|
||||
#: ../telegram-purple.c:829
|
||||
msgid "never"
|
||||
msgstr "nunca"
|
||||
|
||||
#: ../telegram-purple.c:950
|
||||
#: ../telegram-purple.c:830
|
||||
msgid "ask"
|
||||
msgstr "pergunta"
|
||||
|
||||
#: ../telegram-purple.c:832
|
||||
msgid "Accept secret chats"
|
||||
msgstr "Aceitar conversa secrete"
|
||||
|
||||
#: ../telegram-purple.c:955
|
||||
#: ../telegram-purple.c:836
|
||||
msgid "Display buddies offline after (days)"
|
||||
msgstr "Mostrar período que os amigos estão offline (dias)"
|
||||
|
||||
#: ../telegram-purple.c:960
|
||||
msgid "Fetch past history on first login"
|
||||
msgstr "Trazer histórico no primeio login"
|
||||
|
||||
#: ../telegram-purple.c:965
|
||||
#: ../telegram-purple.c:840
|
||||
msgid ""
|
||||
"Don't fetch history older than (days)\n"
|
||||
"(0 for unlimited)"
|
||||
msgstr "Não trazer históricos mais velhos que (dias)\n(0 para não limitar)"
|
||||
msgstr ""
|
||||
"Não trazer históricos mais velhos que (dias)\n"
|
||||
"(0 para não limitar)"
|
||||
|
||||
#. Media
|
||||
#: ../telegram-purple.c:845
|
||||
msgid "Autoload media size (kb)"
|
||||
msgstr ""
|
||||
|
||||
#. Chats
|
||||
#: ../telegram-purple.c:973
|
||||
#: ../telegram-purple.c:850
|
||||
msgid "Add all group chats to buddy list"
|
||||
msgstr "Adicinar todos os grupos de conversa a lista de amigos"
|
||||
|
||||
#. Read notifications
|
||||
#: ../telegram-purple.c:981
|
||||
#: ../telegram-purple.c:855
|
||||
msgid "Display notices of receipt"
|
||||
msgstr "Mostrar avisos de recebimento"
|
||||
|
||||
#: ../telegram-purple.c:986
|
||||
#: ../telegram-purple.c:859
|
||||
msgid "Send notices of receipt when present"
|
||||
msgstr "Mandar avisos de recebimento quando estiver online"
|
||||
|
||||
#: ../tgp-2prpl.c:178 ../tgp-request.c:108
|
||||
msgid "First name"
|
||||
msgstr "Primeiro nome"
|
||||
#: ../telegram-purple.c:884
|
||||
msgid "Telegram Protocol Plugin."
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-2prpl.c:179 ../tgp-request.c:111
|
||||
msgid "Last name"
|
||||
msgstr "Último nome"
|
||||
|
||||
#: ../tgp-2prpl.c:181
|
||||
msgid "Name"
|
||||
msgstr "Nome"
|
||||
|
||||
#: ../tgp-2prpl.c:186 ../tgp-request.c:197 ../tgp-request.c:201
|
||||
#: ../tgp-request.c:205
|
||||
msgid "Username"
|
||||
msgstr "Nome de usuário"
|
||||
|
||||
#: ../tgp-2prpl.c:191
|
||||
msgid "Last seen"
|
||||
msgstr "Visto em"
|
||||
|
||||
#: ../tgp-2prpl.c:196
|
||||
msgid "Phone"
|
||||
msgstr "Fone"
|
||||
|
||||
#: ../tgp-2prpl.c:208
|
||||
msgid "Waiting for the user to get online..."
|
||||
msgstr "Esperando pelo usuário ficar online..."
|
||||
|
||||
#: ../tgp-2prpl.c:212
|
||||
msgid "Self destruction timer"
|
||||
msgstr "Tempo para auto destruição"
|
||||
|
||||
#: ../tgp-2prpl.c:218
|
||||
msgid "Timer is not enabled."
|
||||
msgstr "Cronômetro não habilitado."
|
||||
|
||||
#: ../tgp-2prpl.c:225
|
||||
msgid "Secret key"
|
||||
msgstr "Chave secreta"
|
||||
|
||||
#: ../tgp-msg.c:72
|
||||
#: ../tgp-msg.c:58
|
||||
#, c-format
|
||||
msgid "%2$s created chat %1$s."
|
||||
msgstr "%2$s criouo a conversa %1$s."
|
||||
|
||||
#: ../tgp-msg.c:75
|
||||
#: ../tgp-msg.c:61
|
||||
#, c-format
|
||||
msgid "%2$s changed title to %1$s."
|
||||
msgstr "%2$s mudou o assunto para %1$s,"
|
||||
|
||||
#: ../tgp-msg.c:78
|
||||
#: ../tgp-msg.c:64
|
||||
#, c-format
|
||||
msgid "%s changed photo."
|
||||
msgstr "%s mudou a foto."
|
||||
|
||||
#: ../tgp-msg.c:81
|
||||
#: ../tgp-msg.c:67
|
||||
#, c-format
|
||||
msgid "%s deleted photo."
|
||||
msgstr "%s deletou a foto."
|
||||
|
||||
#: ../tgp-msg.c:89
|
||||
#: ../tgp-msg.c:75
|
||||
#, c-format
|
||||
msgid "%1$s added user %2$s by link."
|
||||
msgstr "%1$s adicionou o usuário %2$s por link."
|
||||
|
||||
#: ../tgp-msg.c:102
|
||||
#: ../tgp-msg.c:90
|
||||
#, c-format
|
||||
msgid "%2$s added user %1$s."
|
||||
msgstr "%2$s adicionou o usuário %1$s."
|
||||
|
||||
#: ../tgp-msg.c:125 ../tgp-msg.c:140
|
||||
#: ../tgp-msg.c:114 ../tgp-msg.c:131
|
||||
#, c-format
|
||||
msgid "%2$s deleted user %1$s."
|
||||
msgstr "%2$s reoveu o usuário %1$s"
|
||||
|
||||
#: ../tgp-msg.c:146
|
||||
#: ../tgp-msg.c:138
|
||||
#, c-format
|
||||
msgid "%2$s set self destruction timer to %1$d second."
|
||||
msgid_plural "%2$s set self destruction timer to %1$d seconds."
|
||||
msgstr[0] "%2$s tempo para auto destruição configurado para %1$d segundos."
|
||||
msgstr[1] "%2$s tempo para auto destruição configurado para %1$d segundos."
|
||||
|
||||
#: ../tgp-msg.c:152
|
||||
#: ../tgp-msg.c:144
|
||||
#, c-format
|
||||
msgid "%2$s marked %1$d message read."
|
||||
msgid_plural "%2$s marked %1$d messages read."
|
||||
msgstr[0] "%2$s marcou %1$d mensagens como lidas."
|
||||
msgstr[1] "%2$s marcou %1$d mensagens como lidas."
|
||||
|
||||
#: ../tgp-msg.c:158
|
||||
#: ../tgp-msg.c:150
|
||||
#, c-format
|
||||
msgid "%2$s deleted %1$d message."
|
||||
msgid_plural "%2$s deleted %1$d messages."
|
||||
msgstr[0] "%2$s deletou %1$d mensagens."
|
||||
msgstr[1] "%2$s deletou %1$d mensagens."
|
||||
|
||||
#: ../tgp-msg.c:164
|
||||
#: ../tgp-msg.c:156
|
||||
#, c-format
|
||||
msgid "%2$s made a screenshot of %1$d message."
|
||||
msgid_plural "%2$s made a screenshot of %1$d messages."
|
||||
msgstr[0] "%2$s capturou a tela de %1$d mensagens."
|
||||
msgstr[1] "%2$s capturou a tela de %1$d mensagens."
|
||||
|
||||
#: ../tgp-msg.c:162
|
||||
#, c-format
|
||||
msgid "Channel %1$s created"
|
||||
msgstr ""
|
||||
|
||||
#. FIXME: check if this makes sense
|
||||
#: ../tgp-msg.c:165 ../tgp-chat.c:124 ../tgp-chat.c:576
|
||||
msgid "Telegram Channels"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-msg.c:191
|
||||
msgid "Sending message failed."
|
||||
msgstr "Envio de imagem falhou."
|
||||
|
||||
#: ../tgp-msg.c:296
|
||||
#: ../tgp-msg.c:253
|
||||
msgid "Sending image failed."
|
||||
msgstr "Envio de imagem falhou."
|
||||
|
||||
#: ../tgp-msg.c:310
|
||||
msgid "Sorry, sending documents to encrypted chats not yet supported."
|
||||
msgstr "Desculpe, envio de documentos para conversas encriptadas"
|
||||
|
||||
#: ../tgp-msg.c:400
|
||||
#: ../tgp-msg.c:417
|
||||
#, c-format
|
||||
msgid "%s sent a sticker."
|
||||
msgstr "%s enviou um adesivo."
|
||||
|
||||
#: ../tgp-net.c:286
|
||||
#: ../tgp-msg.c:463
|
||||
msgid "failed loading message"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-msg.c:498
|
||||
msgid "[animation]"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-msg.c:515
|
||||
msgid "[audio]"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-msg.c:515
|
||||
msgid "[video]"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-msg.c:604
|
||||
#, c-format
|
||||
msgid "<b>Forwarded message from: %s</b><br>%s"
|
||||
msgstr ""
|
||||
|
||||
#. FIXME: sometimes users aren't part of the response when receiving a
|
||||
#. forwarded message
|
||||
#: ../tgp-msg.c:607
|
||||
#, c-format
|
||||
msgid "<b>Forwarded message:</b><br>%s"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-msg.c:720
|
||||
msgid "loading document or picture failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-net.c:281
|
||||
msgid "Cannot connect to main server"
|
||||
msgstr "Não pode se conectar no servidor principal"
|
||||
|
||||
#: ../tgp-net.c:342
|
||||
#: ../tgp-net.c:322
|
||||
msgid "Cannot connect to server: Ping timeout."
|
||||
msgstr "Não pode se conectar no servidor: Ping timeout."
|
||||
|
||||
#: ../tgp-net.c:387
|
||||
#: ../tgp-net.c:365
|
||||
msgid "Lost connection to the server..."
|
||||
msgstr "Conexão com o servidor foi perdida..."
|
||||
|
||||
#: ../tgp-request.c:64
|
||||
#: ../tgp-request.c:51
|
||||
msgid ""
|
||||
"Telegram wants to verify your identity. Please enter the login code that you"
|
||||
" have received via SMS."
|
||||
msgstr "Telegram quer confirmar sua identidade. Por favor insira o código recebido por SMS."
|
||||
msgstr ""
|
||||
"Telegram quer confirmar sua identidade. Por favor insira o código recebido "
|
||||
"por SMS."
|
||||
|
||||
#: ../tgp-request.c:67
|
||||
#: ../tgp-request.c:54
|
||||
msgid "Login code"
|
||||
msgstr "Código de login"
|
||||
|
||||
#: ../tgp-request.c:67
|
||||
#: ../tgp-request.c:54
|
||||
msgid "Enter login code"
|
||||
msgstr "Insira o código de login"
|
||||
|
||||
#: ../tgp-request.c:67
|
||||
#: ../tgp-request.c:54
|
||||
msgid "the code"
|
||||
msgstr "o código"
|
||||
|
||||
#: ../tgp-request.c:67 ../tgp-request.c:116 ../tgp-request.c:210
|
||||
#: ../tgp-request.c:245 ../tgp-request.c:275
|
||||
#: ../tgp-request.c:54 ../tgp-request.c:104 ../tgp-request.c:198
|
||||
#: ../tgp-request.c:233 ../tgp-request.c:263
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
|
||||
#: ../tgp-request.c:68 ../tgp-request.c:116 ../tgp-request.c:135
|
||||
#: ../tgp-request.c:211 ../tgp-request.c:246 ../tgp-request.c:276
|
||||
#: ../tgp-request.c:55 ../tgp-request.c:104 ../tgp-request.c:123
|
||||
#: ../tgp-request.c:199 ../tgp-request.c:234 ../tgp-request.c:264
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
#: ../tgp-request.c:107
|
||||
#: ../tgp-request.c:95
|
||||
msgid "Registration"
|
||||
msgstr "Registrar"
|
||||
|
||||
#: ../tgp-request.c:115
|
||||
#: ../tgp-request.c:96
|
||||
msgid "First name"
|
||||
msgstr "Primeiro nome"
|
||||
|
||||
#: ../tgp-request.c:99
|
||||
msgid "Last name"
|
||||
msgstr "Último nome"
|
||||
|
||||
#: ../tgp-request.c:103
|
||||
msgid "Register"
|
||||
msgstr "Registrar"
|
||||
|
||||
#: ../tgp-request.c:115
|
||||
#: ../tgp-request.c:103
|
||||
msgid "Please register your phone number."
|
||||
msgstr "Por favor registre seu número de telefone."
|
||||
|
||||
#. purple_request API not available
|
||||
#: ../tgp-request.c:120
|
||||
#: ../tgp-request.c:108
|
||||
msgid ""
|
||||
"Phone number is not registered. Please register your phone on a different "
|
||||
"client."
|
||||
msgstr "Número de telefone não registrado. Por favor registre seu número de telefone com um cliente diferente."
|
||||
msgstr ""
|
||||
"Número de telefone não registrado. Por favor registre seu número de telefone"
|
||||
" com um cliente diferente."
|
||||
|
||||
#: ../tgp-request.c:122
|
||||
#: ../tgp-request.c:110
|
||||
msgid "Not registered"
|
||||
msgstr "Não Registrado"
|
||||
|
||||
#: ../tgp-request.c:134
|
||||
#: ../tgp-request.c:122
|
||||
msgid "Password needed"
|
||||
msgstr "Senha necessária"
|
||||
|
||||
#: ../tgp-request.c:134
|
||||
#: ../tgp-request.c:122
|
||||
msgid "Enter password for two factor authentication"
|
||||
msgstr "Insira a senha para o processo de autenticação dupla"
|
||||
|
||||
#: ../tgp-request.c:135
|
||||
#: ../tgp-request.c:123
|
||||
msgid "Ok"
|
||||
msgstr "OK"
|
||||
|
||||
#: ../tgp-request.c:137
|
||||
#: ../tgp-request.c:125
|
||||
msgid ""
|
||||
"No password set for two factor authentication. Please enter it in the "
|
||||
"extended settings."
|
||||
msgstr "Não há senha configurado para o processo de autenticação dupla. Por favor insira nas configurações expandidas."
|
||||
msgstr ""
|
||||
"Não há senha configurado para o processo de autenticação dupla. Por favor "
|
||||
"insira nas configurações expandidas."
|
||||
|
||||
#: ../tgp-request.c:139
|
||||
#: ../tgp-request.c:127
|
||||
msgid "Password invalid"
|
||||
msgstr "Senha inválida."
|
||||
|
||||
#: ../tgp-request.c:162
|
||||
#: ../tgp-request.c:150
|
||||
#, c-format
|
||||
msgid "Accept secret chat '%s' on this device?"
|
||||
msgstr "Aceitar conversa Secreta '%s'?"
|
||||
|
||||
#: ../tgp-request.c:163
|
||||
#: ../tgp-request.c:151
|
||||
msgid "Secret chat"
|
||||
msgstr "Conversa Secreta"
|
||||
|
||||
#: ../tgp-request.c:163
|
||||
#: ../tgp-request.c:151
|
||||
msgid ""
|
||||
"Secret chats can only have one end point. If you accept a secret chat on "
|
||||
"this device, its messages will not be available anywhere else. If you "
|
||||
"decline, you can still accept the chat on other devices."
|
||||
msgstr "Conversas secretas podem ocorrer em apenas um local. Se você aceitar uma conversa secreta nesse dispositivo, essas mensagens não estarão disponíveis em nenhum outro local. Se você rejeitar, pode aceitar a conversa em outros dispositivos."
|
||||
msgstr ""
|
||||
"Conversas secretas podem ocorrer em apenas um local. Se você aceitar uma "
|
||||
"conversa secreta nesse dispositivo, essas mensagens não estarão disponíveis "
|
||||
"em nenhum outro local. Se você rejeitar, pode aceitar a conversa em outros "
|
||||
"dispositivos."
|
||||
|
||||
#: ../tgp-request.c:194
|
||||
#: ../tgp-request.c:182
|
||||
msgid ""
|
||||
"Invite at least one additional user by specifying\n"
|
||||
" their full name (autocompletion available).\n"
|
||||
"You can add more users once the chat was created."
|
||||
msgstr "Convidar ao menos mais um usuário\npelo nome completo (autocompletar disponível).\nVocê pode adicionar mais usuários depois que a conversa for criada."
|
||||
msgstr ""
|
||||
"Convidar ao menos mais um usuário\n"
|
||||
"pelo nome completo (autocompletar disponível).\n"
|
||||
"Você pode adicionar mais usuários depois que a conversa for criada."
|
||||
|
||||
#: ../tgp-request.c:210
|
||||
#: ../tgp-request.c:185 ../tgp-request.c:189 ../tgp-request.c:193
|
||||
msgid "Username"
|
||||
msgstr "Nome de usuário"
|
||||
|
||||
#: ../tgp-request.c:198
|
||||
msgid "Create group chat"
|
||||
msgstr "Criar conversa em grupo"
|
||||
|
||||
#: ../tgp-request.c:210
|
||||
#: ../tgp-request.c:198
|
||||
msgid "Invite users"
|
||||
msgstr "Convidar usuários"
|
||||
|
||||
#: ../tgp-request.c:229 ../tgp-request.c:244
|
||||
#: ../tgp-request.c:217 ../tgp-request.c:232
|
||||
msgid "Change password"
|
||||
msgstr "Mudar senha"
|
||||
|
||||
#: ../tgp-request.c:231
|
||||
#: ../tgp-request.c:219
|
||||
msgid "Current"
|
||||
msgstr "Atual"
|
||||
|
||||
#: ../tgp-request.c:235 ../tgp-request.c:265
|
||||
#: ../tgp-request.c:223 ../tgp-request.c:253
|
||||
msgid "Password"
|
||||
msgstr "Senha"
|
||||
|
||||
#: ../tgp-request.c:239 ../tgp-request.c:269
|
||||
#: ../tgp-request.c:227 ../tgp-request.c:257
|
||||
msgid "Confirm"
|
||||
msgstr "Confirma"
|
||||
|
||||
#: ../tgp-request.c:263 ../tgp-request.c:274
|
||||
#: ../tgp-request.c:251 ../tgp-request.c:262
|
||||
msgid "New password"
|
||||
msgstr "Nova senha"
|
||||
|
||||
|
@ -429,58 +497,112 @@ msgstr "Nova senha"
|
|||
#. ask for the phone number directly, cause in that case the account would
|
||||
#. still be created
|
||||
#. named with the invalid phone number, even though the login will work
|
||||
#: ../tgp-request.c:312
|
||||
#: ../tgp-request.c:300
|
||||
msgid "Invalid phone number"
|
||||
msgstr "Número de telefone inválido"
|
||||
|
||||
#: ../tgp-request.c:313
|
||||
#: ../tgp-request.c:301
|
||||
msgid ""
|
||||
"Please enter only numbers in the international phone number format, a leading + following by the country prefix and the phone number.\n"
|
||||
"Do not use any other special chars."
|
||||
msgstr "Por favor insira apenas número no formato de número telefônico internacional, começando com + seguido pelo código do país e o número do telefone.\nNão use caractéres especiais."
|
||||
msgstr ""
|
||||
"Por favor insira apenas número no formato de número telefônico internacional, começando com + seguido pelo código do país e o número do telefone.\n"
|
||||
"Não use caractéres especiais."
|
||||
|
||||
#: ../tgp-request.c:370
|
||||
msgid "Leave Chat"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:372
|
||||
msgid "Do you want to leave this chat permantently?"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:377
|
||||
msgid "Abort Secret Chat"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:379
|
||||
msgid "Do you want to terminate this secret chat permantently?"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:384
|
||||
msgid "Delete Contact"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:386
|
||||
msgid "Do you want to remove this user from your global contact list?"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:401
|
||||
msgid "Leave Channel"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:403
|
||||
msgid "Do you want to leave this channel?"
|
||||
msgstr ""
|
||||
|
||||
#. This should be the language's timestamp format. This is preceded by a
|
||||
#. colon.
|
||||
#: ../tgp-utils.c:32
|
||||
#: ../tgp-utils.c:27
|
||||
msgid "%d.%m.%Y %H:%M"
|
||||
msgstr "%d.%m.%Y %H:%M"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:53
|
||||
#: ../tgp-utils.c:48
|
||||
msgid "recently"
|
||||
msgstr "recentemente"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:57
|
||||
#: ../tgp-utils.c:52
|
||||
msgid "last week"
|
||||
msgstr "semana passada"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:61
|
||||
#: ../tgp-utils.c:56
|
||||
msgid "last month"
|
||||
msgstr "mês passado"
|
||||
|
||||
#. This is preceded by a colon. It refers to a point on time.
|
||||
#: ../tgp-utils.c:65
|
||||
#: ../tgp-utils.c:60
|
||||
msgid "unknown"
|
||||
msgstr "desconhecido"
|
||||
|
||||
#: ../tgp-chat.c:79
|
||||
#: ../tgp-chat.c:108 ../tgp-chat.c:582
|
||||
msgid "Telegram Chats"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-chat.c:113
|
||||
msgid "You have already left this chat."
|
||||
msgstr "Você já saiu dessa conversa."
|
||||
|
||||
#: ../tgp-chat.c:127
|
||||
#: ../tgp-chat.c:224
|
||||
msgid "Subject:"
|
||||
msgstr "Assunto:"
|
||||
|
||||
#: ../tgp-chat.c:133
|
||||
#: ../tgp-chat.c:230
|
||||
msgid "Invite link:"
|
||||
msgstr "Link do convite:"
|
||||
|
||||
#: ../tgp-chat.c:139
|
||||
#: ../tgp-chat.c:236
|
||||
msgid "Chat ID:"
|
||||
msgstr "Identificação da conversa:"
|
||||
|
||||
#: ../tgp-chat.c:238
|
||||
#: ../tgp-chat.c:342
|
||||
msgid "Supergroup"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-chat.c:342
|
||||
msgid "Channel"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-chat.c:345
|
||||
msgid "Group"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-chat.c:367
|
||||
msgid "Users in chat"
|
||||
msgstr "Usuários no chat."
|
||||
|
||||
#: ../tgp-chat.c:370
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
|
|
448
po/ru_RU.po
448
po/ru_RU.po
|
@ -1,90 +1,93 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
# Translators:
|
||||
# Vladimir <TurbaVladimir@yandex.ru>, 2015
|
||||
# Yan Pas, 2015
|
||||
# Сергей <djam5@ya.ru>, 2015
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: telegram-purple\n"
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2015-11-21 14:37+0100\n"
|
||||
"PO-Revision-Date: 2015-12-18 13:13+0000\n"
|
||||
"Last-Translator: Vladimir <TurbaVladimir@yandex.ru>\n"
|
||||
"Language-Team: Russian (Russia) (http://www.transifex.com/telegram-purple-developers/telegram-purple/language/ru_RU/)\n"
|
||||
"POT-Creation-Date: 2016-08-31 22:53+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: SergeyDjam <djam5@ya.ru>, 2016\n"
|
||||
"Language-Team: Russian (Russia) (https://www.transifex.com/telegram-purple-developers/teams/53149/ru_RU/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: ru_RU\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
|
||||
|
||||
#: ../telegram-base.c:515
|
||||
#: ../telegram-base.c:500
|
||||
msgid "Couldn't create group"
|
||||
msgstr "Не удалось создать группу"
|
||||
|
||||
#: ../telegram-base.c:515
|
||||
#: ../telegram-base.c:501
|
||||
msgid "Please select at least one other user."
|
||||
msgstr "Пожалуйста, выберите хотя бы одного другого пользователя."
|
||||
|
||||
#: ../telegram-base.c:570
|
||||
#: ../telegram-base.c:555
|
||||
msgid "Query Failed"
|
||||
msgstr "Ошибка запроса"
|
||||
|
||||
#: ../telegram-purple.c:193
|
||||
#: ../telegram-purple.c:162
|
||||
msgid "Secret chat ready."
|
||||
msgstr "Секретный чат готов."
|
||||
|
||||
#: ../telegram-purple.c:200
|
||||
#: ../telegram-purple.c:170
|
||||
msgid "Secret chat terminated."
|
||||
msgstr "Защищенный чат завершен"
|
||||
|
||||
#: ../telegram-purple.c:268
|
||||
#: ../telegram-purple.c:182
|
||||
msgid "Telegram"
|
||||
msgstr "Telegram"
|
||||
|
||||
#: ../telegram-purple.c:229
|
||||
msgid "Message marked as read."
|
||||
msgstr "Сообщение помечено как прочитанное"
|
||||
|
||||
#: ../telegram-purple.c:486
|
||||
#: ../telegram-purple.c:339
|
||||
#, c-format
|
||||
msgid "Invite link: %s"
|
||||
msgstr "Пригласительная ссылка: %s"
|
||||
|
||||
#: ../telegram-purple.c:506 ../telegram-purple.c:507
|
||||
#. FIXME: Can TGLCHF_MODERATOR export links?
|
||||
#: ../telegram-purple.c:350
|
||||
msgid "Creating chat link failed"
|
||||
msgstr "Не удалось создать ссылку чата"
|
||||
|
||||
#: ../telegram-purple.c:508
|
||||
#: ../telegram-purple.c:351
|
||||
msgid "You need to be admin of the group to do that."
|
||||
msgstr "Вы должны быть администратором группы, чтобы сделать это."
|
||||
|
||||
#: ../telegram-purple.c:531
|
||||
#: ../telegram-purple.c:416
|
||||
msgid "Chat joined"
|
||||
msgstr "Присоединился к чату"
|
||||
|
||||
#: ../telegram-purple.c:532
|
||||
#: ../telegram-purple.c:417
|
||||
msgid "Chat added to list of chat rooms."
|
||||
msgstr "Чат добавлен в список чатов."
|
||||
|
||||
#: ../telegram-purple.c:552
|
||||
#: ../telegram-purple.c:443
|
||||
msgid "Start secret chat..."
|
||||
msgstr "Начать секретный чат…"
|
||||
|
||||
#. Generate Public Link
|
||||
#: ../telegram-purple.c:558
|
||||
#: ../telegram-purple.c:450
|
||||
msgid "Invite users by link..."
|
||||
msgstr "Пригласить пользователей по ссылке..."
|
||||
|
||||
#. Delete self from chat
|
||||
#: ../telegram-purple.c:564
|
||||
#: ../telegram-purple.c:458
|
||||
msgid "Delete and exit..."
|
||||
msgstr "Удалить и выйти..."
|
||||
|
||||
#: ../telegram-purple.c:632
|
||||
#: ../telegram-purple.c:546
|
||||
#, c-format
|
||||
msgid "Unable to sign on as %s: pubkey not found."
|
||||
msgstr "Не удается войти как %s: публичный ключ не найден."
|
||||
msgid "Unable to sign on as %s: file (public key) not found."
|
||||
msgstr "Не удается войти как %s: файл (публичный ключ) не найден."
|
||||
|
||||
#: ../telegram-purple.c:636
|
||||
#: ../telegram-purple.c:550
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Make sure telegram-purple is installed properly,\n"
|
||||
|
@ -92,159 +95,162 @@ msgid ""
|
|||
"If you're running SELinux (e.g. when using Tails),\n"
|
||||
"try 'make local_install', or simply copy\n"
|
||||
"%1$s to %2$s."
|
||||
msgstr "Убедитесь, что telegram-purple установлен правильно,\nвключая .tglpub файл.\nЕсли вы используете SELinux (например при использовании Tails),\nпопробуйте 'make local_install', или просто скопируйте\n%1$s в %2$s."
|
||||
msgstr ""
|
||||
"Убедитесь, что telegram-purple установлен правильно,\n"
|
||||
"включая .tglpub файл.\n"
|
||||
"Если вы используете SELinux (например при использовании Tails),\n"
|
||||
"попробуйте 'make local_install', или просто скопируйте\n"
|
||||
"%1$s в %2$s."
|
||||
|
||||
#: ../telegram-purple.c:657
|
||||
#: ../telegram-purple.c:572
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Unable to sign on as %s: problem in the underlying library 'tgl'. Please "
|
||||
"submit a bug report with the debug log."
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:576
|
||||
msgid "Problem in tgl"
|
||||
msgstr "Проблема в tgl"
|
||||
|
||||
#. TRANSLATORS: Please fill in your own prefix!
|
||||
#: ../telegram-purple.c:584
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Unable to sign on as %s: phone number lacks country prefix. Numbers must "
|
||||
"start with the full international prefix code, e.g. +49 for Germany."
|
||||
msgstr "Не удалось войти как %s: номер телефона не содержит кода страны. Номера должны начинаться с международного кода, +7 для России."
|
||||
"start with the full international prefix code, e.g. +1 for USA."
|
||||
msgstr ""
|
||||
"Не удалось войти как %s: номер телефона не содержит кода страны. Номера "
|
||||
"должны начинаться с международного кода, +7 для России."
|
||||
|
||||
#: ../telegram-purple.c:662
|
||||
#: ../telegram-purple.c:589
|
||||
msgid "Incomplete phone number"
|
||||
msgstr "Неполный номер телефона"
|
||||
|
||||
#: ../telegram-purple.c:788 ../telegram-purple.c:789
|
||||
#: ../telegram-purple.c:642
|
||||
msgid "Secret chat was already deleted"
|
||||
msgstr "Секретный чат уже был удален"
|
||||
|
||||
#: ../telegram-purple.c:644
|
||||
msgid "Secret chat is not ready"
|
||||
msgstr "Секретный чат не готов"
|
||||
|
||||
#: ../telegram-purple.c:652
|
||||
msgid "Only the creator of a channel can post messages."
|
||||
msgstr "Только создатель канала может отправлять сообщения."
|
||||
|
||||
#: ../telegram-purple.c:695
|
||||
msgid "Cannot invite buddy to chat"
|
||||
msgstr "Не могу пригласить пользователя в чат"
|
||||
|
||||
#: ../telegram-purple.c:790
|
||||
#: ../telegram-purple.c:696
|
||||
msgid "Specified user does not exist."
|
||||
msgstr "Указанный пользователь не существует."
|
||||
|
||||
#: ../telegram-purple.c:709
|
||||
msgid "phone no. (+ country prefix)"
|
||||
msgstr "номер телефона. (+ префикс страны)"
|
||||
|
||||
#. Login
|
||||
#: ../telegram-purple.c:932
|
||||
#: ../telegram-purple.c:817
|
||||
msgid "Password (two factor authentication)"
|
||||
msgstr "Пароль (двухфакторная аутентификация) "
|
||||
|
||||
#: ../telegram-purple.c:938
|
||||
#: ../telegram-purple.c:822
|
||||
msgid ""
|
||||
"Fallback SMS verification\n"
|
||||
"(Helps when not using Pidgin and you aren't being prompted for the code)"
|
||||
msgstr "Альтернативная СМС верификация\n(Помогает когда не используется pidgin и вас не просило ввести код)"
|
||||
msgstr ""
|
||||
"Альтернативная СМС верификация\n"
|
||||
"(Помогает когда не используется pidgin и вас не просило ввести код)"
|
||||
|
||||
#: ../telegram-purple.c:946
|
||||
msgid "ask"
|
||||
msgstr "Спрашивать"
|
||||
|
||||
#: ../telegram-purple.c:947
|
||||
#: ../telegram-purple.c:828
|
||||
msgid "always"
|
||||
msgstr "всегда"
|
||||
|
||||
#: ../telegram-purple.c:948
|
||||
#: ../telegram-purple.c:829
|
||||
msgid "never"
|
||||
msgstr "никогда"
|
||||
|
||||
#: ../telegram-purple.c:950
|
||||
#: ../telegram-purple.c:830
|
||||
msgid "ask"
|
||||
msgstr "Спрашивать"
|
||||
|
||||
#: ../telegram-purple.c:832
|
||||
msgid "Accept secret chats"
|
||||
msgstr "Присоединится к защищенным чатам"
|
||||
|
||||
#: ../telegram-purple.c:955
|
||||
#: ../telegram-purple.c:836
|
||||
msgid "Display buddies offline after (days)"
|
||||
msgstr "Показывать друзей оффлайн через(дней)"
|
||||
|
||||
#: ../telegram-purple.c:960
|
||||
msgid "Fetch past history on first login"
|
||||
msgstr "Загрузить историю при первом входе"
|
||||
|
||||
#: ../telegram-purple.c:965
|
||||
#: ../telegram-purple.c:840
|
||||
msgid ""
|
||||
"Don't fetch history older than (days)\n"
|
||||
"(0 for unlimited)"
|
||||
msgstr "Не загружать историю старше N дней\n(0 без ограничений)"
|
||||
msgstr ""
|
||||
"Не загружать историю старше N дней\n"
|
||||
"(0 без ограничений)"
|
||||
|
||||
#. Media
|
||||
#: ../telegram-purple.c:845
|
||||
msgid "Autoload media size (kb)"
|
||||
msgstr ""
|
||||
|
||||
#. Chats
|
||||
#: ../telegram-purple.c:973
|
||||
#: ../telegram-purple.c:850
|
||||
msgid "Add all group chats to buddy list"
|
||||
msgstr "Добавить все групповые чаты в контактлист"
|
||||
|
||||
#. Read notifications
|
||||
#: ../telegram-purple.c:981
|
||||
#: ../telegram-purple.c:855
|
||||
msgid "Display notices of receipt"
|
||||
msgstr "Показать уведомления о получении"
|
||||
|
||||
#: ../telegram-purple.c:986
|
||||
#: ../telegram-purple.c:859
|
||||
msgid "Send notices of receipt when present"
|
||||
msgstr "Показать уведомления о получении"
|
||||
|
||||
#: ../tgp-2prpl.c:178 ../tgp-request.c:108
|
||||
msgid "First name"
|
||||
msgstr "Имя"
|
||||
#: ../telegram-purple.c:884
|
||||
msgid "Telegram Protocol Plugin."
|
||||
msgstr "Telegram Protocol Плагин."
|
||||
|
||||
#: ../tgp-2prpl.c:179 ../tgp-request.c:111
|
||||
msgid "Last name"
|
||||
msgstr "Фамилия"
|
||||
|
||||
#: ../tgp-2prpl.c:181
|
||||
msgid "Name"
|
||||
msgstr "Ник"
|
||||
|
||||
#: ../tgp-2prpl.c:186 ../tgp-request.c:197 ../tgp-request.c:201
|
||||
#: ../tgp-request.c:205
|
||||
msgid "Username"
|
||||
msgstr "Пользователь"
|
||||
|
||||
#: ../tgp-2prpl.c:191
|
||||
msgid "Last seen"
|
||||
msgstr "Последний раз был в сети"
|
||||
|
||||
#: ../tgp-2prpl.c:196
|
||||
msgid "Phone"
|
||||
msgstr "Телефон"
|
||||
|
||||
#: ../tgp-2prpl.c:208
|
||||
msgid "Waiting for the user to get online..."
|
||||
msgstr "Ожидание пользователя..."
|
||||
|
||||
#: ../tgp-2prpl.c:212
|
||||
msgid "Self destruction timer"
|
||||
msgstr "Таймер самоуничтожения"
|
||||
|
||||
#: ../tgp-2prpl.c:218
|
||||
msgid "Timer is not enabled."
|
||||
msgstr "Таймер не включен."
|
||||
|
||||
#: ../tgp-2prpl.c:225
|
||||
msgid "Secret key"
|
||||
msgstr "Секретный ключ"
|
||||
|
||||
#: ../tgp-msg.c:72
|
||||
#: ../tgp-msg.c:58
|
||||
#, c-format
|
||||
msgid "%2$s created chat %1$s."
|
||||
msgstr "%2$s создан чат %1$s."
|
||||
|
||||
#: ../tgp-msg.c:75
|
||||
#: ../tgp-msg.c:61
|
||||
#, c-format
|
||||
msgid "%2$s changed title to %1$s."
|
||||
msgstr "%2$s название изменено на %1$s."
|
||||
|
||||
#: ../tgp-msg.c:78
|
||||
#: ../tgp-msg.c:64
|
||||
#, c-format
|
||||
msgid "%s changed photo."
|
||||
msgstr "%s фото изменено."
|
||||
|
||||
#: ../tgp-msg.c:81
|
||||
#: ../tgp-msg.c:67
|
||||
#, c-format
|
||||
msgid "%s deleted photo."
|
||||
msgstr "%s фото удалено."
|
||||
|
||||
#: ../tgp-msg.c:89
|
||||
#: ../tgp-msg.c:75
|
||||
#, c-format
|
||||
msgid "%1$s added user %2$s by link."
|
||||
msgstr "%1$s пользователи добавлены %2$s по ссылке"
|
||||
|
||||
#: ../tgp-msg.c:102
|
||||
#: ../tgp-msg.c:90
|
||||
#, c-format
|
||||
msgid "%2$s added user %1$s."
|
||||
msgstr "%2$s пользователь добавлен %1$s."
|
||||
|
||||
#: ../tgp-msg.c:125 ../tgp-msg.c:140
|
||||
#: ../tgp-msg.c:114 ../tgp-msg.c:131
|
||||
#, c-format
|
||||
msgid "%2$s deleted user %1$s."
|
||||
msgstr "%2$s пользователи удалены %1$s."
|
||||
|
||||
#: ../tgp-msg.c:146
|
||||
#: ../tgp-msg.c:138
|
||||
#, c-format
|
||||
msgid "%2$s set self destruction timer to %1$d second."
|
||||
msgid_plural "%2$s set self destruction timer to %1$d seconds."
|
||||
|
@ -253,7 +259,7 @@ msgstr[1] "%2$s установил таймер самоуничтожения
|
|||
msgstr[2] "%2$s установил таймер самоуничтожения на %1$d секунд."
|
||||
msgstr[3] "%2$s установил таймер самоуничтожения на %1$d секунд."
|
||||
|
||||
#: ../tgp-msg.c:152
|
||||
#: ../tgp-msg.c:144
|
||||
#, c-format
|
||||
msgid "%2$s marked %1$d message read."
|
||||
msgid_plural "%2$s marked %1$d messages read."
|
||||
|
@ -262,7 +268,7 @@ msgstr[1] "%2$s пометил %1$d сообщения прочитанными.
|
|||
msgstr[2] "%2$s пометил %1$d сообщений прочитанными."
|
||||
msgstr[3] "%2$s пометил %1$d сообщений прочитанными."
|
||||
|
||||
#: ../tgp-msg.c:158
|
||||
#: ../tgp-msg.c:150
|
||||
#, c-format
|
||||
msgid "%2$s deleted %1$d message."
|
||||
msgid_plural "%2$s deleted %1$d messages."
|
||||
|
@ -271,7 +277,7 @@ msgstr[1] "%2$s удалил %1$d сообщения."
|
|||
msgstr[2] "%2$s удалил %1$d сообщений."
|
||||
msgstr[3] "%2$s удалил %1$d сообщений."
|
||||
|
||||
#: ../tgp-msg.c:164
|
||||
#: ../tgp-msg.c:156
|
||||
#, c-format
|
||||
msgid "%2$s made a screenshot of %1$d message."
|
||||
msgid_plural "%2$s made a screenshot of %1$d messages."
|
||||
|
@ -280,156 +286,218 @@ msgstr[1] "%2$s сделал скриншот %1$d сообщений."
|
|||
msgstr[2] "%2$s сделал скриншот %1$d сообщений."
|
||||
msgstr[3] "%2$s сделал скриншот %1$d сообщений."
|
||||
|
||||
#: ../tgp-msg.c:162
|
||||
#, c-format
|
||||
msgid "Channel %1$s created"
|
||||
msgstr "Канал %1$s создан"
|
||||
|
||||
#. FIXME: check if this makes sense
|
||||
#: ../tgp-msg.c:165 ../tgp-chat.c:124 ../tgp-chat.c:576
|
||||
msgid "Telegram Channels"
|
||||
msgstr "Telegram Каналы"
|
||||
|
||||
#: ../tgp-msg.c:191
|
||||
msgid "Sending message failed."
|
||||
msgstr "Отправка сообщения не удалась."
|
||||
|
||||
#: ../tgp-msg.c:296
|
||||
#: ../tgp-msg.c:253
|
||||
msgid "Sending image failed."
|
||||
msgstr "Ошибка при отправке изображения."
|
||||
|
||||
#: ../tgp-msg.c:310
|
||||
msgid "Sorry, sending documents to encrypted chats not yet supported."
|
||||
msgstr "Извините, отправка документов в секретных чатах пока не поддерживается."
|
||||
|
||||
#: ../tgp-msg.c:400
|
||||
#: ../tgp-msg.c:417
|
||||
#, c-format
|
||||
msgid "%s sent a sticker."
|
||||
msgstr "%s отправил стикер."
|
||||
|
||||
#: ../tgp-net.c:286
|
||||
#: ../tgp-msg.c:463
|
||||
msgid "failed loading message"
|
||||
msgstr "не удалось загрузить сообщения"
|
||||
|
||||
#: ../tgp-msg.c:498
|
||||
msgid "[animation]"
|
||||
msgstr "[анимация]"
|
||||
|
||||
#: ../tgp-msg.c:515
|
||||
msgid "[audio]"
|
||||
msgstr "[аудио]"
|
||||
|
||||
#: ../tgp-msg.c:515
|
||||
msgid "[video]"
|
||||
msgstr "[видео]"
|
||||
|
||||
#: ../tgp-msg.c:604
|
||||
#, c-format
|
||||
msgid "<b>Forwarded message from: %s</b><br>%s"
|
||||
msgstr ""
|
||||
|
||||
#. FIXME: sometimes users aren't part of the response when receiving a
|
||||
#. forwarded message
|
||||
#: ../tgp-msg.c:607
|
||||
#, c-format
|
||||
msgid "<b>Forwarded message:</b><br>%s"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-msg.c:720
|
||||
msgid "loading document or picture failed"
|
||||
msgstr "загрузка документа или изображения не удалась"
|
||||
|
||||
#: ../tgp-net.c:281
|
||||
msgid "Cannot connect to main server"
|
||||
msgstr "Не удается подключится к главному серверу"
|
||||
|
||||
#: ../tgp-net.c:342
|
||||
#: ../tgp-net.c:322
|
||||
msgid "Cannot connect to server: Ping timeout."
|
||||
msgstr "Не удается подключиться к серверу: пинг тайм-аут."
|
||||
|
||||
#: ../tgp-net.c:387
|
||||
#: ../tgp-net.c:365
|
||||
msgid "Lost connection to the server..."
|
||||
msgstr "Потеряно соединение с сервером..."
|
||||
|
||||
#: ../tgp-request.c:64
|
||||
#: ../tgp-request.c:51
|
||||
msgid ""
|
||||
"Telegram wants to verify your identity. Please enter the login code that you"
|
||||
" have received via SMS."
|
||||
msgstr "Telegram хочет проверить вашу личность. Пожалуйста введите код, полученный вами через СМС."
|
||||
msgstr ""
|
||||
"Telegram хочет проверить вашу личность. Пожалуйста введите код, полученный "
|
||||
"вами через СМС."
|
||||
|
||||
#: ../tgp-request.c:67
|
||||
#: ../tgp-request.c:54
|
||||
msgid "Login code"
|
||||
msgstr "Код входа"
|
||||
|
||||
#: ../tgp-request.c:67
|
||||
#: ../tgp-request.c:54
|
||||
msgid "Enter login code"
|
||||
msgstr "Введите код входа"
|
||||
|
||||
#: ../tgp-request.c:67
|
||||
#: ../tgp-request.c:54
|
||||
msgid "the code"
|
||||
msgstr "код"
|
||||
|
||||
#: ../tgp-request.c:67 ../tgp-request.c:116 ../tgp-request.c:210
|
||||
#: ../tgp-request.c:245 ../tgp-request.c:275
|
||||
#: ../tgp-request.c:54 ../tgp-request.c:104 ../tgp-request.c:198
|
||||
#: ../tgp-request.c:233 ../tgp-request.c:263
|
||||
msgid "OK"
|
||||
msgstr "Подтвердить"
|
||||
|
||||
#: ../tgp-request.c:68 ../tgp-request.c:116 ../tgp-request.c:135
|
||||
#: ../tgp-request.c:211 ../tgp-request.c:246 ../tgp-request.c:276
|
||||
#: ../tgp-request.c:55 ../tgp-request.c:104 ../tgp-request.c:123
|
||||
#: ../tgp-request.c:199 ../tgp-request.c:234 ../tgp-request.c:264
|
||||
msgid "Cancel"
|
||||
msgstr "Отмена"
|
||||
|
||||
#: ../tgp-request.c:107
|
||||
#: ../tgp-request.c:95
|
||||
msgid "Registration"
|
||||
msgstr "Регистрация"
|
||||
|
||||
#: ../tgp-request.c:115
|
||||
#: ../tgp-request.c:96
|
||||
msgid "First name"
|
||||
msgstr "Имя"
|
||||
|
||||
#: ../tgp-request.c:99
|
||||
msgid "Last name"
|
||||
msgstr "Фамилия"
|
||||
|
||||
#: ../tgp-request.c:103
|
||||
msgid "Register"
|
||||
msgstr "Зарегистрирован"
|
||||
|
||||
#: ../tgp-request.c:115
|
||||
#: ../tgp-request.c:103
|
||||
msgid "Please register your phone number."
|
||||
msgstr "Пожалуйста, зарегистрируйте свой номер телефона."
|
||||
|
||||
#. purple_request API not available
|
||||
#: ../tgp-request.c:120
|
||||
#: ../tgp-request.c:108
|
||||
msgid ""
|
||||
"Phone number is not registered. Please register your phone on a different "
|
||||
"client."
|
||||
msgstr "Номер телефона не зарегистрирован. Пожалуйста зарегистрируйте ваш телефон в другом клиенте."
|
||||
msgstr ""
|
||||
"Номер телефона не зарегистрирован. Пожалуйста зарегистрируйте ваш телефон в "
|
||||
"другом клиенте."
|
||||
|
||||
#: ../tgp-request.c:122
|
||||
#: ../tgp-request.c:110
|
||||
msgid "Not registered"
|
||||
msgstr "Не зарегистрирован"
|
||||
|
||||
#: ../tgp-request.c:134
|
||||
#: ../tgp-request.c:122
|
||||
msgid "Password needed"
|
||||
msgstr "Необходим пароль"
|
||||
|
||||
#: ../tgp-request.c:134
|
||||
#: ../tgp-request.c:122
|
||||
msgid "Enter password for two factor authentication"
|
||||
msgstr "Введите пароль для двухфакторной аутентификации"
|
||||
|
||||
#: ../tgp-request.c:135
|
||||
#: ../tgp-request.c:123
|
||||
msgid "Ok"
|
||||
msgstr "Ок"
|
||||
|
||||
#: ../tgp-request.c:137
|
||||
#: ../tgp-request.c:125
|
||||
msgid ""
|
||||
"No password set for two factor authentication. Please enter it in the "
|
||||
"extended settings."
|
||||
msgstr "Не указан пароль для двухфакторной аутентификации. Пожалуйста введите его в расширенных настройках."
|
||||
msgstr ""
|
||||
"Не указан пароль для двухфакторной аутентификации. Пожалуйста введите его в "
|
||||
"расширенных настройках."
|
||||
|
||||
#: ../tgp-request.c:139
|
||||
#: ../tgp-request.c:127
|
||||
msgid "Password invalid"
|
||||
msgstr "Неверный пароль"
|
||||
|
||||
#: ../tgp-request.c:162
|
||||
#: ../tgp-request.c:150
|
||||
#, c-format
|
||||
msgid "Accept secret chat '%s' on this device?"
|
||||
msgstr "Присоединится к секретному чату '%s' на этом устройстве?"
|
||||
|
||||
#: ../tgp-request.c:163
|
||||
#: ../tgp-request.c:151
|
||||
msgid "Secret chat"
|
||||
msgstr "Секретный чат"
|
||||
|
||||
#: ../tgp-request.c:163
|
||||
#: ../tgp-request.c:151
|
||||
msgid ""
|
||||
"Secret chats can only have one end point. If you accept a secret chat on "
|
||||
"this device, its messages will not be available anywhere else. If you "
|
||||
"decline, you can still accept the chat on other devices."
|
||||
msgstr "Секретные чаты могут иметь только одну конечную точку. Если вы подтвердите секретный чат на этом устройстве, то его сообщения будут недоступны нигде больше. Если вы отклоните, то вы сможете принять этот чат на других устройствах."
|
||||
msgstr ""
|
||||
"Секретные чаты могут иметь только одну конечную точку. Если вы подтвердите "
|
||||
"секретный чат на этом устройстве, то его сообщения будут недоступны нигде "
|
||||
"больше. Если вы отклоните, то вы сможете принять этот чат на других "
|
||||
"устройствах."
|
||||
|
||||
#: ../tgp-request.c:194
|
||||
#: ../tgp-request.c:182
|
||||
msgid ""
|
||||
"Invite at least one additional user by specifying\n"
|
||||
" their full name (autocompletion available).\n"
|
||||
"You can add more users once the chat was created."
|
||||
msgstr "Пригласите хотя бы одного дополнительного пользователя, указав их полные имена (автодополнение доступно).\nВы можете добавить больше пользователей после создания чата."
|
||||
msgstr ""
|
||||
"Пригласите хотя бы одного дополнительного пользователя, указав их полные имена (автодополнение доступно).\n"
|
||||
"Вы можете добавить больше пользователей после создания чата."
|
||||
|
||||
#: ../tgp-request.c:210
|
||||
#: ../tgp-request.c:185 ../tgp-request.c:189 ../tgp-request.c:193
|
||||
msgid "Username"
|
||||
msgstr "Пользователь"
|
||||
|
||||
#: ../tgp-request.c:198
|
||||
msgid "Create group chat"
|
||||
msgstr "Создать групповой чат"
|
||||
|
||||
#: ../tgp-request.c:210
|
||||
#: ../tgp-request.c:198
|
||||
msgid "Invite users"
|
||||
msgstr "Приглашенные собеседники"
|
||||
|
||||
#: ../tgp-request.c:229 ../tgp-request.c:244
|
||||
#: ../tgp-request.c:217 ../tgp-request.c:232
|
||||
msgid "Change password"
|
||||
msgstr "Сменить пароль"
|
||||
|
||||
#: ../tgp-request.c:231
|
||||
#: ../tgp-request.c:219
|
||||
msgid "Current"
|
||||
msgstr "Текущий"
|
||||
|
||||
#: ../tgp-request.c:235 ../tgp-request.c:265
|
||||
#: ../tgp-request.c:223 ../tgp-request.c:253
|
||||
msgid "Password"
|
||||
msgstr "Пароль"
|
||||
|
||||
#: ../tgp-request.c:239 ../tgp-request.c:269
|
||||
#: ../tgp-request.c:227 ../tgp-request.c:257
|
||||
msgid "Confirm"
|
||||
msgstr "Подтвердить"
|
||||
|
||||
#: ../tgp-request.c:263 ../tgp-request.c:274
|
||||
#: ../tgp-request.c:251 ../tgp-request.c:262
|
||||
msgid "New password"
|
||||
msgstr "Новый пароль"
|
||||
|
||||
|
@ -438,58 +506,114 @@ msgstr "Новый пароль"
|
|||
#. ask for the phone number directly, cause in that case the account would
|
||||
#. still be created
|
||||
#. named with the invalid phone number, even though the login will work
|
||||
#: ../tgp-request.c:312
|
||||
#: ../tgp-request.c:300
|
||||
msgid "Invalid phone number"
|
||||
msgstr "Неправильный номер телефона"
|
||||
|
||||
#: ../tgp-request.c:313
|
||||
#: ../tgp-request.c:301
|
||||
msgid ""
|
||||
"Please enter only numbers in the international phone number format, a leading + following by the country prefix and the phone number.\n"
|
||||
"Do not use any other special chars."
|
||||
msgstr "Пожалуйста, введите только цифры в международном формате телефонного номера. Начиная с +, префикса страны и заканчивая телефонным номером. \nНе используйте никакие другие специальные символы."
|
||||
msgstr ""
|
||||
"Пожалуйста, введите только цифры в международном формате телефонного номера. Начиная с +, префикса страны и заканчивая телефонным номером. \n"
|
||||
"Не используйте никакие другие специальные символы."
|
||||
|
||||
#: ../tgp-request.c:370
|
||||
msgid "Leave Chat"
|
||||
msgstr "Покинуть Чат"
|
||||
|
||||
#: ../tgp-request.c:372
|
||||
msgid "Do you want to leave this chat permantently?"
|
||||
msgstr "Вы хотите покинуть этот чат навсегда?"
|
||||
|
||||
#: ../tgp-request.c:377
|
||||
msgid "Abort Secret Chat"
|
||||
msgstr "Отменить Секретный Чат"
|
||||
|
||||
#: ../tgp-request.c:379
|
||||
msgid "Do you want to terminate this secret chat permantently?"
|
||||
msgstr "Вы хотите отменить этот чат навсегда?"
|
||||
|
||||
#: ../tgp-request.c:384
|
||||
msgid "Delete Contact"
|
||||
msgstr "Удалить Контакт"
|
||||
|
||||
#: ../tgp-request.c:386
|
||||
msgid "Do you want to remove this user from your global contact list?"
|
||||
msgstr ""
|
||||
"Вы хотите удалить этого пользователья из вашего глобального списка контактов"
|
||||
" навсегда?"
|
||||
|
||||
#: ../tgp-request.c:401
|
||||
msgid "Leave Channel"
|
||||
msgstr "Покинуть Канал"
|
||||
|
||||
#: ../tgp-request.c:403
|
||||
msgid "Do you want to leave this channel?"
|
||||
msgstr "Вы хотите покинуть этот канал?"
|
||||
|
||||
#. This should be the language's timestamp format. This is preceded by a
|
||||
#. colon.
|
||||
#: ../tgp-utils.c:32
|
||||
#: ../tgp-utils.c:27
|
||||
msgid "%d.%m.%Y %H:%M"
|
||||
msgstr "%d.%m.%Y %H:%M"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:53
|
||||
#: ../tgp-utils.c:48
|
||||
msgid "recently"
|
||||
msgstr "недавно"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:57
|
||||
#: ../tgp-utils.c:52
|
||||
msgid "last week"
|
||||
msgstr "последняя неделя"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:61
|
||||
#: ../tgp-utils.c:56
|
||||
msgid "last month"
|
||||
msgstr "последний месяц"
|
||||
|
||||
#. This is preceded by a colon. It refers to a point on time.
|
||||
#: ../tgp-utils.c:65
|
||||
#: ../tgp-utils.c:60
|
||||
msgid "unknown"
|
||||
msgstr "неизвестно"
|
||||
|
||||
#: ../tgp-chat.c:79
|
||||
#: ../tgp-chat.c:108 ../tgp-chat.c:582
|
||||
msgid "Telegram Chats"
|
||||
msgstr "Telegram Чаты"
|
||||
|
||||
#: ../tgp-chat.c:113
|
||||
msgid "You have already left this chat."
|
||||
msgstr "Вы уже покинули этот чат."
|
||||
|
||||
#: ../tgp-chat.c:127
|
||||
#: ../tgp-chat.c:224
|
||||
msgid "Subject:"
|
||||
msgstr "Заголовок:"
|
||||
|
||||
#: ../tgp-chat.c:133
|
||||
#: ../tgp-chat.c:230
|
||||
msgid "Invite link:"
|
||||
msgstr "Пригласительная ссылка:"
|
||||
|
||||
#: ../tgp-chat.c:139
|
||||
#: ../tgp-chat.c:236
|
||||
msgid "Chat ID:"
|
||||
msgstr "Чат ID:"
|
||||
|
||||
#: ../tgp-chat.c:238
|
||||
#: ../tgp-chat.c:342
|
||||
msgid "Supergroup"
|
||||
msgstr "Супергруппа"
|
||||
|
||||
#: ../tgp-chat.c:342
|
||||
msgid "Channel"
|
||||
msgstr "Канал"
|
||||
|
||||
#: ../tgp-chat.c:345
|
||||
msgid "Group"
|
||||
msgstr "Группа"
|
||||
|
||||
#: ../tgp-chat.c:367
|
||||
msgid "Users in chat"
|
||||
msgstr "Пользователи в чате"
|
||||
|
||||
#: ../tgp-chat.c:370
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
|
|
451
po/sq.po
451
po/sq.po
|
@ -1,90 +1,93 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
# Translators:
|
||||
# Besnik <besnik@programeshqip.org>, 2015
|
||||
# Besnik <besnik@programeshqip.org>, 2015
|
||||
# M J <mtthsjntsch@gmail.com>, 2015
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: telegram-purple\n"
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2015-11-21 14:37+0100\n"
|
||||
"PO-Revision-Date: 2015-12-18 13:05+0000\n"
|
||||
"Last-Translator: Besnik <besnik@programeshqip.org>\n"
|
||||
"Language-Team: Albanian (http://www.transifex.com/telegram-purple-developers/telegram-purple/language/sq/)\n"
|
||||
"POT-Creation-Date: 2016-08-31 22:53+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Besnik <besnik@programeshqip.org>, 2016\n"
|
||||
"Language-Team: Albanian (https://www.transifex.com/telegram-purple-developers/teams/53149/sq/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: sq\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: ../telegram-base.c:515
|
||||
#: ../telegram-base.c:500
|
||||
msgid "Couldn't create group"
|
||||
msgstr "S’u krijua dot grup"
|
||||
|
||||
#: ../telegram-base.c:515
|
||||
#: ../telegram-base.c:501
|
||||
msgid "Please select at least one other user."
|
||||
msgstr "Ju lutemi, përzgjidhni të paktën një përdorues tjetër."
|
||||
|
||||
#: ../telegram-base.c:570
|
||||
#: ../telegram-base.c:555
|
||||
msgid "Query Failed"
|
||||
msgstr "Kërkesa Dështoi"
|
||||
|
||||
#: ../telegram-purple.c:193
|
||||
#: ../telegram-purple.c:162
|
||||
msgid "Secret chat ready."
|
||||
msgstr "Fjalosje e fshehtë gati."
|
||||
|
||||
#: ../telegram-purple.c:200
|
||||
#: ../telegram-purple.c:170
|
||||
msgid "Secret chat terminated."
|
||||
msgstr "Fjalosja e fshehtë përfundoi."
|
||||
|
||||
#: ../telegram-purple.c:268
|
||||
#: ../telegram-purple.c:182
|
||||
msgid "Telegram"
|
||||
msgstr "Telegram"
|
||||
|
||||
#: ../telegram-purple.c:229
|
||||
msgid "Message marked as read."
|
||||
msgstr "Mesazh i shënuar si i lexuar."
|
||||
|
||||
#: ../telegram-purple.c:486
|
||||
#: ../telegram-purple.c:339
|
||||
#, c-format
|
||||
msgid "Invite link: %s"
|
||||
msgstr "Lidhje ftese: %s"
|
||||
|
||||
#: ../telegram-purple.c:506 ../telegram-purple.c:507
|
||||
#. FIXME: Can TGLCHF_MODERATOR export links?
|
||||
#: ../telegram-purple.c:350
|
||||
msgid "Creating chat link failed"
|
||||
msgstr "Krijimi i lidhjes së fjalosjes dështoi"
|
||||
|
||||
#: ../telegram-purple.c:508
|
||||
#: ../telegram-purple.c:351
|
||||
msgid "You need to be admin of the group to do that."
|
||||
msgstr "Lypset të jeni përgjegjës grupi që të bëni këtë."
|
||||
|
||||
#: ../telegram-purple.c:531
|
||||
#: ../telegram-purple.c:416
|
||||
msgid "Chat joined"
|
||||
msgstr "U hy në fjalosje"
|
||||
|
||||
#: ../telegram-purple.c:532
|
||||
#: ../telegram-purple.c:417
|
||||
msgid "Chat added to list of chat rooms."
|
||||
msgstr "Fjalosja u shtua te listë dhomash fjalosjeje."
|
||||
|
||||
#: ../telegram-purple.c:552
|
||||
#: ../telegram-purple.c:443
|
||||
msgid "Start secret chat..."
|
||||
msgstr "Filloni fjalosje të fshehtë..."
|
||||
|
||||
#. Generate Public Link
|
||||
#: ../telegram-purple.c:558
|
||||
#: ../telegram-purple.c:450
|
||||
msgid "Invite users by link..."
|
||||
msgstr "Ftoni përdorues përmes lidhjesh..."
|
||||
|
||||
#. Delete self from chat
|
||||
#: ../telegram-purple.c:564
|
||||
#: ../telegram-purple.c:458
|
||||
msgid "Delete and exit..."
|
||||
msgstr "Fshije dhe dil..."
|
||||
|
||||
#: ../telegram-purple.c:632
|
||||
#: ../telegram-purple.c:546
|
||||
#, c-format
|
||||
msgid "Unable to sign on as %s: pubkey not found."
|
||||
msgstr "I pazoti të hyjë si %s: s’u gjet pubkey."
|
||||
msgid "Unable to sign on as %s: file (public key) not found."
|
||||
msgstr "S’arrin të bëhet hyrja si %s: s’u gjet kartelë (kyç publik)."
|
||||
|
||||
#: ../telegram-purple.c:636
|
||||
#: ../telegram-purple.c:550
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Make sure telegram-purple is installed properly,\n"
|
||||
|
@ -92,336 +95,406 @@ msgid ""
|
|||
"If you're running SELinux (e.g. when using Tails),\n"
|
||||
"try 'make local_install', or simply copy\n"
|
||||
"%1$s to %2$s."
|
||||
msgstr "Sigurohuni që telegram-purple është instaluar si duhet,\npërfshi këtu kartelën .tglpub.\nNëse xhironi SELinux (p.sh. kur përdorni Tails),\nprovoni 'make local_install', ose thjesht kopjoni\n%1$s te %2$s."
|
||||
msgstr ""
|
||||
"Sigurohuni që telegram-purple është instaluar si duhet,\n"
|
||||
"përfshi këtu kartelën .tglpub.\n"
|
||||
"Nëse xhironi SELinux (p.sh. kur përdorni Tails),\n"
|
||||
"provoni 'make local_install', ose thjesht kopjoni\n"
|
||||
"%1$s te %2$s."
|
||||
|
||||
#: ../telegram-purple.c:657
|
||||
#: ../telegram-purple.c:572
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Unable to sign on as %s: problem in the underlying library 'tgl'. Please "
|
||||
"submit a bug report with the debug log."
|
||||
msgstr ""
|
||||
"S’arrihet të hyhet si %s: problem në librarinë përkatëse 'tgl'. Ju lutemi, "
|
||||
"parashtroni një njoftim të metash të shoqëruar nga regjistrimi i "
|
||||
"diagnostikimit."
|
||||
|
||||
#: ../telegram-purple.c:576
|
||||
msgid "Problem in tgl"
|
||||
msgstr "Problem në tgl"
|
||||
|
||||
#. TRANSLATORS: Please fill in your own prefix!
|
||||
#: ../telegram-purple.c:584
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Unable to sign on as %s: phone number lacks country prefix. Numbers must "
|
||||
"start with the full international prefix code, e.g. +49 for Germany."
|
||||
msgstr "I pazoti të hyjë si %s: numrit të telefonit i mungon prefiksi i vendit. Numrat duhet të fillojnë me kodin e plotë prefiks ndërkombëtar, p.sh. +49 për Gjermaninë."
|
||||
"start with the full international prefix code, e.g. +1 for USA."
|
||||
msgstr ""
|
||||
"I pazoti të hyjë si %s: numrit të telefonit i mungon prefiksi i vendit. "
|
||||
"Numrat duhet të fillojnë me kodin e plotë prefiksi ndërkombëtar, p.sh. +355 "
|
||||
"për Shqipërinë."
|
||||
|
||||
#: ../telegram-purple.c:662
|
||||
#: ../telegram-purple.c:589
|
||||
msgid "Incomplete phone number"
|
||||
msgstr "Numër telefoni jo i plotë"
|
||||
|
||||
#: ../telegram-purple.c:788 ../telegram-purple.c:789
|
||||
#: ../telegram-purple.c:642
|
||||
msgid "Secret chat was already deleted"
|
||||
msgstr "Fjalosja e fshehtë qe fshirë tashmë"
|
||||
|
||||
#: ../telegram-purple.c:644
|
||||
msgid "Secret chat is not ready"
|
||||
msgstr "Fjalosja e fshehtë s’është gati"
|
||||
|
||||
#: ../telegram-purple.c:652
|
||||
msgid "Only the creator of a channel can post messages."
|
||||
msgstr "Mesazhe mund të postojë vetëm krijuesi i një kanali."
|
||||
|
||||
#: ../telegram-purple.c:695
|
||||
msgid "Cannot invite buddy to chat"
|
||||
msgstr "S’ftohet dot shok në fjalosje"
|
||||
|
||||
#: ../telegram-purple.c:790
|
||||
#: ../telegram-purple.c:696
|
||||
msgid "Specified user does not exist."
|
||||
msgstr "Përdoruesi i treguar nuk ekziston."
|
||||
|
||||
#: ../telegram-purple.c:709
|
||||
msgid "phone no. (+ country prefix)"
|
||||
msgstr "nr. telefoni (+ prefiks vendi)"
|
||||
|
||||
#. Login
|
||||
#: ../telegram-purple.c:932
|
||||
#: ../telegram-purple.c:817
|
||||
msgid "Password (two factor authentication)"
|
||||
msgstr "Fjalëkalim (mirëfilltësim dyfaktorësh)"
|
||||
|
||||
#: ../telegram-purple.c:938
|
||||
#: ../telegram-purple.c:822
|
||||
msgid ""
|
||||
"Fallback SMS verification\n"
|
||||
"(Helps when not using Pidgin and you aren't being prompted for the code)"
|
||||
msgstr "Kalim vetvetiu për verfikime SMS\n(I dobishëm kur s’përdoret Pidgin-i dhe nuk ju kërkohet kod)"
|
||||
msgstr ""
|
||||
"Kalim vetvetiu për verfikime SMS\n"
|
||||
"(I dobishëm kur s’përdoret Pidgin-i dhe nuk ju kërkohet kod)"
|
||||
|
||||
#: ../telegram-purple.c:946
|
||||
msgid "ask"
|
||||
msgstr "pyet"
|
||||
|
||||
#: ../telegram-purple.c:947
|
||||
#: ../telegram-purple.c:828
|
||||
msgid "always"
|
||||
msgstr "përherë"
|
||||
|
||||
#: ../telegram-purple.c:948
|
||||
#: ../telegram-purple.c:829
|
||||
msgid "never"
|
||||
msgstr "kurrë"
|
||||
|
||||
#: ../telegram-purple.c:950
|
||||
#: ../telegram-purple.c:830
|
||||
msgid "ask"
|
||||
msgstr "pyet"
|
||||
|
||||
#: ../telegram-purple.c:832
|
||||
msgid "Accept secret chats"
|
||||
msgstr "Prano fjalosje të fshehta"
|
||||
|
||||
#: ../telegram-purple.c:955
|
||||
#: ../telegram-purple.c:836
|
||||
msgid "Display buddies offline after (days)"
|
||||
msgstr "Shfaqi shokët si jo të lidhur pas (ditësh)"
|
||||
|
||||
#: ../telegram-purple.c:960
|
||||
msgid "Fetch past history on first login"
|
||||
msgstr "Sill historik të kaluar gjatë hyrjes së parë"
|
||||
|
||||
#: ../telegram-purple.c:965
|
||||
#: ../telegram-purple.c:840
|
||||
msgid ""
|
||||
"Don't fetch history older than (days)\n"
|
||||
"(0 for unlimited)"
|
||||
msgstr "Mos sill historik më të vjetë se (ditë)\n(0 për pa kufizim)"
|
||||
msgstr ""
|
||||
"Mos sill historik më të vjetë se (ditë)\n"
|
||||
"(0 për pa kufizim)"
|
||||
|
||||
#. Media
|
||||
#: ../telegram-purple.c:845
|
||||
msgid "Autoload media size (kb)"
|
||||
msgstr "Madhësi media që vetëluhet (kb)"
|
||||
|
||||
#. Chats
|
||||
#: ../telegram-purple.c:973
|
||||
#: ../telegram-purple.c:850
|
||||
msgid "Add all group chats to buddy list"
|
||||
msgstr "Shtoji krejt fjalosjet e grupit te lista e shokëve"
|
||||
|
||||
#. Read notifications
|
||||
#: ../telegram-purple.c:981
|
||||
#: ../telegram-purple.c:855
|
||||
msgid "Display notices of receipt"
|
||||
msgstr "Shfaq njoftime dëftese"
|
||||
|
||||
#: ../telegram-purple.c:986
|
||||
#: ../telegram-purple.c:859
|
||||
msgid "Send notices of receipt when present"
|
||||
msgstr "Dërgo njoftime dëftese kur ka"
|
||||
|
||||
#: ../tgp-2prpl.c:178 ../tgp-request.c:108
|
||||
msgid "First name"
|
||||
msgstr "Emër"
|
||||
#: ../telegram-purple.c:884
|
||||
msgid "Telegram Protocol Plugin."
|
||||
msgstr "Shtojcë Protokolli Telegram."
|
||||
|
||||
#: ../tgp-2prpl.c:179 ../tgp-request.c:111
|
||||
msgid "Last name"
|
||||
msgstr "Mbiemër"
|
||||
|
||||
#: ../tgp-2prpl.c:181
|
||||
msgid "Name"
|
||||
msgstr "Emër"
|
||||
|
||||
#: ../tgp-2prpl.c:186 ../tgp-request.c:197 ../tgp-request.c:201
|
||||
#: ../tgp-request.c:205
|
||||
msgid "Username"
|
||||
msgstr "Emër përdoruesi"
|
||||
|
||||
#: ../tgp-2prpl.c:191
|
||||
msgid "Last seen"
|
||||
msgstr "Parë së fundi"
|
||||
|
||||
#: ../tgp-2prpl.c:196
|
||||
msgid "Phone"
|
||||
msgstr "Telefon"
|
||||
|
||||
#: ../tgp-2prpl.c:208
|
||||
msgid "Waiting for the user to get online..."
|
||||
msgstr "Po pritet që përdoruesit të lidhen në Internet..."
|
||||
|
||||
#: ../tgp-2prpl.c:212
|
||||
msgid "Self destruction timer"
|
||||
msgstr "Kohëmatës vetëshkatërrimi"
|
||||
|
||||
#: ../tgp-2prpl.c:218
|
||||
msgid "Timer is not enabled."
|
||||
msgstr "Kohëmatësi s’është aktivizuar."
|
||||
|
||||
#: ../tgp-2prpl.c:225
|
||||
msgid "Secret key"
|
||||
msgstr "Kyç i fshehtë"
|
||||
|
||||
#: ../tgp-msg.c:72
|
||||
#: ../tgp-msg.c:58
|
||||
#, c-format
|
||||
msgid "%2$s created chat %1$s."
|
||||
msgstr "%2$s krijoi fjalosjen %1$s."
|
||||
|
||||
#: ../tgp-msg.c:75
|
||||
#: ../tgp-msg.c:61
|
||||
#, c-format
|
||||
msgid "%2$s changed title to %1$s."
|
||||
msgstr "%2$s ndryshoi titullin te %1$s."
|
||||
|
||||
#: ../tgp-msg.c:78
|
||||
#: ../tgp-msg.c:64
|
||||
#, c-format
|
||||
msgid "%s changed photo."
|
||||
msgstr "%s ndryshoi foton."
|
||||
|
||||
#: ../tgp-msg.c:81
|
||||
#: ../tgp-msg.c:67
|
||||
#, c-format
|
||||
msgid "%s deleted photo."
|
||||
msgstr "%s fshiu foton."
|
||||
|
||||
#: ../tgp-msg.c:89
|
||||
#: ../tgp-msg.c:75
|
||||
#, c-format
|
||||
msgid "%1$s added user %2$s by link."
|
||||
msgstr "%1$s shtoi përdoruesin %2$s përmes lidhjeje."
|
||||
|
||||
#: ../tgp-msg.c:102
|
||||
#: ../tgp-msg.c:90
|
||||
#, c-format
|
||||
msgid "%2$s added user %1$s."
|
||||
msgstr "%2$s shtoi përdoruesin %1$s."
|
||||
|
||||
#: ../tgp-msg.c:125 ../tgp-msg.c:140
|
||||
#: ../tgp-msg.c:114 ../tgp-msg.c:131
|
||||
#, c-format
|
||||
msgid "%2$s deleted user %1$s."
|
||||
msgstr "%2$s fshiu përdoruesin %1$s."
|
||||
|
||||
#: ../tgp-msg.c:146
|
||||
#: ../tgp-msg.c:138
|
||||
#, c-format
|
||||
msgid "%2$s set self destruction timer to %1$d second."
|
||||
msgid_plural "%2$s set self destruction timer to %1$d seconds."
|
||||
msgstr[0] "%2$s e vendosi kohëmatësin e vetëshkatërrimit në %1$d sekondë."
|
||||
msgstr[1] "%2$s e vendosi kohëmatësin e vetëshkatërrimit në %1$d sekonda."
|
||||
|
||||
#: ../tgp-msg.c:152
|
||||
#: ../tgp-msg.c:144
|
||||
#, c-format
|
||||
msgid "%2$s marked %1$d message read."
|
||||
msgid_plural "%2$s marked %1$d messages read."
|
||||
msgstr[0] "%2$s shënoi %1$d mesazh si të lexuar."
|
||||
msgstr[1] "%2$s shënoi %1$d mesazhe si të lexuar."
|
||||
|
||||
#: ../tgp-msg.c:158
|
||||
#: ../tgp-msg.c:150
|
||||
#, c-format
|
||||
msgid "%2$s deleted %1$d message."
|
||||
msgid_plural "%2$s deleted %1$d messages."
|
||||
msgstr[0] "%2$s fshiu %1$d mesazh."
|
||||
msgstr[1] "%2$s fshiu %1$d mesazhe."
|
||||
|
||||
#: ../tgp-msg.c:164
|
||||
#: ../tgp-msg.c:156
|
||||
#, c-format
|
||||
msgid "%2$s made a screenshot of %1$d message."
|
||||
msgid_plural "%2$s made a screenshot of %1$d messages."
|
||||
msgstr[0] "%2$s bëri një foto ekrani të %1$d mesazhi."
|
||||
msgstr[1] "%2$s bëri një foto ekrani të %1$d mesazheve."
|
||||
|
||||
#: ../tgp-msg.c:162
|
||||
#, c-format
|
||||
msgid "Channel %1$s created"
|
||||
msgstr "Kanali %1$s u krijua"
|
||||
|
||||
#. FIXME: check if this makes sense
|
||||
#: ../tgp-msg.c:165 ../tgp-chat.c:124 ../tgp-chat.c:576
|
||||
msgid "Telegram Channels"
|
||||
msgstr "Kanale Telegram-i"
|
||||
|
||||
#: ../tgp-msg.c:191
|
||||
msgid "Sending message failed."
|
||||
msgstr "Dërgimi i mesazhit dështoi."
|
||||
|
||||
#: ../tgp-msg.c:296
|
||||
#: ../tgp-msg.c:253
|
||||
msgid "Sending image failed."
|
||||
msgstr "Dërgimi i figurës dështoi."
|
||||
|
||||
#: ../tgp-msg.c:310
|
||||
msgid "Sorry, sending documents to encrypted chats not yet supported."
|
||||
msgstr "Na ndjeni, dërgimi i dokumenteve në fjalosje të fshehtëzuara nuk mbulohet ende."
|
||||
|
||||
#: ../tgp-msg.c:400
|
||||
#: ../tgp-msg.c:417
|
||||
#, c-format
|
||||
msgid "%s sent a sticker."
|
||||
msgstr "%s dërgoi një ngjitëse."
|
||||
|
||||
#: ../tgp-net.c:286
|
||||
#: ../tgp-msg.c:463
|
||||
msgid "failed loading message"
|
||||
msgstr "dështoi në ngarkim mesazhi"
|
||||
|
||||
#: ../tgp-msg.c:498
|
||||
msgid "[animation]"
|
||||
msgstr "[animacion]"
|
||||
|
||||
#: ../tgp-msg.c:515
|
||||
msgid "[audio]"
|
||||
msgstr "[audio]"
|
||||
|
||||
#: ../tgp-msg.c:515
|
||||
msgid "[video]"
|
||||
msgstr "[video]"
|
||||
|
||||
#: ../tgp-msg.c:604
|
||||
#, c-format
|
||||
msgid "<b>Forwarded message from: %s</b><br>%s"
|
||||
msgstr "<b>Mesazh i përcjellë nga: %s</b><br>%s"
|
||||
|
||||
#. FIXME: sometimes users aren't part of the response when receiving a
|
||||
#. forwarded message
|
||||
#: ../tgp-msg.c:607
|
||||
#, c-format
|
||||
msgid "<b>Forwarded message:</b><br>%s"
|
||||
msgstr "<b>Mesazh i përcjellë:</b><br>%s"
|
||||
|
||||
#: ../tgp-msg.c:720
|
||||
msgid "loading document or picture failed"
|
||||
msgstr "Ngarkimi i dokumentit ose fotos dështoi"
|
||||
|
||||
#: ../tgp-net.c:281
|
||||
msgid "Cannot connect to main server"
|
||||
msgstr "S’lidhet dot te shërbyesi kryesor"
|
||||
|
||||
#: ../tgp-net.c:342
|
||||
#: ../tgp-net.c:322
|
||||
msgid "Cannot connect to server: Ping timeout."
|
||||
msgstr "S’lidhet dot te shërbyesi: Ping-ut i mbaroi koha."
|
||||
|
||||
#: ../tgp-net.c:387
|
||||
#: ../tgp-net.c:365
|
||||
msgid "Lost connection to the server..."
|
||||
msgstr "Humbi lidhja me shërbyesin..."
|
||||
|
||||
#: ../tgp-request.c:64
|
||||
#: ../tgp-request.c:51
|
||||
msgid ""
|
||||
"Telegram wants to verify your identity. Please enter the login code that you"
|
||||
" have received via SMS."
|
||||
msgstr "Telegram-i dëshiron të verifikojë identitetin tuaj. Ju lutemi, jepni kodin e hyrjes që keni marrë përmes SMS-je."
|
||||
msgstr ""
|
||||
"Telegram-i dëshiron të verifikojë identitetin tuaj. Ju lutemi, jepni kodin e"
|
||||
" hyrjes që keni marrë përmes SMS-je."
|
||||
|
||||
#: ../tgp-request.c:67
|
||||
#: ../tgp-request.c:54
|
||||
msgid "Login code"
|
||||
msgstr "Kod hyrjeje"
|
||||
|
||||
#: ../tgp-request.c:67
|
||||
#: ../tgp-request.c:54
|
||||
msgid "Enter login code"
|
||||
msgstr "Jepni kodin e hyrjes postar"
|
||||
|
||||
#: ../tgp-request.c:67
|
||||
#: ../tgp-request.c:54
|
||||
msgid "the code"
|
||||
msgstr "kodi"
|
||||
|
||||
#: ../tgp-request.c:67 ../tgp-request.c:116 ../tgp-request.c:210
|
||||
#: ../tgp-request.c:245 ../tgp-request.c:275
|
||||
#: ../tgp-request.c:54 ../tgp-request.c:104 ../tgp-request.c:198
|
||||
#: ../tgp-request.c:233 ../tgp-request.c:263
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
|
||||
#: ../tgp-request.c:68 ../tgp-request.c:116 ../tgp-request.c:135
|
||||
#: ../tgp-request.c:211 ../tgp-request.c:246 ../tgp-request.c:276
|
||||
#: ../tgp-request.c:55 ../tgp-request.c:104 ../tgp-request.c:123
|
||||
#: ../tgp-request.c:199 ../tgp-request.c:234 ../tgp-request.c:264
|
||||
msgid "Cancel"
|
||||
msgstr "Anuloje"
|
||||
|
||||
#: ../tgp-request.c:107
|
||||
#: ../tgp-request.c:95
|
||||
msgid "Registration"
|
||||
msgstr "Regjistrim"
|
||||
|
||||
#: ../tgp-request.c:115
|
||||
#: ../tgp-request.c:96
|
||||
msgid "First name"
|
||||
msgstr "Emër"
|
||||
|
||||
#: ../tgp-request.c:99
|
||||
msgid "Last name"
|
||||
msgstr "Mbiemër"
|
||||
|
||||
#: ../tgp-request.c:103
|
||||
msgid "Register"
|
||||
msgstr "Regjistrohuni"
|
||||
|
||||
#: ../tgp-request.c:115
|
||||
#: ../tgp-request.c:103
|
||||
msgid "Please register your phone number."
|
||||
msgstr "Ju lutemi, regjistroni numrin tuaj të telefonit."
|
||||
|
||||
#. purple_request API not available
|
||||
#: ../tgp-request.c:120
|
||||
#: ../tgp-request.c:108
|
||||
msgid ""
|
||||
"Phone number is not registered. Please register your phone on a different "
|
||||
"client."
|
||||
msgstr "Numri i telefonit s’është i regjistruar. Ju lutemi, regjistroni telefonin tuaj me një klient tjetër."
|
||||
msgstr ""
|
||||
"Numri i telefonit s’është i regjistruar. Ju lutemi, regjistroni telefonin "
|
||||
"tuaj me një klient tjetër."
|
||||
|
||||
#: ../tgp-request.c:122
|
||||
#: ../tgp-request.c:110
|
||||
msgid "Not registered"
|
||||
msgstr "I paregjistruar"
|
||||
|
||||
#: ../tgp-request.c:134
|
||||
#: ../tgp-request.c:122
|
||||
msgid "Password needed"
|
||||
msgstr "Lypset fjalëkalim"
|
||||
|
||||
#: ../tgp-request.c:134
|
||||
#: ../tgp-request.c:122
|
||||
msgid "Enter password for two factor authentication"
|
||||
msgstr "Jepni fjalëkalim për mirëfilltësim dyfaktorësh"
|
||||
|
||||
#: ../tgp-request.c:135
|
||||
#: ../tgp-request.c:123
|
||||
msgid "Ok"
|
||||
msgstr "Ok"
|
||||
|
||||
#: ../tgp-request.c:137
|
||||
#: ../tgp-request.c:125
|
||||
msgid ""
|
||||
"No password set for two factor authentication. Please enter it in the "
|
||||
"extended settings."
|
||||
msgstr "Pa fjalëkalim të caktuar, për mirëfilltësim dyfaktorësh. Ju lutemi, jepeni te rregullimet e thelluara."
|
||||
msgstr ""
|
||||
"Pa fjalëkalim të caktuar, për mirëfilltësim dyfaktorësh. Ju lutemi, jepeni "
|
||||
"te rregullimet e thelluara."
|
||||
|
||||
#: ../tgp-request.c:139
|
||||
#: ../tgp-request.c:127
|
||||
msgid "Password invalid"
|
||||
msgstr "Fjalëkalim i pavlefshëm"
|
||||
|
||||
#: ../tgp-request.c:162
|
||||
#: ../tgp-request.c:150
|
||||
#, c-format
|
||||
msgid "Accept secret chat '%s' on this device?"
|
||||
msgstr "Të pranohet fjalosja e fshehtë '%s' në këtë pajisje?"
|
||||
|
||||
#: ../tgp-request.c:163
|
||||
#: ../tgp-request.c:151
|
||||
msgid "Secret chat"
|
||||
msgstr "Fjalosje e fshehtë"
|
||||
|
||||
#: ../tgp-request.c:163
|
||||
#: ../tgp-request.c:151
|
||||
msgid ""
|
||||
"Secret chats can only have one end point. If you accept a secret chat on "
|
||||
"this device, its messages will not be available anywhere else. If you "
|
||||
"decline, you can still accept the chat on other devices."
|
||||
msgstr "Fjalosjet e fshehta mund të kenë vetëm një pikë marrjeje. Nëse pranoni një fjalosje të fshehtë në këtë pajisje, mesazhet e saj nuk do të jenë të dukshme gjetiu. Nëse nuk e pranoni, mund ta pranoni fjalosjen në pajisje të tjera."
|
||||
msgstr ""
|
||||
"Fjalosjet e fshehta mund të kenë vetëm një pikë marrjeje. Nëse pranoni një "
|
||||
"fjalosje të fshehtë në këtë pajisje, mesazhet e saj nuk do të jenë të "
|
||||
"dukshme gjetiu. Nëse nuk e pranoni, mund ta pranoni fjalosjen në pajisje të "
|
||||
"tjera."
|
||||
|
||||
#: ../tgp-request.c:194
|
||||
#: ../tgp-request.c:182
|
||||
msgid ""
|
||||
"Invite at least one additional user by specifying\n"
|
||||
" their full name (autocompletion available).\n"
|
||||
"You can add more users once the chat was created."
|
||||
msgstr "Ftoni të paktën një përdorues shtesë duke dhënë\n emrat e tyre të plotë (mund të përdoret vetëplotësimi).\nPasi fjalosja të jetë krijuar, mund të shtoni më tepër përdorues."
|
||||
msgstr ""
|
||||
"Ftoni të paktën një përdorues shtesë duke dhënë\n"
|
||||
" emrat e tyre të plotë (mund të përdoret vetëplotësimi).\n"
|
||||
"Pasi fjalosja të jetë krijuar, mund të shtoni më tepër përdorues."
|
||||
|
||||
#: ../tgp-request.c:210
|
||||
#: ../tgp-request.c:185 ../tgp-request.c:189 ../tgp-request.c:193
|
||||
msgid "Username"
|
||||
msgstr "Emër përdoruesi"
|
||||
|
||||
#: ../tgp-request.c:198
|
||||
msgid "Create group chat"
|
||||
msgstr "Krijoni fjalosje grupi"
|
||||
|
||||
#: ../tgp-request.c:210
|
||||
#: ../tgp-request.c:198
|
||||
msgid "Invite users"
|
||||
msgstr "Ftoni përdorues"
|
||||
|
||||
#: ../tgp-request.c:229 ../tgp-request.c:244
|
||||
#: ../tgp-request.c:217 ../tgp-request.c:232
|
||||
msgid "Change password"
|
||||
msgstr "Ndryshoni fjalëkalimin"
|
||||
|
||||
#: ../tgp-request.c:231
|
||||
#: ../tgp-request.c:219
|
||||
msgid "Current"
|
||||
msgstr "I tanishmi"
|
||||
|
||||
#: ../tgp-request.c:235 ../tgp-request.c:265
|
||||
#: ../tgp-request.c:223 ../tgp-request.c:253
|
||||
msgid "Password"
|
||||
msgstr "Fjalëkalim"
|
||||
|
||||
#: ../tgp-request.c:239 ../tgp-request.c:269
|
||||
#: ../tgp-request.c:227 ../tgp-request.c:257
|
||||
msgid "Confirm"
|
||||
msgstr "Ripohojeni"
|
||||
|
||||
#: ../tgp-request.c:263 ../tgp-request.c:274
|
||||
#: ../tgp-request.c:251 ../tgp-request.c:262
|
||||
msgid "New password"
|
||||
msgstr "Fjalëkalimi i ri"
|
||||
|
||||
|
@ -430,58 +503,112 @@ msgstr "Fjalëkalimi i ri"
|
|||
#. ask for the phone number directly, cause in that case the account would
|
||||
#. still be created
|
||||
#. named with the invalid phone number, even though the login will work
|
||||
#: ../tgp-request.c:312
|
||||
#: ../tgp-request.c:300
|
||||
msgid "Invalid phone number"
|
||||
msgstr "Numër telefoni i pavlefshëm"
|
||||
|
||||
#: ../tgp-request.c:313
|
||||
#: ../tgp-request.c:301
|
||||
msgid ""
|
||||
"Please enter only numbers in the international phone number format, a leading + following by the country prefix and the phone number.\n"
|
||||
"Do not use any other special chars."
|
||||
msgstr "Ju lutemi, jepni vetëm numra në formatin për numra telefonash ndërkombëtarë, një + paraprijës të ndjekur nga prefiksi i vendit dhe numri i telefonit.\nMos përdorni shenja të tjera speciale."
|
||||
msgstr ""
|
||||
"Ju lutemi, jepni vetëm numra në formatin për numra telefonash ndërkombëtarë, një + paraprijës të ndjekur nga prefiksi i vendit dhe numri i telefonit.\n"
|
||||
"Mos përdorni shenja të tjera speciale."
|
||||
|
||||
#: ../tgp-request.c:370
|
||||
msgid "Leave Chat"
|
||||
msgstr "Braktise Fjalosjen"
|
||||
|
||||
#: ../tgp-request.c:372
|
||||
msgid "Do you want to leave this chat permantently?"
|
||||
msgstr "Doni të dilni përgjithmonë nga kjo fjalosje?"
|
||||
|
||||
#: ../tgp-request.c:377
|
||||
msgid "Abort Secret Chat"
|
||||
msgstr "Ndërprite Fjalosjen e Fshehtë"
|
||||
|
||||
#: ../tgp-request.c:379
|
||||
msgid "Do you want to terminate this secret chat permantently?"
|
||||
msgstr "Doni ta përfundoni përgjithmonë këtë fjalosje të fshehtë?"
|
||||
|
||||
#: ../tgp-request.c:384
|
||||
msgid "Delete Contact"
|
||||
msgstr "Fshije Kontaktin"
|
||||
|
||||
#: ../tgp-request.c:386
|
||||
msgid "Do you want to remove this user from your global contact list?"
|
||||
msgstr "Doni të hiqet ky përdorues prej listës suaj globale të kontakteve?"
|
||||
|
||||
#: ../tgp-request.c:401
|
||||
msgid "Leave Channel"
|
||||
msgstr "Braktise Kanalin"
|
||||
|
||||
#: ../tgp-request.c:403
|
||||
msgid "Do you want to leave this channel?"
|
||||
msgstr "Doni ta braktisni këtë kanal?"
|
||||
|
||||
#. This should be the language's timestamp format. This is preceded by a
|
||||
#. colon.
|
||||
#: ../tgp-utils.c:32
|
||||
#: ../tgp-utils.c:27
|
||||
msgid "%d.%m.%Y %H:%M"
|
||||
msgstr "%d.%m.%Y %H:%M"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:53
|
||||
#: ../tgp-utils.c:48
|
||||
msgid "recently"
|
||||
msgstr "së fundi"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:57
|
||||
#: ../tgp-utils.c:52
|
||||
msgid "last week"
|
||||
msgstr "javën e fundit"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:61
|
||||
#: ../tgp-utils.c:56
|
||||
msgid "last month"
|
||||
msgstr "muajin e fundit"
|
||||
|
||||
#. This is preceded by a colon. It refers to a point on time.
|
||||
#: ../tgp-utils.c:65
|
||||
#: ../tgp-utils.c:60
|
||||
msgid "unknown"
|
||||
msgstr "e panjohur"
|
||||
|
||||
#: ../tgp-chat.c:79
|
||||
#: ../tgp-chat.c:108 ../tgp-chat.c:582
|
||||
msgid "Telegram Chats"
|
||||
msgstr "Fjalosje Telegram-i"
|
||||
|
||||
#: ../tgp-chat.c:113
|
||||
msgid "You have already left this chat."
|
||||
msgstr "E keni lëndë tashmë këtë fjalosje."
|
||||
|
||||
#: ../tgp-chat.c:127
|
||||
#: ../tgp-chat.c:224
|
||||
msgid "Subject:"
|
||||
msgstr "Subjekt:"
|
||||
|
||||
#: ../tgp-chat.c:133
|
||||
#: ../tgp-chat.c:230
|
||||
msgid "Invite link:"
|
||||
msgstr "Lidhje ftese:"
|
||||
|
||||
#: ../tgp-chat.c:139
|
||||
#: ../tgp-chat.c:236
|
||||
msgid "Chat ID:"
|
||||
msgstr "ID Fjalosjeje:"
|
||||
|
||||
#: ../tgp-chat.c:238
|
||||
#: ../tgp-chat.c:342
|
||||
msgid "Supergroup"
|
||||
msgstr "Supergrup"
|
||||
|
||||
#: ../tgp-chat.c:342
|
||||
msgid "Channel"
|
||||
msgstr "Kanal"
|
||||
|
||||
#: ../tgp-chat.c:345
|
||||
msgid "Group"
|
||||
msgstr "Grup"
|
||||
|
||||
#: ../tgp-chat.c:367
|
||||
msgid "Users in chat"
|
||||
msgstr "Përdorues në fjalosje"
|
||||
|
||||
#: ../tgp-chat.c:370
|
||||
msgid "Type"
|
||||
msgstr "Lloj"
|
||||
|
|
|
@ -8,7 +8,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2015-11-21 14:37+0100\n"
|
||||
"POT-Creation-Date: 2016-08-31 22:53+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
@ -18,71 +18,76 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
|
||||
|
||||
#: ../telegram-base.c:515
|
||||
#: ../telegram-base.c:500
|
||||
msgid "Couldn't create group"
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-base.c:515
|
||||
#: ../telegram-base.c:501
|
||||
msgid "Please select at least one other user."
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-base.c:570
|
||||
#: ../telegram-base.c:555
|
||||
msgid "Query Failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:193
|
||||
#: ../telegram-purple.c:162
|
||||
msgid "Secret chat ready."
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:200
|
||||
#: ../telegram-purple.c:170
|
||||
msgid "Secret chat terminated."
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:268
|
||||
#: ../telegram-purple.c:182
|
||||
msgid "Telegram"
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:229
|
||||
msgid "Message marked as read."
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:486
|
||||
#: ../telegram-purple.c:339
|
||||
#, c-format
|
||||
msgid "Invite link: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:506 ../telegram-purple.c:507
|
||||
#. FIXME: Can TGLCHF_MODERATOR export links?
|
||||
#: ../telegram-purple.c:350
|
||||
msgid "Creating chat link failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:508
|
||||
#: ../telegram-purple.c:351
|
||||
msgid "You need to be admin of the group to do that."
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:531
|
||||
#: ../telegram-purple.c:416
|
||||
msgid "Chat joined"
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:532
|
||||
#: ../telegram-purple.c:417
|
||||
msgid "Chat added to list of chat rooms."
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:552
|
||||
#: ../telegram-purple.c:443
|
||||
msgid "Start secret chat..."
|
||||
msgstr ""
|
||||
|
||||
#. Generate Public Link
|
||||
#: ../telegram-purple.c:558
|
||||
#: ../telegram-purple.c:450
|
||||
msgid "Invite users by link..."
|
||||
msgstr ""
|
||||
|
||||
#. Delete self from chat
|
||||
#: ../telegram-purple.c:564
|
||||
#: ../telegram-purple.c:458
|
||||
msgid "Delete and exit..."
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:632
|
||||
#: ../telegram-purple.c:546
|
||||
#, c-format
|
||||
msgid "Unable to sign on as %s: pubkey not found."
|
||||
msgid "Unable to sign on as %s: file (public key) not found."
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:636
|
||||
#: ../telegram-purple.c:550
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Make sure telegram-purple is installed properly,\n"
|
||||
|
@ -92,392 +97,485 @@ msgid ""
|
|||
"%1$s to %2$s."
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:657
|
||||
#: ../telegram-purple.c:572
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Unable to sign on as %s: problem in the underlying library 'tgl'. Please "
|
||||
"submit a bug report with the debug log."
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:576
|
||||
msgid "Problem in tgl"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: Please fill in your own prefix!
|
||||
#: ../telegram-purple.c:584
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Unable to sign on as %s: phone number lacks country prefix. Numbers must "
|
||||
"start with the full international prefix code, e.g. +49 for Germany."
|
||||
"start with the full international prefix code, e.g. +1 for USA."
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:662
|
||||
#: ../telegram-purple.c:589
|
||||
msgid "Incomplete phone number"
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:788 ../telegram-purple.c:789
|
||||
#: ../telegram-purple.c:642
|
||||
msgid "Secret chat was already deleted"
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:644
|
||||
msgid "Secret chat is not ready"
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:652
|
||||
msgid "Only the creator of a channel can post messages."
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:695
|
||||
msgid "Cannot invite buddy to chat"
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:790
|
||||
#: ../telegram-purple.c:696
|
||||
msgid "Specified user does not exist."
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:709
|
||||
msgid "phone no. (+ country prefix)"
|
||||
msgstr ""
|
||||
|
||||
#. Login
|
||||
#: ../telegram-purple.c:932
|
||||
#: ../telegram-purple.c:817
|
||||
msgid "Password (two factor authentication)"
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:938
|
||||
#: ../telegram-purple.c:822
|
||||
msgid ""
|
||||
"Fallback SMS verification\n"
|
||||
"(Helps when not using Pidgin and you aren't being prompted for the code)"
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:946
|
||||
msgid "ask"
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:947
|
||||
#: ../telegram-purple.c:828
|
||||
msgid "always"
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:948
|
||||
#: ../telegram-purple.c:829
|
||||
msgid "never"
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:950
|
||||
#: ../telegram-purple.c:830
|
||||
msgid "ask"
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:832
|
||||
msgid "Accept secret chats"
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:955
|
||||
#: ../telegram-purple.c:836
|
||||
msgid "Display buddies offline after (days)"
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:960
|
||||
msgid "Fetch past history on first login"
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:965
|
||||
#: ../telegram-purple.c:840
|
||||
msgid ""
|
||||
"Don't fetch history older than (days)\n"
|
||||
"(0 for unlimited)"
|
||||
msgstr ""
|
||||
|
||||
#. Media
|
||||
#: ../telegram-purple.c:845
|
||||
msgid "Autoload media size (kb)"
|
||||
msgstr ""
|
||||
|
||||
#. Chats
|
||||
#: ../telegram-purple.c:973
|
||||
#: ../telegram-purple.c:850
|
||||
msgid "Add all group chats to buddy list"
|
||||
msgstr ""
|
||||
|
||||
#. Read notifications
|
||||
#: ../telegram-purple.c:981
|
||||
#: ../telegram-purple.c:855
|
||||
msgid "Display notices of receipt"
|
||||
msgstr ""
|
||||
|
||||
#: ../telegram-purple.c:986
|
||||
#: ../telegram-purple.c:859
|
||||
msgid "Send notices of receipt when present"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-2prpl.c:178 ../tgp-request.c:108
|
||||
msgid "First name"
|
||||
#: ../telegram-purple.c:884
|
||||
msgid "Telegram Protocol Plugin."
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-2prpl.c:179 ../tgp-request.c:111
|
||||
msgid "Last name"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-2prpl.c:181
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-2prpl.c:186 ../tgp-request.c:197 ../tgp-request.c:201
|
||||
#: ../tgp-request.c:205
|
||||
msgid "Username"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-2prpl.c:191
|
||||
msgid "Last seen"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-2prpl.c:196
|
||||
msgid "Phone"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-2prpl.c:208
|
||||
msgid "Waiting for the user to get online..."
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-2prpl.c:212
|
||||
msgid "Self destruction timer"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-2prpl.c:218
|
||||
msgid "Timer is not enabled."
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-2prpl.c:225
|
||||
msgid "Secret key"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-msg.c:72
|
||||
#: ../tgp-msg.c:58
|
||||
#, c-format
|
||||
msgid "%2$s created chat %1$s."
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-msg.c:75
|
||||
#: ../tgp-msg.c:61
|
||||
#, c-format
|
||||
msgid "%2$s changed title to %1$s."
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-msg.c:78
|
||||
#: ../tgp-msg.c:64
|
||||
#, c-format
|
||||
msgid "%s changed photo."
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-msg.c:81
|
||||
#: ../tgp-msg.c:67
|
||||
#, c-format
|
||||
msgid "%s deleted photo."
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-msg.c:89
|
||||
#: ../tgp-msg.c:75
|
||||
#, c-format
|
||||
msgid "%1$s added user %2$s by link."
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-msg.c:102
|
||||
#: ../tgp-msg.c:90
|
||||
#, c-format
|
||||
msgid "%2$s added user %1$s."
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-msg.c:125 ../tgp-msg.c:140
|
||||
#: ../tgp-msg.c:114 ../tgp-msg.c:131
|
||||
#, c-format
|
||||
msgid "%2$s deleted user %1$s."
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-msg.c:146
|
||||
#: ../tgp-msg.c:138
|
||||
#, c-format
|
||||
msgid "%2$s set self destruction timer to %1$d second."
|
||||
msgid_plural "%2$s set self destruction timer to %1$d seconds."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: ../tgp-msg.c:152
|
||||
#: ../tgp-msg.c:144
|
||||
#, c-format
|
||||
msgid "%2$s marked %1$d message read."
|
||||
msgid_plural "%2$s marked %1$d messages read."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: ../tgp-msg.c:158
|
||||
#: ../tgp-msg.c:150
|
||||
#, c-format
|
||||
msgid "%2$s deleted %1$d message."
|
||||
msgid_plural "%2$s deleted %1$d messages."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: ../tgp-msg.c:164
|
||||
#: ../tgp-msg.c:156
|
||||
#, c-format
|
||||
msgid "%2$s made a screenshot of %1$d message."
|
||||
msgid_plural "%2$s made a screenshot of %1$d messages."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: ../tgp-msg.c:162
|
||||
#, c-format
|
||||
msgid "Channel %1$s created"
|
||||
msgstr ""
|
||||
|
||||
#. FIXME: check if this makes sense
|
||||
#: ../tgp-msg.c:165 ../tgp-chat.c:124 ../tgp-chat.c:576
|
||||
msgid "Telegram Channels"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-msg.c:191
|
||||
msgid "Sending message failed."
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-msg.c:296
|
||||
#: ../tgp-msg.c:253
|
||||
msgid "Sending image failed."
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-msg.c:310
|
||||
msgid "Sorry, sending documents to encrypted chats not yet supported."
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-msg.c:400
|
||||
#: ../tgp-msg.c:417
|
||||
#, c-format
|
||||
msgid "%s sent a sticker."
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-net.c:286
|
||||
#: ../tgp-msg.c:463
|
||||
msgid "failed loading message"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-msg.c:498
|
||||
msgid "[animation]"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-msg.c:515
|
||||
msgid "[audio]"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-msg.c:515
|
||||
msgid "[video]"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-msg.c:604
|
||||
#, c-format
|
||||
msgid "<b>Forwarded message from: %s</b><br>%s"
|
||||
msgstr ""
|
||||
|
||||
#. FIXME: sometimes users aren't part of the response when receiving a forwarded message
|
||||
#: ../tgp-msg.c:607
|
||||
#, c-format
|
||||
msgid "<b>Forwarded message:</b><br>%s"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-msg.c:720
|
||||
msgid "loading document or picture failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-net.c:281
|
||||
msgid "Cannot connect to main server"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-net.c:342
|
||||
#: ../tgp-net.c:322
|
||||
msgid "Cannot connect to server: Ping timeout."
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-net.c:387
|
||||
#: ../tgp-net.c:365
|
||||
msgid "Lost connection to the server..."
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:64
|
||||
#: ../tgp-request.c:51
|
||||
msgid ""
|
||||
"Telegram wants to verify your identity. Please enter the login code that you "
|
||||
"have received via SMS."
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:67
|
||||
#: ../tgp-request.c:54
|
||||
msgid "Login code"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:67
|
||||
#: ../tgp-request.c:54
|
||||
msgid "Enter login code"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:67
|
||||
#: ../tgp-request.c:54
|
||||
msgid "the code"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:67 ../tgp-request.c:116 ../tgp-request.c:210
|
||||
#: ../tgp-request.c:245 ../tgp-request.c:275
|
||||
#: ../tgp-request.c:54 ../tgp-request.c:104 ../tgp-request.c:198
|
||||
#: ../tgp-request.c:233 ../tgp-request.c:263
|
||||
msgid "OK"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:68 ../tgp-request.c:116 ../tgp-request.c:135
|
||||
#: ../tgp-request.c:211 ../tgp-request.c:246 ../tgp-request.c:276
|
||||
#: ../tgp-request.c:55 ../tgp-request.c:104 ../tgp-request.c:123
|
||||
#: ../tgp-request.c:199 ../tgp-request.c:234 ../tgp-request.c:264
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:107
|
||||
#: ../tgp-request.c:95
|
||||
msgid "Registration"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:115
|
||||
#: ../tgp-request.c:96
|
||||
msgid "First name"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:99
|
||||
msgid "Last name"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:103
|
||||
msgid "Register"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:115
|
||||
#: ../tgp-request.c:103
|
||||
msgid "Please register your phone number."
|
||||
msgstr ""
|
||||
|
||||
#. purple_request API not available
|
||||
#: ../tgp-request.c:120
|
||||
#: ../tgp-request.c:108
|
||||
msgid ""
|
||||
"Phone number is not registered. Please register your phone on a different "
|
||||
"client."
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:122
|
||||
#: ../tgp-request.c:110
|
||||
msgid "Not registered"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:134
|
||||
#: ../tgp-request.c:122
|
||||
msgid "Password needed"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:134
|
||||
#: ../tgp-request.c:122
|
||||
msgid "Enter password for two factor authentication"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:135
|
||||
#: ../tgp-request.c:123
|
||||
msgid "Ok"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:137
|
||||
#: ../tgp-request.c:125
|
||||
msgid ""
|
||||
"No password set for two factor authentication. Please enter it in the "
|
||||
"extended settings."
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:139
|
||||
#: ../tgp-request.c:127
|
||||
msgid "Password invalid"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:162
|
||||
#: ../tgp-request.c:150
|
||||
#, c-format
|
||||
msgid "Accept secret chat '%s' on this device?"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:163
|
||||
#: ../tgp-request.c:151
|
||||
msgid "Secret chat"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:163
|
||||
#: ../tgp-request.c:151
|
||||
msgid ""
|
||||
"Secret chats can only have one end point. If you accept a secret chat on "
|
||||
"this device, its messages will not be available anywhere else. If you "
|
||||
"decline, you can still accept the chat on other devices."
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:194
|
||||
#: ../tgp-request.c:182
|
||||
msgid ""
|
||||
"Invite at least one additional user by specifying\n"
|
||||
" their full name (autocompletion available).\n"
|
||||
"You can add more users once the chat was created."
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:210
|
||||
#: ../tgp-request.c:185 ../tgp-request.c:189 ../tgp-request.c:193
|
||||
msgid "Username"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:198
|
||||
msgid "Create group chat"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:210
|
||||
#: ../tgp-request.c:198
|
||||
msgid "Invite users"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:229 ../tgp-request.c:244
|
||||
#: ../tgp-request.c:217 ../tgp-request.c:232
|
||||
msgid "Change password"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:231
|
||||
#: ../tgp-request.c:219
|
||||
msgid "Current"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:235 ../tgp-request.c:265
|
||||
#: ../tgp-request.c:223 ../tgp-request.c:253
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:239 ../tgp-request.c:269
|
||||
#: ../tgp-request.c:227 ../tgp-request.c:257
|
||||
msgid "Confirm"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:263 ../tgp-request.c:274
|
||||
#: ../tgp-request.c:251 ../tgp-request.c:262
|
||||
msgid "New password"
|
||||
msgstr ""
|
||||
|
||||
#. if we arrive here for the second time the specified phone number is not valid. We do not
|
||||
#. ask for the phone number directly, cause in that case the account would still be created
|
||||
#. named with the invalid phone number, even though the login will work
|
||||
#: ../tgp-request.c:312
|
||||
#: ../tgp-request.c:300
|
||||
msgid "Invalid phone number"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:313
|
||||
#: ../tgp-request.c:301
|
||||
msgid ""
|
||||
"Please enter only numbers in the international phone number format, a "
|
||||
"leading + following by the country prefix and the phone number.\n"
|
||||
"Do not use any other special chars."
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:370
|
||||
msgid "Leave Chat"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:372
|
||||
msgid "Do you want to leave this chat permantently?"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:377
|
||||
msgid "Abort Secret Chat"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:379
|
||||
msgid "Do you want to terminate this secret chat permantently?"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:384
|
||||
msgid "Delete Contact"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:386
|
||||
msgid "Do you want to remove this user from your global contact list?"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:401
|
||||
msgid "Leave Channel"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-request.c:403
|
||||
msgid "Do you want to leave this channel?"
|
||||
msgstr ""
|
||||
|
||||
#. This should be the language's timestamp format. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:32
|
||||
#: ../tgp-utils.c:27
|
||||
msgid "%d.%m.%Y %H:%M"
|
||||
msgstr ""
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:53
|
||||
#: ../tgp-utils.c:48
|
||||
msgid "recently"
|
||||
msgstr ""
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:57
|
||||
#: ../tgp-utils.c:52
|
||||
msgid "last week"
|
||||
msgstr ""
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:61
|
||||
#: ../tgp-utils.c:56
|
||||
msgid "last month"
|
||||
msgstr ""
|
||||
|
||||
#. This is preceded by a colon. It refers to a point on time.
|
||||
#: ../tgp-utils.c:65
|
||||
#: ../tgp-utils.c:60
|
||||
msgid "unknown"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-chat.c:79
|
||||
#: ../tgp-chat.c:108 ../tgp-chat.c:582
|
||||
msgid "Telegram Chats"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-chat.c:113
|
||||
msgid "You have already left this chat."
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-chat.c:127
|
||||
#: ../tgp-chat.c:224
|
||||
msgid "Subject:"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-chat.c:133
|
||||
#: ../tgp-chat.c:230
|
||||
msgid "Invite link:"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-chat.c:139
|
||||
#: ../tgp-chat.c:236
|
||||
msgid "Chat ID:"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-chat.c:238
|
||||
#: ../tgp-chat.c:342
|
||||
msgid "Supergroup"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-chat.c:342
|
||||
msgid "Channel"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-chat.c:345
|
||||
msgid "Group"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-chat.c:367
|
||||
msgid "Users in chat"
|
||||
msgstr ""
|
||||
|
||||
#: ../tgp-chat.c:370
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
|
|
473
po/uk.po
473
po/uk.po
|
@ -1,88 +1,93 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
# Translators:
|
||||
# Самохвалов Антон <samant.ua@mail.ru>, 2015
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: telegram-purple\n"
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2015-11-21 14:37+0100\n"
|
||||
"PO-Revision-Date: 2015-12-21 14:18+0000\n"
|
||||
"Last-Translator: Самохвалов Антон <samant.ua@mail.ru>\n"
|
||||
"Language-Team: Ukrainian (http://www.transifex.com/telegram-purple-developers/telegram-purple/language/uk/)\n"
|
||||
"POT-Creation-Date: 2016-08-31 22:53+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Самохвалов Антон <samant.ua@mail.ru>, 2017\n"
|
||||
"Language-Team: Ukrainian (https://www.transifex.com/telegram-purple-developers/teams/53149/uk/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: uk\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
|
||||
#: ../telegram-base.c:515
|
||||
#: ../telegram-base.c:500
|
||||
msgid "Couldn't create group"
|
||||
msgstr "Не вдається створити групу"
|
||||
|
||||
#: ../telegram-base.c:515
|
||||
#: ../telegram-base.c:501
|
||||
msgid "Please select at least one other user."
|
||||
msgstr "Будь ласка, виберіть ще хоча б одного іншого користувача"
|
||||
|
||||
#: ../telegram-base.c:570
|
||||
#: ../telegram-base.c:555
|
||||
msgid "Query Failed"
|
||||
msgstr "Запит не вдався"
|
||||
|
||||
#: ../telegram-purple.c:193
|
||||
#: ../telegram-purple.c:162
|
||||
msgid "Secret chat ready."
|
||||
msgstr "Таємний чат готовий."
|
||||
|
||||
#: ../telegram-purple.c:200
|
||||
#: ../telegram-purple.c:170
|
||||
msgid "Secret chat terminated."
|
||||
msgstr "Таємний чат перерваний."
|
||||
|
||||
#: ../telegram-purple.c:268
|
||||
#: ../telegram-purple.c:182
|
||||
msgid "Telegram"
|
||||
msgstr "Telegram"
|
||||
|
||||
#: ../telegram-purple.c:229
|
||||
msgid "Message marked as read."
|
||||
msgstr "Повідомлення помічено як прочитане."
|
||||
|
||||
#: ../telegram-purple.c:486
|
||||
#: ../telegram-purple.c:339
|
||||
#, c-format
|
||||
msgid "Invite link: %s"
|
||||
msgstr "Адреса для запрошення: %s"
|
||||
|
||||
#: ../telegram-purple.c:506 ../telegram-purple.c:507
|
||||
#. FIXME: Can TGLCHF_MODERATOR export links?
|
||||
#: ../telegram-purple.c:350
|
||||
msgid "Creating chat link failed"
|
||||
msgstr "Створення посилання на чат не вдалося"
|
||||
|
||||
#: ../telegram-purple.c:508
|
||||
#: ../telegram-purple.c:351
|
||||
msgid "You need to be admin of the group to do that."
|
||||
msgstr "Для цього ви маєте бути адміном групи."
|
||||
|
||||
#: ../telegram-purple.c:531
|
||||
#: ../telegram-purple.c:416
|
||||
msgid "Chat joined"
|
||||
msgstr "Чат підключений"
|
||||
|
||||
#: ../telegram-purple.c:532
|
||||
#: ../telegram-purple.c:417
|
||||
msgid "Chat added to list of chat rooms."
|
||||
msgstr "Чат доданий до списку чат-кімнат"
|
||||
|
||||
#: ../telegram-purple.c:552
|
||||
#: ../telegram-purple.c:443
|
||||
msgid "Start secret chat..."
|
||||
msgstr "Запустити таємний чат..."
|
||||
|
||||
#. Generate Public Link
|
||||
#: ../telegram-purple.c:558
|
||||
#: ../telegram-purple.c:450
|
||||
msgid "Invite users by link..."
|
||||
msgstr "Запросити користувачів посиланням..."
|
||||
|
||||
#. Delete self from chat
|
||||
#: ../telegram-purple.c:564
|
||||
#: ../telegram-purple.c:458
|
||||
msgid "Delete and exit..."
|
||||
msgstr "Видалити та вийти..."
|
||||
|
||||
#: ../telegram-purple.c:632
|
||||
#: ../telegram-purple.c:546
|
||||
#, c-format
|
||||
msgid "Unable to sign on as %s: pubkey not found."
|
||||
msgstr "Не вдалося увійти як %s: не знайдений публічний ключ."
|
||||
msgid "Unable to sign on as %s: file (public key) not found."
|
||||
msgstr "Не вдалося увійти як %s: не знайдений файл (публічний ключ)."
|
||||
|
||||
#: ../telegram-purple.c:636
|
||||
#: ../telegram-purple.c:550
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Make sure telegram-purple is installed properly,\n"
|
||||
|
@ -90,340 +95,407 @@ msgid ""
|
|||
"If you're running SELinux (e.g. when using Tails),\n"
|
||||
"try 'make local_install', or simply copy\n"
|
||||
"%1$s to %2$s."
|
||||
msgstr "Переконайтесь, що telegram-purple встановлено вірно,\nв тому числі файл .tglpub.\nЯкщо ви запускаєте SELinux (напр., використовуючи Tails),\nспробуйте 'make local_install', чи просто скопіюйте\n%1$s до %2$s."
|
||||
msgstr ""
|
||||
"Переконайтесь, що telegram-purple встановлено вірно,\n"
|
||||
"в тому числі файл .tglpub.\n"
|
||||
"Якщо ви запускаєте SELinux (напр., використовуючи Tails),\n"
|
||||
"спробуйте 'make local_install', чи просто скопіюйте\n"
|
||||
"%1$s до %2$s."
|
||||
|
||||
#: ../telegram-purple.c:657
|
||||
#: ../telegram-purple.c:572
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Unable to sign on as %s: problem in the underlying library 'tgl'. Please "
|
||||
"submit a bug report with the debug log."
|
||||
msgstr ""
|
||||
"Не вдається увійти як %s: проблема в існуючій бібліотеці 'tgl'. Будь ласка, "
|
||||
"відправте звіт про помилку в журнал помилок."
|
||||
|
||||
#: ../telegram-purple.c:576
|
||||
msgid "Problem in tgl"
|
||||
msgstr "Проблема в tgl"
|
||||
|
||||
#. TRANSLATORS: Please fill in your own prefix!
|
||||
#: ../telegram-purple.c:584
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Unable to sign on as %s: phone number lacks country prefix. Numbers must "
|
||||
"start with the full international prefix code, e.g. +49 for Germany."
|
||||
msgstr "Не вдалось зайти як %s: в номері телефону не вистачає префікса країни. Номери повинні починатись з повного міжнародного префіксу-коду, напр., +49 для Німеччини."
|
||||
"start with the full international prefix code, e.g. +1 for USA."
|
||||
msgstr ""
|
||||
"Не вдалось зайти як %s: в номері телефону не вистачає префікса країни. "
|
||||
"Номери повинні починатись з повного міжнародного префіксу-коду, напр., +38 "
|
||||
"для України."
|
||||
|
||||
#: ../telegram-purple.c:662
|
||||
#: ../telegram-purple.c:589
|
||||
msgid "Incomplete phone number"
|
||||
msgstr "Неповноцінний номер телефону"
|
||||
|
||||
#: ../telegram-purple.c:788 ../telegram-purple.c:789
|
||||
#: ../telegram-purple.c:642
|
||||
msgid "Secret chat was already deleted"
|
||||
msgstr "Таємний чат вже видалений."
|
||||
|
||||
#: ../telegram-purple.c:644
|
||||
msgid "Secret chat is not ready"
|
||||
msgstr "Таємний чат не готовий."
|
||||
|
||||
#: ../telegram-purple.c:652
|
||||
msgid "Only the creator of a channel can post messages."
|
||||
msgstr "Писати повідомлення може тільки автор каналу."
|
||||
|
||||
#: ../telegram-purple.c:695
|
||||
msgid "Cannot invite buddy to chat"
|
||||
msgstr "Не вдається запросити друга в чат"
|
||||
|
||||
#: ../telegram-purple.c:790
|
||||
#: ../telegram-purple.c:696
|
||||
msgid "Specified user does not exist."
|
||||
msgstr "Такого користувача немає."
|
||||
|
||||
#: ../telegram-purple.c:709
|
||||
msgid "phone no. (+ country prefix)"
|
||||
msgstr "№ телефону (+ код країни)"
|
||||
|
||||
#. Login
|
||||
#: ../telegram-purple.c:932
|
||||
#: ../telegram-purple.c:817
|
||||
msgid "Password (two factor authentication)"
|
||||
msgstr "Пароль (двух-факторна аутентифікація)"
|
||||
|
||||
#: ../telegram-purple.c:938
|
||||
#: ../telegram-purple.c:822
|
||||
msgid ""
|
||||
"Fallback SMS verification\n"
|
||||
"(Helps when not using Pidgin and you aren't being prompted for the code)"
|
||||
msgstr "Резервна SMS-перевірка\n(Допомагає, коли ви не використовуєте Піджин, і вас не запрошено до кодування)"
|
||||
msgstr ""
|
||||
"Резервна SMS-перевірка\n"
|
||||
"(Допомагає, коли ви не використовуєте Піджин, і вас не запрошено до кодування)"
|
||||
|
||||
#: ../telegram-purple.c:946
|
||||
msgid "ask"
|
||||
msgstr "запитати"
|
||||
|
||||
#: ../telegram-purple.c:947
|
||||
#: ../telegram-purple.c:828
|
||||
msgid "always"
|
||||
msgstr "завжди"
|
||||
|
||||
#: ../telegram-purple.c:948
|
||||
#: ../telegram-purple.c:829
|
||||
msgid "never"
|
||||
msgstr "ніколи"
|
||||
|
||||
#: ../telegram-purple.c:950
|
||||
#: ../telegram-purple.c:830
|
||||
msgid "ask"
|
||||
msgstr "запитати"
|
||||
|
||||
#: ../telegram-purple.c:832
|
||||
msgid "Accept secret chats"
|
||||
msgstr "Приймати таємні чати"
|
||||
|
||||
#: ../telegram-purple.c:955
|
||||
#: ../telegram-purple.c:836
|
||||
msgid "Display buddies offline after (days)"
|
||||
msgstr "Відображати друзів, що оффлайн (днів)"
|
||||
|
||||
#: ../telegram-purple.c:960
|
||||
msgid "Fetch past history on first login"
|
||||
msgstr "Підняти минулу переписку при першому вході"
|
||||
|
||||
#: ../telegram-purple.c:965
|
||||
#: ../telegram-purple.c:840
|
||||
msgid ""
|
||||
"Don't fetch history older than (days)\n"
|
||||
"(0 for unlimited)"
|
||||
msgstr "Не піднімати історію, старшу за (днів)\n(піднімати усю - 0)"
|
||||
msgstr ""
|
||||
"Не піднімати історію, старшу за (днів)\n"
|
||||
"(піднімати усю - 0)"
|
||||
|
||||
#. Media
|
||||
#: ../telegram-purple.c:845
|
||||
msgid "Autoload media size (kb)"
|
||||
msgstr "Автозавантаження розміру медіа (кб)"
|
||||
|
||||
#. Chats
|
||||
#: ../telegram-purple.c:973
|
||||
#: ../telegram-purple.c:850
|
||||
msgid "Add all group chats to buddy list"
|
||||
msgstr "Додати усі групові чати в список контактів"
|
||||
|
||||
#. Read notifications
|
||||
#: ../telegram-purple.c:981
|
||||
#: ../telegram-purple.c:855
|
||||
msgid "Display notices of receipt"
|
||||
msgstr "Показувати повідомлення про отримання"
|
||||
|
||||
#: ../telegram-purple.c:986
|
||||
#: ../telegram-purple.c:859
|
||||
msgid "Send notices of receipt when present"
|
||||
msgstr "Відправляти повідомлення про отримання, якщо воно є"
|
||||
|
||||
#: ../tgp-2prpl.c:178 ../tgp-request.c:108
|
||||
msgid "First name"
|
||||
msgstr "Ім'я"
|
||||
#: ../telegram-purple.c:884
|
||||
msgid "Telegram Protocol Plugin."
|
||||
msgstr "Плагін Протоколу Telegram"
|
||||
|
||||
#: ../tgp-2prpl.c:179 ../tgp-request.c:111
|
||||
msgid "Last name"
|
||||
msgstr "Прізвище"
|
||||
|
||||
#: ../tgp-2prpl.c:181
|
||||
msgid "Name"
|
||||
msgstr "Ім'я"
|
||||
|
||||
#: ../tgp-2prpl.c:186 ../tgp-request.c:197 ../tgp-request.c:201
|
||||
#: ../tgp-request.c:205
|
||||
msgid "Username"
|
||||
msgstr "Ім'я користувача"
|
||||
|
||||
#: ../tgp-2prpl.c:191
|
||||
msgid "Last seen"
|
||||
msgstr "Востаннє був"
|
||||
|
||||
#: ../tgp-2prpl.c:196
|
||||
msgid "Phone"
|
||||
msgstr "Телефон"
|
||||
|
||||
#: ../tgp-2prpl.c:208
|
||||
msgid "Waiting for the user to get online..."
|
||||
msgstr "Очікування на появу користувача в мережі..."
|
||||
|
||||
#: ../tgp-2prpl.c:212
|
||||
msgid "Self destruction timer"
|
||||
msgstr "Час до самоліквідації"
|
||||
|
||||
#: ../tgp-2prpl.c:218
|
||||
msgid "Timer is not enabled."
|
||||
msgstr "Таймер не включений."
|
||||
|
||||
#: ../tgp-2prpl.c:225
|
||||
msgid "Secret key"
|
||||
msgstr "Таємний ключ"
|
||||
|
||||
#: ../tgp-msg.c:72
|
||||
#: ../tgp-msg.c:58
|
||||
#, c-format
|
||||
msgid "%2$s created chat %1$s."
|
||||
msgstr "%2$s створив чат %1$s."
|
||||
|
||||
#: ../tgp-msg.c:75
|
||||
#: ../tgp-msg.c:61
|
||||
#, c-format
|
||||
msgid "%2$s changed title to %1$s."
|
||||
msgstr "%2$s змінив назву на %1$s."
|
||||
|
||||
#: ../tgp-msg.c:78
|
||||
#: ../tgp-msg.c:64
|
||||
#, c-format
|
||||
msgid "%s changed photo."
|
||||
msgstr "%s змінив фото."
|
||||
|
||||
#: ../tgp-msg.c:81
|
||||
#: ../tgp-msg.c:67
|
||||
#, c-format
|
||||
msgid "%s deleted photo."
|
||||
msgstr "%s видалив фото."
|
||||
|
||||
#: ../tgp-msg.c:89
|
||||
#: ../tgp-msg.c:75
|
||||
#, c-format
|
||||
msgid "%1$s added user %2$s by link."
|
||||
msgstr "%1$s додав %2$s за посиланням."
|
||||
|
||||
#: ../tgp-msg.c:102
|
||||
#: ../tgp-msg.c:90
|
||||
#, c-format
|
||||
msgid "%2$s added user %1$s."
|
||||
msgstr "%2$s додав користувача %1$s."
|
||||
|
||||
#: ../tgp-msg.c:125 ../tgp-msg.c:140
|
||||
#: ../tgp-msg.c:114 ../tgp-msg.c:131
|
||||
#, c-format
|
||||
msgid "%2$s deleted user %1$s."
|
||||
msgstr "%2$s видалив користувача %1$s."
|
||||
|
||||
#: ../tgp-msg.c:146
|
||||
#: ../tgp-msg.c:138
|
||||
#, c-format
|
||||
msgid "%2$s set self destruction timer to %1$d second."
|
||||
msgid_plural "%2$s set self destruction timer to %1$d seconds."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
msgstr[0] "%2$s встановив таймер самознищення на %1$d секунду."
|
||||
msgstr[1] "%2$s встановив таймер самознищення на %1$d секунди."
|
||||
msgstr[2] "%2$s встановив таймер самознищення на %1$d секунд."
|
||||
|
||||
#: ../tgp-msg.c:152
|
||||
#: ../tgp-msg.c:144
|
||||
#, c-format
|
||||
msgid "%2$s marked %1$d message read."
|
||||
msgid_plural "%2$s marked %1$d messages read."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
msgstr[0] "%2$s помітив %1$d повідомлення як прочитане."
|
||||
msgstr[1] "%2$s помітив %1$d повідомлення як прочитані."
|
||||
msgstr[2] "%2$s помітив %1$d повідомленнь як прочитані."
|
||||
|
||||
#: ../tgp-msg.c:158
|
||||
#: ../tgp-msg.c:150
|
||||
#, c-format
|
||||
msgid "%2$s deleted %1$d message."
|
||||
msgid_plural "%2$s deleted %1$d messages."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
msgstr[0] "%2$s видалив %1$d повідомлення."
|
||||
msgstr[1] "%2$s видалив %1$d повідомлення."
|
||||
msgstr[2] "%2$s видалив %1$d повідомленнь."
|
||||
|
||||
#: ../tgp-msg.c:164
|
||||
#: ../tgp-msg.c:156
|
||||
#, c-format
|
||||
msgid "%2$s made a screenshot of %1$d message."
|
||||
msgid_plural "%2$s made a screenshot of %1$d messages."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
msgstr[0] "%2$s зробив скріншот %1$d повідомлення."
|
||||
msgstr[1] "%2$s зробив скріншот %1$d повідомлень."
|
||||
msgstr[2] "%2$s зробив скріншот %1$d повідомленнь."
|
||||
|
||||
#: ../tgp-msg.c:162
|
||||
#, c-format
|
||||
msgid "Channel %1$s created"
|
||||
msgstr "Канал %1$s створений"
|
||||
|
||||
#. FIXME: check if this makes sense
|
||||
#: ../tgp-msg.c:165 ../tgp-chat.c:124 ../tgp-chat.c:576
|
||||
msgid "Telegram Channels"
|
||||
msgstr "Канали Telegram"
|
||||
|
||||
#: ../tgp-msg.c:191
|
||||
msgid "Sending message failed."
|
||||
msgstr "Відправка повідомлення не вдалась."
|
||||
|
||||
#: ../tgp-msg.c:296
|
||||
#: ../tgp-msg.c:253
|
||||
msgid "Sending image failed."
|
||||
msgstr "Відправка зображення не вдалася"
|
||||
|
||||
#: ../tgp-msg.c:310
|
||||
msgid "Sorry, sending documents to encrypted chats not yet supported."
|
||||
msgstr "Вибачте, відправка документів в зашифровані чати ще не реалізована."
|
||||
|
||||
#: ../tgp-msg.c:400
|
||||
#: ../tgp-msg.c:417
|
||||
#, c-format
|
||||
msgid "%s sent a sticker."
|
||||
msgstr "%s відправив липучку."
|
||||
|
||||
#: ../tgp-net.c:286
|
||||
#: ../tgp-msg.c:463
|
||||
msgid "failed loading message"
|
||||
msgstr "не вдалось завантажити повідомлення"
|
||||
|
||||
#: ../tgp-msg.c:498
|
||||
msgid "[animation]"
|
||||
msgstr "[анімація]"
|
||||
|
||||
#: ../tgp-msg.c:515
|
||||
msgid "[audio]"
|
||||
msgstr "[аудіо]"
|
||||
|
||||
#: ../tgp-msg.c:515
|
||||
msgid "[video]"
|
||||
msgstr "[відео]"
|
||||
|
||||
#: ../tgp-msg.c:604
|
||||
#, c-format
|
||||
msgid "<b>Forwarded message from: %s</b><br>%s"
|
||||
msgstr "<b>Перенаправлене повідомлення від %s</b><br>%s"
|
||||
|
||||
#. FIXME: sometimes users aren't part of the response when receiving a
|
||||
#. forwarded message
|
||||
#: ../tgp-msg.c:607
|
||||
#, c-format
|
||||
msgid "<b>Forwarded message:</b><br>%s"
|
||||
msgstr "<b>Перенаправлене повідомлення:</b><br>%s"
|
||||
|
||||
#: ../tgp-msg.c:720
|
||||
msgid "loading document or picture failed"
|
||||
msgstr "завантаження документу чи картинки не вдалось"
|
||||
|
||||
#: ../tgp-net.c:281
|
||||
msgid "Cannot connect to main server"
|
||||
msgstr "Не вдається підключитись до головного сервера"
|
||||
|
||||
#: ../tgp-net.c:342
|
||||
#: ../tgp-net.c:322
|
||||
msgid "Cannot connect to server: Ping timeout."
|
||||
msgstr "Не вдається підключитись до сервера: ping-таймаут."
|
||||
msgstr "Не вдається підключитись до сервера: сервер не відповідає."
|
||||
|
||||
#: ../tgp-net.c:387
|
||||
#: ../tgp-net.c:365
|
||||
msgid "Lost connection to the server..."
|
||||
msgstr "Зв'язок із сервером втрачений..."
|
||||
|
||||
#: ../tgp-request.c:64
|
||||
#: ../tgp-request.c:51
|
||||
msgid ""
|
||||
"Telegram wants to verify your identity. Please enter the login code that you"
|
||||
" have received via SMS."
|
||||
msgstr "Telegram хоче перевірити вашу особистість. Будь ласка, введіть логін, що отримали по SMS."
|
||||
msgstr ""
|
||||
"Telegram хоче перевірити вашу особистість. Будь ласка, введіть логін, що "
|
||||
"отримали по SMS."
|
||||
|
||||
#: ../tgp-request.c:67
|
||||
#: ../tgp-request.c:54
|
||||
msgid "Login code"
|
||||
msgstr "Код входу"
|
||||
|
||||
#: ../tgp-request.c:67
|
||||
#: ../tgp-request.c:54
|
||||
msgid "Enter login code"
|
||||
msgstr "Введіть код входу"
|
||||
|
||||
#: ../tgp-request.c:67
|
||||
#: ../tgp-request.c:54
|
||||
msgid "the code"
|
||||
msgstr "код"
|
||||
|
||||
#: ../tgp-request.c:67 ../tgp-request.c:116 ../tgp-request.c:210
|
||||
#: ../tgp-request.c:245 ../tgp-request.c:275
|
||||
#: ../tgp-request.c:54 ../tgp-request.c:104 ../tgp-request.c:198
|
||||
#: ../tgp-request.c:233 ../tgp-request.c:263
|
||||
msgid "OK"
|
||||
msgstr "ОК"
|
||||
|
||||
#: ../tgp-request.c:68 ../tgp-request.c:116 ../tgp-request.c:135
|
||||
#: ../tgp-request.c:211 ../tgp-request.c:246 ../tgp-request.c:276
|
||||
#: ../tgp-request.c:55 ../tgp-request.c:104 ../tgp-request.c:123
|
||||
#: ../tgp-request.c:199 ../tgp-request.c:234 ../tgp-request.c:264
|
||||
msgid "Cancel"
|
||||
msgstr "Відміна"
|
||||
|
||||
#: ../tgp-request.c:107
|
||||
#: ../tgp-request.c:95
|
||||
msgid "Registration"
|
||||
msgstr "Регістрація"
|
||||
|
||||
#: ../tgp-request.c:115
|
||||
#: ../tgp-request.c:96
|
||||
msgid "First name"
|
||||
msgstr "Ім'я"
|
||||
|
||||
#: ../tgp-request.c:99
|
||||
msgid "Last name"
|
||||
msgstr "Прізвище"
|
||||
|
||||
#: ../tgp-request.c:103
|
||||
msgid "Register"
|
||||
msgstr "Зарегіструватись"
|
||||
|
||||
#: ../tgp-request.c:115
|
||||
#: ../tgp-request.c:103
|
||||
msgid "Please register your phone number."
|
||||
msgstr "Будь ласка, зареєструйте ваш номер телефону."
|
||||
|
||||
#. purple_request API not available
|
||||
#: ../tgp-request.c:120
|
||||
#: ../tgp-request.c:108
|
||||
msgid ""
|
||||
"Phone number is not registered. Please register your phone on a different "
|
||||
"client."
|
||||
msgstr "Номер телефону не зареєстрований. Будь ласка, зареєструйте ваш телефон на іншого кліента."
|
||||
msgstr ""
|
||||
"Номер телефону не зареєстрований. Будь ласка, зареєструйте ваш телефон на "
|
||||
"іншого кліента."
|
||||
|
||||
#: ../tgp-request.c:122
|
||||
#: ../tgp-request.c:110
|
||||
msgid "Not registered"
|
||||
msgstr "Не зареєстрований"
|
||||
|
||||
#: ../tgp-request.c:134
|
||||
#: ../tgp-request.c:122
|
||||
msgid "Password needed"
|
||||
msgstr "Потрібен пароль"
|
||||
|
||||
#: ../tgp-request.c:134
|
||||
#: ../tgp-request.c:122
|
||||
msgid "Enter password for two factor authentication"
|
||||
msgstr "Введіть пароль для двофакторної авторизації"
|
||||
|
||||
#: ../tgp-request.c:135
|
||||
#: ../tgp-request.c:123
|
||||
msgid "Ok"
|
||||
msgstr "Гаразд"
|
||||
|
||||
#: ../tgp-request.c:137
|
||||
#: ../tgp-request.c:125
|
||||
msgid ""
|
||||
"No password set for two factor authentication. Please enter it in the "
|
||||
"extended settings."
|
||||
msgstr "Для двофакторної авторизації не встановлений пароль. Будь ласка, введіть його в розширених настройках."
|
||||
msgstr ""
|
||||
"Для двофакторної авторизації не встановлений пароль. Будь ласка, введіть "
|
||||
"його в розширених настройках."
|
||||
|
||||
#: ../tgp-request.c:139
|
||||
#: ../tgp-request.c:127
|
||||
msgid "Password invalid"
|
||||
msgstr "Пароль невірний"
|
||||
|
||||
#: ../tgp-request.c:162
|
||||
#: ../tgp-request.c:150
|
||||
#, c-format
|
||||
msgid "Accept secret chat '%s' on this device?"
|
||||
msgstr "Прийняти таємний чат '%s' на цьому пристрої?"
|
||||
|
||||
#: ../tgp-request.c:163
|
||||
#: ../tgp-request.c:151
|
||||
msgid "Secret chat"
|
||||
msgstr "Таємний чат"
|
||||
|
||||
#: ../tgp-request.c:163
|
||||
#: ../tgp-request.c:151
|
||||
msgid ""
|
||||
"Secret chats can only have one end point. If you accept a secret chat on "
|
||||
"this device, its messages will not be available anywhere else. If you "
|
||||
"decline, you can still accept the chat on other devices."
|
||||
msgstr "У таємного чата може бути тільки одна кінцева точка. Якщо ви приймаєте на цьому пристрої таємний чат, його повідомлення будуть не будуть доступні з інших місць. Якщо відмовитесь, то можете прийняти чат з інших пристроїв."
|
||||
msgstr ""
|
||||
"У таємного чата може бути тільки одна кінцева точка. Якщо ви приймаєте на "
|
||||
"цьому пристрої таємний чат, його повідомлення будуть не будуть доступні з "
|
||||
"інших місць. Якщо відмовитесь, то можете прийняти чат з інших пристроїв."
|
||||
|
||||
#: ../tgp-request.c:194
|
||||
#: ../tgp-request.c:182
|
||||
msgid ""
|
||||
"Invite at least one additional user by specifying\n"
|
||||
" their full name (autocompletion available).\n"
|
||||
"You can add more users once the chat was created."
|
||||
msgstr "Запросіть щонайменше одного додаткового користувача вказанням його повного імені (автозавершення доступне).\nВи можете додати більше користувачів одразу після створення чата."
|
||||
msgstr ""
|
||||
"Запросіть щонайменше одного додаткового користувача вказанням його повного імені (автозавершення доступне).\n"
|
||||
"Ви можете додати більше користувачів одразу після створення чата."
|
||||
|
||||
#: ../tgp-request.c:210
|
||||
#: ../tgp-request.c:185 ../tgp-request.c:189 ../tgp-request.c:193
|
||||
msgid "Username"
|
||||
msgstr "Ім'я користувача"
|
||||
|
||||
#: ../tgp-request.c:198
|
||||
msgid "Create group chat"
|
||||
msgstr "Створити груповий чат"
|
||||
|
||||
#: ../tgp-request.c:210
|
||||
#: ../tgp-request.c:198
|
||||
msgid "Invite users"
|
||||
msgstr "Запросити користувачів"
|
||||
|
||||
#: ../tgp-request.c:229 ../tgp-request.c:244
|
||||
#: ../tgp-request.c:217 ../tgp-request.c:232
|
||||
msgid "Change password"
|
||||
msgstr "Змінити пароль"
|
||||
|
||||
#: ../tgp-request.c:231
|
||||
#: ../tgp-request.c:219
|
||||
msgid "Current"
|
||||
msgstr "Поточний"
|
||||
|
||||
#: ../tgp-request.c:235 ../tgp-request.c:265
|
||||
#: ../tgp-request.c:223 ../tgp-request.c:253
|
||||
msgid "Password"
|
||||
msgstr "Пароль"
|
||||
|
||||
#: ../tgp-request.c:239 ../tgp-request.c:269
|
||||
#: ../tgp-request.c:227 ../tgp-request.c:257
|
||||
msgid "Confirm"
|
||||
msgstr "Підтвердити"
|
||||
|
||||
#: ../tgp-request.c:263 ../tgp-request.c:274
|
||||
#: ../tgp-request.c:251 ../tgp-request.c:262
|
||||
msgid "New password"
|
||||
msgstr "Новий пароль"
|
||||
|
||||
|
@ -432,58 +504,113 @@ msgstr "Новий пароль"
|
|||
#. ask for the phone number directly, cause in that case the account would
|
||||
#. still be created
|
||||
#. named with the invalid phone number, even though the login will work
|
||||
#: ../tgp-request.c:312
|
||||
#: ../tgp-request.c:300
|
||||
msgid "Invalid phone number"
|
||||
msgstr "Невірний номер телефону"
|
||||
|
||||
#: ../tgp-request.c:313
|
||||
#: ../tgp-request.c:301
|
||||
msgid ""
|
||||
"Please enter only numbers in the international phone number format, a leading + following by the country prefix and the phone number.\n"
|
||||
"Do not use any other special chars."
|
||||
msgstr "Будь ласка, введіть номер тільки цифри в міжнародному телефонному форматі. Значок +, потім код країни і номер абонента.\nНе використовуйте інших символів."
|
||||
msgstr ""
|
||||
"Будь ласка, введіть номер тільки цифри в міжнародному телефонному форматі. Значок +, потім код країни і номер абонента.\n"
|
||||
"Не використовуйте інших символів."
|
||||
|
||||
#: ../tgp-request.c:370
|
||||
msgid "Leave Chat"
|
||||
msgstr "Покинути чат"
|
||||
|
||||
#: ../tgp-request.c:372
|
||||
msgid "Do you want to leave this chat permantently?"
|
||||
msgstr "Бажаєте надовго покинути цей таємний чат?"
|
||||
|
||||
#: ../tgp-request.c:377
|
||||
msgid "Abort Secret Chat"
|
||||
msgstr "Про таємний чат"
|
||||
|
||||
#: ../tgp-request.c:379
|
||||
msgid "Do you want to terminate this secret chat permantently?"
|
||||
msgstr "Бажаєте надовго перервати цей таємний чат?"
|
||||
|
||||
#: ../tgp-request.c:384
|
||||
msgid "Delete Contact"
|
||||
msgstr "Видалити контакт"
|
||||
|
||||
#: ../tgp-request.c:386
|
||||
msgid "Do you want to remove this user from your global contact list?"
|
||||
msgstr ""
|
||||
"Бажаєте видалити цього користувача з вашого глобального списку контактів?"
|
||||
|
||||
#: ../tgp-request.c:401
|
||||
msgid "Leave Channel"
|
||||
msgstr "Покинути канал"
|
||||
|
||||
#: ../tgp-request.c:403
|
||||
msgid "Do you want to leave this channel?"
|
||||
msgstr "Бажаєте покинути цей канал?"
|
||||
|
||||
#. This should be the language's timestamp format. This is preceded by a
|
||||
#. colon.
|
||||
#: ../tgp-utils.c:32
|
||||
#: ../tgp-utils.c:27
|
||||
msgid "%d.%m.%Y %H:%M"
|
||||
msgstr "%d.%m.%Y %H:%M"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:53
|
||||
#: ../tgp-utils.c:48
|
||||
msgid "recently"
|
||||
msgstr "нещодавно"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:57
|
||||
#: ../tgp-utils.c:52
|
||||
msgid "last week"
|
||||
msgstr "на тому тижні"
|
||||
|
||||
#. This is preceded by a colon.
|
||||
#: ../tgp-utils.c:61
|
||||
#: ../tgp-utils.c:56
|
||||
msgid "last month"
|
||||
msgstr "минулого місяця"
|
||||
|
||||
#. This is preceded by a colon. It refers to a point on time.
|
||||
#: ../tgp-utils.c:65
|
||||
#: ../tgp-utils.c:60
|
||||
msgid "unknown"
|
||||
msgstr "невідомо"
|
||||
|
||||
#: ../tgp-chat.c:79
|
||||
#: ../tgp-chat.c:108 ../tgp-chat.c:582
|
||||
msgid "Telegram Chats"
|
||||
msgstr "Чати Telegram"
|
||||
|
||||
#: ../tgp-chat.c:113
|
||||
msgid "You have already left this chat."
|
||||
msgstr "Ви вже покинули цей чат."
|
||||
|
||||
#: ../tgp-chat.c:127
|
||||
#: ../tgp-chat.c:224
|
||||
msgid "Subject:"
|
||||
msgstr "Тема:"
|
||||
|
||||
#: ../tgp-chat.c:133
|
||||
#: ../tgp-chat.c:230
|
||||
msgid "Invite link:"
|
||||
msgstr "Посилання для запрошення:"
|
||||
|
||||
#: ../tgp-chat.c:139
|
||||
#: ../tgp-chat.c:236
|
||||
msgid "Chat ID:"
|
||||
msgstr "ID чата:"
|
||||
|
||||
#: ../tgp-chat.c:238
|
||||
#: ../tgp-chat.c:342
|
||||
msgid "Supergroup"
|
||||
msgstr "Супергрупа"
|
||||
|
||||
#: ../tgp-chat.c:342
|
||||
msgid "Channel"
|
||||
msgstr "Канал"
|
||||
|
||||
#: ../tgp-chat.c:345
|
||||
msgid "Group"
|
||||
msgstr "Група"
|
||||
|
||||
#: ../tgp-chat.c:367
|
||||
msgid "Users in chat"
|
||||
msgstr "Користувачі у чаті"
|
||||
|
||||
#: ../tgp-chat.c:370
|
||||
msgid "Type"
|
||||
msgstr "Тип"
|
||||
|
|
|
@ -1,16 +1,17 @@
|
|||
Name: purple-telegram
|
||||
Version: 1.2.3
|
||||
Release: 1%{?dist}
|
||||
Summary: Adds support for Libpurple based messengers
|
||||
Group: Applications/Internet
|
||||
License: GPLv2+
|
||||
URL: https://github.com/majn/telegram-purple
|
||||
Source0: https://codeload.github.com/majn/telegram-purple/tar.gz/v%{version}.tar.gz
|
||||
Name: purple-telegram
|
||||
Version: 1.3.1
|
||||
Release: 1%{?dist}
|
||||
Summary: Adds support for Libpurple based messengers
|
||||
Group: Applications/Internet
|
||||
License: GPLv2+
|
||||
URL: https://github.com/majn/telegram-purple
|
||||
Source0: https://codeload.github.com/majn/telegram-purple/tar.gz/v%{version}.tar.gz
|
||||
|
||||
BuildRequires: gettext, libgcrypt-devel >= 1.6, pkgconfig(zlib), pkgconfig(purple), pkgconfig(libwebp)
|
||||
BuildRequires: gettext, libgcrypt-devel >= 1.6, pkgconfig(zlib), pkgconfig(purple), pkgconfig(libwebp)
|
||||
BuildRequires: pkgconfig(appstream-glib)
|
||||
|
||||
%description
|
||||
Adds support for Telegram to Pidgin, Adium, Finch
|
||||
Adds support for Telegram to Pidgin, Adium, Finch
|
||||
and other Libpurple based messengers.
|
||||
|
||||
%prep
|
||||
|
@ -25,20 +26,39 @@ make %{?_smp_mflags}
|
|||
chmod 755 %{buildroot}/%{_libdir}/purple-2/telegram-purple.so
|
||||
%find_lang telegram-purple
|
||||
|
||||
%check
|
||||
appstream-util validate-relax --nonet %{buildroot}/%{_datadir}/appdata/telegram-purple.metainfo.xml
|
||||
|
||||
%files -f telegram-purple.lang
|
||||
%doc README* CHANGELOG*
|
||||
%doc README* CHANGELOG*
|
||||
%{_libdir}/purple-2/telegram-purple.so
|
||||
%config %{_sysconfdir}/telegram-purple/*
|
||||
%{_datadir}/appdata/telegram-purple.metainfo.xml
|
||||
%{_datadir}/pixmaps/pidgin/protocols/16/telegram.png
|
||||
%{_datadir}/pixmaps/pidgin/protocols/22/telegram.png
|
||||
%{_datadir}/pixmaps/pidgin/protocols/48/telegram.png
|
||||
|
||||
%changelog
|
||||
* Thu Dec 10 2015 tuxmaster 1.2.3-1
|
||||
- build for 1.2.3
|
||||
* Sun Apr 9 2017 mjentsch 1.3.1-1
|
||||
- Build for 1.3.1
|
||||
|
||||
* Thu Dec 10 2015 tuxmaster 1.3.0-1
|
||||
- Build for 1.3.0
|
||||
|
||||
* Sat Jan 23 mjentsch 1.2.5-1
|
||||
- build for 1.2.5
|
||||
|
||||
* Thu Dec 10 2015 tuxmaster 1.2.4-2
|
||||
- Fix build for appdata.
|
||||
|
||||
* Thu Dec 10 2015 mjentsch 1.2.4-1
|
||||
- build for 1.2.4
|
||||
|
||||
* Thu Dec 10 2015 tuxmaster 1.2.4-2
|
||||
- Fix build for appdata.
|
||||
|
||||
* Wed Nov 18 2015 tuxmaster 1.2.2-3
|
||||
- Add required version for libgcrypt.
|
||||
- Add required version for libgcrypt.
|
||||
|
||||
* Wed Oct 14 2015 tuxmaster 1.2.2-2
|
||||
- Use the better pkconfig for build requires.
|
||||
|
@ -47,4 +67,3 @@ chmod 755 %{buildroot}/%{_libdir}/purple-2/telegram-purple.so
|
|||
|
||||
* Wed Oct 07 2015 mjentsch 1.2.2-1
|
||||
- update version to 1.2.2
|
||||
|
||||
|
|
4
telegram-adium/.gitignore
vendored
4
telegram-adium/.gitignore
vendored
|
@ -1,2 +1,2 @@
|
|||
telegram-adium.xcodeproj/project.xcworkspace/xcuserdata/
|
||||
telegram-adium.xcodeproj/xcuserdata/matj.xcuserdatad/xcdebugger/
|
||||
/telegram-adium.xcodeproj/project.xcworkspace/xcuserdata/
|
||||
/telegram-adium.xcodeproj/xcuserdata/
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#import <Adium/ESFileTransfer.h>
|
||||
#import <Adium/AIListContact.h>
|
||||
#import <Adium/AIMenuControllerProtocol.h>
|
||||
#import <Adium/AIHTMLDecoder.h>
|
||||
#import <AIUtilities/AIMenuAdditions.h>
|
||||
|
||||
#include "telegram-purple.h"
|
||||
|
@ -53,6 +54,8 @@
|
|||
[super didConnect];
|
||||
[self purpleAccount];
|
||||
|
||||
// FIXME: Crashed after going online
|
||||
|
||||
// Storing chats in the blist breaks Adium bookmarks. Adium doesn't
|
||||
// show those chats anyway, so we can just safely delete those.
|
||||
PurpleBlistNode *node = purple_blist_get_root();
|
||||
|
@ -129,7 +132,7 @@
|
|||
|
||||
[menu addItemWithTitle:@"Delete and exit..."
|
||||
target:self
|
||||
action:@selector(deleteAndExitChat)
|
||||
action:@selector(deleteAndExit)
|
||||
keyEquivalent:@""
|
||||
tag:0];
|
||||
|
||||
|
@ -141,20 +144,16 @@
|
|||
connection_data *conn = purple_connection_get_protocol_data (purple_account_get_connection(account));
|
||||
AIChat *chat = adium.interfaceController.activeChat;
|
||||
if (chat) {
|
||||
export_chat_link_checked (conn->TLS, [chat.name UTF8String]);
|
||||
export_chat_link_by_name (conn->TLS, [chat.name UTF8String]);
|
||||
}
|
||||
}
|
||||
|
||||
- (void)deleteAndExitChat
|
||||
- (void)deleteAndExit
|
||||
{
|
||||
connection_data *conn = purple_connection_get_protocol_data (purple_account_get_connection(account));
|
||||
AIChat *chat = adium.interfaceController.activeChat;
|
||||
if (chat) {
|
||||
const char *name = [chat.name UTF8String];
|
||||
tgl_peer_t *P = tgp_blist_lookup_peer_get (conn->TLS, name);
|
||||
if (P) {
|
||||
leave_and_delete_chat (conn->TLS, P);
|
||||
}
|
||||
leave_and_delete_chat_by_name (conn->TLS, [chat.name UTF8String]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -184,6 +183,24 @@
|
|||
[super cancelFileTransfer:fileTransfer];
|
||||
}
|
||||
|
||||
- (NSString *)encodedAttributedString:(NSAttributedString *)inAttributedString forListObject:(AIListObject *)inListObject
|
||||
{
|
||||
static AIHTMLDecoder *htmlEncoder = nil;
|
||||
if (!htmlEncoder) {
|
||||
htmlEncoder = [[AIHTMLDecoder alloc] init];
|
||||
[htmlEncoder setIncludesHeaders:NO];
|
||||
[htmlEncoder setIncludesFontTags:NO];
|
||||
[htmlEncoder setClosesFontTags:YES];
|
||||
[htmlEncoder setIncludesStyleTags:NO];
|
||||
[htmlEncoder setIncludesColorTags:NO];
|
||||
[htmlEncoder setEncodesNonASCII:NO];
|
||||
[htmlEncoder setPreservesAllSpaces:NO];
|
||||
[htmlEncoder setUsesAttachmentTextEquivalents:YES];
|
||||
}
|
||||
|
||||
return [htmlEncoder encodeHTML:inAttributedString imagesPath:nil];
|
||||
}
|
||||
|
||||
#pragma mark Group Chats
|
||||
|
||||
/*!
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="8191" systemVersion="15B42" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="9531" systemVersion="15C50" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="8191"/>
|
||||
<deployment identifier="macosx"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="9531"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<customObject id="-2" userLabel="File's Owner" customClass="TelegramAccountViewController">
|
||||
|
@ -26,7 +27,6 @@
|
|||
<subviews>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Mv3-b8-21b">
|
||||
<rect key="frame" x="124" y="106" width="177" height="22"/>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" placeholderString="+491573123456" drawsBackground="YES" id="ddM-ki-WMe">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
|
@ -35,7 +35,6 @@
|
|||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="yae-v6-YMB">
|
||||
<rect key="frame" x="-54" y="109" width="172" height="17"/>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Phone Number:" id="0UB-Dx-PpB">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
|
@ -44,7 +43,6 @@
|
|||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="CGg-HM-Fxl">
|
||||
<rect key="frame" x="-54" y="39" width="172" height="17"/>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Password:" id="8u1-y6-XZw">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
|
@ -53,7 +51,6 @@
|
|||
</textField>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="MCb-6Q-kUW">
|
||||
<rect key="frame" x="22" y="70" width="274" height="28"/>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="left" title="Your phone number in the international format, a leading '+' and without any other special chars." id="2C9-SB-kKZ">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
|
@ -62,7 +59,6 @@
|
|||
</textField>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="PaN-W9-uI1">
|
||||
<rect key="frame" x="22" y="0.0" width="285" height="28"/>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="left" title="Needed when using two factor authentication." id="cCC-Jv-B6B">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
|
@ -71,7 +67,6 @@
|
|||
</textField>
|
||||
<secureTextField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Hkg-uU-btb">
|
||||
<rect key="frame" x="124" y="36" width="177" height="22"/>
|
||||
<animations/>
|
||||
<secureTextFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" usesSingleLineMode="YES" id="xzm-aB-xvz">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
|
@ -82,7 +77,6 @@
|
|||
</secureTextFieldCell>
|
||||
</secureTextField>
|
||||
</subviews>
|
||||
<animations/>
|
||||
<point key="canvasLocation" x="380.5" y="38"/>
|
||||
</customView>
|
||||
<customView id="DGa-mQ-g3C" userLabel="Options">
|
||||
|
@ -91,7 +85,6 @@
|
|||
<subviews>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="zRH-KJ-uvC" userLabel="Accept Secret Chats">
|
||||
<rect key="frame" x="6" y="52" width="168" height="17"/>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title="Ignore history older than" id="MSN-Hj-aRS">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
|
@ -100,7 +93,6 @@
|
|||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="C4T-Hq-g5C" userLabel="Accept Secret Chats">
|
||||
<rect key="frame" x="6" y="0.0" width="138" height="17"/>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" id="ARj-qB-Q5Z">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
|
@ -109,7 +101,6 @@
|
|||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="gKj-Oj-qll">
|
||||
<rect key="frame" x="176" y="47" width="49" height="22"/>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="lVr-43-iAS">
|
||||
<numberFormatter key="formatter" formatterBehavior="default10_4" numberStyle="decimal" minimumIntegerDigits="1" maximumIntegerDigits="2000000000" maximumFractionDigits="3" id="tH1-pY-m7Q"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
|
@ -119,9 +110,8 @@
|
|||
</textField>
|
||||
<matrix verticalHuggingPriority="750" fixedFrame="YES" allowsEmptySelection="NO" autorecalculatesCellSize="YES" translatesAutoresizingMaskIntoConstraints="NO" id="RGC-Jo-M5e">
|
||||
<rect key="frame" x="176" y="135" width="76" height="58"/>
|
||||
<animations/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
<size key="cellSize" width="66" height="18"/>
|
||||
<size key="cellSize" width="65" height="18"/>
|
||||
<size key="intercellSpacing" width="4" height="2"/>
|
||||
<buttonCell key="prototype" type="radio" title="Radio" imagePosition="left" alignment="left" inset="2" id="XXf-7E-yhf">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
|
@ -144,18 +134,16 @@
|
|||
</column>
|
||||
</cells>
|
||||
</matrix>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="sb8-oa-s84">
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" preferredMaxLayoutWidth="122" translatesAutoresizingMaskIntoConstraints="NO" id="sb8-oa-s84">
|
||||
<rect key="frame" x="231" y="52" width="126" height="14"/>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="left" title="Days" id="cOl-DG-CvA">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="EEO-n2-kS3">
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" preferredMaxLayoutWidth="122" translatesAutoresizingMaskIntoConstraints="NO" id="EEO-n2-kS3">
|
||||
<rect key="frame" x="6" y="37" width="126" height="14"/>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="left" title="(0 days for unlimited)" id="TQS-UR-EnH">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
|
@ -164,7 +152,6 @@
|
|||
</textField>
|
||||
<button fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="4Xx-hY-Mzh">
|
||||
<rect key="frame" x="6" y="75" width="251" height="24"/>
|
||||
<animations/>
|
||||
<buttonCell key="cell" type="check" title="Send read notifications when present" bezelStyle="regularSquare" imagePosition="left" scrollable="YES" lineBreakMode="clipping" state="on" inset="2" id="vdV-Ig-yub">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
|
@ -172,7 +159,6 @@
|
|||
</button>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="4Mf-Qx-mrn" userLabel="Accept Secret Chats">
|
||||
<rect key="frame" x="6" y="176" width="135" height="17"/>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" userInterfaceLayoutDirection="rightToLeft" alignment="left" title="Accept secret chats?" id="t4Q-j1-35n">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
|
@ -181,7 +167,6 @@
|
|||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Nvv-1I-L31">
|
||||
<rect key="frame" x="176" y="12" width="49" height="22"/>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="Pm0-Jw-ayL">
|
||||
<numberFormatter key="formatter" formatterBehavior="default10_4" numberStyle="decimal" minimumIntegerDigits="1" maximumIntegerDigits="2000000000" maximumFractionDigits="3" id="L9W-52-Xg9"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
|
@ -191,16 +176,14 @@
|
|||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="m95-No-oJH" userLabel="Accept Secret Chats">
|
||||
<rect key="frame" x="6" y="17" width="168" height="17"/>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" userInterfaceLayoutDirection="rightToLeft" alignment="left" title="Display users offline after" id="zJx-0I-fdw">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="TaV-3x-dxE">
|
||||
<textField verticalHuggingPriority="750" fixedFrame="YES" preferredMaxLayoutWidth="122" translatesAutoresizingMaskIntoConstraints="NO" id="TaV-3x-dxE">
|
||||
<rect key="frame" x="231" y="17" width="126" height="14"/>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="left" title="Days" id="Aav-dA-OrQ">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
|
@ -209,14 +192,12 @@
|
|||
</textField>
|
||||
<button fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Tat-1e-jqI">
|
||||
<rect key="frame" x="6" y="105" width="178" height="24"/>
|
||||
<animations/>
|
||||
<buttonCell key="cell" type="check" title="Display read notifications" bezelStyle="regularSquare" imagePosition="left" scrollable="YES" lineBreakMode="clipping" state="on" inset="2" id="l1g-r5-pNb">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
</button>
|
||||
</subviews>
|
||||
<animations/>
|
||||
<point key="canvasLocation" x="356" y="302"/>
|
||||
</customView>
|
||||
<userDefaultsController representsSharedInstance="YES" id="OjL-yD-9te"/>
|
||||
|
|
|
@ -34,8 +34,15 @@
|
|||
static void tgl_chat_iterator_cb (tgl_peer_t *peer, void *extra) {
|
||||
NSMutableArray *A = (__bridge NSMutableArray *)(extra);
|
||||
|
||||
// chats with 0 participants were deleted or left by the user
|
||||
if (tgl_get_peer_type (peer->id) == TGL_PEER_CHAT && peer->chat.users_num > 0) {
|
||||
if (tgl_get_peer_type (peer->id) == TGL_PEER_CHAT && !(peer->chat.flags & TGLCF_LEFT)) {
|
||||
[A addObject: [NSString stringWithUTF8String: peer->print_name]];
|
||||
}
|
||||
}
|
||||
|
||||
static void tgl_channel_iterator_cb (tgl_peer_t *peer, void *extra) {
|
||||
NSMutableArray *A = (__bridge NSMutableArray *)(extra);
|
||||
|
||||
if (tgl_get_peer_type (peer->id) == TGL_PEER_CHANNEL && !(peer->channel.flags & TGLCHF_LEFT)) {
|
||||
[A addObject: [NSString stringWithUTF8String: peer->print_name]];
|
||||
}
|
||||
}
|
||||
|
@ -52,7 +59,10 @@ static void tgl_chat_iterator_cb (tgl_peer_t *peer, void *extra) {
|
|||
// fetch all active chats and put them into the select box
|
||||
[popupButton_existingChat removeAllItems];
|
||||
NSMutableArray *chats = [NSMutableArray new];
|
||||
|
||||
tgl_peer_iterator_ex (conn->TLS, tgl_chat_iterator_cb, (__bridge void *)(chats));
|
||||
tgl_peer_iterator_ex (conn->TLS, tgl_channel_iterator_cb, (__bridge void *)(chats));
|
||||
|
||||
[popupButton_existingChat
|
||||
addItemsWithTitles: [chats sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]];
|
||||
|
||||
|
@ -74,7 +84,7 @@ static void tgl_chat_iterator_cb (tgl_peer_t *peer, void *extra) {
|
|||
// Join by link
|
||||
NSString *link = [textField_joinByLink stringValue];
|
||||
if ([link length]) {
|
||||
import_chat_link_checked (conn->TLS, [link UTF8String]);
|
||||
import_chat_link (conn->TLS, [link UTF8String]);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -20,6 +20,8 @@
|
|||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#include "../commit.h"
|
||||
|
||||
#import "TelegramPlugin.h"
|
||||
#import "TelegramService.h"
|
||||
#import "telegram-purple.h"
|
||||
|
@ -49,17 +51,17 @@ extern void purple_init_telegram_plugin();
|
|||
|
||||
- (NSString *)pluginAuthor
|
||||
{
|
||||
return @TG_AUTHOR;
|
||||
return @PLUGIN_AUTHOR;
|
||||
}
|
||||
|
||||
-(NSString *)pluginVersion
|
||||
{
|
||||
return @PACKAGE_VERSION;
|
||||
return @PACKAGE_VERSION "\n\t\t\tcommit: " GIT_COMMIT "\n\t\t\tlibtgl: " TGL_VERSION;
|
||||
}
|
||||
|
||||
-(NSString *)pluginDescription
|
||||
{
|
||||
return @TG_DESCRIPTION;
|
||||
return @"Telegram Protocol Plugin";
|
||||
}
|
||||
|
||||
-(char*)getPkName
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
C4B4BE391AB613950064AC17 /* TelegramJoinChatView.xib in Resources */ = {isa = PBXBuildFile; fileRef = C4B4BE381AB613950064AC17 /* TelegramJoinChatView.xib */; };
|
||||
C4B57BF01B1598D4006997F4 /* libtgl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C4B57BEF1B1598D4006997F4 /* libtgl.a */; };
|
||||
C4D12DF01BC534CF00C0F6E1 /* tgp-blist.c in Sources */ = {isa = PBXBuildFile; fileRef = C4D12DEF1BC534CF00C0F6E1 /* tgp-blist.c */; };
|
||||
C4D3EB5A1C3824C5003C895B /* tgp-info.c in Sources */ = {isa = PBXBuildFile; fileRef = C4D3EB581C3824C5003C895B /* tgp-info.c */; };
|
||||
C4D432D81BC2783C00561667 /* tg-server.tglpub in Resources */ = {isa = PBXBuildFile; fileRef = C4D432D71BC2783C00561667 /* tg-server.tglpub */; };
|
||||
C4D819061A5C862E0044CBA9 /* tgp-structs.c in Sources */ = {isa = PBXBuildFile; fileRef = C4D819041A5C862E0044CBA9 /* tgp-structs.c */; };
|
||||
C4D9185B1C1C6B3900AECCA2 /* libgpg-error.0.dylib in Resources */ = {isa = PBXBuildFile; fileRef = C4D9185A1C1C6B3900AECCA2 /* libgpg-error.0.dylib */; };
|
||||
|
@ -111,11 +112,12 @@
|
|||
C4B57BE51B109E6D006997F4 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = "<group>"; };
|
||||
C4B57BE81B10D814006997F4 /* configure.ac */ = {isa = PBXFileReference; lastKnownFileType = text; name = configure.ac; path = ../configure.ac; sourceTree = "<group>"; };
|
||||
C4B57BE91B10D822006997F4 /* Makefile.in */ = {isa = PBXFileReference; lastKnownFileType = text; name = Makefile.in; path = ../Makefile.in; sourceTree = "<group>"; };
|
||||
C4B57BEC1B13B2C4006997F4 /* auto-types.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "auto-types.h"; path = "../auto/auto-types.h"; sourceTree = "<group>"; };
|
||||
C4B57BED1B1598BE006997F4 /* telegram-purple */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "telegram-purple"; path = ..; sourceTree = "<group>"; };
|
||||
C4B57BEF1B1598D4006997F4 /* libtgl.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtgl.a; path = ../libs/libtgl.a; sourceTree = "<group>"; };
|
||||
C4D12DEE1BC534CF00C0F6E1 /* tgp-blist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "tgp-blist.h"; path = "../tgp-blist.h"; sourceTree = "<group>"; };
|
||||
C4D12DEF1BC534CF00C0F6E1 /* tgp-blist.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "tgp-blist.c"; path = "../tgp-blist.c"; sourceTree = "<group>"; };
|
||||
C4D3EB581C3824C5003C895B /* tgp-info.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "tgp-info.c"; path = "../tgp-info.c"; sourceTree = "<group>"; };
|
||||
C4D3EB591C3824C5003C895B /* tgp-info.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "tgp-info.h"; path = "../tgp-info.h"; sourceTree = "<group>"; };
|
||||
C4D432D71BC2783C00561667 /* tg-server.tglpub */ = {isa = PBXFileReference; lastKnownFileType = file; name = "tg-server.tglpub"; path = "../tg-server.tglpub"; sourceTree = "<group>"; };
|
||||
C4D819041A5C862E0044CBA9 /* tgp-structs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "tgp-structs.c"; path = "../tgp-structs.c"; sourceTree = "<group>"; };
|
||||
C4D819051A5C862E0044CBA9 /* tgp-structs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "tgp-structs.h"; path = "../tgp-structs.h"; sourceTree = "<group>"; };
|
||||
|
@ -265,12 +267,13 @@
|
|||
C431EB7B1A76C737006521CB /* tgp-chat.c */,
|
||||
C431EB7C1A76C737006521CB /* tgp-chat.h */,
|
||||
C4E5280F1A8A907200C4B915 /* tgp-ft.c */,
|
||||
C4B57BEC1B13B2C4006997F4 /* auto-types.h */,
|
||||
C4E528101A8A907200C4B915 /* tgp-ft.h */,
|
||||
C479A8001BB69C2100C153DF /* tgp-request.c */,
|
||||
C479A8011BB69C2100C153DF /* tgp-request.h */,
|
||||
C4D12DEE1BC534CF00C0F6E1 /* tgp-blist.h */,
|
||||
C4D12DEF1BC534CF00C0F6E1 /* tgp-blist.c */,
|
||||
C4D3EB591C3824C5003C895B /* tgp-info.h */,
|
||||
C4D3EB581C3824C5003C895B /* tgp-info.c */,
|
||||
330704C72BA03B848124B6F7 /* telegram-adium */,
|
||||
);
|
||||
name = "telegram-purple";
|
||||
|
@ -286,6 +289,7 @@
|
|||
C410948219BB2D7D0083BF3F /* Sources */,
|
||||
C410948319BB2D7D0083BF3F /* Frameworks */,
|
||||
C410948419BB2D7D0083BF3F /* Resources */,
|
||||
C4C325A11C91BD230020D32E /* ShellScript */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
|
@ -343,6 +347,22 @@
|
|||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXShellScriptBuildPhase section */
|
||||
C4C325A11C91BD230020D32E /* ShellScript */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "install_name_tool -change \"@executable_path/../Frameworks/libglib.framework/Versions/2.38.1/libglib\" \"@executable_path/../Frameworks/libglib.framework/libglib\" \"$TARGET_BUILD_DIR/$PRODUCT_NAME.$WRAPPER_EXTENSION/Contents/MacOS/$PRODUCT_NAME\"\ninstall_name_tool -change \"@executable_path/../Frameworks/libpurple.framework/Versions/2.10.7rd8d96a636413/libpurple\" \"@executable_path/../Frameworks/libpurple.framework/libpurple\" \"$TARGET_BUILD_DIR/$PRODUCT_NAME.$WRAPPER_EXTENSION/Contents/MacOS/$PRODUCT_NAME\"\n";
|
||||
};
|
||||
/* End PBXShellScriptBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
C410948219BB2D7D0083BF3F /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
|
@ -368,6 +388,7 @@
|
|||
C425F9181A7069C300361AFC /* tgp-utils.c in Sources */,
|
||||
C4D819061A5C862E0044CBA9 /* tgp-structs.c in Sources */,
|
||||
C431EB7D1A76C737006521CB /* tgp-chat.c in Sources */,
|
||||
C4D3EB5A1C3824C5003C895B /* tgp-info.c in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
@ -422,7 +443,7 @@
|
|||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.11;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = macosx10.11;
|
||||
SDKROOT = macosx10.12;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
|
@ -460,7 +481,7 @@
|
|||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.11;
|
||||
SDKROOT = macosx10.11;
|
||||
SDKROOT = macosx10.12;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
|
@ -492,14 +513,14 @@
|
|||
INSTALL_PATH = "$(HOME)/Library/Application Support/Adium 2.0/PlugIns/";
|
||||
LIBRARY_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"$(PROJECT_DIR)/../libs",
|
||||
"$(PROJECT_DIR)/../tgl/libs",
|
||||
"$(PROJECT_DIR)",
|
||||
"$(PROJECT_DIR)/Frameworks",
|
||||
"$(PROJECT_DIR)/Frameworks/Adium",
|
||||
);
|
||||
OTHER_CFLAGS = "-DPURPLE_STATIC_PRPL";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SDKROOT = macosx10.11;
|
||||
SDKROOT = macosx10.12;
|
||||
WRAPPER_EXTENSION = AdiumLibpurplePlugin;
|
||||
};
|
||||
name = Debug;
|
||||
|
@ -532,13 +553,13 @@
|
|||
INSTALL_PATH = "$(HOME)/Library/Application Support/Adium 2.0/PlugIns/";
|
||||
LIBRARY_SEARCH_PATHS = (
|
||||
"$(PROJECT_DIR)",
|
||||
"$(PROJECT_DIR)/../libs",
|
||||
"$(PROJECT_DIR)/../tgl/libs",
|
||||
"$(PROJECT_DIR)/Frameworks",
|
||||
"$(PROJECT_DIR)/Frameworks/Adium",
|
||||
);
|
||||
OTHER_CFLAGS = "-DPURPLE_STATIC_PRPL";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SDKROOT = macosx10.11;
|
||||
SDKROOT = macosx10.12;
|
||||
WRAPPER_EXTENSION = AdiumLibpurplePlugin;
|
||||
};
|
||||
name = Release;
|
||||
|
|
|
@ -11,10 +11,10 @@
|
|||
},
|
||||
"DVTSourceControlWorkspaceBlueprintIdentifierKey" : "1C5A3335-4726-410A-8E70-801C8879E269",
|
||||
"DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : {
|
||||
"32693D74F7AAA18802B0105461C73E1FD01CF3A3" : "telegram-purple\/tgl",
|
||||
"2BAF9F6AF710B4D765F611851696219A50533669" : "tg",
|
||||
"41D8FEA2FB3AAB94D0D4027A64957635038B427E" : "telegram-purple",
|
||||
"78234520DB6A5DE1B463A6198C9122A9D1A44221" : "telegram-purple\/tgl\/tl-parser"
|
||||
"32693D74F7AAA18802B0105461C73E1FD01CF3A3" : "telegram-purple\/tgl\/",
|
||||
"2BAF9F6AF710B4D765F611851696219A50533669" : "tg\/",
|
||||
"41D8FEA2FB3AAB94D0D4027A64957635038B427E" : "telegram-purple\/",
|
||||
"78234520DB6A5DE1B463A6198C9122A9D1A44221" : "telegram-purple\/tgl\/tl-parser\/"
|
||||
},
|
||||
"DVTSourceControlWorkspaceBlueprintNameKey" : "telegram-adium",
|
||||
"DVTSourceControlWorkspaceBlueprintVersion" : 204,
|
||||
|
|
|
@ -23,21 +23,24 @@
|
|||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
buildConfiguration = "Debug">
|
||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||
<Testables>
|
||||
</Testables>
|
||||
<AdditionalOptions>
|
||||
</AdditionalOptions>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
buildConfiguration = "Debug"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES">
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
|
@ -52,10 +55,10 @@
|
|||
</AdditionalOptions>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Release"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
buildConfiguration = "Release"
|
||||
debugDocumentVersioning = "YES">
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
|
@ -23,23 +23,27 @@
|
|||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
buildConfiguration = "Release"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
buildConfiguration = "Release">
|
||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||
<Testables>
|
||||
</Testables>
|
||||
<AdditionalOptions>
|
||||
</AdditionalOptions>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Release"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
buildConfiguration = "Release"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES">
|
||||
<PathRunnable
|
||||
runnableDebuggingMode = "0"
|
||||
FilePath = "/Applications/Adium.app">
|
||||
</PathRunnable>
|
||||
<MacroExpansion>
|
||||
|
@ -55,10 +59,10 @@
|
|||
</AdditionalOptions>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Release"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
buildConfiguration = "Release"
|
||||
debugDocumentVersioning = "YES">
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
|
@ -1,39 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>SchemeUserState</key>
|
||||
<dict>
|
||||
<key>telegram-adium.xcscheme</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<key>telegram-purple.xcscheme</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
<key>telegrma-adium Release.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>SuppressBuildableAutocreation</key>
|
||||
<dict>
|
||||
<key>C410948519BB2D7D0083BF3F</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>C4B57BF11B160950006997F4</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
|
@ -19,11 +19,11 @@
|
|||
<key>CFBundlePackageType</key>
|
||||
<string>BNDL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.2.3</string>
|
||||
<string>1.3.1</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>AdIM</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<string>1.3.1</string>
|
||||
<key>CFPlugInDynamicRegisterFunction</key>
|
||||
<string></string>
|
||||
<key>CFPlugInDynamicRegistration</key>
|
||||
|
@ -43,7 +43,7 @@
|
|||
<key>CFPlugInUnloadFunction</key>
|
||||
<string></string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>Copyright © 2014 Matthias Jentsch.</string>
|
||||
<string>Copyright © 2014-2017 Matthias Jentsch.</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string>TelegramPlugin</string>
|
||||
</dict>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
|
||||
|
||||
Copyright Matthias Jentsch, Vitaly Valtman, Christopher Althaus, Markus Endres 2014-2015
|
||||
Copyright Matthias Jentsch, Vitaly Valtman, Ben Wiederhake, Christopher Althaus 2014-2015
|
||||
*/
|
||||
|
||||
#define _GNU_SOURCE
|
||||
|
@ -473,8 +473,8 @@ void write_secret_chat_gw (struct tgl_state *TLS, void *extra, int success, stru
|
|||
write_secret_chat_file (TLS);
|
||||
}
|
||||
|
||||
void tgp_create_group_chat_by_usernames (struct tgl_state *TLS, const char *title, const char **users, int num_users,
|
||||
int use_print_names) {
|
||||
void tgp_create_group_chat_by_usernames (struct tgl_state *TLS, const char *title, const char **users,
|
||||
int num_users, int use_print_names) {
|
||||
tgl_peer_id_t ids[num_users + 1];
|
||||
int i, j = 0;
|
||||
ids[j++] = TLS->our_id;
|
||||
|
@ -493,12 +493,12 @@ void tgp_create_group_chat_by_usernames (struct tgl_state *TLS, const char *titl
|
|||
debug ("User %s not found in peer list", users[j]);
|
||||
}
|
||||
}
|
||||
if (i > 0) {
|
||||
if (j > 1) {
|
||||
tgl_do_create_group_chat (TLS, j, ids, title, (int) strlen(title),
|
||||
tgp_notify_on_error_gw, g_strdup (title));
|
||||
tgp_notify_on_error_gw, g_strdup (title));
|
||||
} else {
|
||||
purple_notify_message (_telegram_protocol, PURPLE_NOTIFY_MSG_INFO, _("Couldn't create group"), _("Please select at least one other user."), NULL,
|
||||
NULL, NULL);
|
||||
purple_notify_message (_telegram_protocol, PURPLE_NOTIFY_MSG_INFO, _("Couldn't create group"),
|
||||
_("Please select at least one other user."), NULL, NULL, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
|
||||
|
||||
Copyright Matthias Jentsch, Vitaly Valtman, Christopher Althaus, Markus Endres 2014-2015
|
||||
Copyright Matthias Jentsch, Vitaly Valtman, Christopher Althaus, Ben Wiederhake 2014-2015
|
||||
*/
|
||||
#ifndef __TELEGRAM_BASE_H__
|
||||
#define __TELEGRAM_BASE_H__
|
||||
|
|
|
@ -15,25 +15,26 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
|
||||
|
||||
Copyright Matthias Jentsch, Vitaly Valtman, Christopher Althaus, Markus Endres 2014-2015
|
||||
Copyright Matthias Jentsch, Vitaly Valtman, Ben Wiederhake, Christopher Althaus 2014-2015
|
||||
*/
|
||||
|
||||
#include "telegram-purple.h"
|
||||
#include "commit.h"
|
||||
|
||||
#ifdef WIN32
|
||||
#include "win32/win32dep.h"
|
||||
#endif
|
||||
|
||||
static void update_message_handler (struct tgl_state *TLS, struct tgl_message *M);
|
||||
static void update_user_handler (struct tgl_state *TLS, struct tgl_user *U, unsigned flags);
|
||||
static void update_user_status_handler (struct tgl_state *TLS, struct tgl_user *U);
|
||||
static void update_chat_handler (struct tgl_state *TLS, struct tgl_chat *C, unsigned flags);
|
||||
static void update_secret_chat_handler (struct tgl_state *TLS, struct tgl_secret_chat *C, unsigned flags);
|
||||
static void update_user_typing (struct tgl_state *TLS, struct tgl_user *U, enum tgl_typing_status status);
|
||||
static void update_marked_read (struct tgl_state *TLS, int num, struct tgl_message *list[]);
|
||||
static void update_on_logged_in (struct tgl_state *TLS);
|
||||
static void update_on_ready (struct tgl_state *TLS);
|
||||
static void on_user_get_info (struct tgl_state *TLS, void *info_data, int success, struct tgl_user *U);
|
||||
static void update_user_typing (struct tgl_state *TLS, struct tgl_user *U, enum tgl_typing_status status);
|
||||
static void update_secret_chat_typing (struct tgl_state *TLS, struct tgl_secret_chat *E);
|
||||
static void update_user_status_handler (struct tgl_state *TLS, struct tgl_user *U);
|
||||
static void update_user_handler (struct tgl_state *TLS, struct tgl_user *U, unsigned flags);
|
||||
static void update_secret_chat_handler (struct tgl_state *TLS, struct tgl_secret_chat *C, unsigned flags);
|
||||
static void update_on_failed_login (struct tgl_state *TLS);
|
||||
|
||||
const char *config_dir = "telegram-purple";
|
||||
const char *user_pk_filename = "server.tglpub";
|
||||
|
@ -44,39 +45,48 @@ const char *pk_path = "/etc/telegram-purple/server.tglpub";
|
|||
#endif
|
||||
|
||||
struct tgl_update_callback tgp_callback = {
|
||||
.new_msg = update_message_handler,
|
||||
.marked_read = update_marked_read,
|
||||
.logprintf = debug,
|
||||
.get_values = request_value,
|
||||
.logged_in = update_on_logged_in,
|
||||
.started = update_on_ready,
|
||||
.new_msg = update_message_handler,
|
||||
.msg_receive = update_message_handler,
|
||||
.user_update = update_user_handler,
|
||||
.user_status_update = update_user_status_handler,
|
||||
.chat_update = update_chat_handler,
|
||||
.secret_chat_update = update_secret_chat_handler,
|
||||
.type_notification = update_user_typing,
|
||||
.marked_read = update_marked_read,
|
||||
.create_print_name = tgp_blist_create_print_name
|
||||
|
||||
// FIXME: what about user_registred, user_activated, new_authorization, our_id ?
|
||||
.type_in_secret_chat_notification = update_secret_chat_typing,
|
||||
.type_in_chat_notification = update_chat_typing,
|
||||
.chat_update = update_chat_handler,
|
||||
.channel_update = update_channel_handler,
|
||||
.user_update = update_user_handler,
|
||||
.secret_chat_update = update_secret_chat_handler,
|
||||
.msg_receive = update_message_handler,
|
||||
.user_status_update = update_user_status_handler,
|
||||
.create_print_name = tgp_blist_create_print_name,
|
||||
.on_failed_login = update_on_failed_login
|
||||
};
|
||||
|
||||
static void _update_buddy (struct tgl_state *TLS, tgl_peer_t *user, unsigned flags) {
|
||||
PurpleBuddy *buddy = tgp_blist_buddy_find (TLS, user->id);
|
||||
if (buddy) {
|
||||
if (flags & TGL_UPDATE_DELETED) {
|
||||
debug ("update deleted");
|
||||
purple_blist_remove_buddy (buddy);
|
||||
} else {
|
||||
if (flags & TGL_UPDATE_CONTACT) {
|
||||
debug ("update contact");
|
||||
purple_blist_alias_buddy (buddy, user->print_name);
|
||||
}
|
||||
if (flags & TGL_UPDATE_PHOTO) {
|
||||
tgl_do_get_user_info (TLS, user->id, 0, on_user_get_info, get_user_info_data_new (0, user->id));
|
||||
debug ("update photo");
|
||||
tgp_info_update_photo (&buddy->node, user);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void update_user_handler (struct tgl_state *TLS, struct tgl_user *user, unsigned flags) {
|
||||
debug ("update_user_handler() flags: %s", print_flags_update (flags));
|
||||
debug ("update_user_handler() (%s)", print_flags_update (flags));
|
||||
|
||||
if (tgl_get_peer_id (TLS->our_id) == tgl_get_peer_id (user->id) && (flags & (TGL_UPDATE_NAME | TGL_UPDATE_CONTACT))) {
|
||||
// own user object, do not add that user to the buddy list but make the ID known to the name lookup and
|
||||
|
@ -89,6 +99,7 @@ static void update_user_handler (struct tgl_state *TLS, struct tgl_user *user, u
|
|||
if (flags & TGL_UPDATE_CREATED) {
|
||||
// user was allocated, fetch the corresponding buddy from the buddy list
|
||||
PurpleBuddy *buddy = tgp_blist_buddy_find (TLS, user->id);
|
||||
debug ("new user %s allocated (%s)", user->print_name, print_flags_user (user->flags));
|
||||
|
||||
if (user->flags & TGLUF_DELETED) {
|
||||
if (buddy) {
|
||||
|
@ -108,9 +119,6 @@ static void update_user_handler (struct tgl_state *TLS, struct tgl_user *user, u
|
|||
if (buddy) {
|
||||
info ("migrating buddy from old name %s to %s", purple_buddy_get_name (buddy), user->print_name);
|
||||
buddy = tgp_blist_buddy_migrate (TLS, buddy, user);
|
||||
if (user->photo_id) {
|
||||
tgl_do_get_user_info (TLS, user->id, 0, on_user_get_info, get_user_info_data_new (0, user->id));
|
||||
}
|
||||
}
|
||||
|
||||
// the id isn't known to the lookup yet since the user is not in the buddy list. Add the id to the
|
||||
|
@ -123,7 +131,17 @@ static void update_user_handler (struct tgl_state *TLS, struct tgl_user *user, u
|
|||
if (strcmp (purple_buddy_get_alias (buddy), user->print_name)) {
|
||||
serv_got_alias (tls_get_conn (TLS), purple_buddy_get_name (buddy), user->print_name);
|
||||
}
|
||||
}
|
||||
|
||||
if (user->flags & TGLUF_CONTACT) {
|
||||
if (! buddy) {
|
||||
tgp_blist_contact_add (TLS, user);
|
||||
}
|
||||
}
|
||||
|
||||
if (buddy) {
|
||||
p2tgl_prpl_got_user_status (TLS, user->id, &user->status);
|
||||
tgp_info_update_photo (&buddy->node, tgl_peer_get (TLS, user->id));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
@ -132,17 +150,8 @@ static void update_user_handler (struct tgl_state *TLS, struct tgl_user *user, u
|
|||
}
|
||||
}
|
||||
|
||||
static void update_message_handler (struct tgl_state *TLS, struct tgl_message *M) {
|
||||
write_files_schedule (TLS);
|
||||
tgp_msg_recv (TLS, M);
|
||||
}
|
||||
|
||||
static void update_user_status_handler (struct tgl_state *TLS, struct tgl_user *U) {
|
||||
p2tgl_prpl_got_user_status (TLS, U->id, &U->status);
|
||||
}
|
||||
|
||||
static void update_secret_chat_handler (struct tgl_state *TLS, struct tgl_secret_chat *U, unsigned flags) {
|
||||
debug ("update_secret_chat_handler() flags: %s", print_flags_update (flags));
|
||||
debug ("update_secret_chat_handler() (%s)", print_flags_update (flags));
|
||||
PurpleBuddy *buddy = tgp_blist_buddy_find (TLS, U->id);
|
||||
|
||||
if (flags & TGL_UPDATE_CREATED) {
|
||||
|
@ -151,15 +160,17 @@ static void update_secret_chat_handler (struct tgl_state *TLS, struct tgl_secret
|
|||
if (flags & TGL_UPDATE_WORKING) {
|
||||
write_secret_chat_file (TLS);
|
||||
if (U->state == sc_ok) {
|
||||
tgp_msg_sys_out (TLS, _("Secret chat ready."), U->id, TRUE);
|
||||
tgp_msg_special_out (TLS , _("Secret chat ready.") , U->id, PURPLE_MESSAGE_NO_LOG | PURPLE_MESSAGE_SYSTEM);
|
||||
}
|
||||
}
|
||||
if (buddy) {
|
||||
if (flags & TGL_UPDATE_DELETED) {
|
||||
U->state = sc_deleted;
|
||||
write_secret_chat_file (TLS);
|
||||
tgp_msg_sys_out (TLS, _("Secret chat terminated."), U->id, FALSE);
|
||||
|
||||
tgp_msg_special_out (TLS , _("Secret chat terminated.") , U->id, PURPLE_MESSAGE_SYSTEM);
|
||||
purple_prpl_got_user_status (tls_get_pa (TLS), tgp_blist_lookup_purple_name (TLS, U->id), "offline", NULL);
|
||||
purple_blist_remove_buddy (buddy);
|
||||
} else {
|
||||
_update_buddy (TLS, (tgl_peer_t *)U, flags);
|
||||
}
|
||||
|
@ -169,7 +180,7 @@ static void update_secret_chat_handler (struct tgl_state *TLS, struct tgl_secret
|
|||
if (!(flags & TGL_UPDATE_DELETED)) {
|
||||
if (! buddy) {
|
||||
buddy = tgp_blist_buddy_new (TLS, (tgl_peer_t *)U);
|
||||
purple_blist_add_buddy (buddy, NULL, tgp_blist_group_init ("Telegram"), NULL);
|
||||
purple_blist_add_buddy (buddy, NULL, tgp_blist_group_init (_("Telegram")), NULL);
|
||||
purple_blist_alias_buddy (buddy, U->print_name);
|
||||
}
|
||||
purple_prpl_got_user_status (tls_get_pa (TLS), tgp_blist_lookup_purple_name (TLS, U->id), "mobile", NULL);
|
||||
|
@ -185,20 +196,18 @@ static void update_secret_chat_handler (struct tgl_state *TLS, struct tgl_secret
|
|||
}
|
||||
}
|
||||
|
||||
static void update_chat_handler (struct tgl_state *TLS, struct tgl_chat *chat, unsigned flags) {
|
||||
debug ("update_chat_handler() flags: %s", print_flags_update(flags));
|
||||
|
||||
if (flags & TGL_UPDATE_CREATED) {
|
||||
tgp_blist_lookup_add (TLS, chat->id, chat->print_title);
|
||||
} else {
|
||||
PurpleChat *ch = tgp_blist_chat_find (TLS, chat->id);
|
||||
if (flags & TGL_UPDATE_TITLE && ch) {
|
||||
purple_blist_alias_chat (ch, chat->print_title);
|
||||
}
|
||||
if (flags & TGL_UPDATE_DELETED && ch) {
|
||||
purple_blist_remove_chat (ch);
|
||||
}
|
||||
}
|
||||
static void update_user_status_handler (struct tgl_state *TLS, struct tgl_user *U) {
|
||||
p2tgl_prpl_got_user_status (TLS, U->id, &U->status);
|
||||
}
|
||||
|
||||
static void update_message_handler (struct tgl_state *TLS, struct tgl_message *M) {
|
||||
write_files_schedule (TLS);
|
||||
tgp_msg_recv (TLS, M, NULL);
|
||||
}
|
||||
|
||||
static void update_secret_chat_typing (struct tgl_state *TLS, struct tgl_secret_chat *E) {
|
||||
g_return_if_fail (tgp_blist_lookup_purple_name (TLS, E->id));
|
||||
serv_got_typing (tls_get_conn (TLS), tgp_blist_lookup_purple_name (TLS, E->id), 2, PURPLE_TYPING);
|
||||
}
|
||||
|
||||
static void update_user_typing (struct tgl_state *TLS, struct tgl_user *U, enum tgl_typing_status status) {
|
||||
|
@ -218,40 +227,13 @@ static void update_marked_read (struct tgl_state *TLS, int num, struct tgl_messa
|
|||
// only display the read recipes for messages that we sent ourselves
|
||||
if (tgl_get_peer_id (list[i]->from_id) == tgl_get_peer_id (TLS->our_id)) {
|
||||
debug ("update_mark_read to=%d", tgl_get_peer_id (list[i]->to_id));
|
||||
tgp_msg_sys_out (TLS, _("Message marked as read."), list[i]->to_id, TRUE);
|
||||
tgp_msg_special_out (TLS , _("Message marked as read."), list[i]->to_id, PURPLE_MESSAGE_SYSTEM);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void on_userpic_loaded (struct tgl_state *TLS, void *extra, int success, const char *filename) {
|
||||
struct download_desc *dld = extra;
|
||||
struct tgl_user *U = dld->data;
|
||||
tgl_peer_t *P = tgl_peer_get (TLS, dld->get_user_info_data->peer);
|
||||
|
||||
if (!success || !P) {
|
||||
warning ("Can not load userpic for user %s %s", U->first_name, U->last_name);
|
||||
tgp_notify_on_error_gw (TLS, NULL, success);
|
||||
free (dld->get_user_info_data);
|
||||
free (dld);
|
||||
return;
|
||||
}
|
||||
|
||||
int imgStoreId = p2tgl_imgstore_add_with_id (filename);
|
||||
if (imgStoreId > 0) {
|
||||
used_images_add (tls_get_data (TLS), imgStoreId);
|
||||
|
||||
p2tgl_buddy_icons_set_for_user (tls_get_pa (TLS), P->id, filename);
|
||||
if (dld->get_user_info_data->show_info == 1) {
|
||||
purple_notify_userinfo (tls_get_conn (TLS), tgp_blist_lookup_purple_name (TLS, P->id),
|
||||
p2tgl_notify_peer_info_new (TLS, P), NULL, NULL);
|
||||
}
|
||||
}
|
||||
free (dld->get_user_info_data);
|
||||
free (dld);
|
||||
}
|
||||
|
||||
static void on_get_dialog_list_done (struct tgl_state *TLS, void *callback_extra, int success, int size,
|
||||
static void on_get_dialog_list_done (struct tgl_state *TLS, void *extra, int success, int size,
|
||||
tgl_peer_id_t peers[], tgl_message_id_t *last_msg_id[], int unread_count[]) {
|
||||
info ("Fetched dialogue list of size: %d", size);
|
||||
if (tgp_error_if_false (TLS, success, "Fetching dialogue list failed", TLS->error)) {
|
||||
|
@ -272,27 +254,7 @@ static void on_get_dialog_list_done (struct tgl_state *TLS, void *callback_extra
|
|||
}
|
||||
if (tgl_get_peer_type (UC->id) == TGL_PEER_USER) {
|
||||
if (! (UC->user.flags & TGLUF_DELETED)) {
|
||||
PurpleBuddy *buddy = tgp_blist_buddy_find (TLS, UC->id);
|
||||
if (! buddy) {
|
||||
info ("%s is in the dialogue list but not in the buddy list, add the user",
|
||||
tgp_blist_lookup_purple_name (TLS, UC->id));
|
||||
buddy = tgp_blist_buddy_new (TLS, UC);
|
||||
purple_blist_add_buddy (buddy, NULL, tgp_blist_group_init ("Telegram"), NULL);
|
||||
if (UC->user.photo_id) {
|
||||
info ("%s has the photo %lld, fetch it.", buddy->name, UC->user.photo_id);
|
||||
tgl_do_get_user_info (TLS, UC->id, 0, on_user_get_info, get_user_info_data_new (0, UC->id));
|
||||
}
|
||||
}
|
||||
p2tgl_prpl_got_user_status (TLS, UC->id, &UC->user.status);
|
||||
}
|
||||
} else if (tgl_get_peer_type (UC->id) == TGL_PEER_CHAT) {
|
||||
if (UC->chat.users_num > 0 &&
|
||||
purple_account_get_bool (tls_get_data (TLS)->pa, TGP_KEY_JOIN_GROUP_CHATS, TGP_DEFAULT_JOIN_GROUP_CHATS)) {
|
||||
PurpleChat *PC = tgp_blist_chat_find (TLS, UC->id);
|
||||
if (!PC) {
|
||||
PC = p2tgl_chat_new (TLS, &UC->chat);
|
||||
purple_blist_add_chat (PC, tgp_blist_group_init ("Telegram Chats"), NULL);
|
||||
}
|
||||
tgp_blist_contact_add (TLS, &UC->user);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -302,26 +264,13 @@ static void on_get_dialog_list_done (struct tgl_state *TLS, void *callback_extra
|
|||
tgp_chat_join_all_pending (TLS);
|
||||
}
|
||||
|
||||
void on_user_get_info (struct tgl_state *TLS, void *info_data, int success, struct tgl_user *U) {
|
||||
get_user_info_data *user_info_data = (get_user_info_data *)info_data;
|
||||
tgl_peer_t *P = tgl_peer_get (TLS, user_info_data->peer);
|
||||
g_return_if_fail (P);
|
||||
if (! success) {
|
||||
tgp_notify_on_error_gw (TLS, NULL, success);
|
||||
return;
|
||||
}
|
||||
if (!U->photo || U->photo->sizes_num == 0) {
|
||||
// No profile pic to load, display it right away
|
||||
if (user_info_data->show_info) {
|
||||
purple_notify_userinfo (tls_get_conn (TLS), tgp_blist_lookup_purple_name (TLS, P->id),
|
||||
p2tgl_notify_peer_info_new (TLS, P), NULL, NULL);
|
||||
static void on_get_channel_list_done (struct tgl_state *TLS, void *callback_extra, int success, int size,
|
||||
tgl_peer_id_t peers[], tgl_message_id_t *last_msg_id[], int unread_count[]) {
|
||||
int i;
|
||||
for (i = 0; i < size; i ++) {
|
||||
if (! tgp_channel_loaded (TLS, peers[i])) {
|
||||
tgp_channel_load (TLS, tgl_peer_get (TLS, peers[i]), NULL, NULL);
|
||||
}
|
||||
g_free (user_info_data);
|
||||
} else {
|
||||
struct download_desc *dld = malloc (sizeof (struct download_desc));
|
||||
dld->data = U;
|
||||
dld->get_user_info_data = info_data;
|
||||
tgl_do_load_photo (TLS, U->photo, on_userpic_loaded, dld);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -386,37 +335,43 @@ static void start_secret_chat (PurpleBlistNode *node, gpointer data) {
|
|||
}
|
||||
|
||||
static void create_chat_link_done (struct tgl_state *TLS, void *extra, int success, const char *url) {
|
||||
tgl_peer_t *C = extra;
|
||||
|
||||
tgl_peer_t *P = extra;
|
||||
if (success) {
|
||||
assert (tgl_get_peer_type (C->id) == TGL_PEER_CHAT);
|
||||
tgp_chat_show (TLS, &C->chat);
|
||||
|
||||
char *msg = g_strdup_printf (_("Invite link: %s"), url);
|
||||
serv_got_chat_in (tls_get_conn (TLS), tgl_get_peer_id (C->id), "WebPage", PURPLE_MESSAGE_SYSTEM, msg, time(NULL));
|
||||
tgp_chat_got_in (TLS, P, P->id, msg, PURPLE_MESSAGE_SYSTEM, time(NULL));
|
||||
g_free (msg);
|
||||
} else {
|
||||
tgp_notify_on_error_gw (TLS, NULL, success);
|
||||
}
|
||||
}
|
||||
|
||||
static void export_chat_link_checked_gw (PurpleBlistNode *node, gpointer data) {
|
||||
PurpleChat *chat = (PurpleChat*)node;
|
||||
export_chat_link_checked (pbn_get_data (node)->TLS, purple_chat_get_name (chat));
|
||||
}
|
||||
|
||||
void export_chat_link_checked (struct tgl_state *TLS, const char *name) {
|
||||
tgl_peer_t *C = tgp_blist_lookup_peer_get (TLS, name);
|
||||
if (! C) {
|
||||
failure ("Chat \"%s\" not found, not exporting link.", name);
|
||||
return;
|
||||
}
|
||||
if (C->chat.admin_id != tgl_get_peer_id (TLS->our_id)) {
|
||||
void export_chat_link (struct tgl_state *TLS, tgl_peer_t *P) {
|
||||
if (! (P->flags & (TGLPF_ADMIN | TGLPF_CREATOR))) {
|
||||
// FIXME: Can TGLCHF_MODERATOR export links?
|
||||
purple_notify_error (_telegram_protocol, _("Creating chat link failed"), _("Creating chat link failed"),
|
||||
_("You need to be admin of the group to do that."));
|
||||
return;
|
||||
}
|
||||
tgl_do_export_chat_link (TLS, C->id, create_chat_link_done, C);
|
||||
|
||||
if (tgl_get_peer_type (P->id) == TGL_PEER_CHAT) {
|
||||
tgl_do_export_chat_link (TLS, P->id, create_chat_link_done, P);
|
||||
} else if (tgl_get_peer_type(P->id) == TGL_PEER_CHANNEL) {
|
||||
tgl_do_export_channel_link (TLS, P->id, create_chat_link_done, P);
|
||||
} else {
|
||||
g_warn_if_reached();
|
||||
}
|
||||
}
|
||||
|
||||
static void export_chat_link_checked_gw (PurpleBlistNode *node, gpointer data) {
|
||||
PurpleChat *chat = (PurpleChat*)node;
|
||||
export_chat_link_by_name (pbn_get_data (node)->TLS, purple_chat_get_name (chat));
|
||||
}
|
||||
|
||||
void export_chat_link_by_name (struct tgl_state *TLS, const char *name) {
|
||||
g_return_if_fail(name);
|
||||
tgl_peer_t *C = tgp_blist_lookup_peer_get (TLS, name);
|
||||
g_warn_if_fail(C != NULL);
|
||||
export_chat_link (TLS, C);
|
||||
}
|
||||
|
||||
static void leave_and_delete_chat_gw (PurpleBlistNode *node, gpointer data) {
|
||||
|
@ -428,16 +383,51 @@ static void leave_and_delete_chat_gw (PurpleBlistNode *node, gpointer data) {
|
|||
|
||||
void leave_and_delete_chat (struct tgl_state *TLS, tgl_peer_t *P) {
|
||||
g_return_if_fail (P);
|
||||
if (P && P->chat.users_num) {
|
||||
tgl_do_del_user_from_chat (TLS, P->id, TLS->our_id, tgp_notify_on_error_gw, NULL);
|
||||
|
||||
if (tgl_get_peer_type(P->id) == TGL_PEER_CHAT) {
|
||||
if (!(P->chat.flags & TGLCHF_LEFT)) {
|
||||
tgl_do_del_user_from_chat (TLS, P->id, TLS->our_id, tgp_notify_on_error_gw, NULL);
|
||||
}
|
||||
} else if (tgl_get_peer_type(P->id) == TGL_PEER_CHANNEL) {
|
||||
tgl_do_leave_channel (TLS, P->id, tgp_notify_on_error_gw, NULL);
|
||||
} else {
|
||||
g_return_if_reached();
|
||||
}
|
||||
|
||||
serv_got_chat_left (tls_get_conn (TLS), tgl_get_peer_id (P->id));
|
||||
|
||||
PurpleChat *PC = tgp_blist_chat_find (TLS, P->id);
|
||||
if (PC) {
|
||||
purple_blist_remove_chat (PC);
|
||||
}
|
||||
}
|
||||
|
||||
void leave_and_delete_chat_by_name (struct tgl_state *TLS, const char *name) {
|
||||
g_return_if_fail(name);
|
||||
tgl_peer_t *P = tgp_blist_lookup_peer_get (TLS, name);
|
||||
g_return_if_fail(P);
|
||||
leave_and_delete_chat (TLS, P);
|
||||
}
|
||||
|
||||
static PurpleCmdRet tgprpl_cmd_kick(PurpleConversation *conv, const gchar *cmd, gchar **args, gchar **error, void *data)
|
||||
{
|
||||
PurpleConnection *pc = NULL;
|
||||
int id = -1;
|
||||
gchar *who;
|
||||
|
||||
pc = conv->account->gc;
|
||||
id = purple_conv_chat_get_id(PURPLE_CONV_CHAT(conv));
|
||||
|
||||
if (pc == NULL || id == -1)
|
||||
return PURPLE_CMD_RET_FAILED;
|
||||
|
||||
who = g_strjoinv(" ", args);
|
||||
tgprpl_kick_from_chat(pc, id, who);
|
||||
g_free(who);
|
||||
|
||||
return PURPLE_CMD_RET_OK;
|
||||
}
|
||||
|
||||
static void import_chat_link_done (struct tgl_state *TLS, void *extra, int success) {
|
||||
if (! success) {
|
||||
tgp_notify_on_error_gw (TLS, NULL, success);
|
||||
|
@ -447,7 +437,7 @@ static void import_chat_link_done (struct tgl_state *TLS, void *extra, int succe
|
|||
_("Chat added to list of chat rooms."));
|
||||
}
|
||||
|
||||
void import_chat_link_checked (struct tgl_state *TLS, const char *link) {
|
||||
void import_chat_link (struct tgl_state *TLS, const char *link) {
|
||||
tgl_do_import_chat_link (TLS, link, (int) strlen(link), import_chat_link_done, NULL);
|
||||
}
|
||||
|
||||
|
@ -459,7 +449,7 @@ static GList* tgprpl_blist_node_menu (PurpleBlistNode *node) {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
// chats that dont have a proper ID arent usable
|
||||
// chats that don't have a proper ID aren't usable
|
||||
if (PURPLE_BLIST_NODE_IS_CHAT(node) && ! tgp_chat_has_id ((PurpleChat *)node)) {
|
||||
return NULL;
|
||||
}
|
||||
|
@ -518,14 +508,31 @@ static void update_on_ready (struct tgl_state *TLS) {
|
|||
}
|
||||
|
||||
tgl_do_get_dialog_list (TLS, 200, 0, on_get_dialog_list_done, NULL);
|
||||
tgl_do_get_channels_dialog_list (TLS, 50, 0, on_get_channel_list_done, NULL);
|
||||
tgl_do_update_contact_list (TLS, 0, 0);
|
||||
}
|
||||
|
||||
static void update_on_failed_login (struct tgl_state *TLS) {
|
||||
info ("update_on_failed_login(): Login to telegram failed.");
|
||||
|
||||
// 401: SESSION_REVOKED is called when the session is cancelled during runtime
|
||||
// 401: AUTH_KEY_UNREGISTERED is called when logging into a revoked session
|
||||
if (strstr (TLS->error, "SESSION_REVOKED") ||
|
||||
strstr (TLS->error, "AUTH_KEY_UNREGISTERED")) {
|
||||
purple_account_set_bool (tls_get_pa (TLS), TGP_KEY_RESET_AUTH, TRUE);
|
||||
}
|
||||
purple_connection_error (tls_get_conn (TLS), TLS->error);
|
||||
}
|
||||
|
||||
static gulong chat_conversation_typing_signal = 0;
|
||||
|
||||
static void tgprpl_login (PurpleAccount * acct) {
|
||||
info ("tgprpl_login(): Purple is telling the prpl to connect the account");
|
||||
|
||||
PurpleConnection *gc = purple_account_get_connection (acct);
|
||||
|
||||
gc->flags |= PURPLE_CONNECTION_NO_BGCOLOR;
|
||||
|
||||
struct tgl_state *TLS = tgl_state_alloc ();
|
||||
connection_data *conn = connection_data_init (TLS, gc, acct);
|
||||
purple_connection_set_protocol_data (gc, conn);
|
||||
|
@ -558,7 +565,7 @@ static void tgprpl_login (PurpleAccount * acct) {
|
|||
tgl_set_rsa_key_direct (TLS, pubkey.e, pubkey.n_len, pubkey.n_raw);
|
||||
} else {
|
||||
failure ("both didn't work. abort.");
|
||||
char *cause = g_strdup_printf (_("Unable to sign on as %s: pubkey not found."),
|
||||
char *cause = g_strdup_printf (_("Unable to sign on as %s: file (public key) not found."),
|
||||
purple_account_get_username (acct));
|
||||
purple_connection_error_reason (gc, PURPLE_CONNECTION_ERROR_INVALID_SETTINGS, cause);
|
||||
char *long_hint = g_strdup_printf (
|
||||
|
@ -580,13 +587,26 @@ static void tgprpl_login (PurpleAccount * acct) {
|
|||
tgl_set_timer_methods (TLS, &tgp_timers);
|
||||
tgl_set_callback (TLS, &tgp_callback);
|
||||
tgl_register_app_id (TLS, TGP_APP_ID, TGP_APP_HASH);
|
||||
tgl_init (TLS);
|
||||
tgl_set_app_version (TLS, PACKAGE_VERSION);
|
||||
|
||||
if (tgl_init (TLS) != 0) {
|
||||
debug ("Call to tgl_init failed.\n");
|
||||
char *cause = g_strdup_printf (_("Unable to sign on as %s: problem in the underlying library"
|
||||
" 'tgl'. Please submit a bug report with the debug log."),
|
||||
purple_account_get_username (acct));
|
||||
purple_connection_error_reason (gc, PURPLE_CONNECTION_ERROR_INVALID_SETTINGS, cause);
|
||||
purple_notify_message (_telegram_protocol, PURPLE_NOTIFY_MSG_ERROR, _("Problem in tgl"),
|
||||
cause, NULL, NULL, NULL);
|
||||
g_free (cause);
|
||||
return;
|
||||
}
|
||||
|
||||
if (! tgp_startswith (purple_account_get_username (acct), "+")) {
|
||||
char *cause = g_strdup_printf (_("Unable to sign on as %s: phone number lacks country prefix."
|
||||
" Numbers must start with the full international"
|
||||
" prefix code, e.g. +49 for Germany."),
|
||||
purple_account_get_username (acct));
|
||||
// TRANSLATORS: Please fill in your own prefix!
|
||||
char *cause = g_strdup_printf (_("Unable to sign on as %s: phone number lacks country prefix."
|
||||
" Numbers must start with the full international"
|
||||
" prefix code, e.g. +1 for USA."),
|
||||
purple_account_get_username (acct));
|
||||
purple_connection_error_reason (gc, PURPLE_CONNECTION_ERROR_INVALID_SETTINGS, cause);
|
||||
purple_notify_message (_telegram_protocol, PURPLE_NOTIFY_MSG_ERROR, _("Incomplete phone number"),
|
||||
cause, NULL, NULL, NULL);
|
||||
|
@ -597,8 +617,19 @@ static void tgprpl_login (PurpleAccount * acct) {
|
|||
read_auth_file (TLS);
|
||||
read_state_file (TLS);
|
||||
|
||||
if (purple_account_get_bool (acct, TGP_KEY_RESET_AUTH, FALSE)) {
|
||||
info ("last login attempt failed, resetting authorization ...");
|
||||
purple_account_set_bool (tls_get_pa (TLS), TGP_KEY_RESET_AUTH, FALSE);
|
||||
bl_do_reset_authorization (TLS);
|
||||
}
|
||||
|
||||
purple_connection_set_state (conn->gc, PURPLE_CONNECTING);
|
||||
tgl_login (TLS);
|
||||
|
||||
if (!chat_conversation_typing_signal) {
|
||||
chat_conversation_typing_signal = purple_signal_connect(purple_conversations_get_handle(), "chat-conversation-typing",
|
||||
purple_connection_get_prpl (gc), PURPLE_CALLBACK(tgprpl_send_chat_typing), NULL);
|
||||
}
|
||||
}
|
||||
|
||||
static void tgprpl_close (PurpleConnection *gc) {
|
||||
|
@ -611,7 +642,6 @@ static int tgprpl_send_im (PurpleConnection *gc, const char *who, const char *me
|
|||
|
||||
// workaround to support clients without the request API (request.h), see tgp-request.c:request_code()
|
||||
if (gc_get_data (gc)->request_code_data) {
|
||||
|
||||
// OTR plugins may try to insert messages that don't contain the code
|
||||
if (tgp_startswith (message, "?OTR")) {
|
||||
info ("Fallback SMS auth, skipping OTR message: '%s'", message);
|
||||
|
@ -625,19 +655,36 @@ static int tgprpl_send_im (PurpleConnection *gc, const char *who, const char *me
|
|||
return 1;
|
||||
}
|
||||
|
||||
// Make sure that to only send messages to an existing peer by searching it in the peer tree, to give immediate
|
||||
// feedback by returning an error-code in case the peer doesn't exist.
|
||||
// check receiver to give immediate feedback in case sending a message is not possible
|
||||
tgl_peer_t *peer = tgp_blist_lookup_peer_get (gc_get_tls (gc), who);
|
||||
if (peer) {
|
||||
if (tgl_get_peer_type (peer->id) == TGL_PEER_ENCR_CHAT && peer->encr_chat.state != sc_ok) {
|
||||
warning ("secret chat not ready for sending messages or deleted");
|
||||
return -1;
|
||||
if (! peer) {
|
||||
warning ("peer not found");
|
||||
return -1;
|
||||
}
|
||||
|
||||
// secret chat not yet usable
|
||||
if (tgl_get_peer_type (peer->id) == TGL_PEER_ENCR_CHAT && peer->encr_chat.state != sc_ok) {
|
||||
const char *msg;
|
||||
if (peer->encr_chat.state == sc_deleted) {
|
||||
msg = _("Secret chat was already deleted");
|
||||
} else {
|
||||
msg = _("Secret chat is not ready");
|
||||
}
|
||||
return tgp_msg_send (gc_get_tls (gc), message, peer->id);
|
||||
tgp_msg_special_out (gc_get_tls (gc), msg, peer->id, PURPLE_MESSAGE_NO_LOG | PURPLE_MESSAGE_ERROR);
|
||||
return -1;
|
||||
}
|
||||
|
||||
// channel owned by someone else (TEST: why does it work with supergroups?)
|
||||
if (tgl_get_peer_type (peer->id) == TGL_PEER_CHANNEL && ! (peer->flags & TGLCHF_CREATOR)) {
|
||||
tgp_msg_special_out (gc_get_tls (gc), _("Only the creator of a channel can post messages."), peer->id,
|
||||
PURPLE_MESSAGE_NO_LOG | PURPLE_MESSAGE_ERROR);
|
||||
return -1;
|
||||
}
|
||||
|
||||
warning ("peer not found");
|
||||
return -1;
|
||||
// when the other peer receives a message it is obvious that the previous messages were read
|
||||
pending_reads_send_user (gc_get_tls (gc), peer->id);
|
||||
|
||||
return tgp_msg_send (gc_get_tls (gc), message, peer->id);
|
||||
}
|
||||
|
||||
static unsigned int tgprpl_send_typing (PurpleConnection *gc, const char *who, PurpleTypingState typing) {
|
||||
|
@ -653,23 +700,6 @@ static unsigned int tgprpl_send_typing (PurpleConnection *gc, const char *who, P
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void tgprpl_get_info (PurpleConnection *gc, const char *who) {
|
||||
debug ("tgprpl_get_info()");
|
||||
|
||||
tgl_peer_t *peer = tgp_blist_lookup_peer_get (gc_get_data (gc)->TLS, who);
|
||||
if (peer) {
|
||||
get_user_info_data* info_data = get_user_info_data_new (1, peer->id);
|
||||
if (tgl_get_peer_type (peer->id) == TGL_PEER_ENCR_CHAT) {
|
||||
tgl_peer_t *parent_peer = tgp_encr_chat_get_partner (gc_get_tls (gc), &peer->encr_chat);
|
||||
if (parent_peer) {
|
||||
tgl_do_get_user_info (gc_get_tls (gc), parent_peer->id, 0, on_user_get_info, info_data);
|
||||
}
|
||||
} else {
|
||||
tgl_do_get_user_info (gc_get_tls (gc), peer->id, 0, on_user_get_info, info_data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void tgprpl_set_status (PurpleAccount *acct, PurpleStatus *status) {
|
||||
debug ("tgprpl_set_status(%s)", purple_status_get_name (status));
|
||||
|
||||
|
@ -677,28 +707,9 @@ static void tgprpl_set_status (PurpleAccount *acct, PurpleStatus *status) {
|
|||
}
|
||||
|
||||
static void tgprpl_add_buddy (PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) {
|
||||
tgl_peer_t *peer = tgl_peer_get_by_name (gc_get_tls (gc), buddy->name);
|
||||
if (peer) {
|
||||
_update_buddy (gc_get_tls (gc), peer, TGL_UPDATE_PHOTO);
|
||||
tgp_blist_buddy_set_id (buddy, peer->id);
|
||||
p2tgl_prpl_got_user_status (gc_get_tls (gc), peer->id, &peer->user.status);
|
||||
}
|
||||
}
|
||||
|
||||
static void tgprpl_remove_buddy (PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) {
|
||||
debug ("tgprpl_remove_buddy()");
|
||||
if (! buddy) {
|
||||
return;
|
||||
}
|
||||
|
||||
tgl_peer_t *peer = tgp_blist_buddy_get_peer (buddy);
|
||||
if (peer) {
|
||||
if (tgl_get_peer_type (peer->id) == TGL_PEER_ENCR_CHAT) {
|
||||
/* TODO: implement the api call cancel secret chats. Currently the chat will only be marked as
|
||||
deleted on our side so that it won't be added on startup
|
||||
(when the secret chat file is loaded) */
|
||||
bl_do_peer_delete (gc_get_tls (gc), peer->encr_chat.id);
|
||||
}
|
||||
tgl_peer_t *P = tgl_peer_get_by_name (gc_get_tls (gc), buddy->name);
|
||||
if (P) {
|
||||
tgp_blist_contact_add (gc_get_tls (gc), &P->user);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -715,20 +726,17 @@ static void tgprpl_chat_invite (PurpleConnection *gc, int id, const char *messag
|
|||
tgl_do_add_user_to_chat (gc_get_tls (gc), chat->id, user->id, 0, tgp_notify_on_error_gw, chat);
|
||||
}
|
||||
|
||||
static int tgprpl_send_chat (PurpleConnection *gc, int id, const char *message, PurpleMessageFlags flags) {
|
||||
debug ("tgprpl_send_chat()");
|
||||
int ret = tgp_msg_send (gc_get_tls (gc), message, TGL_MK_CHAT(id));
|
||||
if (ret != 0) {
|
||||
p2tgl_got_chat_in (gc_get_tls (gc), TGL_MK_CHAT(id), gc_get_tls (gc)->our_id, message, PURPLE_MESSAGE_RECV,
|
||||
time (NULL));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static gboolean tgprpl_can_receive_file (PurpleConnection *gc, const char *who) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static GHashTable *tgprpl_get_account_text_table (PurpleAccount *pa) {
|
||||
GHashTable *HT;
|
||||
HT = g_hash_table_new (g_str_hash, g_str_equal);
|
||||
g_hash_table_insert(HT, "login_label", (gpointer) _("phone no. (+ country prefix)"));
|
||||
return HT;
|
||||
}
|
||||
|
||||
PurplePlugin *_telegram_protocol = NULL;
|
||||
|
||||
static PurplePluginProtocolInfo prpl_info = {
|
||||
|
@ -757,13 +765,13 @@ static PurplePluginProtocolInfo prpl_info = {
|
|||
tgprpl_send_im,
|
||||
NULL, // set_info
|
||||
tgprpl_send_typing,
|
||||
tgprpl_get_info,
|
||||
tgprpl_info_show,
|
||||
tgprpl_set_status,
|
||||
NULL, // set_idle
|
||||
NULL, // change_passwd
|
||||
tgprpl_add_buddy,
|
||||
NULL, // add_buddies
|
||||
tgprpl_remove_buddy,
|
||||
tgprpl_request_delete_contact,
|
||||
NULL, // remove_buddies
|
||||
NULL, // add_permit
|
||||
NULL, // add_deny
|
||||
|
@ -806,7 +814,7 @@ static PurplePluginProtocolInfo prpl_info = {
|
|||
NULL, // send_attention
|
||||
NULL, // get_attention_types
|
||||
sizeof(PurplePluginProtocolInfo),
|
||||
NULL, // get_account_text_table
|
||||
tgprpl_get_account_text_table, // get_account_text_table
|
||||
NULL, // initiate_media
|
||||
NULL, // get_media_caps
|
||||
NULL, // get_moods
|
||||
|
@ -816,6 +824,15 @@ static PurplePluginProtocolInfo prpl_info = {
|
|||
NULL // add_buddies_with_invite
|
||||
};
|
||||
|
||||
static gboolean tgprpl_load (PurplePlugin *plugin) {
|
||||
purple_cmd_register("kick", "s", PURPLE_CMD_P_PLUGIN, PURPLE_CMD_FLAG_CHAT |
|
||||
PURPLE_CMD_FLAG_PRPL_ONLY | PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS,
|
||||
PLUGIN_ID, tgprpl_cmd_kick,
|
||||
_("kick <user>: Kick a user from the room."), NULL);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void tgprpl_init (PurplePlugin *plugin) {
|
||||
PurpleAccountOption *opt;
|
||||
|
||||
|
@ -860,6 +877,11 @@ static void tgprpl_init (PurplePlugin *plugin) {
|
|||
TGP_KEY_HISTORY_RETRIEVAL_THRESHOLD, TGP_DEFAULT_HISTORY_RETRIEVAL_THRESHOLD);
|
||||
prpl_info.protocol_options = g_list_append (prpl_info.protocol_options, opt);
|
||||
|
||||
// Media
|
||||
opt = purple_account_option_int_new (_("Autoload media size (kb)"), TGP_KEY_MEDIA_SIZE,
|
||||
TGP_DEFAULT_MEDIA_SIZE);
|
||||
prpl_info.protocol_options = g_list_append (prpl_info.protocol_options, opt);
|
||||
|
||||
// Chats
|
||||
opt = purple_account_option_bool_new (_("Add all group chats to buddy list"),
|
||||
TGP_KEY_JOIN_GROUP_CHATS, TGP_DEFAULT_JOIN_GROUP_CHATS);
|
||||
|
@ -875,6 +897,7 @@ static void tgprpl_init (PurplePlugin *plugin) {
|
|||
prpl_info.protocol_options = g_list_append (prpl_info.protocol_options, opt);
|
||||
|
||||
_telegram_protocol = plugin;
|
||||
debug ("tgprpl_init finished: This is " PACKAGE_VERSION "+g" GIT_COMMIT " on libtgl " TGL_VERSION);
|
||||
}
|
||||
|
||||
static GList *tgprpl_actions (PurplePlugin *plugin, gpointer context) {
|
||||
|
@ -892,12 +915,12 @@ static PurplePluginInfo plugin_info = {
|
|||
PURPLE_PRIORITY_DEFAULT,
|
||||
PLUGIN_ID,
|
||||
"Telegram",
|
||||
PACKAGE_VERSION " libtgl: " TGL_VERSION,
|
||||
PACKAGE_VERSION "\n\t\t\tcommit: " GIT_COMMIT "\n\t\t\tlibtgl: " TGL_VERSION,
|
||||
"Telegram",
|
||||
TG_DESCRIPTION,
|
||||
TG_AUTHOR,
|
||||
N_("Telegram Protocol Plugin."),
|
||||
PLUGIN_AUTHOR,
|
||||
"https://github.com/majn/telegram-purple",
|
||||
NULL, // on load
|
||||
tgprpl_load, // on load
|
||||
NULL, // on unload
|
||||
NULL, // on destroy
|
||||
NULL, // ui specific struct
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
|
||||
|
||||
Copyright Matthias Jentsch, Vitaly Valtman, Christopher Althaus, Markus Endres 2014-2015
|
||||
Copyright Matthias Jentsch, Vitaly Valtman, Christopher Althaus, Ben Wiederhake 2014-2015
|
||||
*/
|
||||
#ifndef __TG_PURPLE_H__
|
||||
#define __TG_PURPLE_H__
|
||||
|
@ -32,6 +32,8 @@
|
|||
#else
|
||||
# define _(String) String
|
||||
# define P_(Singular,Plural,N) Plural
|
||||
# define N_(String) String
|
||||
# define gettext(String) String
|
||||
#endif
|
||||
|
||||
#include <tgl.h>
|
||||
|
@ -53,20 +55,21 @@
|
|||
#include "tgp-ft.h"
|
||||
#include "tgp-msg.h"
|
||||
#include "tgp-request.h"
|
||||
#include "tgp-info.h"
|
||||
#include "msglog.h"
|
||||
|
||||
#define PLUGIN_ID "prpl-telegram"
|
||||
// FIXME: Name must be translated (for languages without latin script, it would look like gibberish. Just like Japanese script looks to me.)
|
||||
#define TG_AUTHOR "Matthias Jentsch <mtthsjntsch@gmail.com>, Vitaly Valtman, Ben Wiederhake <BenWiederhake.GitHub@gmx.de>, Christopher Althaus <althaus.christopher@gmail.com>, based on libtgl by Vitaly Valtman."
|
||||
#define TG_DESCRIPTION "Telegram protocol."
|
||||
#define TG_BUILD "13"
|
||||
|
||||
#define PLUGIN_AUTHOR "Matthias Jentsch <mtthsjntsch@gmail.com>\n\t\t\tVitaly Valtman\n\t\t\tBen Wiederhake\n\t\t\tChristopher Althaus <althaus.christopher@gmail.com>"
|
||||
|
||||
#define TGP_APP_HASH "99428c722d0ed59b9cd844e4577cb4bb"
|
||||
#define TGP_APP_ID 16154
|
||||
|
||||
#define TGP_MAX_MSG_SIZE 4096
|
||||
#define TGP_DEFAULT_MAX_MSG_SPLIT_COUNT 4
|
||||
|
||||
#define TGP_DEFAULT_MEDIA_SIZE 32768
|
||||
#define TGP_KEY_MEDIA_SIZE "media-size-threshold"
|
||||
|
||||
#define TGP_KEY_PASSWORD_TWO_FACTOR "password-two-factor"
|
||||
|
||||
#define TGP_DEFAULT_ACCEPT_SECRET_CHATS "ask"
|
||||
|
@ -78,7 +81,7 @@
|
|||
#define TGP_DEFAULT_HISTORY_RETRIEVAL_THRESHOLD 14
|
||||
#define TGP_KEY_HISTORY_RETRIEVAL_THRESHOLD "history-retrieve-days"
|
||||
|
||||
#define TGP_DEFAULT_JOIN_GROUP_CHATS FALSE
|
||||
#define TGP_DEFAULT_JOIN_GROUP_CHATS TRUE
|
||||
#define TGP_KEY_JOIN_GROUP_CHATS "auto-join-group-chats"
|
||||
|
||||
#define TGP_DEFAULT_DISPLAY_READ_NOTIFICATIONS FALSE
|
||||
|
@ -87,12 +90,21 @@
|
|||
#define TGP_DEFAULT_SEND_READ_NOTIFICATIONS TRUE
|
||||
#define TGP_KEY_SEND_READ_NOTIFICATIONS "send-read-notifications"
|
||||
|
||||
#define TGP_DEFAULT_CHANNEL_MEMBERS 500
|
||||
#define TGP_KEY_CHANNEL_MEMBERS "channel-member-count"
|
||||
|
||||
#define TGP_KEY_RESET_AUTH "reset-authorization"
|
||||
|
||||
#define TGP_CHANNEL_HISTORY_LIMIT 500
|
||||
|
||||
extern const char *pk_path;
|
||||
extern const char *user_pk_filename;
|
||||
extern const char *config_dir;
|
||||
extern PurplePlugin *_telegram_protocol;
|
||||
void export_chat_link_checked (struct tgl_state *TLS, const char *name);
|
||||
void import_chat_link_checked (struct tgl_state *TLS, const char *link);
|
||||
void import_chat_link (struct tgl_state *TLS, const char *link);
|
||||
void export_chat_link_by_name (struct tgl_state *TLS, const char *name);
|
||||
void leave_and_delete_chat (struct tgl_state *TLS, tgl_peer_t *P);
|
||||
void leave_and_delete_chat_by_name (struct tgl_state *TLS, const char *name);
|
||||
void channel_load_photo (struct tgl_state *TLS, void *extra, int success, struct tgl_channel *C);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Copyright 2015 Jiri Eischmann <eischmann@redhat.com>
|
||||
-->
|
||||
<component type="addon"><id>telegram-purple</id><extends>pidgin.desktop</extends><name>Telegram</name><summary>A plugin that adds support for Telegram</summary><url type="homepage">https://github.com/majn/telegram-purple</url><metadata_license>GFDL-1.3</metadata_license><project_license>GPL-2.0+</project_license><updatecontact>eischmann_at_redhat.com</updatecontact></component>
|
|
@ -91,10 +91,14 @@ Section "MainSection" SEC01
|
|||
after_copy:
|
||||
|
||||
SetOutPath "$PidginDir\locale"
|
||||
File /nonfatal "/oname=bg\LC_MESSAGES\telegram-purple.mo" "po\bg.mo"
|
||||
File /nonfatal "/oname=cs_CZ\LC_MESSAGES\telegram-purple.mo" "po\cs_CZ.mo"
|
||||
File /nonfatal "/oname=de_DE\LC_MESSAGES\telegram-purple.mo" "po\de_DE.mo"
|
||||
File /nonfatal "/oname=es_AR\LC_MESSAGES\telegram-purple.mo" "po\es_AR.mo"
|
||||
File /nonfatal "/oname=fr\LC_MESSAGES\telegram-purple.mo" "po\fr.mo"
|
||||
File /nonfatal "/oname=it_IT\LC_MESSAGES\telegram-purple.mo" "po\it_IT.mo"
|
||||
File /nonfatal "/oname=nl\LC_MESSAGES\telegram-purple.mo" "po\nl.mo"
|
||||
File /nonfatal "/oname=pl_PL\LC_MESSAGES\telegram-purple.mo" "po\pl_PL.mo"
|
||||
File /nonfatal "/oname=pt_BR\LC_MESSAGES\telegram-purple.mo" "po\pt_BR.mo"
|
||||
File /nonfatal "/oname=ru_RU\LC_MESSAGES\telegram-purple.mo" "po\ru_RU.mo"
|
||||
File /nonfatal "/oname=sq\LC_MESSAGES\telegram-purple.mo" "po\sq.mo"
|
||||
File /nonfatal "/oname=uk\LC_MESSAGES\telegram-purple.mo" "po\uk.mo"
|
||||
|
|
14
telegram-purple.nsi.awk
Normal file
14
telegram-purple.nsi.awk
Normal file
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
if (match($0,"%")) {
|
||||
do {
|
||||
prev=lang;
|
||||
getline lang<"po/LINGUAS";
|
||||
l=$0;
|
||||
gsub("%",lang,l);
|
||||
if (prev!=lang) {print l}
|
||||
} while (prev!=lang);
|
||||
close("po/LINGUAS")
|
||||
} else {
|
||||
print $0
|
||||
}
|
||||
}
|
120
telegram-purple.nsi.awk-in
Normal file
120
telegram-purple.nsi.awk-in
Normal file
|
@ -0,0 +1,120 @@
|
|||
; This file is part of telegram-purple
|
||||
;
|
||||
; This program is free software; you can redistribute it and/or modify
|
||||
; it under the terms of the GNU General Public License as published by
|
||||
; the Free Software Foundation; either version 2 of the License, or
|
||||
; (at your option) any later version.
|
||||
;
|
||||
; This program is distributed in the hope that it will be useful,
|
||||
; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
; GNU General Public License for more details.
|
||||
;
|
||||
; You should have received a copy of the GNU General Public License
|
||||
; along with this program; if not, write to the Free Software
|
||||
; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
|
||||
;
|
||||
; Copyright Matthias Jentsch, Eion Robb 2014-2015
|
||||
|
||||
; Script based on the Skype4Pidgin and Off-the-Record Messaging NSI files
|
||||
|
||||
SetCompress off
|
||||
|
||||
; todo: SetBrandingImage
|
||||
; HM NIS Edit Wizard helper defines
|
||||
!define PRODUCT_NAME "telegram-purple"
|
||||
!define PRODUCT_VERSION "${PLUGIN_VERSION}"
|
||||
!define PRODUCT_PUBLISHER "The telegram-purple team"
|
||||
!define PRODUCT_WEB_SITE "https://github.com/majn/telegram-purple"
|
||||
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
|
||||
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
|
||||
|
||||
; MUI 1.67 compatible ------
|
||||
!include "MUI.nsh"
|
||||
|
||||
; MUI Settings
|
||||
!define MUI_ABORTWARNING
|
||||
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
|
||||
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
|
||||
|
||||
; Welcome page
|
||||
!insertmacro MUI_PAGE_WELCOME
|
||||
; License page
|
||||
!insertmacro MUI_PAGE_LICENSE "COPYING"
|
||||
; Instfiles page
|
||||
!insertmacro MUI_PAGE_INSTFILES
|
||||
!define MUI_FINISHPAGE_RUN
|
||||
!define MUI_FINISHPAGE_RUN_TEXT "Run Pidgin"
|
||||
!define MUI_FINISHPAGE_RUN_FUNCTION "RunPidgin"
|
||||
!insertmacro MUI_PAGE_FINISH
|
||||
|
||||
; Uninstaller pages
|
||||
;!insertmacro MUI_UNPAGE_INSTFILES
|
||||
|
||||
; Language files
|
||||
!insertmacro MUI_LANGUAGE "English"
|
||||
|
||||
; MUI end ------
|
||||
|
||||
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
|
||||
OutFile "${PRODUCT_NAME}-${PRODUCT_VERSION}.exe"
|
||||
|
||||
Var "PidginDir"
|
||||
|
||||
ShowInstDetails show
|
||||
ShowUnInstDetails show
|
||||
|
||||
Section "MainSection" SEC01
|
||||
;Check for pidgin installation
|
||||
Call GetPidginInstPath
|
||||
|
||||
SetOverwrite try
|
||||
|
||||
SetOutPath "$PidginDir\pixmaps\pidgin"
|
||||
File "/oname=protocols\16\telegram.png" "imgs\telegram16.png"
|
||||
File "/oname=protocols\22\telegram.png" "imgs\telegram22.png"
|
||||
File "/oname=protocols\48\telegram.png" "imgs\telegram48.png"
|
||||
|
||||
SetOverwrite try
|
||||
copy:
|
||||
ClearErrors
|
||||
Delete "$PidginDir\plugins\${PRPL_NAME}"
|
||||
IfErrors dllbusy
|
||||
SetOutPath "$PidginDir\plugins"
|
||||
File "bin\${PRPL_NAME}"
|
||||
Goto after_copy
|
||||
dllbusy:
|
||||
MessageBox MB_RETRYCANCEL "${PRPL_NAME} is busy. Please close Pidgin (including tray icon) and try again" IDCANCEL cancel
|
||||
Goto copy
|
||||
cancel:
|
||||
Abort "Installation of telegram-purple aborted"
|
||||
after_copy:
|
||||
|
||||
SetOutPath "$PidginDir\locale"
|
||||
File /nonfatal "/oname=%\LC_MESSAGES\telegram-purple.mo" "po\%.mo"
|
||||
|
||||
SetOutPath "$PidginDir"
|
||||
File "/oname=server.tglpub" "tg-server.tglpub"
|
||||
File "${WIN32_DEV_TOP}\libgpg-error-1.12-2\bin\libgpg-error-0.dll"
|
||||
File "${WIN32_DEV_TOP}\libgcrypt-1.6.3\bin\libgcrypt-20.dll"
|
||||
File "${WIN32_DEV_TOP}\libwebp-0.4.3-1\bin\libwebp-5.dll"
|
||||
File "${WIN32_DEV_TOP}\mingw\bin\libgcc_s_sjlj-1.dll"
|
||||
|
||||
SectionEnd
|
||||
|
||||
Function GetPidginInstPath
|
||||
Push $0
|
||||
ReadRegStr $0 HKLM "Software\pidgin" ""
|
||||
IfFileExists "$0\pidgin.exe" cont
|
||||
ReadRegStr $0 HKCU "Software\pidgin" ""
|
||||
IfFileExists "$0\pidgin.exe" cont
|
||||
MessageBox MB_OK|MB_ICONINFORMATION "Failed to find Pidgin installation."
|
||||
Abort "Failed to find Pidgin installation. Please install Pidgin first."
|
||||
cont:
|
||||
StrCpy $PidginDir $0
|
||||
FunctionEnd
|
||||
|
||||
Function RunPidgin
|
||||
ExecShell "" "$PidginDir\pidgin.exe"
|
||||
FunctionEnd
|
||||
|
2
test/.gitignore
vendored
Normal file
2
test/.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
/bin
|
||||
/tmp
|
25
test/Makefile
Normal file
25
test/Makefile
Normal file
|
@ -0,0 +1,25 @@
|
|||
PLUGIN_TESTS:=probetest loadtest
|
||||
PLUGIN_TEST_BINS:=$(addprefix test/bin/,${PLUGIN_TESTS})
|
||||
|
||||
test/bin:
|
||||
mkdir -p $@
|
||||
|
||||
test/tmp/%:
|
||||
mkdir -p $@
|
||||
|
||||
test/bin/%: test/%.c test/bin bin/telegram-purple.so
|
||||
${CC} ${CFLAGS} ${CPPFLAGS} -I ${srcdir}/tgl -o $@ $< ${LDFLAGS}
|
||||
|
||||
.PHONY: ${PLUGIN_TESTS}
|
||||
${PLUGIN_TESTS}: %: test/bin/% test/tmp/user
|
||||
$< bin/telegram-purple.so
|
||||
|
||||
.PHONY: check
|
||||
check: ${PLUGIN_TESTS} test/tmp/user
|
||||
|
||||
.PHONY: recheck
|
||||
recheck: clean-test check
|
||||
|
||||
.PHONY: clean-test
|
||||
clean-test:
|
||||
rm -rf test/bin test/tmp
|
286
test/loadtest.c
Normal file
286
test/loadtest.c
Normal file
|
@ -0,0 +1,286 @@
|
|||
/*
|
||||
This file is part of telegram-purple
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
|
||||
|
||||
Copyright Ben Wiederhake 2016, Purple developers 2007-2015
|
||||
|
||||
Derived from the nullclient.c example at
|
||||
https://github.com/Tasssadar/libpurple/blob/master/example/nullclient.c
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <glib.h>
|
||||
#include <purple.h>
|
||||
#include <signal.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "../commit.h"
|
||||
#include "../telegram-purple.h"
|
||||
|
||||
// The following eventloop functions are used in both pidgin and purple-text. If your application uses glib mainloop, you can safely use this verbatim.
|
||||
#define PURPLE_GLIB_READ_COND (G_IO_IN | G_IO_HUP | G_IO_ERR)
|
||||
#define PURPLE_GLIB_WRITE_COND (G_IO_OUT | G_IO_HUP | G_IO_ERR | G_IO_NVAL)
|
||||
|
||||
typedef struct TdfGLibIOClosure {
|
||||
PurpleInputFunction function;
|
||||
guint result;
|
||||
gpointer data;
|
||||
} TdfGLibIOClosure;
|
||||
|
||||
typedef struct TdfAccountRequestInfo {
|
||||
PurpleAccountRequestType type;
|
||||
PurpleAccount *account;
|
||||
void *ui_handle;
|
||||
char *user;
|
||||
gpointer userdata;
|
||||
PurpleAccountRequestAuthorizationCb auth_cb;
|
||||
PurpleAccountRequestAuthorizationCb deny_cb;
|
||||
guint ref;
|
||||
} TdfAccountRequestInfo;
|
||||
|
||||
static void tdf_glib_io_destroy (gpointer data) {
|
||||
g_free (data);
|
||||
}
|
||||
|
||||
static gboolean tdf_glib_io_invoke (GIOChannel *source, GIOCondition condition, gpointer data) {
|
||||
TdfGLibIOClosure *closure = data;
|
||||
PurpleInputCondition purple_cond = 0;
|
||||
|
||||
if (condition & PURPLE_GLIB_READ_COND)
|
||||
purple_cond |= PURPLE_INPUT_READ;
|
||||
if (condition & PURPLE_GLIB_WRITE_COND)
|
||||
purple_cond |= PURPLE_INPUT_WRITE;
|
||||
|
||||
closure->function (closure->data, g_io_channel_unix_get_fd (source), purple_cond);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static guint tdf_glib_input_add (gint fd, PurpleInputCondition condition, PurpleInputFunction function, gpointer data) {
|
||||
TdfGLibIOClosure *closure = g_new0(TdfGLibIOClosure, 1);
|
||||
GIOChannel *channel;
|
||||
GIOCondition cond = 0;
|
||||
|
||||
closure->function = function;
|
||||
closure->data = data;
|
||||
|
||||
if (condition & PURPLE_INPUT_READ)
|
||||
cond |= PURPLE_GLIB_READ_COND;
|
||||
if (condition & PURPLE_INPUT_WRITE)
|
||||
cond |= PURPLE_GLIB_WRITE_COND;
|
||||
|
||||
channel = g_io_channel_unix_new (fd);
|
||||
closure->result = g_io_add_watch_full (channel, G_PRIORITY_DEFAULT, cond, tdf_glib_io_invoke, closure, tdf_glib_io_destroy);
|
||||
|
||||
g_io_channel_unref (channel);
|
||||
return closure->result;
|
||||
}
|
||||
|
||||
static PurpleEventLoopUiOps tdf_glib_eventloop_ops = {
|
||||
g_timeout_add,
|
||||
g_source_remove,
|
||||
tdf_glib_input_add,
|
||||
g_source_remove,
|
||||
NULL,
|
||||
#if GLIB_CHECK_VERSION(2,14,0)
|
||||
g_timeout_add_seconds,
|
||||
#else
|
||||
NULL,
|
||||
#endif
|
||||
// padding
|
||||
NULL,
|
||||
NULL,
|
||||
NULL
|
||||
};
|
||||
// End of the eventloop functions.
|
||||
|
||||
static PurpleConnectionUiOps connection_uiops = {
|
||||
NULL, // connect_progress
|
||||
NULL, // connected
|
||||
NULL, // disconnected
|
||||
NULL, // notice
|
||||
NULL, // report_disconnect
|
||||
NULL, // network_connected
|
||||
NULL, // network_disconnected
|
||||
NULL, // report_disconnect_reason
|
||||
// padding
|
||||
NULL,
|
||||
NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
static void tdf_init (void) {
|
||||
// This should initialize the UI components for all the modules.
|
||||
purple_connections_set_ui_ops (&connection_uiops);
|
||||
}
|
||||
|
||||
static PurpleCoreUiOps tdf_core_uiops = {
|
||||
NULL,
|
||||
NULL,
|
||||
tdf_init,
|
||||
NULL,
|
||||
// padding
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
PurplePlugin *tgp = NULL;
|
||||
|
||||
static void display_search_paths (GList *elem) {
|
||||
printf ("Search paths:");
|
||||
for (; elem; elem = elem->next) {
|
||||
printf (" %s", (char *)elem->data);
|
||||
}
|
||||
printf ("\n");
|
||||
}
|
||||
|
||||
static void tdf_inject_plugin (void) {
|
||||
printf ("Injecting our module into purple_plugins_* ...\n");
|
||||
purple_plugins_init ();
|
||||
GList *search_paths = purple_plugins_get_search_paths ();
|
||||
assert (!search_paths->prev && !search_paths->next && search_paths->data);
|
||||
GList *new_paths = g_list_append (search_paths, g_strdup ("bin/"));
|
||||
assert (new_paths == search_paths);
|
||||
// Load "my" path before the default.
|
||||
assert (search_paths->next && search_paths->next->data);
|
||||
{
|
||||
// swap(search_paths->data, search_paths->next->data);
|
||||
gchar* tmp = search_paths->data;
|
||||
search_paths->data = search_paths->next->data;
|
||||
search_paths->next->data = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
gboolean tdf_is_in_ci (void) {
|
||||
gchar* envvar = getenv ("CONTINUOUS_INTEGRATION");
|
||||
return envvar && g_str_equal ("true", envvar);
|
||||
}
|
||||
|
||||
static void init_libpurple (void) {
|
||||
// Set a custom user directory (optional)
|
||||
purple_util_set_user_dir ("test/tmp/user");
|
||||
|
||||
// We *do* want debugging. However, this is just too much noise.
|
||||
// Then again, this doesn't hurt if Travis does it. Query the environment to check whether we're in CI or not.
|
||||
purple_debug_set_enabled (tdf_is_in_ci ());
|
||||
|
||||
/* Set the core-uiops, which is used to
|
||||
* - initialize the ui specific preferences.
|
||||
* - initialize the debug ui.
|
||||
* - initialize the ui components for all the modules.
|
||||
* - uninitialize the ui components for all the modules when the core terminates.
|
||||
*/
|
||||
purple_core_set_ui_ops (&tdf_core_uiops);
|
||||
|
||||
// Set the uiops for the eventloop. Since our client is glib-based, you can safely copy this verbatim. */
|
||||
purple_eventloop_set_ui_ops (&tdf_glib_eventloop_ops);
|
||||
|
||||
tdf_inject_plugin ();
|
||||
display_search_paths (purple_plugins_get_search_paths ());
|
||||
|
||||
// Now that all the essential stuff has been set, let's try to init the core.
|
||||
printf ("Enter purple_core_init ...\n");
|
||||
if (!purple_core_init ("tgp-dummy")) {
|
||||
// Initializing the core failed. Terminate.
|
||||
fprintf (stderr, "libpurple initialization failed. Abort.\n");
|
||||
abort ();
|
||||
}
|
||||
printf ("Core initialized.\n");
|
||||
|
||||
// Create and load the buddylist.
|
||||
purple_set_blist (purple_blist_new ());
|
||||
|
||||
// Find our plugin
|
||||
printf ("Checking version:\n");
|
||||
tgp = purple_plugins_find_with_id (PLUGIN_ID);
|
||||
if (!tgp) {
|
||||
printf ("Huh! Can't find plugin! Expected ID \"" PLUGIN_ID "\"");
|
||||
abort ();
|
||||
}
|
||||
|
||||
// Make sure we loaded the correct plugin
|
||||
printf ("This is what we loaded:\n\t\t\tversion: %s\n", tgp->info->version);
|
||||
gchar *pos = g_strrstr (tgp->info->version, "commit: " GIT_COMMIT);
|
||||
if (pos == NULL) {
|
||||
printf ("This is the wrong version, we built for commit %s. Abort!\n", GIT_COMMIT);
|
||||
abort ();
|
||||
} else {
|
||||
printf ("Looks like the right version, because we also expected commit %s.\n", GIT_COMMIT);
|
||||
}
|
||||
}
|
||||
|
||||
//static void signed_on (PurpleConnection *gc) {
|
||||
// PurpleAccount *account = purple_connection_get_account (gc);
|
||||
// printf("Account connected: \"%s\" (%s)\n", purple_account_get_username(account), purple_account_get_protocol_id(account));
|
||||
//}
|
||||
//
|
||||
//static void received_im_msg (PurpleAccount *account, char *sender, char *message, PurpleConversation *conv, PurpleMessageFlags flags) {
|
||||
// if (conv==NULL) {
|
||||
// conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, sender);
|
||||
// }
|
||||
//
|
||||
// printf("(%s) %s (%s): %s\n", purple_utf8_strftime("%H:%M:%S", NULL), sender, purple_conversation_get_name(conv), message);
|
||||
//}
|
||||
//
|
||||
//static void connect_to_signals(void)
|
||||
//{
|
||||
//
|
||||
// static int handle;
|
||||
//
|
||||
// purple_signal_connect(purple_connections_get_handle(), "signed-on", &handle,
|
||||
// PURPLE_CALLBACK(signed_on), NULL);
|
||||
//
|
||||
// purple_signal_connect(purple_conversations_get_handle(), "received-im-msg", &handle,
|
||||
// PURPLE_CALLBACK(received_im_msg), NULL);
|
||||
//
|
||||
//}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
printf ("Running loadtest on %s.\n", argv[1]);
|
||||
GMainLoop *loop = g_main_loop_new(NULL, FALSE);
|
||||
|
||||
/* libpurple's built-in DNS resolution forks processes to perform
|
||||
* blocking lookups without blocking the main process. It does not
|
||||
* handle SIGCHLD itself, so if the UI does not you quickly get an army
|
||||
* of zombie subprocesses marching around.
|
||||
*/
|
||||
signal(SIGCHLD, SIG_IGN);
|
||||
|
||||
printf ("Enter init_libpurple\n");
|
||||
init_libpurple ();
|
||||
printf ("libpurple %s initialized.\n", purple_core_get_version());
|
||||
|
||||
// Since we do not yet do anything useful, simply terminate after a few seconds.
|
||||
purple_timeout_add (2000, purple_core_quit_cb, NULL);
|
||||
g_timeout_add (4000, (GSourceFunc)g_main_loop_quit, loop);
|
||||
|
||||
// connect_to_signals();
|
||||
|
||||
// PurpleAccount *account = purple_account_new("YOUR_IM_ACCOUNTS_USERNAME_HERE", "prpl-IM_NETWORK_HERE"); //this could be prpl-aim, prpl-yahoo, prpl-msn, prpl-icq, etc.
|
||||
// purple_account_set_password(account, "YOUR_IM_ACCOUNTS_PASSWORD_HERE");
|
||||
// purple_accounts_add(account);
|
||||
// purple_account_set_enabled(account, UI_ID, TRUE);
|
||||
|
||||
g_main_loop_run (loop);
|
||||
|
||||
return 0;
|
||||
}
|
46
test/probetest.c
Normal file
46
test/probetest.c
Normal file
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
This file is part of telegram-purple
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
|
||||
|
||||
Copyright Ben Wiederhake 2016
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <purple.h>
|
||||
|
||||
// Just try to probe (pre-load) the plugin. If that's successful, then probably a lot of stuff works.
|
||||
int main (int argc, char **argv) {
|
||||
assert(argc == 2);
|
||||
printf ("Running probetest on %s.\n", argv[1]);
|
||||
PurplePlugin *tgp = purple_plugin_probe (argv[1]);
|
||||
if (!tgp) {
|
||||
printf ("Looks like there was a problem! Aborting.\n");
|
||||
return 1;
|
||||
}
|
||||
printf ("Looks good. Here's what I can read:\n");
|
||||
PurplePluginInfo *info = tgp->info;
|
||||
#define BLURB(x) printf (#x " = %s\n", info->x);
|
||||
BLURB(id)
|
||||
BLURB(name)
|
||||
BLURB(version)
|
||||
BLURB(summary)
|
||||
BLURB(description)
|
||||
BLURB(author)
|
||||
BLURB(homepage)
|
||||
return 0;
|
||||
}
|
2
tgl
2
tgl
|
@ -1 +1 @@
|
|||
Subproject commit 380e4f90e376b0769db4b5f84f8092524a8ef4a4
|
||||
Subproject commit 3ce5b5d856e537fe4693a99c26b5d17f7200f674
|
140
tgp-2prpl.c
140
tgp-2prpl.c
|
@ -15,7 +15,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
|
||||
|
||||
Copyright Matthias Jentsch 2014
|
||||
Copyright Matthias Jentsch, Ben Wiederhake 2014-2015
|
||||
*/
|
||||
|
||||
#include "telegram-purple.h"
|
||||
|
@ -36,6 +36,11 @@ connection_data *tls_get_data (struct tgl_state *TLS) {
|
|||
return TLS->ev_base;
|
||||
}
|
||||
|
||||
int tls_get_media_threshold (struct tgl_state *TLS) {
|
||||
return purple_account_get_int (tls_get_pa (TLS),
|
||||
TGP_KEY_MEDIA_SIZE, TGP_DEFAULT_MEDIA_SIZE) << 10;
|
||||
}
|
||||
|
||||
connection_data *gc_get_data (PurpleConnection *gc) {
|
||||
return purple_connection_get_protocol_data (gc);
|
||||
}
|
||||
|
@ -50,10 +55,10 @@ connection_data *pa_get_data (PurpleAccount *pa) {
|
|||
|
||||
connection_data *pbn_get_data (PurpleBlistNode *node) {
|
||||
if (PURPLE_BLIST_NODE_IS_CHAT (node)) {
|
||||
return pa_get_data (purple_chat_get_account((PurpleChat *) node));
|
||||
return pa_get_data (purple_chat_get_account ((PurpleChat *) node));
|
||||
}
|
||||
if (PURPLE_BLIST_NODE_IS_BUDDY (node)) {
|
||||
return pa_get_data (purple_buddy_get_account((PurpleBuddy *) node));
|
||||
return pa_get_data (purple_buddy_get_account ((PurpleBuddy *) node));
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
@ -63,28 +68,39 @@ int p2tgl_status_is_present (PurpleStatus *status) {
|
|||
return !(strcmp (name, "unavailable") == 0 || strcmp (name, "away") == 0);
|
||||
}
|
||||
|
||||
void p2tgl_got_chat_in (struct tgl_state *TLS, tgl_peer_id_t chat, tgl_peer_id_t who, const char *message, int flags,
|
||||
time_t when) {
|
||||
serv_got_chat_in (tls_get_conn (TLS), tgl_get_peer_id (chat), tgp_blist_lookup_purple_name (TLS, who), flags,
|
||||
message, when);
|
||||
void tgp_chat_got_in (struct tgl_state *TLS, tgl_peer_t *chat, tgl_peer_id_t from, const char *message,
|
||||
int flags, time_t when) {
|
||||
g_return_if_fail(chat);
|
||||
if (tgp_chat_show (TLS, chat)) {
|
||||
|
||||
// channel messages in non-megagroups are always sent by the channel itself
|
||||
if (tgl_get_peer_type (chat->id) == TGL_PEER_CHANNEL && !(chat->channel.flags & TGLCHF_MEGAGROUP)) {
|
||||
from = chat->id;
|
||||
}
|
||||
|
||||
serv_got_chat_in (tls_get_conn (TLS), tgl_get_peer_id (chat->id), tgp_blist_lookup_purple_name (TLS, from),
|
||||
flags, message, when);
|
||||
} else {
|
||||
g_warn_if_reached();
|
||||
}
|
||||
}
|
||||
|
||||
void p2tgl_got_im_combo (struct tgl_state *TLS, tgl_peer_id_t who, const char *msg, int flags, time_t when) {
|
||||
connection_data *conn = TLS->ev_base;
|
||||
|
||||
if (flags & PURPLE_MESSAGE_SYSTEM) {
|
||||
tgp_msg_sys_out (TLS, msg, who, flags & PURPLE_MESSAGE_NO_LOG);
|
||||
tgp_msg_special_out (TLS, msg, who, flags & PURPLE_MESSAGE_NO_LOG);
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
Outgoing messages are not well supported in different libpurple clients,
|
||||
purple_conv_im_write should have the best among different versions. Unfortunately
|
||||
this causes buggy formatting in Adium, so we don't use this workaround in that case.
|
||||
Outgoing messages are not well supported in different libpurple clients,
|
||||
purple_conv_im_write should have the best among different versions. Unfortunately
|
||||
this causes buggy formatting in Adium, so we don't use this workaround in that case.
|
||||
|
||||
NOTE: Outgoing messages will not work in Adium <= 1.6.0, there is no way to print outgoing
|
||||
messages in those versions at all.
|
||||
*/
|
||||
NOTE: Outgoing messages will not work in Adium <= 1.6.0, there is no way to print outgoing
|
||||
messages in those versions at all.
|
||||
*/
|
||||
#ifndef __ADIUM_
|
||||
if (flags & PURPLE_MESSAGE_SEND) {
|
||||
PurpleConversation *conv = p2tgl_find_conversation_with_account (TLS, who);
|
||||
|
@ -102,11 +118,11 @@ void p2tgl_got_im_combo (struct tgl_state *TLS, tgl_peer_id_t who, const char *m
|
|||
|
||||
PurpleConversation *p2tgl_find_conversation_with_account (struct tgl_state *TLS, tgl_peer_id_t peer) {
|
||||
int type = PURPLE_CONV_TYPE_IM;
|
||||
if (tgl_get_peer_type (peer) == TGL_PEER_CHAT) {
|
||||
if (tgl_get_peer_type (peer) == TGL_PEER_CHAT || tgl_get_peer_type (peer) == TGL_PEER_CHANNEL) {
|
||||
type = PURPLE_CONV_TYPE_CHAT;
|
||||
}
|
||||
PurpleConversation *conv = purple_find_conversation_with_account (type, tgp_blist_lookup_purple_name (TLS, peer),
|
||||
tls_get_pa (TLS));
|
||||
PurpleConversation *conv = purple_find_conversation_with_account (type,
|
||||
tgp_blist_lookup_purple_name (TLS, peer), tls_get_pa (TLS));
|
||||
return conv;
|
||||
}
|
||||
|
||||
|
@ -118,7 +134,7 @@ void p2tgl_prpl_got_user_status (struct tgl_state *TLS, tgl_peer_id_t user, stru
|
|||
} else {
|
||||
debug ("%d: when=%d", tgl_get_peer_id (user), status->when);
|
||||
if (tgp_time_n_days_ago (
|
||||
purple_account_get_int (data->pa, "inactive-days-offline", TGP_DEFAULT_INACTIVE_DAYS_OFFLINE)) > status->when && status->when) {
|
||||
purple_account_get_int (data->pa, TGP_KEY_INACTIVE_DAYS_OFFLINE, TGP_DEFAULT_INACTIVE_DAYS_OFFLINE)) > status->when && status->when) {
|
||||
debug ("offline");
|
||||
purple_prpl_got_user_status (tls_get_pa (TLS), tgp_blist_lookup_purple_name (TLS, user), "offline", NULL);
|
||||
} else {
|
||||
|
@ -135,81 +151,6 @@ void p2tgl_conv_add_user (struct tgl_state *TLS, PurpleConversation *conv, int u
|
|||
purple_conv_chat_add_user (purple_conversation_get_chat_data (conv), name, message, flags, new_arrival);
|
||||
}
|
||||
|
||||
PurpleNotifyUserInfo *p2tgl_notify_user_info_new (struct tgl_user *U) {
|
||||
PurpleNotifyUserInfo *info = purple_notify_user_info_new();
|
||||
|
||||
if (str_not_empty (U->first_name) && str_not_empty (U->last_name)) {
|
||||
purple_notify_user_info_add_pair (info, _("First name"), U->first_name);
|
||||
purple_notify_user_info_add_pair (info, _("Last name"), U->last_name);
|
||||
} else {
|
||||
purple_notify_user_info_add_pair (info, _("Name"), U->print_name);
|
||||
}
|
||||
|
||||
if (str_not_empty (U->username)) {
|
||||
char *username = g_strdup_printf ("@%s", U->username);
|
||||
purple_notify_user_info_add_pair (info, _("Username"), username);
|
||||
g_free (username);
|
||||
}
|
||||
|
||||
char *status = tgp_format_user_status (&U->status);
|
||||
purple_notify_user_info_add_pair (info, _("Last seen"), status);
|
||||
g_free (status);
|
||||
|
||||
if (str_not_empty (U->phone)) {
|
||||
char *phone = g_strdup_printf ("+%s", U->phone);
|
||||
purple_notify_user_info_add_pair (info, _("Phone"), phone);
|
||||
g_free (phone);
|
||||
}
|
||||
|
||||
return info;
|
||||
}
|
||||
|
||||
PurpleNotifyUserInfo *p2tgl_notify_encrypted_chat_info_new (struct tgl_state *TLS, struct tgl_secret_chat *secret,
|
||||
struct tgl_user *U) {
|
||||
PurpleNotifyUserInfo *info = p2tgl_notify_user_info_new (U);
|
||||
|
||||
if (secret->state == sc_waiting) {
|
||||
purple_notify_user_info_add_pair (info, "", _("Waiting for the user to get online..."));
|
||||
return info;
|
||||
}
|
||||
|
||||
const char *ttl_key = _("Self destruction timer");
|
||||
if (secret->ttl) {
|
||||
char *ttl = g_strdup_printf ("%d", secret->ttl);
|
||||
purple_notify_user_info_add_pair (info, ttl_key, ttl);
|
||||
g_free (ttl);
|
||||
} else {
|
||||
purple_notify_user_info_add_pair (info, ttl_key, _("Timer is not enabled."));
|
||||
}
|
||||
|
||||
if (secret->first_key_sha[0]) {
|
||||
int sha1key_store_id = tgp_visualize_key (TLS, secret->first_key_sha);
|
||||
if (sha1key_store_id != -1) {
|
||||
char *ident_icon = tgp_format_img (sha1key_store_id);
|
||||
purple_notify_user_info_add_pair (info, _("Secret key"), ident_icon);
|
||||
g_free(ident_icon);
|
||||
}
|
||||
}
|
||||
|
||||
return info;
|
||||
}
|
||||
|
||||
PurpleNotifyUserInfo *p2tgl_notify_peer_info_new (struct tgl_state *TLS, tgl_peer_t *P) {
|
||||
switch (tgl_get_peer_type (P->id)) {
|
||||
case TGL_PEER_ENCR_CHAT: {
|
||||
struct tgl_secret_chat *chat = &P->encr_chat;
|
||||
tgl_peer_t *partner = tgp_encr_chat_get_partner (TLS, chat);
|
||||
return p2tgl_notify_encrypted_chat_info_new (TLS, chat, &partner->user);
|
||||
}
|
||||
|
||||
case TGL_PEER_USER:
|
||||
return p2tgl_notify_user_info_new (&P->user);
|
||||
|
||||
default:
|
||||
return purple_notify_user_info_new ();
|
||||
}
|
||||
}
|
||||
|
||||
int p2tgl_imgstore_add_with_id (const char* filename) {
|
||||
gchar *data = NULL;
|
||||
size_t len;
|
||||
|
@ -259,7 +200,7 @@ int p2tgl_imgstore_add_with_id_webp (const char *filename) {
|
|||
// downscale oversized sticker images displayed in chat, otherwise it would harm readabillity
|
||||
WebPDecoderConfig config;
|
||||
WebPInitDecoderConfig (&config);
|
||||
if (! WebPGetFeatures(data, len, &config.input) == VP8_STATUS_OK) {
|
||||
if (WebPGetFeatures(data, len, &config.input) != VP8_STATUS_OK) {
|
||||
warning ("error reading webp bitstream: %s", filename);
|
||||
g_free ((gchar *)data);
|
||||
return 0;
|
||||
|
@ -287,7 +228,7 @@ int p2tgl_imgstore_add_with_id_webp (const char *filename) {
|
|||
config.options.use_scaling = 1;
|
||||
}
|
||||
config.output.colorspace = MODE_BGRA;
|
||||
if (! WebPDecode(data, len, &config) == VP8_STATUS_OK) {
|
||||
if (WebPDecode(data, len, &config) != VP8_STATUS_OK) {
|
||||
warning ("error decoding webp: %s", filename);
|
||||
g_free ((gchar *)data);
|
||||
return 0;
|
||||
|
@ -301,12 +242,3 @@ int p2tgl_imgstore_add_with_id_webp (const char *filename) {
|
|||
return imgStoreId;
|
||||
}
|
||||
#endif
|
||||
|
||||
void p2tgl_buddy_icons_set_for_user (PurpleAccount *pa, tgl_peer_id_t id, const char* filename) {
|
||||
gchar *data = NULL;
|
||||
size_t len;
|
||||
GError *err = NULL;
|
||||
g_file_get_contents (filename, &data, &len, &err);
|
||||
purple_buddy_icons_set_for_user (pa, tgp_blist_lookup_purple_name (pa_get_data (pa)->TLS, id), data, len, NULL);
|
||||
}
|
||||
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
PurpleAccount *tls_get_pa (struct tgl_state *TLS);
|
||||
PurpleConnection *tls_get_conn (struct tgl_state *TLS);
|
||||
connection_data *tls_get_data (struct tgl_state *TLS);
|
||||
int tls_get_media_threshold (struct tgl_state *TLS);
|
||||
connection_data *gc_get_data (PurpleConnection *gc);
|
||||
connection_data *pa_get_data (PurpleAccount *pa);
|
||||
connection_data *pbn_get_data (PurpleBlistNode *node);
|
||||
|
@ -34,17 +35,13 @@ struct tgl_state *gc_get_tls (PurpleConnection *gc);
|
|||
|
||||
int p2tgl_status_is_present (PurpleStatus *status);
|
||||
|
||||
void p2tgl_got_chat_in (struct tgl_state *TLS, tgl_peer_id_t chat, tgl_peer_id_t who, const char *message, int flags, time_t when);
|
||||
void tgp_chat_got_in (struct tgl_state *TLS, tgl_peer_t *chat, tgl_peer_id_t who, const char *message, int flags, time_t when);
|
||||
void p2tgl_got_im_combo (struct tgl_state *TLS, tgl_peer_id_t who, const char *msg, int flags, time_t when);
|
||||
void p2tgl_prpl_got_user_status (struct tgl_state *TLS, tgl_peer_id_t user, struct tgl_user_status *status);
|
||||
void p2tgl_conv_add_user (struct tgl_state *TLS, PurpleConversation *conv, int user, char *message, int flags, int new_arrival);
|
||||
PurpleConversation *p2tgl_find_conversation_with_account (struct tgl_state *TLS, tgl_peer_id_t peer);
|
||||
PurpleNotifyUserInfo *p2tgl_notify_peer_info_new (struct tgl_state *TLS, tgl_peer_t *P);
|
||||
PurpleNotifyUserInfo *p2tgl_notify_user_info_new (struct tgl_user *U);
|
||||
PurpleNotifyUserInfo *p2tgl_notify_encrypted_chat_info_new (struct tgl_state *TLS, struct tgl_secret_chat *secret, struct tgl_user *U);
|
||||
int p2tgl_imgstore_add_with_id (const char* filename);
|
||||
void p2tgl_buddy_icons_set_for_user (PurpleAccount *pa, tgl_peer_id_t id, const char* filename);
|
||||
|
||||
int p2tgl_imgstore_add_with_id (const char* filename);
|
||||
int p2tgl_imgstore_add_with_id_raw (const unsigned char *raw_rgba, unsigned width, unsigned height);
|
||||
#ifdef HAVE_LIBWEBP
|
||||
int p2tgl_imgstore_add_with_id_webp (const char *filename);
|
||||
|
|
57
tgp-blist.c
57
tgp-blist.c
|
@ -1,4 +1,5 @@
|
|||
/* This file is part of telegram-purple
|
||||
/*
|
||||
This file is part of telegram-purple
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
|
@ -102,15 +103,14 @@ PurpleBuddy *tgp_blist_buddy_migrate (struct tgl_state *TLS, PurpleBuddy *buddy,
|
|||
purple_blist_remove_buddy (buddy);
|
||||
buddy = purple_buddy_new (tls_get_pa (TLS), user->print_name, NULL);
|
||||
tgp_blist_buddy_set_id (buddy, user->id);
|
||||
purple_blist_add_buddy (buddy, NULL, tgp_blist_group_init ("Telegram"), NULL);
|
||||
purple_blist_add_buddy (buddy, NULL, tgp_blist_group_init (_("Telegram")), NULL);
|
||||
return buddy;
|
||||
}
|
||||
|
||||
void tgp_blist_buddy_set_id (PurpleBuddy *buddy, tgl_peer_id_t id) {
|
||||
int uid = tgl_get_peer_id (id),
|
||||
type = tgl_get_peer_type (id);
|
||||
assert (type == TGL_PEER_ENCR_CHAT || type == TGL_PEER_USER);
|
||||
|
||||
assert (type == TGL_PEER_ENCR_CHAT || type == TGL_PEER_USER || type == TGL_PEER_CHANNEL);
|
||||
purple_blist_node_set_int (&buddy->node, TGP_BUDDY_KEY_PEER_ID, uid);
|
||||
purple_blist_node_set_int (&buddy->node, TGP_BUDDY_KEY_PEER_TYPE, type);
|
||||
}
|
||||
|
@ -122,11 +122,12 @@ int tgp_blist_buddy_has_id (PurpleBuddy *buddy) {
|
|||
tgl_peer_id_t tgp_blist_buddy_get_id (PurpleBuddy *buddy) {
|
||||
int id = purple_blist_node_get_int (&buddy->node, TGP_BUDDY_KEY_PEER_ID),
|
||||
type = purple_blist_node_get_int (&buddy->node, TGP_BUDDY_KEY_PEER_TYPE);
|
||||
|
||||
if (type == TGL_PEER_USER) {
|
||||
return TGL_MK_USER (id);
|
||||
} else if (type == TGL_PEER_ENCR_CHAT) {
|
||||
return TGL_MK_ENCR_CHAT (id);
|
||||
} else if (type == TGL_PEER_CHANNEL) {
|
||||
return TGL_MK_CHANNEL (id);
|
||||
} else {
|
||||
return tgl_set_peer_id (TGL_PEER_UNKNOWN, 0);
|
||||
}
|
||||
|
@ -149,6 +150,23 @@ PurpleBuddy *tgp_blist_buddy_find (struct tgl_state *TLS, tgl_peer_id_t user) {
|
|||
return (PurpleBuddy *) tgp_blist_iterate (TLS, tgp_blist_buddy_find_cb, GINT_TO_POINTER(tgl_get_peer_id (user)));
|
||||
}
|
||||
|
||||
// contacts
|
||||
|
||||
void tgp_blist_contact_add (struct tgl_state *TLS, struct tgl_user *U) {
|
||||
PurpleBuddy *buddy = tgp_blist_buddy_find (TLS, U->id);
|
||||
|
||||
if (! buddy) {
|
||||
tgl_peer_t *P = tgl_peer_get (TLS, U->id);
|
||||
|
||||
info ("Adding contact '%s' to buddy list", tgp_blist_lookup_purple_name (TLS, U->id));
|
||||
buddy = tgp_blist_buddy_new (TLS, P);
|
||||
purple_blist_add_buddy (buddy, NULL, tgp_blist_group_init (_("Telegram")), NULL);
|
||||
|
||||
tgp_info_update_photo (&buddy->node, P);
|
||||
}
|
||||
p2tgl_prpl_got_user_status (TLS, U->id, &U->status);
|
||||
}
|
||||
|
||||
// chats
|
||||
|
||||
static int tgp_blist_chat_find_cb (PurpleBlistNode *node, void *extra) {
|
||||
|
@ -170,24 +188,25 @@ PurpleChat *tgp_blist_chat_find (struct tgl_state *TLS, tgl_peer_id_t user) {
|
|||
|
||||
PurpleGroup *tgp_blist_group_init (const char *name) {
|
||||
PurpleGroup *grp = purple_find_group (name);
|
||||
if (grp == NULL) {
|
||||
if (! grp) {
|
||||
grp = purple_group_new (name);
|
||||
purple_blist_add_group (grp, NULL);
|
||||
}
|
||||
return grp;
|
||||
}
|
||||
|
||||
|
||||
// names
|
||||
|
||||
char *tgp_blist_create_print_name (struct tgl_state *TLS, tgl_peer_id_t id, const char *a1, const char *a2,
|
||||
const char *a3, const char *a4) {
|
||||
|
||||
|
||||
// libtgl passes 0 for all unused strings, therefore the last passed string will always be followed
|
||||
// by a NULL-termination as expected
|
||||
gchar *name = g_strjoin (" ", a1, a2, a3, a4, NULL);
|
||||
|
||||
|
||||
// When the user doesn't provide some input (like last name) ugly trailing or leading
|
||||
// whitespaces may occur due to empty strings in the join operator
|
||||
// whitespaces may occur due to empty strings in the g_strjoin arguments
|
||||
name = g_strstrip(name);
|
||||
|
||||
/* Assure that all print_names are unique by checking the following conditions:
|
||||
|
@ -196,17 +215,34 @@ char *tgp_blist_create_print_name (struct tgl_state *TLS, tgl_peer_id_t id, cons
|
|||
2. No BlistNode with that name should exists unless it is already corresponding to this peer ID. The rationale is
|
||||
that this prpl uses the first print_name as permanent name for each user. Therefore it must be assured that no
|
||||
foreign user will ever take this exact name again, otherwise the current users actions might be associated
|
||||
with the old BlistNode. */
|
||||
with the old BlistNode.
|
||||
3. Assure that the print name isn't already stored in the peer_by_name_tree.
|
||||
*/
|
||||
int i = 0;
|
||||
gchar *n = NULL;
|
||||
|
||||
tgl_peer_id_t *id2 = tgp_blist_lookup_get_id (TLS, name);
|
||||
if ( !id2) {
|
||||
tgl_peer_t *tmpP = tgl_peer_get_by_name (TLS, name);
|
||||
if (tmpP) {
|
||||
id2 = &tmpP->id;
|
||||
}
|
||||
}
|
||||
|
||||
while (id2 && tgl_get_peer_id (*id2) != tgl_get_peer_id (id)) {
|
||||
if (n) {
|
||||
g_free (n);
|
||||
}
|
||||
n = g_strdup_printf ("%s #%d", name, ++ i);
|
||||
debug ("resolving duplicate for %s, assigning: %s", name, n);
|
||||
|
||||
id2 = tgp_blist_lookup_get_id (TLS, n);
|
||||
if ( !id2) {
|
||||
tgl_peer_t *tmpP = tgl_peer_get_by_name(TLS, n);
|
||||
if (tmpP) {
|
||||
id2 = &tmpP->id;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (n) {
|
||||
g_free (name);
|
||||
|
@ -218,4 +254,3 @@ char *tgp_blist_create_print_name (struct tgl_state *TLS, tgl_peer_id_t id, cons
|
|||
g_free (name);
|
||||
return S;
|
||||
}
|
||||
|
||||
|
|
|
@ -51,6 +51,9 @@ tgl_peer_t *tgp_blist_buddy_get_peer (PurpleBuddy *peer);
|
|||
PurpleBuddy *tgp_blist_buddy_new (struct tgl_state *TLS, tgl_peer_t *user);
|
||||
PurpleBuddy *tgp_blist_buddy_migrate (struct tgl_state *TLS, PurpleBuddy *buddy, struct tgl_user *user);
|
||||
PurpleBuddy *tgp_blist_buddy_find (struct tgl_state *TLS, tgl_peer_id_t user);
|
||||
|
||||
void tgp_blist_contact_add (struct tgl_state *TLS, struct tgl_user *U);
|
||||
|
||||
PurpleChat *tgp_blist_chat_find (struct tgl_state *TLS, tgl_peer_id_t user);
|
||||
PurpleGroup *tgp_blist_group_init (const char *name);
|
||||
|
||||
|
|
545
tgp-chat.c
545
tgp-chat.c
|
@ -15,52 +15,87 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
|
||||
|
||||
Copyright Matthias Jentsch 2014-2015
|
||||
Copyright Matthias Jentsch, Ben Wiederhake 2014-2016
|
||||
*/
|
||||
|
||||
#include "tgp-chat.h"
|
||||
|
||||
GHashTable *tgp_chat_info_new (struct tgl_state *TLS, struct tgl_chat *chat) {
|
||||
gchar *title = g_strdup (chat->print_title);
|
||||
|
||||
GHashTable *ht = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_free);
|
||||
g_hash_table_insert (ht, "subject", title);
|
||||
g_hash_table_insert (ht, "id", g_strdup_printf ("%d", tgl_get_peer_id (chat->id)));
|
||||
|
||||
GHashTable *tgp_chat_info_new (struct tgl_state *TLS, tgl_peer_t *P) {
|
||||
// libpurple chat components own the keys and the values when created from blist be consistent
|
||||
GHashTable *ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
|
||||
g_hash_table_insert (ht, g_strdup ("subject"), g_strdup (P->print_name));
|
||||
g_hash_table_insert (ht, g_strdup ("id"), g_strdup_printf ("%d", tgl_get_peer_id (P->id)));
|
||||
g_hash_table_insert (ht, g_strdup ("type"), g_strdup_printf ("%d", tgl_get_peer_type (P->id)));
|
||||
if (tgl_get_peer_type (P->id) == TGL_PEER_CHANNEL) {
|
||||
g_hash_table_insert (ht, g_strdup ("last_server_id"), g_strdup_printf ("%d", 0));
|
||||
}
|
||||
return ht;
|
||||
}
|
||||
|
||||
PurpleChat *p2tgl_chat_new (struct tgl_state *TLS, struct tgl_chat *chat) {
|
||||
return purple_chat_new (tls_get_pa (TLS), chat->title, tgp_chat_info_new (TLS, chat));
|
||||
}
|
||||
|
||||
void p2tgl_chat_update (struct tgl_state *TLS, PurpleChat *chat, tgl_peer_id_t id, int admin_id, const char *subject) {
|
||||
GHashTable *ht = purple_chat_get_components (chat);
|
||||
|
||||
g_hash_table_replace (ht, g_strdup ("id"), g_strdup_printf ("%d", tgl_get_peer_id (id)));
|
||||
g_hash_table_replace (ht, g_strdup ("subject"), g_strdup (subject));
|
||||
}
|
||||
|
||||
int tgp_chat_has_id (PurpleChat *C) {
|
||||
const char *id = g_hash_table_lookup (purple_chat_get_components (C), "id");
|
||||
return id && *id;
|
||||
}
|
||||
|
||||
tgl_peer_id_t tgp_chat_get_id (PurpleChat *C) {
|
||||
const char *id = g_hash_table_lookup (purple_chat_get_components (C), "id");
|
||||
assert (id && *id);
|
||||
return TGL_MK_CHAT(atoi (id));
|
||||
const char *I = g_hash_table_lookup (purple_chat_get_components (C), "id");
|
||||
const char *T = g_hash_table_lookup (purple_chat_get_components (C), "type");
|
||||
int type = TGL_PEER_CHAT;
|
||||
if (T && *T) {
|
||||
type = atoi (T);
|
||||
}
|
||||
return tgl_set_peer_id (type, (I && *I) ? atoi (I) : 0);
|
||||
}
|
||||
|
||||
void tgp_chat_on_loaded_chat_full (struct tgl_state *TLS, struct tgl_chat *C) {
|
||||
PurpleChat *PC = tgp_blist_chat_find (TLS, C->id);
|
||||
if (!PC) {
|
||||
PC = p2tgl_chat_new (TLS, C);
|
||||
if (purple_account_get_bool (tls_get_pa (TLS), TGP_KEY_JOIN_GROUP_CHATS, TGP_DEFAULT_JOIN_GROUP_CHATS)) {
|
||||
purple_blist_add_chat (PC, tgp_blist_group_init ("Telegram Chats"), NULL);
|
||||
void tgp_chat_set_last_server_id (struct tgl_state *TLS, tgl_peer_id_t chat, int id) {
|
||||
info ("setting channel message server_id=d%", id);
|
||||
|
||||
char *key = g_strdup_printf ("last-server-id/%d", tgl_get_peer_id (chat));
|
||||
purple_account_set_int (tls_get_pa (TLS), key, id);
|
||||
g_free (key);
|
||||
}
|
||||
|
||||
int tgp_chat_get_last_server_id (struct tgl_state *TLS, tgl_peer_id_t chat) {
|
||||
char *key = g_strdup_printf ("last-server-id/%d", tgl_get_peer_id (chat));
|
||||
int last = purple_account_get_int (tls_get_pa (TLS), key, 0);
|
||||
g_free (key);
|
||||
|
||||
return (unsigned int) last;
|
||||
}
|
||||
|
||||
PurpleChat *tgp_chat_blist_store (struct tgl_state *TLS, tgl_peer_t *P, const char *group) {
|
||||
g_return_val_if_fail(tgl_get_peer_type (P->id) == TGL_PEER_CHAT || tgl_get_peer_type (P->id) == TGL_PEER_CHANNEL, NULL);
|
||||
|
||||
PurpleChat *PC = tgp_blist_chat_find (TLS, P->id);
|
||||
if (! (P->flags & TGLCF_LEFT)) {
|
||||
if (! PC) {
|
||||
PC = purple_chat_new (tls_get_pa (TLS), P->chat.print_title, tgp_chat_info_new (TLS, P));
|
||||
// adding chats to the blist in Adium would cause the bookmarks and auto-joins to fail,
|
||||
// as Adium assumes that a chat existing in blist means the user already joined
|
||||
#ifndef __ADIUM_
|
||||
if (purple_account_get_bool (tls_get_pa (TLS), TGP_KEY_JOIN_GROUP_CHATS, TGP_DEFAULT_JOIN_GROUP_CHATS)) {
|
||||
purple_blist_add_chat (PC, tgp_blist_group_init (group), NULL);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
tgp_info_update_photo (&PC->node, tgl_peer_get (TLS, P->id));
|
||||
} else {
|
||||
if (PC) {
|
||||
purple_blist_remove_chat (PC);
|
||||
PC = NULL;
|
||||
}
|
||||
}
|
||||
p2tgl_chat_update (TLS, PC, C->id, C->admin_id, C->print_title);
|
||||
|
||||
if (PC) {
|
||||
g_hash_table_replace (purple_chat_get_components (PC), g_strdup ("id"),
|
||||
g_strdup_printf ("%d", tgl_get_peer_id (P->id)));
|
||||
g_hash_table_replace (purple_chat_get_components (PC), g_strdup ("type"),
|
||||
g_strdup_printf ("%d", tgl_get_peer_type (P->id)));
|
||||
g_hash_table_replace (purple_chat_get_components (PC), g_strdup ("subject"),
|
||||
g_strdup (tgl_get_peer_type (P->id) == TGL_PEER_CHANNEL ? P->channel.title : P->chat.title));
|
||||
}
|
||||
|
||||
return PC;
|
||||
}
|
||||
|
||||
static void tgp_chat_on_loaded_chat_full_joining (struct tgl_state *TLS, void *_, int success, struct tgl_chat *C) {
|
||||
|
@ -70,58 +105,191 @@ static void tgp_chat_on_loaded_chat_full_joining (struct tgl_state *TLS, void *_
|
|||
return;
|
||||
}
|
||||
|
||||
tgp_chat_on_loaded_chat_full (TLS, C);
|
||||
tgp_chat_show (TLS, C);
|
||||
|
||||
tgp_chat_blist_store (TLS, tgl_peer_get (TLS, C->id), _("Telegram Chats"));
|
||||
tgp_chat_show (TLS, tgl_peer_get (TLS, C->id));
|
||||
|
||||
// Check if the users attempts to join an empty chat
|
||||
if (! C->user_list_size) {
|
||||
p2tgl_got_chat_in (TLS, C->id, C->id, _("You have already left this chat."), PURPLE_MESSAGE_SYSTEM, time (NULL));
|
||||
if (C->flags & TGLCF_LEFT) {
|
||||
tgp_chat_got_in (TLS, tgl_peer_get (TLS, C->id), C->id, _("You have already left this chat."), PURPLE_MESSAGE_SYSTEM,
|
||||
time (NULL));
|
||||
}
|
||||
}
|
||||
|
||||
static void tgp_chat_add_all_users (struct tgl_state *TLS, PurpleConversation *conv, struct tgl_chat *C) {
|
||||
static void tgp_chat_on_loaded_channel_full_joining (struct tgl_state *TLS, void *extra, int success, tgl_peer_t *P) {
|
||||
debug ("tgp_chat_on_loaded_channel_full_joining()");
|
||||
if (! success) {
|
||||
tgp_notify_on_error_gw (TLS, NULL, success);
|
||||
return;
|
||||
}
|
||||
tgp_chat_blist_store (TLS, P, _("Telegram Channels"));
|
||||
tgp_chat_show (TLS, P);
|
||||
}
|
||||
|
||||
static void tgp_chat_add_all_users (struct tgl_state *TLS, PurpleConversation *conv, tgl_peer_t *P) {
|
||||
debug ("tgp_chat_add_all_users()");
|
||||
|
||||
GList *users = NULL,
|
||||
*flags = NULL;
|
||||
debug ("tgp_chat_add_all_users()");
|
||||
|
||||
int i = 0;
|
||||
for (; i < C->user_list_size; i++) {
|
||||
struct tgl_chat_user *uid = (C->user_list + i);
|
||||
const char *name = tgp_blist_lookup_purple_name (TLS, TGL_MK_USER(uid->user_id));
|
||||
if (! name) {
|
||||
g_warn_if_reached();
|
||||
continue;
|
||||
|
||||
switch (tgl_get_peer_type (P->id)) {
|
||||
case TGL_PEER_CHAT: {
|
||||
struct tgl_chat *C = &P->chat;
|
||||
|
||||
int i;
|
||||
for (i = 0; i < C->user_list_size; i ++) {
|
||||
struct tgl_chat_user *uid = (C->user_list + i);
|
||||
const char *name = tgp_blist_lookup_purple_name (TLS, TGL_MK_USER(uid->user_id));
|
||||
if (name) {
|
||||
users = g_list_append (users, g_strdup (name));
|
||||
flags = g_list_append (flags, GINT_TO_POINTER(C->admin_id == uid->user_id ? PURPLE_CBFLAGS_FOUNDER : PURPLE_CBFLAGS_NONE));
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
users = g_list_append (users, g_strdup (name));
|
||||
flags = g_list_append (flags, GINT_TO_POINTER(C->admin_id == uid->user_id ? PURPLE_CBFLAGS_FOUNDER : PURPLE_CBFLAGS_NONE));
|
||||
|
||||
case TGL_PEER_CHANNEL: {
|
||||
// fetch users
|
||||
GList *MS = g_hash_table_lookup (tls_get_data (TLS)->channel_members, GINT_TO_POINTER(tgl_get_peer_id (P->id)));
|
||||
|
||||
while (MS) {
|
||||
struct tgp_channel_member *M = MS->data;
|
||||
const char *name = tgp_blist_lookup_purple_name (TLS, M->id);
|
||||
if (name) {
|
||||
users = g_list_append (users, g_strdup (name));
|
||||
flags = g_list_append (flags, GINT_TO_POINTER(M->flags));
|
||||
}
|
||||
MS = g_list_next (MS);
|
||||
};
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
g_return_if_reached();
|
||||
break;
|
||||
}
|
||||
|
||||
purple_conv_chat_add_users (PURPLE_CONV_CHAT(conv), users, NULL, flags, FALSE);
|
||||
g_list_free_full (users, g_free);
|
||||
tgp_g_list_free_full (users, g_free);
|
||||
g_list_free (flags);
|
||||
}
|
||||
|
||||
PurpleConversation *tgp_chat_show (struct tgl_state *TLS, struct tgl_chat *C) {
|
||||
PurpleConversation *tgp_chat_show (struct tgl_state *TLS, tgl_peer_t *P) {
|
||||
PurpleConvChat *chat = NULL;
|
||||
|
||||
// check if chat is already shown
|
||||
PurpleConversation *conv = purple_find_chat (tls_get_conn (TLS), tgl_get_peer_id (C->id));
|
||||
PurpleConversation *conv = purple_find_chat (tls_get_conn (TLS), tgl_get_peer_id (P->id));
|
||||
if (conv) {
|
||||
chat = purple_conversation_get_chat_data (conv);
|
||||
if (chat && ! purple_conv_chat_has_left (chat)) {
|
||||
return conv;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// join the chat now
|
||||
conv = serv_got_joined_chat (tls_get_conn (TLS), tgl_get_peer_id (C->id), C->print_title);
|
||||
const char *name = NULL;
|
||||
if (tgl_get_peer_type (P->id) == TGL_PEER_CHAT) {
|
||||
name = P->chat.print_title;
|
||||
} else if (tgl_get_peer_type (P->id) == TGL_PEER_CHANNEL) {
|
||||
name = P->channel.print_title;
|
||||
}
|
||||
g_return_val_if_fail(name, NULL);
|
||||
|
||||
conv = serv_got_joined_chat (tls_get_conn (TLS), tgl_get_peer_id (P->id), name);
|
||||
g_return_val_if_fail(conv, NULL);
|
||||
|
||||
|
||||
purple_conv_chat_clear_users (purple_conversation_get_chat_data (conv));
|
||||
tgp_chat_add_all_users (TLS, conv, C);
|
||||
|
||||
tgp_chat_add_all_users (TLS, conv, P);
|
||||
|
||||
return conv;
|
||||
}
|
||||
|
||||
int tgprpl_send_chat (PurpleConnection *gc, int id, const char *message, PurpleMessageFlags flags) {
|
||||
debug ("tgprpl_send_chat()");
|
||||
|
||||
tgl_peer_t *P = tgl_peer_get (gc_get_tls (gc), TGL_MK_CHAT(id));
|
||||
if (! P) {
|
||||
P = tgl_peer_get (gc_get_tls (gc), TGL_MK_CHANNEL(id));
|
||||
}
|
||||
g_return_val_if_fail(P != NULL, -1);
|
||||
|
||||
// when the group receives a message it is obvious that the previous messages were read
|
||||
pending_reads_send_user (gc_get_tls (gc), P->id);
|
||||
|
||||
return tgp_msg_send (gc_get_tls (gc), message, P->id);
|
||||
}
|
||||
|
||||
unsigned int tgprpl_send_chat_typing (PurpleConversation *conv, PurpleTypingState typing, gpointer ignored)
|
||||
{
|
||||
PurpleConnection *gc = purple_conversation_get_gc (conv);
|
||||
tgl_peer_t *P;
|
||||
PurpleConvChat *chat;
|
||||
int id;
|
||||
|
||||
if (!PURPLE_CONNECTION_IS_CONNECTED (gc))
|
||||
return 0;
|
||||
|
||||
if (g_strcmp0(purple_plugin_get_id (purple_connection_get_prpl (gc)), PLUGIN_ID))
|
||||
return 0;
|
||||
|
||||
debug ("tgprpl_send_chat_typing()");
|
||||
|
||||
chat = purple_conversation_get_chat_data (conv);
|
||||
id = purple_conv_chat_get_id (chat);
|
||||
|
||||
P = tgl_peer_get (gc_get_tls (gc), TGL_MK_CHAT(id));
|
||||
if (! P) {
|
||||
P = tgl_peer_get (gc_get_tls (gc), TGL_MK_CHANNEL(id));
|
||||
}
|
||||
g_return_val_if_fail(P != NULL, -1);
|
||||
|
||||
tgl_do_send_typing (gc_get_tls (gc), P->id, typing == PURPLE_TYPING ? tgl_typing_typing : tgl_typing_cancel,
|
||||
0, 0);
|
||||
|
||||
// when the group receives a typing notification it is obvious that the previous messages were read
|
||||
pending_reads_send_user (gc_get_tls (gc), P->id);
|
||||
|
||||
return 2;
|
||||
}
|
||||
|
||||
void update_chat_typing (struct tgl_state *TLS, struct tgl_user *U, struct tgl_chat *C, enum tgl_typing_status status) {
|
||||
debug ("update_chat_typing()");
|
||||
|
||||
PurpleConvChat *chat = NULL;
|
||||
PurpleConversation *conv = purple_find_chat (tls_get_conn (TLS), tgl_get_peer_id (C->id));
|
||||
if (conv) {
|
||||
chat = purple_conversation_get_chat_data (conv);
|
||||
}
|
||||
g_return_if_fail(chat != NULL);
|
||||
|
||||
const char *name = tgp_blist_lookup_purple_name (TLS, U->id);
|
||||
g_return_if_fail(name != NULL);
|
||||
|
||||
PurpleConvChatBuddyFlags flags = purple_conv_chat_user_get_flags (chat, name);
|
||||
|
||||
if (status == tgl_typing_typing) {
|
||||
flags |= PURPLE_CBFLAGS_TYPING;
|
||||
} else {
|
||||
flags &= ~PURPLE_CBFLAGS_TYPING;
|
||||
}
|
||||
|
||||
purple_conv_chat_user_set_flags(chat, name, flags);
|
||||
}
|
||||
|
||||
void tgprpl_kick_from_chat (PurpleConnection *gc, int id, const char *who) {
|
||||
debug ("tgprpl_kick_from_chat()");
|
||||
|
||||
tgl_peer_t *P = tgl_peer_get (gc_get_tls (gc), TGL_MK_CHAT(id));
|
||||
if (! P) {
|
||||
P = tgl_peer_get (gc_get_tls (gc), TGL_MK_CHANNEL(id));
|
||||
}
|
||||
g_return_if_fail(P != NULL);
|
||||
|
||||
tgl_peer_t *other_id = tgp_blist_lookup_peer_get (gc_get_tls (gc), who);
|
||||
g_return_if_fail(P != NULL);
|
||||
|
||||
tgl_do_del_user_from_chat (gc_get_tls (gc), P->id, other_id->id, tgp_notify_on_error_gw, NULL);
|
||||
}
|
||||
|
||||
GList *tgprpl_chat_join_info (PurpleConnection *gc) {
|
||||
struct proto_chat_entry *pce;
|
||||
pce = g_new0 (struct proto_chat_entry, 1);
|
||||
|
@ -149,8 +317,7 @@ GHashTable *tgprpl_chat_info_defaults (PurpleConnection *gc, const char *chat_na
|
|||
if (chat_name) {
|
||||
tgl_peer_t *P = tgl_peer_get_by_name (gc_get_tls (gc), chat_name);
|
||||
if (P) {
|
||||
debug ("found chat...");
|
||||
return tgp_chat_info_new (gc_get_tls (gc), &P->chat);
|
||||
return tgp_chat_info_new (gc_get_tls (gc), P);
|
||||
}
|
||||
warning ("Chat not found, returning empty defaults...");
|
||||
}
|
||||
|
@ -160,11 +327,10 @@ GHashTable *tgprpl_chat_info_defaults (PurpleConnection *gc, const char *chat_na
|
|||
void tgprpl_chat_join (PurpleConnection *gc, GHashTable *data) {
|
||||
debug ("tgprpl_chat_join()");
|
||||
g_return_if_fail(data);
|
||||
|
||||
|
||||
// auto joins will cause chat joins at a time when the dialogue list is not ready, remember
|
||||
// those chats and join them once the dialogue list is fetched
|
||||
if (! gc_get_data (gc)->dialogues_ready) {
|
||||
g_return_if_fail (data);
|
||||
const char *id = g_hash_table_lookup (data, "id");
|
||||
if (id) {
|
||||
debug ("attempting to join chat %s while not ready, queue up for later", id);
|
||||
|
@ -176,13 +342,22 @@ void tgprpl_chat_join (PurpleConnection *gc, GHashTable *data) {
|
|||
// join existing chat by id when the user clicks on a chat in the buddy list
|
||||
void *value = g_hash_table_lookup (data, "id");
|
||||
if (value && atoi (value)) {
|
||||
tgl_peer_id_t cid = TGL_MK_CHAT(atoi (value));
|
||||
tgl_peer_t *P = tgl_peer_get (gc_get_tls (gc), cid);
|
||||
tgl_peer_t *P = tgl_peer_get (gc_get_tls (gc), TGL_MK_CHAT(atoi (value)));
|
||||
if (! P) {
|
||||
P = tgl_peer_get (gc_get_tls (gc), TGL_MK_CHANNEL(atoi (value)));
|
||||
}
|
||||
if (P) {
|
||||
debug ("joining chat by id %d ...", tgl_get_peer_id (cid));
|
||||
tgl_do_get_chat_info (gc_get_tls (gc), cid, FALSE, tgp_chat_on_loaded_chat_full_joining, NULL);
|
||||
debug ("type=%d", tgl_get_peer_type (P->id));
|
||||
if (tgl_get_peer_type (P->id) == TGL_PEER_CHAT) {
|
||||
debug ("joining chat by id %d ...", tgl_get_peer_id (P->id));
|
||||
tgl_do_get_chat_info (gc_get_tls (gc), P->id, FALSE, tgp_chat_on_loaded_chat_full_joining, NULL);
|
||||
} else {
|
||||
g_return_if_fail(tgl_get_peer_type (P->id) == TGL_PEER_CHANNEL);
|
||||
debug ("joining channel by id %d ...", tgl_get_peer_id (P->id));
|
||||
tgp_channel_load (gc_get_tls (gc), P, tgp_chat_on_loaded_channel_full_joining, NULL);
|
||||
}
|
||||
} else {
|
||||
warning ("Cannot join chat %d, peer not found...", tgl_get_peer_id (cid));
|
||||
warning ("Cannot join chat %d, peer not found...", atoi (value));
|
||||
purple_serv_got_join_chat_failed (gc, data);
|
||||
}
|
||||
return;
|
||||
|
@ -199,17 +374,25 @@ void tgprpl_chat_join (PurpleConnection *gc, GHashTable *data) {
|
|||
const char *subject = g_hash_table_lookup (data, "subject");
|
||||
if (str_not_empty (subject)) {
|
||||
tgl_peer_t *P = tgl_peer_get_by_name (gc_get_tls (gc), subject);
|
||||
|
||||
// handle joining chats by print_names as used by the Adium plugin
|
||||
if (P && tgl_get_peer_type (P->id) == TGL_PEER_CHAT) {
|
||||
debug ("joining chat by subject %s ...", subject);
|
||||
|
||||
tgl_do_get_chat_info (gc_get_tls (gc), P->id, FALSE, tgp_chat_on_loaded_chat_full_joining, NULL);
|
||||
if (! P) {
|
||||
// user creates a new chat by providing its subject the chat join window
|
||||
request_create_chat (gc_get_tls (gc), subject);
|
||||
return;
|
||||
}
|
||||
|
||||
// user creates a new chat by providing its subject the chat join window
|
||||
request_create_chat (gc_get_tls (gc), subject);
|
||||
// handle joining chats by print_names as used by the Adium plugin
|
||||
if (tgl_get_peer_type (P->id) == TGL_PEER_CHAT) {
|
||||
debug ("joining chat by subject %s ...", subject);
|
||||
tgl_do_get_chat_info (gc_get_tls (gc), P->id, FALSE, tgp_chat_on_loaded_chat_full_joining, NULL);
|
||||
return;
|
||||
} else if (tgl_get_peer_type (P->id) == TGL_PEER_CHANNEL) {
|
||||
debug ("joining channel by subject %s ...", subject);
|
||||
tgp_channel_load (gc_get_tls (gc), P, tgp_chat_on_loaded_channel_full_joining, NULL);
|
||||
return;
|
||||
} else {
|
||||
warning ("Cannot join chat %s, wrong peer type", subject);
|
||||
purple_serv_got_join_chat_failed (gc, data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -220,12 +403,19 @@ char *tgprpl_get_chat_name (GHashTable * data) {
|
|||
static void tgp_chat_roomlist_it (tgl_peer_t *P, void *extra) {
|
||||
connection_data *conn = extra;
|
||||
|
||||
if (tgl_get_peer_type (P->id) == TGL_PEER_CHAT && P->chat.users_num) {
|
||||
if ((tgl_get_peer_type (P->id) == TGL_PEER_CHAT || tgl_get_peer_type (P->id) == TGL_PEER_CHANNEL)
|
||||
&& !(P->flags & TGLPF_LEFT)) {
|
||||
char *id = g_strdup_printf ("%d", tgl_get_peer_id (P->id));
|
||||
|
||||
PurpleRoomlistRoom *room = purple_roomlist_room_new (PURPLE_ROOMLIST_ROOMTYPE_ROOM, P->chat.print_title, NULL);
|
||||
purple_roomlist_room_add_field (conn->roomlist, room, id);
|
||||
purple_roomlist_room_add_field (conn->roomlist, room, GINT_TO_POINTER(P->chat.users_num));
|
||||
if (tgl_get_peer_type (P->id) == TGL_PEER_CHANNEL) {
|
||||
purple_roomlist_room_add_field (conn->roomlist, room, GINT_TO_POINTER(0));
|
||||
purple_roomlist_room_add_field (conn->roomlist, room, (P->channel.flags & TGLCHF_MEGAGROUP) ? _("Supergroup") : _("Channel"));
|
||||
} else {
|
||||
purple_roomlist_room_add_field (conn->roomlist, room, GINT_TO_POINTER(P->chat.users_num));
|
||||
purple_roomlist_room_add_field (conn->roomlist, room, _("Group"));
|
||||
}
|
||||
purple_roomlist_room_add (conn->roomlist, room);
|
||||
|
||||
g_free (id);
|
||||
|
@ -234,38 +424,36 @@ static void tgp_chat_roomlist_it (tgl_peer_t *P, void *extra) {
|
|||
|
||||
PurpleRoomlist *tgprpl_roomlist_get_list (PurpleConnection *gc) {
|
||||
debug ("tgprpl_roomlist_get_list()");
|
||||
connection_data *conn = purple_connection_get_protocol_data (gc);
|
||||
GList *fields = NULL;
|
||||
|
||||
connection_data *conn = gc_get_data (gc);
|
||||
|
||||
if (conn->roomlist) {
|
||||
purple_roomlist_unref (conn->roomlist);
|
||||
}
|
||||
|
||||
conn->roomlist = purple_roomlist_new (purple_connection_get_account (gc));
|
||||
|
||||
GList *fields = NULL;
|
||||
PurpleRoomlistField *f = purple_roomlist_field_new (PURPLE_ROOMLIST_FIELD_STRING, "", "id", TRUE);
|
||||
fields = g_list_append (fields, f);
|
||||
|
||||
|
||||
f = purple_roomlist_field_new (PURPLE_ROOMLIST_FIELD_INT, _("Users in chat"), "users", FALSE);
|
||||
fields = g_list_append (fields, f);
|
||||
|
||||
|
||||
f = purple_roomlist_field_new (PURPLE_ROOMLIST_FIELD_STRING, _("Type"), "type", FALSE);
|
||||
fields = g_list_append (fields, f);
|
||||
|
||||
purple_roomlist_set_fields (conn->roomlist, fields);
|
||||
|
||||
tgl_peer_iterator_ex (conn->TLS, tgp_chat_roomlist_it, conn);
|
||||
|
||||
return conn->roomlist;
|
||||
}
|
||||
|
||||
void tgprpl_roomlist_cancel (PurpleRoomlist *list) {
|
||||
PurpleConnection *gc = purple_account_get_connection (list->account);
|
||||
if (! gc) {
|
||||
return;
|
||||
}
|
||||
|
||||
connection_data *conn = purple_connection_get_protocol_data (gc);
|
||||
g_return_if_fail(list->account);
|
||||
|
||||
purple_roomlist_set_in_progress (list, FALSE);
|
||||
if (conn->roomlist == list) {
|
||||
conn->roomlist = NULL;
|
||||
if (pa_get_data (list->account)->roomlist == list) {
|
||||
pa_get_data (list->account)->roomlist = NULL;
|
||||
purple_roomlist_unref (list);
|
||||
}
|
||||
}
|
||||
|
@ -283,3 +471,186 @@ void tgp_chat_join_all_pending (struct tgl_state *TLS) {
|
|||
tls_get_data (TLS)->pending_joins = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static void tgp_channel_loading_free (struct tgp_channel_loading *D) {
|
||||
if (D->callbacks) {
|
||||
g_list_free (D->callbacks);
|
||||
}
|
||||
if (D->extras) {
|
||||
g_list_free (D->extras);
|
||||
}
|
||||
free (D);
|
||||
}
|
||||
|
||||
static void tgp_channel_load_finish (struct tgl_state *TLS, struct tgp_channel_loading *D, int success) {
|
||||
GList *cb = D->callbacks;
|
||||
GList *extra = D->extras;
|
||||
|
||||
if (! g_list_length (D->members)) {
|
||||
struct tgp_channel_member *M = talloc0 (sizeof(struct tgp_channel_member));
|
||||
M->id = TLS->our_id;
|
||||
D->members = g_list_append (D->members, M);
|
||||
}
|
||||
|
||||
g_hash_table_replace (tls_get_data (TLS)->channel_members,
|
||||
GINT_TO_POINTER(tgl_get_peer_id (D->P->id)), D->members);
|
||||
|
||||
while (cb) {
|
||||
if (cb->data) {
|
||||
((void (*) (struct tgl_state *, void *, int, tgl_peer_t *)) cb->data) (TLS, extra->data, success, D->P);
|
||||
}
|
||||
cb = g_list_next(cb);
|
||||
extra = g_list_next(extra);
|
||||
}
|
||||
|
||||
tgp_channel_loading_free (D);
|
||||
}
|
||||
|
||||
static void tgp_channel_load_admins_done (struct tgl_state *TLS, void *extra, int success, int users_num,
|
||||
struct tgl_user **users) {
|
||||
debug ("tgp_channel_load_admins_done()");
|
||||
|
||||
struct tgp_channel_loading *D = extra;
|
||||
|
||||
if (success) {
|
||||
GHashTable *HT = g_hash_table_new (g_direct_hash, g_direct_equal);
|
||||
int i;
|
||||
for (i = 0; i < users_num; i ++) {
|
||||
g_hash_table_insert (HT, GINT_TO_POINTER(tgl_get_peer_id (users[i]->id)), GINT_TO_POINTER(1));
|
||||
}
|
||||
|
||||
GList *MS = D->members;
|
||||
do {
|
||||
struct tgp_channel_member *M = MS->data;
|
||||
if (g_hash_table_lookup (HT, GINT_TO_POINTER(tgl_get_peer_id (M->id)))) {
|
||||
M->flags |= PURPLE_CBFLAGS_OP;
|
||||
}
|
||||
} while ((MS = g_list_next (MS)));
|
||||
g_hash_table_destroy (HT);
|
||||
}
|
||||
|
||||
tgp_channel_load_finish (TLS, D, success);
|
||||
}
|
||||
|
||||
static void tgp_channel_get_members_done (struct tgl_state *TLS, void *extra, int success, int users_num,
|
||||
struct tgl_user **users) {
|
||||
debug ("tgp_channel_load_members_done()");
|
||||
struct tgp_channel_loading *D = extra;
|
||||
|
||||
if (! success) {
|
||||
tgp_channel_load_finish (TLS, D, FALSE);
|
||||
return;
|
||||
}
|
||||
|
||||
int i;
|
||||
for (i = 0; i < users_num; i ++) {
|
||||
struct tgp_channel_member *M = talloc0 (sizeof(struct tgp_channel_member));
|
||||
M->id = users[i]->id;
|
||||
D->members = g_list_append (D->members, M);
|
||||
}
|
||||
|
||||
tgl_do_channel_get_members (TLS, D->P->id,
|
||||
purple_account_get_int (tls_get_pa (TLS), TGP_KEY_CHANNEL_MEMBERS, TGP_DEFAULT_CHANNEL_MEMBERS),
|
||||
0, 1, tgp_channel_load_admins_done, D);
|
||||
}
|
||||
|
||||
static gint tgp_channel_find_higher_id (gconstpointer a, gconstpointer b) {
|
||||
return ((struct tgp_msg_loading *)a)->msg->server_id < GPOINTER_TO_INT(b);
|
||||
}
|
||||
|
||||
static void tgp_channel_get_history_done (struct tgl_state *TLS, void *extra, int success, int size,
|
||||
struct tgl_message **list) {
|
||||
struct tgp_channel_loading *D = extra;
|
||||
|
||||
if (success) {
|
||||
if (size > 0 && tgp_chat_get_last_server_id (TLS, D->P->id) < list[size - 1]->server_id) {
|
||||
tgp_chat_set_last_server_id (TLS, D->P->id, (int) list[size - 1]->server_id);
|
||||
}
|
||||
|
||||
GList *where = g_queue_find_custom (tls_get_data (TLS)->new_messages,
|
||||
GINT_TO_POINTER(tgp_chat_get_last_server_id (TLS, D->P->id)), tgp_channel_find_higher_id);
|
||||
int i;
|
||||
for (i = size - 1; i >= 0; -- i) {
|
||||
if (list[i]->server_id > tgp_chat_get_last_server_id (TLS, D->P->id)) {
|
||||
tgp_msg_recv (TLS, list[i], where);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
g_warn_if_reached(); // gap in history
|
||||
}
|
||||
|
||||
if (D->P->flags & (TGLCHF_ADMIN | TGLCHF_MEGAGROUP)) {
|
||||
tgl_do_channel_get_members (TLS, D->P->id,
|
||||
purple_account_get_int (tls_get_pa (TLS), TGP_KEY_CHANNEL_MEMBERS, TGP_DEFAULT_CHANNEL_MEMBERS),
|
||||
0, 0, tgp_channel_get_members_done, extra);
|
||||
} else {
|
||||
tgp_channel_load_finish (TLS, D, success);
|
||||
}
|
||||
}
|
||||
|
||||
void tgp_channel_load (struct tgl_state *TLS, tgl_peer_t *P,
|
||||
void (*callback) (struct tgl_state *, void *, int, tgl_peer_t *),
|
||||
void *extra) {
|
||||
g_return_if_fail(tgl_get_peer_type (P->id) == TGL_PEER_CHANNEL);
|
||||
|
||||
gpointer ID = GINT_TO_POINTER(tgl_get_peer_id (P->id));
|
||||
if (! g_hash_table_lookup (tls_get_data (TLS)->pending_channels, ID)) {
|
||||
|
||||
struct tgp_channel_loading *D = talloc0 (sizeof(struct tgp_channel_loading));
|
||||
D->P = P;
|
||||
D->callbacks = g_list_append (NULL, callback);
|
||||
D->extras = g_list_append (NULL, extra);
|
||||
D->remaining = 2;
|
||||
|
||||
tgl_do_get_history_range (TLS, P->id, (int) tgp_chat_get_last_server_id (TLS, P->id), 0,
|
||||
TGP_CHANNEL_HISTORY_LIMIT, tgp_channel_get_history_done, D);
|
||||
g_hash_table_replace (tls_get_data (TLS)->pending_channels, ID, D);
|
||||
|
||||
} else {
|
||||
if (! tgp_channel_loaded (TLS, P->id)) {
|
||||
struct tgp_channel_loading *D = g_hash_table_lookup (tls_get_data (TLS)->pending_channels, ID);
|
||||
D->callbacks = g_list_append (D->callbacks, callback);
|
||||
D->extras = g_list_append (D->extras, extra);
|
||||
} else {
|
||||
callback (TLS, extra, TRUE, P);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int tgp_channel_loaded (struct tgl_state *TLS, tgl_peer_id_t id) {
|
||||
return NULL != g_hash_table_lookup (tls_get_data (TLS)->channel_members,
|
||||
GINT_TO_POINTER(tgl_get_peer_id (id)));
|
||||
}
|
||||
|
||||
static void update_chat (struct tgl_state *TLS, tgl_peer_t *C, unsigned flags, const char *group) {
|
||||
if (flags & TGL_UPDATE_CREATED) {
|
||||
tgp_blist_lookup_add (TLS, C->id, C->print_name);
|
||||
tgp_chat_blist_store (TLS, tgl_peer_get (TLS, C->id), group);
|
||||
} else {
|
||||
PurpleChat *PC = tgp_blist_chat_find (TLS, C->id);
|
||||
if (PC) {
|
||||
if (flags & TGL_UPDATE_TITLE) {
|
||||
purple_blist_alias_chat (PC, C->print_name);
|
||||
}
|
||||
if (flags & TGL_UPDATE_DELETED) { // TODO: test if this is actually executed on deletion
|
||||
purple_blist_remove_chat (PC);
|
||||
}
|
||||
if (flags & TGL_UPDATE_PHOTO) {
|
||||
tgp_info_update_photo (&PC->node, tgl_peer_get (TLS, C->id));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void update_channel_handler (struct tgl_state *TLS, struct tgl_channel *C, unsigned flags) {
|
||||
debug ("update_channel_handler() (%s)", print_flags_update (flags));
|
||||
|
||||
update_chat (TLS, tgl_peer_get (TLS, C->id), flags, _("Telegram Channels"));
|
||||
}
|
||||
|
||||
void update_chat_handler (struct tgl_state *TLS, struct tgl_chat *C, unsigned flags) {
|
||||
debug ("update_chat_handler() (%s)", print_flags_update (flags));
|
||||
|
||||
update_chat (TLS, tgl_peer_get (TLS, C->id), flags, _("Telegram Chats"));
|
||||
}
|
||||
|
||||
|
|
33
tgp-chat.h
33
tgp-chat.h
|
@ -23,14 +23,30 @@
|
|||
|
||||
#include "telegram-purple.h"
|
||||
|
||||
PurpleChat *p2tgl_chat_new (struct tgl_state *TLS, struct tgl_chat *chat);
|
||||
struct tgp_channel_member {
|
||||
tgl_peer_id_t id;
|
||||
int flags;
|
||||
};
|
||||
|
||||
struct tgp_channel_loading {
|
||||
tgl_peer_t *P;
|
||||
GList *members;
|
||||
GList *callbacks;
|
||||
GList *extras;
|
||||
int remaining;
|
||||
};
|
||||
|
||||
tgl_peer_id_t tgp_chat_get_id (PurpleChat *C);
|
||||
int tgp_chat_has_id (PurpleChat *C);
|
||||
|
||||
void tgp_chat_on_loaded_chat_full (struct tgl_state *TLS, struct tgl_chat *C);
|
||||
PurpleConversation *tgp_chat_show (struct tgl_state *TLS, struct tgl_chat *C);
|
||||
void tgp_chat_set_last_server_id (struct tgl_state *TLS, tgl_peer_id_t chat, int id);
|
||||
int tgp_chat_get_last_server_id (struct tgl_state *TLS, tgl_peer_id_t chat);
|
||||
|
||||
PurpleChat *tgp_chat_blist_store (struct tgl_state *TLS, tgl_peer_t *P, const char *group);
|
||||
|
||||
PurpleConversation *tgp_chat_show (struct tgl_state *TLS, tgl_peer_t *P);
|
||||
int tgprpl_send_chat (PurpleConnection *gc, int id, const char *message, PurpleMessageFlags flags);
|
||||
unsigned int tgprpl_send_chat_typing (PurpleConversation *conv, PurpleTypingState typing, gpointer ignored);
|
||||
char *tgprpl_get_chat_name (GHashTable *data);
|
||||
void tgprpl_chat_join (PurpleConnection *gc, GHashTable *data);
|
||||
GList *tgprpl_chat_join_info (PurpleConnection *gc);
|
||||
|
@ -38,4 +54,15 @@ PurpleRoomlist *tgprpl_roomlist_get_list (PurpleConnection *gc);
|
|||
void tgprpl_roomlist_cancel (PurpleRoomlist *list);
|
||||
GHashTable *tgprpl_chat_info_defaults (PurpleConnection *gc, const char *chat_name);
|
||||
void tgp_chat_join_all_pending (struct tgl_state *TLS);
|
||||
void tgprpl_kick_from_chat (PurpleConnection *gc, int id, const char *who);
|
||||
|
||||
void tgp_channel_load (struct tgl_state *TLS, tgl_peer_t *P,
|
||||
void (*callback) (struct tgl_state *, void *, int, tgl_peer_t *),
|
||||
void *extra);
|
||||
int tgp_channel_loaded (struct tgl_state *TLS, tgl_peer_id_t id);
|
||||
|
||||
void update_channel_handler (struct tgl_state *TLS, struct tgl_channel *C, unsigned flags);
|
||||
void update_chat_handler (struct tgl_state *TLS, struct tgl_chat *C, unsigned flags);
|
||||
void update_chat_typing (struct tgl_state *TLS, struct tgl_user *U, struct tgl_chat *C, enum tgl_typing_status status);
|
||||
|
||||
#endif
|
||||
|
|
224
tgp-ft.c
224
tgp-ft.c
|
@ -1,20 +1,20 @@
|
|||
/*
|
||||
This file is part of telegram-purple
|
||||
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
|
||||
|
||||
|
||||
Copyright Matthias Jentsch 2014-2015
|
||||
*/
|
||||
|
||||
|
@ -25,7 +25,8 @@
|
|||
static void tgprpl_xfer_free_data (struct tgp_xfer_send_data *data);
|
||||
|
||||
static char *tgp_strdup_determine_filename (const char *mime, const char *caption,
|
||||
int flags, long long hash) {
|
||||
int flags, long long hash) {
|
||||
|
||||
if (caption) {
|
||||
return g_strdup (caption);
|
||||
}
|
||||
|
@ -61,86 +62,111 @@ static char *tgp_strdup_determine_filename (const char *mime, const char *captio
|
|||
static void tgprpl_xfer_recv_on_finished (struct tgl_state *TLS, void *_data, int success, const char *filename) {
|
||||
debug ("tgprpl_xfer_recv_on_finished()");
|
||||
struct tgp_xfer_send_data *data = _data;
|
||||
char *selected = g_strdup(purple_xfer_get_local_filename (data->xfer));
|
||||
char *selected = g_strdup (purple_xfer_get_local_filename (data->xfer));
|
||||
|
||||
if (success) {
|
||||
if (!data->done) {
|
||||
debug ("purple_xfer_set_completed");
|
||||
|
||||
// always completed the file transfer to avoid a warning dialogue when closing (Adium)
|
||||
purple_xfer_set_bytes_sent (data->xfer, purple_xfer_get_size (data->xfer));
|
||||
purple_xfer_set_completed (data->xfer, TRUE);
|
||||
|
||||
if (! purple_xfer_is_canceled (data->xfer)) {
|
||||
purple_xfer_end (data->xfer);
|
||||
}
|
||||
} else {
|
||||
tgp_notify_on_error_gw (TLS, NULL, success);
|
||||
if (! purple_xfer_is_canceled (data->xfer)) {
|
||||
purple_xfer_cancel_remote (data->xfer);
|
||||
}
|
||||
failure ("recv xfer failed");
|
||||
}
|
||||
|
||||
data->loading = FALSE;
|
||||
|
||||
data->xfer->data = NULL;
|
||||
purple_xfer_unref (data->xfer);
|
||||
tgprpl_xfer_free_data (data);
|
||||
|
||||
debug ("moving transferred file from tgl directory %s to selected target %s", selected, filename);
|
||||
g_unlink (selected);
|
||||
|
||||
//FIXME: try to copy when this fails
|
||||
g_rename (filename, selected);
|
||||
g_free (selected);
|
||||
}
|
||||
|
||||
static void tgprpl_xfer_send_on_finished (struct tgl_state *TLS, void *_data, int success, struct tgl_message *M) {
|
||||
debug ("tgprpl_xfer_on_finished()");
|
||||
struct tgp_xfer_send_data *data = _data;
|
||||
|
||||
if (success) {
|
||||
if (! purple_xfer_is_canceled (data->xfer)) {
|
||||
debug ("purple_xfer_set_completed");
|
||||
purple_xfer_set_bytes_sent (data->xfer, purple_xfer_get_size (data->xfer));
|
||||
purple_xfer_set_completed (data->xfer, TRUE);
|
||||
purple_xfer_end (data->xfer);
|
||||
}
|
||||
} else {
|
||||
tgp_notify_on_error_gw (TLS, NULL, success);
|
||||
failure ("ERROR xfer failed");
|
||||
}
|
||||
|
||||
data->xfer->data = NULL;
|
||||
tgprpl_xfer_free_data (data);
|
||||
|
||||
debug ("moving transferred file from tgl directory %s to selected target %s", selected, filename);
|
||||
g_unlink (selected);
|
||||
g_rename (filename, selected);
|
||||
g_free (selected);
|
||||
}
|
||||
|
||||
static void tgprpl_xfer_on_finished (struct tgl_state *TLS, void *_data, int success, struct tgl_message *M) {
|
||||
debug ("tgprpl_xfer_on_finished()");
|
||||
struct tgp_xfer_send_data *data = _data;
|
||||
|
||||
if (success) {
|
||||
if (!data->done) {
|
||||
debug ("purple_xfer_set_completed");
|
||||
purple_xfer_set_bytes_sent (data->xfer, purple_xfer_get_size (data->xfer));
|
||||
purple_xfer_set_completed (data->xfer, TRUE);
|
||||
purple_xfer_end(data->xfer);
|
||||
}
|
||||
write_secret_chat_file (TLS);
|
||||
} else {
|
||||
tgp_notify_on_error_gw (TLS, NULL, success);
|
||||
failure ("ERROR xfer failed");
|
||||
if (! purple_xfer_is_canceled (data->xfer)) {
|
||||
purple_xfer_cancel_remote (data->xfer);
|
||||
}
|
||||
failure ("send xfer failed");
|
||||
}
|
||||
|
||||
|
||||
data->loading = FALSE;
|
||||
|
||||
data->xfer->data = NULL;
|
||||
purple_xfer_unref (data->xfer);
|
||||
tgprpl_xfer_free_data (data);
|
||||
}
|
||||
|
||||
static void tgprpl_xfer_canceled (PurpleXfer *X) {
|
||||
debug ("tgprpl_xfer_canceled()");
|
||||
struct tgp_xfer_send_data *data = X->data;
|
||||
tgprpl_xfer_free_data (data);
|
||||
|
||||
// the xfer data must not be freed when the transfer is still running, since there is no way to cancel
|
||||
// the running transfer and the callback still needs the xfer data. In that case transfer data will
|
||||
// be freed once the transfer finished or the account goes offline and all loading transfers are aborted.
|
||||
if (! data->loading) {
|
||||
data->xfer->data = NULL;
|
||||
tgprpl_xfer_free_data (data);
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean tgprpl_xfer_upload_progress (gpointer _data) {
|
||||
PurpleXfer *X = _data;
|
||||
struct tgp_xfer_send_data *data = X->data;
|
||||
connection_data *conn = data->conn;
|
||||
|
||||
PurpleXferType type = purple_xfer_get_type(X);
|
||||
|
||||
PurpleXferType type = purple_xfer_get_type (X);
|
||||
switch (type) {
|
||||
case PURPLE_XFER_SEND:
|
||||
purple_xfer_set_size (X, conn->TLS->cur_uploading_bytes);
|
||||
purple_xfer_set_bytes_sent (X, conn->TLS->cur_uploaded_bytes);
|
||||
purple_xfer_update_progress (X);
|
||||
|
||||
|
||||
debug ("PURPLE_XFER_SEND progress %d / %d", conn->TLS->cur_uploaded_bytes, conn->TLS->cur_uploading_bytes);
|
||||
if (conn->TLS->cur_uploaded_bytes == conn->TLS->cur_uploading_bytes) {
|
||||
data->timer = 0;
|
||||
return FALSE;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case PURPLE_XFER_RECEIVE:
|
||||
purple_xfer_set_size (X, conn->TLS->cur_downloading_bytes);
|
||||
purple_xfer_set_bytes_sent (X, conn->TLS->cur_downloaded_bytes);
|
||||
purple_xfer_update_progress (X);
|
||||
|
||||
|
||||
debug ("PURPLE_XFER_RECEIVE progress %d / %d", conn->TLS->cur_downloaded_bytes, conn->TLS->cur_downloading_bytes);
|
||||
if (conn->TLS->cur_downloading_bytes == conn->TLS->cur_downloaded_bytes) {
|
||||
data->timer = 0;
|
||||
return FALSE;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
case PURPLE_XFER_UNKNOWN:
|
||||
failure ("ERROR: tgprpl_xfer_upload_progress xfer type PURPLE_XFER_UNKNOWN.");
|
||||
|
@ -151,52 +177,59 @@ static gboolean tgprpl_xfer_upload_progress (gpointer _data) {
|
|||
}
|
||||
|
||||
static void tgprpl_xfer_recv_init (PurpleXfer *X) {
|
||||
debug ("tgprpl_xfer_recv_init");
|
||||
debug ("tgprpl_xfer_recv_init(): receiving xfer accepted.");
|
||||
|
||||
struct tgp_xfer_send_data *data = X->data;
|
||||
struct tgl_state *TLS = data->conn->TLS;
|
||||
struct tgl_message *M = data->msg;
|
||||
struct tgl_document *D = M->media.document;
|
||||
tgl_peer_t *P = NULL;
|
||||
|
||||
|
||||
purple_xfer_start (X, -1, NULL, 0);
|
||||
const char *who = purple_xfer_get_remote_user (X);
|
||||
P = tgp_blist_lookup_peer_get (TLS, who);
|
||||
if (P) {
|
||||
switch (M->media.type) {
|
||||
case tgl_message_media_document:
|
||||
tgl_do_load_document (TLS, D, tgprpl_xfer_recv_on_finished, data);
|
||||
break;
|
||||
|
||||
case tgl_message_media_document_encr:
|
||||
tgl_do_load_encr_document (TLS, M->media.encr_document, tgprpl_xfer_recv_on_finished, data);
|
||||
break;
|
||||
|
||||
case tgl_message_media_audio:
|
||||
tgl_do_load_audio (TLS, D, tgprpl_xfer_recv_on_finished, data);
|
||||
break;
|
||||
|
||||
case tgl_message_media_video:
|
||||
tgl_do_load_video (TLS, D, tgprpl_xfer_recv_on_finished, data);
|
||||
break;
|
||||
g_return_if_fail(P);
|
||||
|
||||
default:
|
||||
failure ("Unknown message media type: %d, XFER not possible.", M->media.type);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
warning ("User not found, not downloading...");
|
||||
switch (M->media.type) {
|
||||
case tgl_message_media_document:
|
||||
tgl_do_load_document (TLS, D, tgprpl_xfer_recv_on_finished, data);
|
||||
break;
|
||||
|
||||
case tgl_message_media_document_encr:
|
||||
tgl_do_load_encr_document (TLS, M->media.encr_document, tgprpl_xfer_recv_on_finished, data);
|
||||
break;
|
||||
|
||||
case tgl_message_media_audio:
|
||||
tgl_do_load_audio (TLS, D, tgprpl_xfer_recv_on_finished, data);
|
||||
break;
|
||||
|
||||
case tgl_message_media_video:
|
||||
tgl_do_load_video (TLS, D, tgprpl_xfer_recv_on_finished, data);
|
||||
break;
|
||||
|
||||
default:
|
||||
failure ("Unknown message media type: %d, XFER not possible.", M->media.type);
|
||||
return;
|
||||
}
|
||||
|
||||
// Prevent the xfer data from getting freed after cancelling to allow the file transfer to complete
|
||||
// without crashing. This is necessary cause loading the file in libtgl cannot be aborted once started.
|
||||
purple_xfer_ref (X);
|
||||
|
||||
data->timer = purple_timeout_add (100, tgprpl_xfer_upload_progress, X);
|
||||
data->loading = TRUE;
|
||||
}
|
||||
|
||||
static void tgprpl_xfer_send_init (PurpleXfer *X) {
|
||||
debug ("tgprpl_xfer_send_init(): sending xfer accepted.");
|
||||
|
||||
struct tgp_xfer_send_data *data;
|
||||
const char *file, *localfile, *who;
|
||||
tgl_peer_t *P;
|
||||
|
||||
data = X->data;
|
||||
purple_xfer_start (X, -1, NULL, 0);
|
||||
|
||||
|
||||
file = purple_xfer_get_filename (X);
|
||||
localfile = purple_xfer_get_local_filename (X);
|
||||
who = purple_xfer_get_remote_user (X);
|
||||
|
@ -208,11 +241,23 @@ static void tgprpl_xfer_send_init (PurpleXfer *X) {
|
|||
if (tgl_get_peer_type (P->id) == TGL_PEER_ENCR_CHAT) {
|
||||
purple_xfer_error (PURPLE_XFER_SEND, data->conn->pa, who,
|
||||
_("Sorry, sending documents to encrypted chats not yet supported."));
|
||||
purple_xfer_cancel_local (X);
|
||||
return;
|
||||
}
|
||||
tgl_do_send_document (data->conn->TLS, P->id, (char*) localfile, NULL, 0, TGL_SEND_MSG_FLAG_DOCUMENT_AUTO,
|
||||
tgprpl_xfer_on_finished, data);
|
||||
|
||||
unsigned long long int flags = TGL_SEND_MSG_FLAG_DOCUMENT_AUTO;
|
||||
if (tgl_get_peer_type (P->id) == TGL_PEER_CHANNEL) {
|
||||
flags |= TGLMF_POST_AS_CHANNEL;
|
||||
}
|
||||
|
||||
tgl_do_send_document (data->conn->TLS, P->id, (char*) localfile, NULL, 0,
|
||||
flags, tgprpl_xfer_send_on_finished, data);
|
||||
|
||||
// see comment in tgprpl_xfer_recv_init()
|
||||
purple_xfer_ref (X);
|
||||
|
||||
data->timer = purple_timeout_add (100, tgprpl_xfer_upload_progress, X);
|
||||
data->loading = TRUE;
|
||||
}
|
||||
|
||||
static void tgprpl_xfer_init_data (PurpleXfer *X, connection_data *conn, struct tgl_message *msg) {
|
||||
|
@ -227,33 +272,55 @@ static void tgprpl_xfer_init_data (PurpleXfer *X, connection_data *conn, struct
|
|||
|
||||
static void tgprpl_xfer_free_data (struct tgp_xfer_send_data *data) {
|
||||
if (data->timer) {
|
||||
purple_input_remove(data->timer);
|
||||
purple_input_remove (data->timer);
|
||||
}
|
||||
data->timer = 0;
|
||||
g_free (data);
|
||||
}
|
||||
|
||||
void tgprpl_xfer_free_all (connection_data *conn) {
|
||||
GList *xfers = purple_xfers_get_all();
|
||||
GList *xfers = purple_xfers_get_all ();
|
||||
while (xfers) {
|
||||
PurpleXfer *xfer = xfers->data;
|
||||
struct tgp_xfer_send_data *data = xfer->data;
|
||||
|
||||
if (data) {
|
||||
purple_xfer_cancel_local (xfer);
|
||||
|
||||
if (purple_xfer_get_account (xfer) == conn->pa) {
|
||||
debug ("xfer: %s", xfer->filename);
|
||||
|
||||
// cancel all non-completed file tranfsers to avoid them from being called
|
||||
// in future sessions, as they still contain references to already freed data.
|
||||
if (! purple_xfer_is_canceled (xfer) && ! purple_xfer_is_completed (xfer)) {
|
||||
purple_xfer_cancel_local (xfer);
|
||||
}
|
||||
|
||||
// if a file transfer is still running while going offline, it will be canceled when
|
||||
// cleaning up libtgl memory. Since canceled file transfers are being kept (see
|
||||
// tgprpl_xfer_canceled() and tgprpl_xfer_recv_init()) those need to be freed now.
|
||||
struct tgp_xfer_send_data *data = xfer->data;
|
||||
if (data) {
|
||||
if (data->loading) {
|
||||
tgprpl_xfer_free_data (data);
|
||||
xfer->data = NULL;
|
||||
purple_xfer_unref (xfer);
|
||||
} else {
|
||||
g_warn_if_reached();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
xfers = g_list_next(xfers);
|
||||
}
|
||||
}
|
||||
|
||||
PurpleXfer *tgprpl_new_xfer (PurpleConnection *gc, const char *who) {
|
||||
debug ("tgprpl_new_xfer()");
|
||||
|
||||
PurpleXfer *X = purple_xfer_new (purple_connection_get_account (gc), PURPLE_XFER_SEND, who);
|
||||
if (X) {
|
||||
purple_xfer_set_init_fnc (X, tgprpl_xfer_send_init);
|
||||
purple_xfer_set_cancel_send_fnc (X, tgprpl_xfer_canceled);
|
||||
tgprpl_xfer_init_data (X, purple_connection_get_protocol_data (gc), NULL);
|
||||
}
|
||||
|
||||
return X;
|
||||
}
|
||||
|
||||
|
@ -261,18 +328,19 @@ static PurpleXfer *tgprpl_new_xfer_recv (PurpleConnection *gc, const char *who)
|
|||
PurpleXfer *X = purple_xfer_new (purple_connection_get_account (gc), PURPLE_XFER_RECEIVE, who);
|
||||
purple_xfer_set_init_fnc (X, tgprpl_xfer_recv_init);
|
||||
purple_xfer_set_cancel_recv_fnc (X, tgprpl_xfer_canceled);
|
||||
|
||||
return X;
|
||||
}
|
||||
|
||||
void tgprpl_recv_file (PurpleConnection *gc, const char *who, struct tgl_message *M) {
|
||||
debug ("tgprpl_recv_file()");
|
||||
g_return_if_fail (who);
|
||||
|
||||
|
||||
PurpleXfer *X = tgprpl_new_xfer_recv (gc, who);
|
||||
const char *mime_type, *caption;
|
||||
long long access_hash;
|
||||
int flags, size;
|
||||
|
||||
|
||||
if (M->media.type == tgl_message_media_document_encr) {
|
||||
mime_type = M->media.encr_document->mime_type;
|
||||
caption = M->media.encr_document->caption;
|
||||
|
@ -290,7 +358,7 @@ void tgprpl_recv_file (PurpleConnection *gc, const char *who, struct tgl_message
|
|||
char *filename = tgp_strdup_determine_filename (mime_type, caption, flags, access_hash);
|
||||
purple_xfer_set_filename (X, filename);
|
||||
g_free (filename);
|
||||
|
||||
|
||||
purple_xfer_set_size (X, size);
|
||||
tgprpl_xfer_init_data (X, purple_connection_get_protocol_data (gc), M);
|
||||
purple_xfer_request (X);
|
||||
|
|
216
tgp-info.c
Normal file
216
tgp-info.c
Normal file
|
@ -0,0 +1,216 @@
|
|||
/*
|
||||
This file is part of telegram-purple
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
|
||||
|
||||
Copyright Matthias Jentsch 2016
|
||||
*/
|
||||
|
||||
#include "tgp-info.h"
|
||||
|
||||
// load photo
|
||||
|
||||
static void tgp_info_update_photo_id (PurpleBlistNode *node, long long photo) {
|
||||
char *llid = g_strdup_printf ("%" G_GINT64_FORMAT, photo);
|
||||
debug ("tgp_info_update_photo_id %s", llid);
|
||||
purple_blist_node_set_string (node, TGP_INFO_PHOTO_ID, llid);
|
||||
g_free (llid);
|
||||
}
|
||||
|
||||
static void tgp_info_load_photo_done (struct tgl_state *TLS, void *extra, int success, const char *filename) {
|
||||
tgl_peer_t *P = extra;
|
||||
|
||||
g_return_if_fail(success);
|
||||
|
||||
gchar *img = NULL;
|
||||
size_t len;
|
||||
GError *err = NULL;
|
||||
g_file_get_contents (filename, &img, &len, &err);
|
||||
if (err) {
|
||||
failure ("getting file contents for %s failed: %s", filename, err->message);
|
||||
return;
|
||||
}
|
||||
|
||||
if (tgl_get_peer_type (P->id) == TGL_PEER_USER || tgl_get_peer_type (P->id) == TGL_PEER_ENCR_CHAT) {
|
||||
PurpleBuddy *B = tgp_blist_buddy_find (TLS, P->id);
|
||||
g_return_if_fail(B);
|
||||
|
||||
purple_buddy_icons_set_for_user (tls_get_pa (TLS), purple_buddy_get_name (B),
|
||||
(guchar*) img, len, NULL);
|
||||
tgp_info_update_photo_id (&B->node, P->user.photo_big.local_id);
|
||||
} else {
|
||||
PurpleChat *C = tgp_blist_chat_find (TLS, P->id);
|
||||
g_return_if_fail(C);
|
||||
|
||||
purple_buddy_icons_node_set_custom_icon (&C->node, (guchar*) img, len);
|
||||
tgp_info_update_photo_id (&C->node, P->user.photo_big.local_id);
|
||||
}
|
||||
}
|
||||
|
||||
// update photo
|
||||
|
||||
void tgp_info_update_photo (PurpleBlistNode *node, tgl_peer_t *P) {
|
||||
tgl_peer_t *parent = NULL;
|
||||
|
||||
// FIXME: test if this works for encrypted chats
|
||||
long long photo = P->user.photo_big.local_id;
|
||||
|
||||
const char *old = purple_blist_node_get_string (node, TGP_INFO_PHOTO_ID);
|
||||
if (old) {
|
||||
long long id = 0;
|
||||
id = atoll (old);
|
||||
if (id == photo) {
|
||||
debug ("photo id for %s hasn't changed %lld", parent ? parent->print_name : P->print_name, id);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (photo != 0 && pbn_get_data (node) != NULL) { // FIXME: Monkey-patched condition, I have no idea why this is NULL sometimes.
|
||||
tgl_do_load_file_location (pbn_get_data (node)->TLS, &P->user.photo_big, tgp_info_load_photo_done, P);
|
||||
} else {
|
||||
// set empty photo
|
||||
purple_buddy_icons_node_set_custom_icon_from_file (node, NULL);
|
||||
tgp_info_update_photo_id (node, photo);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// show user info
|
||||
|
||||
static void tgp_info_load_channel_done (struct tgl_state *TLS, void *extra, int success, struct tgl_channel *C) {
|
||||
g_return_if_fail(success);
|
||||
|
||||
PurpleNotifyUserInfo *info = purple_notify_user_info_new ();
|
||||
|
||||
if (str_not_empty (C->about)) {
|
||||
purple_notify_user_info_add_pair (info, _("Description"), C->about);
|
||||
}
|
||||
|
||||
if (str_not_empty (C->username)) {
|
||||
char *link = g_strdup_printf ("https://telegram.me/%s", C->username);
|
||||
purple_notify_user_info_add_pair (info, _("Link"), link);
|
||||
g_free (link);
|
||||
}
|
||||
|
||||
if (str_not_empty (C->print_title)) {
|
||||
purple_notify_user_info_add_pair (info, _("Print Title"), C->print_title);
|
||||
}
|
||||
|
||||
char *admins = g_strdup_printf ("%d", C->admins_count);
|
||||
purple_notify_user_info_add_pair (info, _("Administrators"), admins);
|
||||
g_free (admins);
|
||||
|
||||
char *participants = g_strdup_printf ("%d", C->participants_count);
|
||||
purple_notify_user_info_add_pair (info, _("Participants"), participants);
|
||||
g_free (participants);
|
||||
|
||||
char *kicked = g_strdup_printf ("%d", C->kicked_count);
|
||||
purple_notify_user_info_add_pair (info, _("Kicked"), kicked);
|
||||
g_free (kicked);
|
||||
|
||||
purple_notify_userinfo (tls_get_conn (TLS), tgp_blist_lookup_purple_name (TLS, C->id), info, NULL, NULL);
|
||||
}
|
||||
|
||||
static void tgp_info_load_user_done (struct tgl_state *TLS, void *extra, int success, struct tgl_user *U) {
|
||||
g_return_if_fail(success);
|
||||
|
||||
// user info
|
||||
|
||||
PurpleNotifyUserInfo *info = purple_notify_user_info_new ();
|
||||
|
||||
if (str_not_empty (U->first_name) && str_not_empty (U->last_name)) {
|
||||
purple_notify_user_info_add_pair (info, _("First name"), U->first_name);
|
||||
purple_notify_user_info_add_pair (info, _("Last name"), U->last_name);
|
||||
} else {
|
||||
purple_notify_user_info_add_pair (info, _("Name"), U->print_name);
|
||||
}
|
||||
|
||||
if (str_not_empty (U->username)) {
|
||||
char *username = g_strdup_printf ("@%s", U->username);
|
||||
purple_notify_user_info_add_pair (info, _("Username"), username);
|
||||
g_free (username);
|
||||
}
|
||||
|
||||
char *status = tgp_format_user_status (&U->status);
|
||||
purple_notify_user_info_add_pair (info, _("Last seen"), status);
|
||||
g_free (status);
|
||||
|
||||
if (str_not_empty (U->phone)) {
|
||||
char *phone = g_strdup_printf ("+%s", U->phone);
|
||||
purple_notify_user_info_add_pair (info, _("Phone"), phone);
|
||||
g_free (phone);
|
||||
}
|
||||
|
||||
// secret chat info
|
||||
|
||||
tgl_peer_t *O = extra;
|
||||
if (O && tgl_get_peer_type (O->id) == TGL_PEER_ENCR_CHAT) {
|
||||
|
||||
struct tgl_secret_chat *secret = &O->encr_chat;
|
||||
|
||||
if (secret->state == sc_waiting) {
|
||||
purple_notify_user_info_add_pair (info, "", _("Waiting for the user to get online..."));
|
||||
} else {
|
||||
const char *ttl_key = _("Self destruction timer");
|
||||
if (secret->ttl) {
|
||||
char *ttl = g_strdup_printf ("%d", secret->ttl);
|
||||
purple_notify_user_info_add_pair (info, ttl_key, ttl);
|
||||
g_free (ttl);
|
||||
} else {
|
||||
purple_notify_user_info_add_pair (info, ttl_key, _("Timer is not enabled."));
|
||||
}
|
||||
|
||||
if (secret->first_key_sha[0]) {
|
||||
int sha1key = tgp_visualize_key (TLS, secret->first_key_sha);
|
||||
if (sha1key != -1) {
|
||||
char *ident_icon = tgp_format_img (sha1key);
|
||||
purple_notify_user_info_add_pair (info, _("Secret key"), ident_icon);
|
||||
g_free(ident_icon);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const char *who = NULL;
|
||||
if (tgl_get_peer_type (O->id) == TGL_PEER_ENCR_CHAT) {
|
||||
who = tgp_blist_lookup_purple_name (TLS, O->id);
|
||||
} else {
|
||||
who = tgp_blist_lookup_purple_name (TLS, U->id);
|
||||
}
|
||||
|
||||
purple_notify_userinfo (tls_get_conn (TLS), who, info, NULL, NULL);
|
||||
}
|
||||
|
||||
void tgprpl_info_show (PurpleConnection *gc, const char *who) {
|
||||
tgl_peer_t *P = tgp_blist_lookup_peer_get (gc_get_data (gc)->TLS, who);
|
||||
if (P) {
|
||||
switch (tgl_get_peer_type (P->id)) {
|
||||
case TGL_PEER_ENCR_CHAT: {
|
||||
tgl_peer_t *parent = tgp_encr_chat_get_partner (gc_get_tls (gc), &P->encr_chat);
|
||||
if (parent) {
|
||||
tgl_do_get_user_info (gc_get_tls (gc), parent->id, 0, tgp_info_load_user_done, P);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case TGL_PEER_CHANNEL:
|
||||
tgl_do_get_channel_info (gc_get_tls (gc), P->id, FALSE, tgp_info_load_channel_done, P);
|
||||
break;
|
||||
|
||||
case TGL_PEER_USER:
|
||||
tgl_do_get_user_info (gc_get_tls (gc), P->id, 0, tgp_info_load_user_done, P);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
28
tgp-info.h
Normal file
28
tgp-info.h
Normal file
|
@ -0,0 +1,28 @@
|
|||
/*
|
||||
This file is part of telegram-purple
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
|
||||
|
||||
Copyright Matthias Jentsch 2016
|
||||
*/
|
||||
|
||||
#ifndef tgp_info_h
|
||||
#define tgp_info_h
|
||||
|
||||
#include "telegram-purple.h"
|
||||
|
||||
#define TGP_INFO_PHOTO_ID "tgp_photo_id"
|
||||
void tgp_info_update_photo (PurpleBlistNode *node, tgl_peer_t *P);
|
||||
void tgprpl_info_show (PurpleConnection *gc, const char *who);
|
||||
#endif
|
659
tgp-msg.c
659
tgp-msg.c
|
@ -15,7 +15,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
|
||||
|
||||
Copyright Matthias Jentsch 2014-2015
|
||||
Copyright Matthias Jentsch 2014-2016
|
||||
*/
|
||||
|
||||
#include "telegram-purple.h"
|
||||
|
@ -43,15 +43,15 @@ g_utf8_substring (const gchar *str,
|
|||
#endif
|
||||
|
||||
static char *format_service_msg (struct tgl_state *TLS, struct tgl_message *M) {
|
||||
assert (M && M->flags & TGLMF_SERVICE);
|
||||
g_return_val_if_fail(M && M->flags & TGLMF_SERVICE, NULL);
|
||||
|
||||
connection_data *conn = TLS->ev_base;
|
||||
char *txt = NULL;
|
||||
|
||||
tgl_peer_t *fromPeer = tgl_peer_get (TLS, M->from_id);
|
||||
if (! fromPeer) {
|
||||
return NULL;
|
||||
}
|
||||
char *txt_user = fromPeer->print_name;
|
||||
g_return_val_if_fail(fromPeer != NULL, NULL);
|
||||
|
||||
const char *txt_user = fromPeer->print_name;
|
||||
|
||||
switch (M->action.type) {
|
||||
case tgl_message_action_chat_create:
|
||||
|
@ -81,14 +81,17 @@ static char *format_service_msg (struct tgl_state *TLS, struct tgl_message *M) {
|
|||
}
|
||||
break;
|
||||
}
|
||||
case tgl_message_action_chat_add_user: {
|
||||
tgl_peer_t *peer = tgl_peer_get (TLS, TGL_MK_USER (M->action.user));
|
||||
if (peer) {
|
||||
char *alias = peer->print_name;
|
||||
txt = g_strdup_printf (_("%2$s added user %1$s."), alias, txt_user);
|
||||
PurpleConversation *conv = purple_find_chat (conn->gc, tgl_get_peer_id (M->to_id));
|
||||
if (conv) {
|
||||
p2tgl_conv_add_user (TLS, conv, M->action.user, NULL, 0, FALSE);
|
||||
case tgl_message_action_chat_add_users: {
|
||||
int i;
|
||||
for (i = 0; i < M->action.user_num; ++i) {
|
||||
tgl_peer_t *peer = tgl_peer_get (TLS, TGL_MK_USER (M->action.users[i]));
|
||||
if (peer) {
|
||||
char *alias = peer->print_name;
|
||||
txt = g_strdup_printf (_("%2$s added user %1$s."), alias, txt_user);
|
||||
PurpleConversation *conv = purple_find_chat (conn->gc, tgl_get_peer_id (M->to_id));
|
||||
if (conv) {
|
||||
p2tgl_conv_add_user (TLS, conv, M->action.users[i], NULL, 0, FALSE);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -98,11 +101,11 @@ static char *format_service_msg (struct tgl_state *TLS, struct tgl_message *M) {
|
|||
if (peer) {
|
||||
|
||||
tgl_peer_t *chatPeer = tgl_peer_get (TLS, M->to_id);
|
||||
assert (tgl_get_peer_type(chatPeer->id) == TGL_PEER_CHAT);
|
||||
g_return_val_if_fail(tgl_get_peer_type (chatPeer->id) == TGL_PEER_CHAT, NULL);
|
||||
|
||||
// make sure that the chat is showing before deleting the user, otherwise the chat will be
|
||||
// initialised after removing the chat and the chat will still contain the deleted user
|
||||
PurpleConversation *conv = tgp_chat_show (TLS, &chatPeer->chat);
|
||||
PurpleConversation *conv = tgp_chat_show (TLS, chatPeer);
|
||||
if (conv) {
|
||||
char *alias = peer->print_name;
|
||||
const char *aliasLeft = tgp_blist_lookup_purple_name (TLS, TGL_MK_USER (M->action.user));
|
||||
|
@ -155,7 +158,15 @@ static char *format_service_msg (struct tgl_state *TLS, struct tgl_message *M) {
|
|||
M->action.screenshot_cnt),
|
||||
M->action.screenshot_cnt, txt_user);
|
||||
break;
|
||||
case tgl_message_action_channel_create: {
|
||||
txt = g_strdup_printf (_("Channel %1$s created"), M->action.title);
|
||||
|
||||
// FIXME: check if this makes sense
|
||||
tgp_chat_blist_store (TLS, fromPeer, _("Telegram Channels"));
|
||||
break;
|
||||
}
|
||||
default:
|
||||
g_warn_if_reached();
|
||||
break;
|
||||
}
|
||||
return txt;
|
||||
|
@ -180,10 +191,11 @@ static void tgp_msg_send_done (struct tgl_state *TLS, void *callback_extra, int
|
|||
char *err = _("Sending message failed.");
|
||||
warning (err);
|
||||
if (M) {
|
||||
tgp_msg_err_out (TLS, err, M->to_id);
|
||||
} else {
|
||||
fatal (err);
|
||||
tgp_msg_special_out (TLS, err, M->to_id, PURPLE_MESSAGE_ERROR | PURPLE_MESSAGE_NO_LOG);
|
||||
}
|
||||
assert (callback_extra != NULL);
|
||||
warning ("Code %d: %s\n", TLS->error_code, TLS->error);
|
||||
warning ("Message was: %s\n", (char *) callback_extra);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -197,79 +209,41 @@ static gboolean tgp_msg_send_schedule_cb (gpointer data) {
|
|||
while ((D = g_queue_peek_head (conn->out_messages))) {
|
||||
g_queue_pop_head (conn->out_messages);
|
||||
|
||||
// TODO: option for disable_msg_preview
|
||||
tgl_do_send_message (D->TLS, D->to, D->msg, (int)strlen (D->msg), 0, NULL, tgp_msg_send_done, NULL);
|
||||
unsigned long long flags = TGLMF_HTML;
|
||||
if (tgl_get_peer_type (D->to) == TGL_PEER_CHANNEL
|
||||
&& !(tgl_peer_get (conn->TLS, D->to)->channel.flags & TGLCHF_MEGAGROUP)) {
|
||||
flags |= TGLMF_POST_AS_CHANNEL;
|
||||
}
|
||||
|
||||
tgl_do_send_message (D->TLS, D->to, D->msg, (int)strlen (D->msg), flags, NULL, tgp_msg_send_done, D->msg);
|
||||
tgp_msg_sending_free (D);
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void tgp_msg_send_schedule (struct tgl_state *TLS, gchar *chunk, tgl_peer_id_t to) {
|
||||
g_queue_push_tail (tls_get_data (TLS)->out_messages, tgp_msg_sending_init (TLS, chunk, to));
|
||||
static void tgp_msg_send_schedule (struct tgl_state *TLS, const char *chunk, tgl_peer_id_t to) {
|
||||
g_queue_push_tail (tls_get_data (TLS)->out_messages, tgp_msg_sending_init (TLS, g_strdup (chunk), to));
|
||||
if (tls_get_data (TLS)->out_timer) {
|
||||
purple_timeout_remove (tls_get_data (TLS)->out_timer);
|
||||
}
|
||||
tls_get_data (TLS)->out_timer = purple_timeout_add (0, tgp_msg_send_schedule_cb, tls_get_data (TLS));
|
||||
}
|
||||
|
||||
static int tgp_msg_send_split (struct tgl_state *TLS, const char *message, tgl_peer_id_t to) {
|
||||
int size = (int)g_utf8_strlen (message, -1), start = 0;
|
||||
|
||||
if (size > TGP_MAX_MSG_SIZE * TGP_DEFAULT_MAX_MSG_SPLIT_COUNT) {
|
||||
return -E2BIG;
|
||||
}
|
||||
while (size > start) {
|
||||
int end = start + (int)TGP_MAX_MSG_SIZE;
|
||||
if (end > size) {
|
||||
end = size;
|
||||
}
|
||||
gchar *chunk = g_utf8_substring (message, start, end);
|
||||
tgp_msg_send_schedule (TLS, chunk, to);
|
||||
start = end;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
void tgp_msg_err_out (struct tgl_state *TLS, const char *error, tgl_peer_id_t to) {
|
||||
int flags = PURPLE_MESSAGE_ERROR | PURPLE_MESSAGE_SYSTEM;
|
||||
time_t now;
|
||||
time (&now);
|
||||
switch (tgl_get_peer_type (to)) {
|
||||
case TGL_PEER_CHAT:
|
||||
p2tgl_got_chat_in (TLS, to, to, error, flags, now);
|
||||
break;
|
||||
case TGL_PEER_USER:
|
||||
case TGL_PEER_ENCR_CHAT:
|
||||
serv_got_im (tls_get_conn (TLS), tgp_blist_lookup_purple_name (TLS, to), error, flags, now);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void tgp_msg_sys_out (struct tgl_state *TLS, const char *msg, tgl_peer_id_t to_id, int no_log) {
|
||||
int flags = PURPLE_MESSAGE_SYSTEM;
|
||||
if (no_log) {
|
||||
flags |= PURPLE_MESSAGE_NO_LOG;
|
||||
}
|
||||
time_t now;
|
||||
time (&now);
|
||||
|
||||
switch (tgl_get_peer_type (to_id)) {
|
||||
case TGL_PEER_CHAT:
|
||||
p2tgl_got_chat_in (TLS, to_id, to_id, msg, flags, now);
|
||||
break;
|
||||
case TGL_PEER_USER:
|
||||
case TGL_PEER_ENCR_CHAT: {
|
||||
const char *name = tgp_blist_lookup_purple_name (TLS, to_id);
|
||||
PurpleConversation *conv = p2tgl_find_conversation_with_account (TLS, to_id);
|
||||
|
||||
g_return_if_fail (name);
|
||||
|
||||
if (! conv) {
|
||||
conv = purple_conversation_new (PURPLE_CONV_TYPE_IM, tls_get_pa (TLS), name);
|
||||
}
|
||||
purple_conversation_write (conv, name, msg, flags, now);
|
||||
break;
|
||||
void tgp_msg_special_out (struct tgl_state *TLS, const char *msg, tgl_peer_id_t to_id, int flags) {
|
||||
if (tgl_get_peer_type (to_id) == TGL_PEER_CHAT) {
|
||||
tgp_chat_got_in (TLS, tgl_peer_get (TLS, to_id), to_id, msg, flags, time(0));
|
||||
} else {
|
||||
// Regular IM conversations will not display specialized message flags like PURPLE_MESSAGE_ERROR or
|
||||
// PURPLE_MESSAGE_SYSTEM correctly when using serv_got_in, therefore it is necessary to use the underlying
|
||||
// conversation directly.
|
||||
const char *name = tgp_blist_lookup_purple_name (TLS, to_id);
|
||||
PurpleConversation *conv = p2tgl_find_conversation_with_account (TLS, to_id);
|
||||
g_return_if_fail (name);
|
||||
if (! conv) {
|
||||
// if the conversation isn't open yet, create one with that name
|
||||
conv = purple_conversation_new (PURPLE_CONV_TYPE_IM, tls_get_pa (TLS), name);
|
||||
}
|
||||
purple_conversation_write (conv, name, msg, flags, time(0));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -278,83 +252,137 @@ void send_inline_picture_done (struct tgl_state *TLS, void *extra, int success,
|
|||
char *errormsg = g_strdup_printf ("%d: %s", TLS->error_code, TLS->error);
|
||||
failure (errormsg);
|
||||
purple_notify_message (_telegram_protocol, PURPLE_NOTIFY_MSG_ERROR, _("Sending image failed."),
|
||||
errormsg, NULL, NULL, NULL);
|
||||
errormsg, NULL, NULL, NULL);
|
||||
g_free (errormsg);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static GList *tgp_msg_imgs_parse (const char *msg) {
|
||||
GList *imgs = NULL;
|
||||
|
||||
int i;
|
||||
int len = (int) strlen (msg);
|
||||
for (i = 0; i < len; i ++) {
|
||||
if (len - i >= 4 && (! memcmp (msg + i, "<IMG", 4) || ! memcmp (msg + i, "<img", 4))) {
|
||||
i += 4;
|
||||
|
||||
int e = i;
|
||||
while (msg[++ e] != '>' && e < len) {}
|
||||
|
||||
gchar *id = NULL;
|
||||
if ((id = g_strstr_len (msg + i, e - i, "ID=\"")) || (id = g_strstr_len (msg + i, e - i, "id=\""))) {
|
||||
int img = atoi (id + 4);
|
||||
debug ("parsed img id %d", img);
|
||||
if (img > 0) {
|
||||
PurpleStoredImage *psi = purple_imgstore_find_by_id (img);
|
||||
if (psi) {
|
||||
imgs = g_list_append (imgs, psi);
|
||||
} else {
|
||||
g_warn_if_reached();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
g_warn_if_reached();
|
||||
}
|
||||
|
||||
i = e;
|
||||
}
|
||||
}
|
||||
return imgs;
|
||||
}
|
||||
|
||||
static char *tgp_msg_markdown_convert (const char *msg) {
|
||||
int len = (int) strlen (msg);
|
||||
char *html = g_new0(gchar, 3 * len);
|
||||
|
||||
int open = FALSE;
|
||||
int i, j;
|
||||
for (i = 0, j = 0; i < len; i ++) {
|
||||
// markdown for bold and italic doesn't seem to work with non-bots, therefore only parse code-tags
|
||||
if (len - i < 3 || (memcmp (msg + i, "```", 3))) {
|
||||
html[j ++] = msg[i];
|
||||
} else {
|
||||
i += 2;
|
||||
if (! open) {
|
||||
assert(j + 6 < 3 * len);
|
||||
memcpy(html + j, "<code>", 6);
|
||||
j += 6;
|
||||
} else {
|
||||
assert(j + 7 < 3 * len);
|
||||
memcpy(html + j, "</code>", 7);
|
||||
j += 7;
|
||||
}
|
||||
open = ! open;
|
||||
}
|
||||
}
|
||||
html[j] = 0;
|
||||
return html;
|
||||
}
|
||||
|
||||
int tgp_msg_send (struct tgl_state *TLS, const char *message, tgl_peer_id_t to) {
|
||||
|
||||
#ifndef __ADIUM_
|
||||
// search for outgoing embedded image tags and send them
|
||||
gchar *img = NULL;
|
||||
gchar *stripped = NULL;
|
||||
|
||||
if ((img = g_strrstr (message, "<IMG")) || (img = g_strrstr (message, "<img"))) {
|
||||
if (tgl_get_peer_type(to) == TGL_PEER_ENCR_CHAT) {
|
||||
tgp_msg_err_out (TLS, _("Sorry, sending documents to encrypted chats not yet supported."), to);
|
||||
return 0;
|
||||
// send all inline images
|
||||
GList *imgs = tgp_msg_imgs_parse (message);
|
||||
debug ("parsed %d images in messages", g_list_length (imgs));
|
||||
while (imgs) {
|
||||
PurpleStoredImage *psi = imgs->data;
|
||||
gchar *tmp = g_build_filename (g_get_tmp_dir(), purple_imgstore_get_filename (psi), NULL) ;
|
||||
GError *err = NULL;
|
||||
gconstpointer data = purple_imgstore_get_data (psi);
|
||||
g_file_set_contents (tmp, data, purple_imgstore_get_size (psi), &err);
|
||||
if (! err) {
|
||||
debug ("sending img='%s'", tmp);
|
||||
tgl_do_send_document (TLS, to, tmp, NULL, 0,
|
||||
TGL_SEND_MSG_FLAG_DOCUMENT_AUTO | (tgl_get_peer_type (to) == TGL_PEER_CHANNEL) ? TGLMF_POST_AS_CHANNEL : 0,
|
||||
send_inline_picture_done, NULL);
|
||||
} else {
|
||||
failure ("error=%s", err->message);
|
||||
g_warn_if_reached();
|
||||
}
|
||||
debug ("img found: %s", img);
|
||||
gchar *id;
|
||||
if ((id = g_strrstr (img, "ID=\"")) || (id = g_strrstr (img, "id=\""))) {
|
||||
id += 4;
|
||||
int imgid = atoi (id);
|
||||
if (imgid > 0) {
|
||||
PurpleStoredImage *psi = purple_imgstore_find_by_id (imgid);
|
||||
if (! psi) {
|
||||
failure ("Img %d not found in imgstore", imgid);
|
||||
return -1;
|
||||
}
|
||||
gchar *tmp = g_build_filename (g_get_tmp_dir(), purple_imgstore_get_filename (psi), NULL) ;
|
||||
GError *err = NULL;
|
||||
gconstpointer data = purple_imgstore_get_data (psi);
|
||||
g_file_set_contents (tmp, data, purple_imgstore_get_size (psi), &err);
|
||||
if (! err) {
|
||||
stripped = g_strstrip(purple_markup_strip_html (message));
|
||||
tgl_do_send_document (TLS, to, tmp, stripped, (int)strlen (stripped),
|
||||
TGL_SEND_MSG_FLAG_DOCUMENT_AUTO, send_inline_picture_done, NULL);
|
||||
g_free (stripped);
|
||||
|
||||
// return 0 to assure that the picture is not echoed, since
|
||||
// it will already be echoed with the outgoing message
|
||||
return 0;
|
||||
} else {
|
||||
failure ("Storing %s in imagestore failed: %s\n", tmp, err->message);
|
||||
g_error_free (err);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
// no image id found in image
|
||||
return -1;
|
||||
imgs = g_list_next(imgs);
|
||||
}
|
||||
|
||||
/*
|
||||
Adium won't escape any HTML markup and just pass any user-input through,
|
||||
while Pidgin will replace special chars with the escape chars and also add
|
||||
additional markup for RTL languages and such.
|
||||
// replace markdown with html
|
||||
char *html = g_strstrip(tgp_msg_markdown_convert (message));
|
||||
|
||||
// check message length
|
||||
int size = (int) g_utf8_strlen (html, -1);
|
||||
if (size == 0) {
|
||||
g_free (html);
|
||||
return 0; // fail quietly on empty messages
|
||||
}
|
||||
if (size > TGP_MAX_MSG_SIZE * TGP_DEFAULT_MAX_MSG_SPLIT_COUNT) {
|
||||
g_free (html);
|
||||
return -E2BIG;
|
||||
}
|
||||
|
||||
First, we remove any HTML markup added by Pidgin, since Telegram won't handle it properly.
|
||||
User-entered HTML is still escaped and therefore won't be harmed.
|
||||
*/
|
||||
stripped = purple_markup_strip_html (message);
|
||||
// send big message as multiple chunks
|
||||
int start = 0;
|
||||
while (size > start) {
|
||||
int end = start + (int)TGP_MAX_MSG_SIZE;
|
||||
if (end > size) {
|
||||
end = size;
|
||||
}
|
||||
char *chunk = g_utf8_substring (html, start, end);
|
||||
tgp_msg_send_schedule (TLS, chunk, to);
|
||||
start = end;
|
||||
}
|
||||
|
||||
// now unescape the markup, so that html special chars will still show
|
||||
// up properly in Telegram
|
||||
gchar *unescaped = purple_unescape_text (stripped);
|
||||
int ret = tgp_msg_send_split (TLS, stripped, to);
|
||||
g_free (html);
|
||||
|
||||
g_free (unescaped);
|
||||
g_free (stripped);
|
||||
return ret;
|
||||
#endif
|
||||
|
||||
// when the other peer receives a message it is obvious that the previous messages were read
|
||||
pending_reads_send_user (TLS, to);
|
||||
|
||||
return tgp_msg_send_split (TLS, message, to);
|
||||
// return 0 to assure that the picture is not echoed, since
|
||||
// it will already be echoed with the outgoing message
|
||||
return 0;
|
||||
}
|
||||
|
||||
static char *tgp_msg_file_display (const char *path, const char *filename, const char* caption, const char *mime, long long size) {
|
||||
gchar *fsize = g_format_size(size);
|
||||
gchar *format;
|
||||
format = g_strdup_printf ("[%s <a href=\"file:///%s\">%s</a> %s %s]", g_markup_escape_text (caption, -1), g_markup_escape_text (path, -1),
|
||||
g_markup_escape_text (filename, -1), g_markup_escape_text (mime, -1), fsize);
|
||||
g_free (fsize);
|
||||
return format;
|
||||
}
|
||||
|
||||
static char *tgp_msg_photo_display (struct tgl_state *TLS, const char *filename, int *flags) {
|
||||
|
@ -394,7 +422,6 @@ static char *tgp_msg_sticker_display (struct tgl_state *TLS, tgl_peer_id_t from,
|
|||
}
|
||||
|
||||
static void tgp_msg_display (struct tgl_state *TLS, struct tgp_msg_loading *C) {
|
||||
connection_data *conn = TLS->ev_base;
|
||||
struct tgl_message *M = C->msg;
|
||||
char *text = NULL;
|
||||
int flags = 0;
|
||||
|
@ -410,15 +437,35 @@ static void tgp_msg_display (struct tgl_state *TLS, struct tgp_msg_loading *C) {
|
|||
return;
|
||||
}
|
||||
|
||||
// only display new messages, ignore updates or deletions
|
||||
if (!M->message || tgp_outgoing_msg (TLS, M) || !tgl_get_peer_type (M->to_id)) {
|
||||
#ifdef __ADIUM_
|
||||
// prevent double messages in Adium >= v1.6
|
||||
if (tgp_outgoing_msg (TLS, M)
|
||||
&& tgl_get_peer_type (M->to_id) != TGL_PEER_CHANNEL
|
||||
&& tgl_get_peer_type (M->to_id) != TGL_PEER_CHAT) {
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
// filter empty messages or messages with invalid recipients
|
||||
if (! M->message || !tgl_get_peer_type (M->to_id)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Mark messages that contain a mention like if they contained our current nick name
|
||||
// Mark messages that contain a mention as if they contained our current nick name
|
||||
// FIXME: doesn't work in Adium
|
||||
if (M->flags & TGLMF_MENTION) {
|
||||
flags |= PURPLE_MESSAGE_NICK;
|
||||
}
|
||||
|
||||
// handle messages that failed to load
|
||||
if (C->error) {
|
||||
const char *err = C->error_msg;
|
||||
if (! err) {
|
||||
err = _("failed loading message");
|
||||
}
|
||||
tgp_msg_special_out (TLS, err, tgp_our_msg (TLS, M) ? M->from_id : M->to_id, PURPLE_MESSAGE_ERROR);
|
||||
return;
|
||||
}
|
||||
|
||||
// format the message text
|
||||
if (M->flags & TGLMF_SERVICE) {
|
||||
|
@ -430,7 +477,8 @@ static void tgp_msg_display (struct tgl_state *TLS, struct tgp_msg_loading *C) {
|
|||
|
||||
case tgl_message_media_photo: {
|
||||
if (M->media.photo) {
|
||||
assert (C->data);
|
||||
g_return_if_fail(C->data != NULL);
|
||||
|
||||
text = tgp_msg_photo_display (TLS, C->data, &flags);
|
||||
if (str_not_empty (text)) {
|
||||
if (str_not_empty (M->media.caption)) {
|
||||
|
@ -444,40 +492,73 @@ static void tgp_msg_display (struct tgl_state *TLS, struct tgp_msg_loading *C) {
|
|||
}
|
||||
|
||||
case tgl_message_media_document:
|
||||
|
||||
if (M->media.document->flags & TGLDF_STICKER) {
|
||||
assert (C->data);
|
||||
g_return_if_fail(C->data != NULL);
|
||||
text = tgp_msg_sticker_display (TLS, M->from_id, C->data, &flags);
|
||||
|
||||
} else if (M->media.document->flags & TGLDF_ANIMATED) {
|
||||
g_return_if_fail(C->data != NULL);
|
||||
text = tgp_msg_file_display (C->data, M->media.document->caption, _("animation"),
|
||||
M->media.document->mime_type, M->media.document->size);
|
||||
|
||||
} else if (M->media.document->flags & TGLDF_IMAGE) {
|
||||
assert (C->data);
|
||||
g_return_if_fail(C->data != NULL);
|
||||
text = tgp_msg_photo_display (TLS, C->data, &flags);
|
||||
|
||||
} else {
|
||||
if (! tgp_our_msg(TLS, M)) {
|
||||
tgprpl_recv_file (conn->gc, tgp_blist_lookup_purple_name (TLS, M->from_id), M);
|
||||
if (! tgp_our_msg (TLS, M)) {
|
||||
if (C->data) {
|
||||
text = tgp_msg_file_display (C->data, M->media.document->caption, _("document"),
|
||||
M->media.document->mime_type, M->media.document->size);
|
||||
} else {
|
||||
tgprpl_recv_file (tls_get_conn (TLS), tgp_blist_lookup_purple_name (TLS, M->from_id), M);
|
||||
return;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case tgl_message_media_video:
|
||||
case tgl_message_media_audio: {
|
||||
if (! tgp_our_msg(TLS, M)) {
|
||||
tgprpl_recv_file (conn->gc, tgp_blist_lookup_purple_name (TLS, M->from_id), M);
|
||||
if (! tgp_our_msg (TLS, M)) {
|
||||
if (C->data) {
|
||||
const char *filename = C->data + strlen(C->data) - 1;
|
||||
while (filename > (char *)C->data && *filename != G_DIR_SEPARATOR) {
|
||||
filename --;
|
||||
}
|
||||
filename ++;
|
||||
text = tgp_msg_file_display (C->data, filename,
|
||||
M->media.type == tgl_message_media_audio ? _("audio") : _("video"),
|
||||
M->media.document->mime_type, M->media.document->size);
|
||||
} else {
|
||||
tgprpl_recv_file (tls_get_conn (TLS), tgp_blist_lookup_purple_name (TLS, M->from_id), M);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case tgl_message_media_document_encr:
|
||||
if (M->media.encr_document->flags & TGLDF_STICKER) {
|
||||
assert (C->data);
|
||||
g_return_if_fail(C->data != NULL);
|
||||
text = tgp_msg_sticker_display (TLS, M->from_id, C->data, &flags);
|
||||
|
||||
} if (M->media.encr_document->flags & TGLDF_IMAGE) {
|
||||
assert (C->data);
|
||||
g_return_if_fail(C->data != NULL);
|
||||
text = tgp_msg_photo_display (TLS, C->data, &flags);
|
||||
|
||||
} else {
|
||||
if (! tgp_our_msg(TLS, M)) {
|
||||
tgprpl_recv_file (conn->gc, tgp_blist_lookup_purple_name (TLS, M->to_id), M);
|
||||
if (! tgp_our_msg (TLS, M)) {
|
||||
if (C->data) {
|
||||
text = tgp_msg_file_display (C->data, M->media.encr_document->caption, _("document"),
|
||||
M->media.encr_document->mime_type, M->media.encr_document->size);
|
||||
|
||||
} else {
|
||||
tgprpl_recv_file (tls_get_conn (TLS), tgp_blist_lookup_purple_name (TLS, M->to_id), M);
|
||||
return;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -527,7 +608,9 @@ static void tgp_msg_display (struct tgl_state *TLS, struct tgp_msg_loading *C) {
|
|||
flags |= PURPLE_MESSAGE_RECV;
|
||||
}
|
||||
|
||||
if (tgl_get_peer_type (M->to_id) != TGL_PEER_ENCR_CHAT && ! (M->flags & TGLMF_UNREAD)) {
|
||||
if (tgl_get_peer_type (M->to_id) != TGL_PEER_ENCR_CHAT
|
||||
&& tgl_get_peer_type (M->to_id) != TGL_PEER_CHANNEL
|
||||
&& ! (M->flags & TGLMF_UNREAD)) {
|
||||
flags |= PURPLE_MESSAGE_DELAYED;
|
||||
}
|
||||
|
||||
|
@ -536,14 +619,66 @@ static void tgp_msg_display (struct tgl_state *TLS, struct tgp_msg_loading *C) {
|
|||
if (! str_not_empty (text)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// Handle forwarded messages
|
||||
if (tgl_get_peer_id (M->fwd_from_id) != TGL_PEER_UNKNOWN) {
|
||||
const char *name;
|
||||
tgl_peer_t *FP = tgl_peer_get (TLS, M->fwd_from_id);
|
||||
|
||||
char *tmp = text;
|
||||
if (FP) {
|
||||
name = FP->print_name;
|
||||
text = g_strdup_printf (_("<b>Forwarded message from: %s</b><br>%s"), name, text);
|
||||
} else {
|
||||
// FIXME: sometimes users aren't part of the response when receiving a forwarded message
|
||||
text = g_strdup_printf (_("<b>Forwarded message:</b><br>%s"), text);
|
||||
}
|
||||
g_free (tmp);
|
||||
}
|
||||
|
||||
/*
|
||||
FIXME: message lookup doesn't work
|
||||
// Handle replies
|
||||
if (M->reply_id > 0) {
|
||||
tgl_message_id_t id;
|
||||
id.peer_type = TGL_PEER_USER;
|
||||
id.id = M->reply_id;
|
||||
|
||||
const char *msg = "Unkown Message";
|
||||
struct tgl_message *MM = tgl_message_get (TLS, &id);
|
||||
if (MM) {
|
||||
msg = MM->message;
|
||||
}
|
||||
const char *usr = "Unknown User";
|
||||
if (MM) {
|
||||
tgl_peer_t *P = tgl_peer_get (TLS, MM->from_id);
|
||||
usr = P->print_name;
|
||||
}
|
||||
g_free (text);
|
||||
text = g_strdup_printf (_("<b>%s: %s</b><br>%s"), msg, usr, M->message);
|
||||
}
|
||||
*/
|
||||
|
||||
// display the message to the user
|
||||
switch (tgl_get_peer_type (M->to_id)) {
|
||||
case TGL_PEER_CHANNEL: {
|
||||
tgl_peer_t *P = tgl_peer_get (TLS, M->to_id);
|
||||
g_return_if_fail(P != NULL);
|
||||
|
||||
if (P->channel.flags & TGLCHF_MEGAGROUP) {
|
||||
// sender is the group
|
||||
tgp_chat_got_in (TLS, P, M->from_id, text, flags, M->date);
|
||||
} else {
|
||||
|
||||
// sender is the channel itself
|
||||
tgp_chat_got_in (TLS, P, P->id, text, flags, M->date);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case TGL_PEER_CHAT: {
|
||||
tgl_peer_t *P = tgl_peer_get (TLS, M->to_id);
|
||||
if (tgp_chat_show (TLS, &P->chat)) {
|
||||
p2tgl_got_chat_in (TLS, M->to_id, M->from_id, text, flags, M->date);
|
||||
}
|
||||
g_return_if_fail(P != NULL);
|
||||
tgp_chat_got_in (TLS, P, M->from_id, text, flags, M->date);
|
||||
break;
|
||||
}
|
||||
case TGL_PEER_ENCR_CHAT: {
|
||||
|
@ -561,7 +696,6 @@ static void tgp_msg_display (struct tgl_state *TLS, struct tgp_msg_loading *C) {
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
g_free (text);
|
||||
}
|
||||
|
||||
|
@ -584,44 +718,89 @@ static void tgp_msg_process_in_ready (struct tgl_state *TLS) {
|
|||
|
||||
tgp_msg_display (TLS, C);
|
||||
pending_reads_add (TLS, C->msg);
|
||||
pending_reads_send_all (TLS);
|
||||
|
||||
|
||||
if (C->data) {
|
||||
g_free (C->data);
|
||||
}
|
||||
|
||||
if (C->error_msg) {
|
||||
g_free (C->error_msg);
|
||||
}
|
||||
|
||||
tgp_msg_loading_free (C);
|
||||
}
|
||||
pending_reads_send_all (TLS);
|
||||
|
||||
debug ("tgp_msg_process_in_ready, queue size=%d", g_queue_get_length (conn->new_messages));
|
||||
}
|
||||
|
||||
static void tgp_msg_on_loaded_document (struct tgl_state *TLS, void *extra, int success, const char *filename) {
|
||||
debug ("tgp_msg_on_loaded_document()");
|
||||
assert (success);
|
||||
|
||||
|
||||
struct tgp_msg_loading *C = extra;
|
||||
C->data = (void *) g_strdup (filename);
|
||||
|
||||
if (success) {
|
||||
C->data = (void *) g_strdup (filename);
|
||||
} else {
|
||||
g_warn_if_reached();
|
||||
C->error = TRUE;
|
||||
C->error_msg = g_strdup (_("loading document or picture failed"));
|
||||
}
|
||||
|
||||
-- C->pending;
|
||||
tgp_msg_process_in_ready (TLS);
|
||||
}
|
||||
|
||||
static void tgp_msg_on_loaded_chat_full (struct tgl_state *TLS, void *extra, int success, struct tgl_chat *chat) {
|
||||
debug ("tgp_msg_on_loaded_chat_full()");
|
||||
assert (success);
|
||||
|
||||
tgp_chat_on_loaded_chat_full (TLS, chat);
|
||||
|
||||
if (! success) {
|
||||
// foreign user's names won't be displayed in the user list
|
||||
g_warn_if_reached();
|
||||
}
|
||||
|
||||
struct tgp_msg_loading *C = extra;
|
||||
-- C->pending;
|
||||
|
||||
tgp_msg_process_in_ready (TLS);
|
||||
}
|
||||
|
||||
static void tgp_msg_on_loaded_channel_history (struct tgl_state *TLS, void *extra, int success, tgl_peer_t *P) {
|
||||
|
||||
struct tgp_msg_loading *C = extra;
|
||||
-- C->pending;
|
||||
|
||||
tgp_msg_process_in_ready (TLS);
|
||||
}
|
||||
|
||||
/*
|
||||
static void tgp_msg_on_loaded_user_full (struct tgl_state *TLS, void *extra, int success, struct tgl_user *U) {
|
||||
debug ("tgp_msg_on_loaded_user_full()");
|
||||
|
||||
struct tgp_msg_loading *C = extra;
|
||||
-- C->pending;
|
||||
tgp_msg_process_in_ready (TLS);
|
||||
}
|
||||
*/
|
||||
|
||||
void tgp_msg_recv (struct tgl_state *TLS, struct tgl_message *M) {
|
||||
connection_data *conn = TLS->ev_base;
|
||||
/*
|
||||
Libpurple message history is immutable and cannot be changed after printing a message.
|
||||
TGP currently keeps the first-in first-out queue *new_messages* to ensure that
|
||||
the messages are being printed in the correct order. When its necessary to fetch
|
||||
additional info (like attached pictures) before this can be done, the queue will hold
|
||||
all newer messages until the old message was completely loaded.
|
||||
*/
|
||||
void tgp_msg_recv (struct tgl_state *TLS, struct tgl_message *M, GList *before) {
|
||||
debug ("tgp_msg_recv before=%p server_id=%lld", before, M->server_id);
|
||||
|
||||
if (M->flags & (TGLMF_EMPTY | TGLMF_DELETED)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(M->flags & TGLMF_CREATED)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(M->flags | TGLMF_UNREAD) && M->date != 0 && M->date < tgp_msg_oldest_relevant_ts (TLS)) {
|
||||
debug ("Message from %d on %d too old, ignored.", tgl_get_peer_id (M->from_id), M->date);
|
||||
return;
|
||||
|
@ -629,6 +808,33 @@ void tgp_msg_recv (struct tgl_state *TLS, struct tgl_message *M) {
|
|||
|
||||
struct tgp_msg_loading *C = tgp_msg_loading_init (M);
|
||||
|
||||
/*
|
||||
For non-channels telegram ensures that tgp receives the messages in the correct order, but in channels
|
||||
there may be holes that need to be filled before the message log can be printed. This means that the
|
||||
queue may not be processed until all historic messages have been fetched and the messages have been
|
||||
inserted into the correct position of the queue
|
||||
*/
|
||||
if (tgl_get_peer_type (C->msg->from_id) == TGL_PEER_CHANNEL
|
||||
|| tgl_get_peer_type (C->msg->to_id) == TGL_PEER_CHANNEL) {
|
||||
|
||||
tgl_peer_id_t id = tgl_get_peer_type (C->msg->from_id) == TGL_PEER_CHANNEL ?
|
||||
C->msg->from_id : C->msg->to_id;
|
||||
|
||||
if (! tgp_channel_loaded (TLS, id)) {
|
||||
++ C->pending;
|
||||
|
||||
tgp_channel_load (TLS, tgl_peer_get (TLS, id), tgp_msg_on_loaded_channel_history, C);
|
||||
}
|
||||
|
||||
if (tgp_chat_get_last_server_id (TLS, id) >= C->msg->server_id) {
|
||||
info ("dropping duplicate channel messages server_id=%lld", C->msg->server_id);
|
||||
return;
|
||||
}
|
||||
if (tgp_chat_get_last_server_id (TLS, id) == (int) C->msg->server_id - 1) {
|
||||
tgp_chat_set_last_server_id (TLS, id, (int) C->msg->server_id);
|
||||
}
|
||||
}
|
||||
|
||||
if (! (M->flags & TGLMF_SERVICE)) {
|
||||
|
||||
// handle all messages that need to load content before they can be displayed
|
||||
|
@ -636,8 +842,8 @@ void tgp_msg_recv (struct tgl_state *TLS, struct tgl_message *M) {
|
|||
switch (M->media.type) {
|
||||
case tgl_message_media_photo: {
|
||||
|
||||
// include the "bad photo" check from telegram-cli interface.c:3287 to avoid crashes when fetching history
|
||||
// TODO: find out the reason for this behavior
|
||||
// include the "bad photo" check from telegram-cli interface.c:3287 to avoid crashes
|
||||
// when fetching history. TODO: find out the reason for this behavior
|
||||
if (M->media.photo) {
|
||||
++ C->pending;
|
||||
tgl_do_load_photo (TLS, M->media.photo, tgp_msg_on_loaded_document, C);
|
||||
|
@ -646,56 +852,95 @@ void tgp_msg_recv (struct tgl_state *TLS, struct tgl_message *M) {
|
|||
}
|
||||
|
||||
// documents that are stickers or images will be displayed just like regular photo messages
|
||||
// and need to be lodaed beforehand
|
||||
// and need to be loaded beforehand
|
||||
case tgl_message_media_document:
|
||||
case tgl_message_media_video:
|
||||
case tgl_message_media_audio:
|
||||
if (M->media.document->flags & TGLDF_STICKER || M->media.document->flags & TGLDF_IMAGE) {
|
||||
if (M->media.document->flags & (TGLDF_STICKER | TGLDF_IMAGE)) {
|
||||
++ C->pending;
|
||||
tgl_do_load_document (TLS, M->media.document, tgp_msg_on_loaded_document, C);
|
||||
|
||||
} else {
|
||||
// adium doesn't support file links, autoloading media would mean that it
|
||||
// wouldn't be possible to show a usable link to the user
|
||||
#ifndef __ADIUM_
|
||||
if (M->media.document->size <= tls_get_media_threshold (TLS)) {
|
||||
++ C->pending;
|
||||
if (M->media.document->flags & TGLDF_AUDIO) {
|
||||
tgl_do_load_audio (TLS, M->media.document, tgp_msg_on_loaded_document, C);
|
||||
} else if (M->media.document->flags & TGLDF_VIDEO) {
|
||||
tgl_do_load_video (TLS, M->media.document, tgp_msg_on_loaded_document, C);
|
||||
} else {
|
||||
tgl_do_load_document (TLS, M->media.document, tgp_msg_on_loaded_document, C);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
|
||||
#ifndef __ADIUM_
|
||||
case tgl_message_media_video:
|
||||
if (M->media.document->size <= tls_get_media_threshold (TLS)) {
|
||||
++ C->pending;
|
||||
tgl_do_load_video (TLS, M->media.document, tgp_msg_on_loaded_document, C);
|
||||
}
|
||||
break;
|
||||
case tgl_message_media_audio:
|
||||
if (M->media.document->size <= tls_get_media_threshold (TLS)) {
|
||||
++ C->pending;
|
||||
tgl_do_load_audio (TLS, M->media.document, tgp_msg_on_loaded_document, C);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
case tgl_message_media_document_encr:
|
||||
if (M->media.encr_document->flags & TGLDF_STICKER || M->media.encr_document->flags & TGLDF_IMAGE) {
|
||||
++ C->pending;
|
||||
tgl_do_load_encr_document (TLS, M->media.encr_document, tgp_msg_on_loaded_document, C);
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case tgl_message_media_geo:
|
||||
// TODO: load geo thumbnail
|
||||
break;
|
||||
|
||||
default: // prevent Clang warnings ...
|
||||
|
||||
default:
|
||||
// prevent Clang warnings ...
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (tgl_get_peer_type (M->to_id) == TGL_PEER_CHAT) {
|
||||
|
||||
tgl_peer_t *peer = tgl_peer_get (TLS, M->to_id);
|
||||
assert (peer);
|
||||
|
||||
if (! peer->chat.user_list_size) {
|
||||
// To display a chat the full name of every single user is needed, but the updates received from the server only
|
||||
// contain the names of users mentioned in the events. In order to display a messages we always need to fetch the
|
||||
// full chat info first. If the user list is empty, this means that we still haven't fetched the full chat information.
|
||||
|
||||
// assure that there is only one chat info request for every
|
||||
// chat to avoid causing FLOOD_WAIT_X errors that will lead to delays or dropped messages
|
||||
gpointer to_ptr = GINT_TO_POINTER(tgl_get_peer_id (M->to_id));
|
||||
|
||||
if (! g_hash_table_lookup (conn->pending_chat_info, to_ptr)) {
|
||||
|
||||
/*
|
||||
To display a chat, the full name of every single user is needed, but the updates received from the server only
|
||||
contain the names of users mentioned in the events. In order to display a messages we always need to fetch the
|
||||
full chat info first. If the user list is empty, this means that we still haven't fetched the full chat
|
||||
information. Assure that there is only one chat info request for every chat to avoid causing FLOOD_WAIT_X
|
||||
errors that will lead to delays or dropped messages
|
||||
*/
|
||||
gpointer to_ptr = GINT_TO_POINTER(tgl_get_peer_id (M->to_id));
|
||||
|
||||
if (! g_hash_table_lookup (tls_get_data (TLS)->pending_chat_info, to_ptr)) {
|
||||
|
||||
if (tgl_get_peer_type (M->to_id) == TGL_PEER_CHAT) {
|
||||
tgl_peer_t *P = tgl_peer_get (TLS, M->to_id);
|
||||
g_warn_if_fail(P);
|
||||
|
||||
if (P && ! P->chat.user_list_size) {
|
||||
++ C->pending;
|
||||
|
||||
|
||||
tgl_do_get_chat_info (TLS, M->to_id, FALSE, tgp_msg_on_loaded_chat_full, C);
|
||||
g_hash_table_replace (conn->pending_chat_info, to_ptr, to_ptr);
|
||||
g_hash_table_replace (tls_get_data (TLS)->pending_chat_info, to_ptr, to_ptr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
g_queue_push_tail (conn->new_messages, C);
|
||||
|
||||
GList *b = g_queue_find (tls_get_data (TLS)->new_messages, before);
|
||||
if (b) {
|
||||
struct tgp_msg_loading *M = before->data;
|
||||
debug ("inserting before server_id=%lld", M->msg->server_id);
|
||||
g_queue_insert_before (tls_get_data (TLS)->new_messages, b, C);
|
||||
} else {
|
||||
g_queue_push_tail (tls_get_data (TLS)->new_messages, C);
|
||||
}
|
||||
tgp_msg_process_in_ready (TLS);
|
||||
}
|
||||
|
||||
|
|
10
tgp-msg.h
10
tgp-msg.h
|
@ -27,10 +27,10 @@
|
|||
* Loads embedded ressources like pictures or document thumbnails and ensures that
|
||||
* that all messages are still displayed in the original incoming order.
|
||||
*/
|
||||
void tgp_msg_recv (struct tgl_state *TLS, struct tgl_message *M);
|
||||
void tgp_msg_recv (struct tgl_state *TLS, struct tgl_message *M, GList *before);
|
||||
|
||||
/**
|
||||
* Process a message and send it the peer
|
||||
* Process a message and send it to the peer
|
||||
*
|
||||
* Removes all HTML escape chars and HTML markup, finds embedded images and sends
|
||||
* them as pictures and splits up messages that are too big for single Telegram
|
||||
|
@ -38,7 +38,9 @@ void tgp_msg_recv (struct tgl_state *TLS, struct tgl_message *M);
|
|||
*/
|
||||
int tgp_msg_send (struct tgl_state *TLS, const char *msg, tgl_peer_id_t to);
|
||||
|
||||
void tgp_msg_err_out (struct tgl_state *TLS, const char *error, tgl_peer_id_t to);
|
||||
void tgp_msg_sys_out (struct tgl_state *TLS, const char *msg, tgl_peer_id_t to_id, int no_log);
|
||||
/**
|
||||
* Print a special message in the conversation with a peer assuring that special flags are displayed
|
||||
*/
|
||||
void tgp_msg_special_out (struct tgl_state *TLS, const char *msg, tgl_peer_id_t to_id, int flags);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Copyright Vitaly Valtman 2013-2015
|
||||
Copyright Vitaly Valtman, Matthias Jentsch 2013-2015
|
||||
*/
|
||||
|
||||
#define _GNU_SOURCE
|
||||
|
|
113
tgp-request.c
113
tgp-request.c
|
@ -310,3 +310,116 @@ void request_value (struct tgl_state *TLS, enum tgl_value_type type, const char
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// delete contact
|
||||
|
||||
static void request_delete_contact_ok (struct request_values_data *data, PurpleRequestFields* fields) {
|
||||
tgl_peer_t *P = data->arg;
|
||||
g_return_if_fail(P);
|
||||
|
||||
switch (tgl_get_peer_type (P->id)) {
|
||||
case TGL_PEER_CHAT:
|
||||
g_warn_if_fail (P->chat.flags & TGLCF_LEFT);
|
||||
leave_and_delete_chat (data->TLS, P);
|
||||
break;
|
||||
|
||||
case TGL_PEER_ENCR_CHAT:
|
||||
tgl_do_discard_secret_chat (data->TLS, &P->encr_chat, NULL, NULL);
|
||||
break;
|
||||
|
||||
case TGL_PEER_USER:
|
||||
g_warn_if_fail(P->user.flags & TGLUF_CONTACT);
|
||||
tgl_do_del_contact (data->TLS, P->id, tgp_notify_on_error_gw, NULL);
|
||||
break;
|
||||
|
||||
case TGL_PEER_CHANNEL:
|
||||
g_warn_if_fail(P->channel.flags & TGLCHF_CREATOR);
|
||||
if (! (P->channel.flags & TGLCHF_LEFT)) {
|
||||
tgl_do_leave_channel (data->TLS, P->id, tgp_notify_on_error_gw, NULL);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
g_warn_if_reached();
|
||||
break;
|
||||
}
|
||||
|
||||
free (data);
|
||||
}
|
||||
|
||||
static void request_delete_contact_cancel (struct request_values_data *data, PurpleRequestFields* fields) {
|
||||
free (data);
|
||||
}
|
||||
|
||||
void tgprpl_request_delete_contact (PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) {
|
||||
const char *title1 = NULL,
|
||||
*title2 = NULL,
|
||||
*msg = NULL;
|
||||
|
||||
g_return_if_fail(buddy);
|
||||
|
||||
struct tgl_state *TLS = gc_get_tls (gc);
|
||||
|
||||
tgl_peer_t *P = tgp_blist_buddy_get_peer (buddy);
|
||||
g_return_if_fail(P);
|
||||
|
||||
switch (tgl_get_peer_type (P->id)) {
|
||||
case TGL_PEER_CHAT:
|
||||
if (! (P->chat.flags & TGLCF_LEFT)) {
|
||||
title1 = _("Leave Chat");
|
||||
title2 = title1;
|
||||
msg = _("Do you want to leave this chat permantently?");
|
||||
}
|
||||
break;
|
||||
|
||||
case TGL_PEER_ENCR_CHAT:
|
||||
title1 = _("Abort Secret Chat");
|
||||
title2 = title1;
|
||||
msg = _("Do you want to terminate this secret chat permantently?");
|
||||
break;
|
||||
|
||||
case TGL_PEER_USER:
|
||||
if (P->user.flags & TGLUF_CONTACT) {
|
||||
title1 = _("Delete Contact");
|
||||
title2 = title1;
|
||||
msg = _("Do you want to remove this user from your global contact list?");
|
||||
}
|
||||
break;
|
||||
|
||||
case TGL_PEER_CHANNEL:
|
||||
if (P->channel.flags & TGLCHF_CREATOR) {
|
||||
/*
|
||||
FIXME: Support destorying channels
|
||||
|
||||
title1 = _("Destroy Channel");
|
||||
title2 = title1;
|
||||
msg = _("You are admin of this channel, do you want to delete it permanently?");
|
||||
*/
|
||||
} else {
|
||||
if (! (P->channel.flags & TGLCHF_LEFT)) {
|
||||
title1 = _("Leave Channel");
|
||||
title2 = title1;
|
||||
msg = _("Do you want to leave this channel?");
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
g_warn_if_reached();
|
||||
break;
|
||||
}
|
||||
|
||||
if (msg) {
|
||||
purple_request_ok_cancel(tls_get_conn (TLS), title1, title2, msg, 0, tls_get_pa (TLS),
|
||||
tgp_blist_lookup_purple_name (TLS, P->id), NULL, (void *) request_values_data_init (TLS, 0, P, 0),
|
||||
request_delete_contact_ok, request_delete_contact_cancel);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// add new contact
|
||||
|
||||
void request_add_contact (struct tgl_state *TLS) {
|
||||
|
||||
}
|
||||
|
|
|
@ -43,4 +43,6 @@ void request_value (struct tgl_state *TLS, enum tgl_value_type type, const char
|
|||
void request_accept_secret_chat (struct tgl_state *TLS, struct tgl_secret_chat *U);
|
||||
void request_create_chat (struct tgl_state *TLS, const char *subject);
|
||||
|
||||
void tgprpl_request_delete_contact (PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -72,14 +72,14 @@ void tgp_msg_loading_free (gpointer data) {
|
|||
}
|
||||
|
||||
struct tgp_msg_loading *tgp_msg_loading_init (struct tgl_message *M) {
|
||||
struct tgp_msg_loading *C = malloc (sizeof (struct tgp_msg_loading));
|
||||
struct tgp_msg_loading *C = talloc0 (sizeof (struct tgp_msg_loading));
|
||||
C->pending = 0;
|
||||
C->msg = M;
|
||||
C->data = NULL;
|
||||
return C;
|
||||
}
|
||||
|
||||
struct tgp_msg_sending *tgp_msg_sending_init (struct tgl_state *TLS, gchar *M, tgl_peer_id_t to) {
|
||||
struct tgp_msg_sending *tgp_msg_sending_init (struct tgl_state *TLS, char *M, tgl_peer_id_t to) {
|
||||
struct tgp_msg_sending *C = malloc (sizeof (struct tgp_msg_sending));
|
||||
C->TLS = TLS;
|
||||
C->msg = M;
|
||||
|
@ -89,7 +89,9 @@ struct tgp_msg_sending *tgp_msg_sending_init (struct tgl_state *TLS, gchar *M, t
|
|||
|
||||
void tgp_msg_sending_free (gpointer data) {
|
||||
struct tgp_msg_sending *C = data;
|
||||
g_free (C->msg);
|
||||
if (C->msg) {
|
||||
g_free (C->msg);
|
||||
}
|
||||
free (C);
|
||||
}
|
||||
|
||||
|
@ -102,8 +104,11 @@ connection_data *connection_data_init (struct tgl_state *TLS, PurpleConnection *
|
|||
conn->out_messages = g_queue_new ();
|
||||
conn->pending_reads = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, g_free);
|
||||
conn->pending_chat_info = g_hash_table_new (g_direct_hash, g_direct_equal);
|
||||
conn->pending_channels = g_hash_table_new (g_direct_hash, g_direct_equal);
|
||||
conn->id_to_purple_name = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, g_free);
|
||||
conn->purple_name_to_id = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
|
||||
conn->channel_members = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, (void (*) (gpointer)) g_list_free);
|
||||
|
||||
return conn;
|
||||
}
|
||||
|
||||
|
@ -118,8 +123,11 @@ void *connection_data_free (connection_data *conn) {
|
|||
tgp_g_list_free_full (conn->pending_joins, g_free);
|
||||
g_hash_table_destroy (conn->pending_reads);
|
||||
g_hash_table_destroy (conn->pending_chat_info);
|
||||
g_hash_table_destroy (conn->pending_channels);
|
||||
g_hash_table_destroy (conn->id_to_purple_name);
|
||||
g_hash_table_destroy (conn->purple_name_to_id);
|
||||
g_hash_table_destroy (conn->channel_members);
|
||||
|
||||
tgprpl_xfer_free_all (conn);
|
||||
g_free (conn->TLS->base_path);
|
||||
tgl_free_all (conn->TLS);
|
||||
|
@ -127,11 +135,3 @@ void *connection_data_free (connection_data *conn) {
|
|||
free (conn);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
get_user_info_data* get_user_info_data_new (int show_info, tgl_peer_id_t peer) {
|
||||
get_user_info_data *info_data = malloc (sizeof(get_user_info_data));
|
||||
info_data->show_info = show_info;
|
||||
info_data->peer = peer;
|
||||
return info_data;
|
||||
}
|
||||
|
||||
|
|
|
@ -44,34 +44,28 @@ typedef struct {
|
|||
int login_retries;
|
||||
PurpleRoomlist *roomlist;
|
||||
GHashTable *pending_chat_info;
|
||||
GHashTable *pending_channels;
|
||||
GHashTable *id_to_purple_name;
|
||||
GHashTable *purple_name_to_id;
|
||||
GHashTable *channel_members;
|
||||
GList *pending_joins;
|
||||
int dialogues_ready;
|
||||
} connection_data;
|
||||
|
||||
typedef struct {
|
||||
int show_info;
|
||||
tgl_peer_id_t peer;
|
||||
} get_user_info_data;
|
||||
|
||||
struct tgp_xfer_send_data {
|
||||
int timer;
|
||||
int done;
|
||||
int loading;
|
||||
PurpleXfer *xfer;
|
||||
connection_data *conn;
|
||||
struct tgl_message *msg;
|
||||
};
|
||||
|
||||
struct download_desc {
|
||||
get_user_info_data *get_user_info_data;
|
||||
void *data;
|
||||
};
|
||||
|
||||
struct tgp_msg_loading {
|
||||
int pending;
|
||||
struct tgl_message *msg;
|
||||
void *data;
|
||||
int error;
|
||||
char *error_msg;
|
||||
};
|
||||
|
||||
struct tgp_msg_sending {
|
||||
|
@ -87,7 +81,6 @@ void pending_reads_send_user (struct tgl_state *TLS, tgl_peer_id_t id);
|
|||
void used_images_add (connection_data *data, gint imgid);
|
||||
void *connection_data_free (connection_data *conn);
|
||||
connection_data *connection_data_init (struct tgl_state *TLS, PurpleConnection *gc, PurpleAccount *pa);
|
||||
get_user_info_data* get_user_info_data_new (int show_info, tgl_peer_id_t peer);
|
||||
struct tgp_msg_loading *tgp_msg_loading_init (struct tgl_message *M);
|
||||
struct tgp_msg_sending *tgp_msg_sending_init (struct tgl_state *TLS, char *M, tgl_peer_id_t to);
|
||||
void tgp_msg_loading_free (gpointer data);
|
||||
|
|
Loading…
Add table
Reference in a new issue