mirror of
https://github.com/element-hq/element-web.git
synced 2025-12-11 01:40:42 +00:00
Compare commits
1920 Commits
v0.11.2
...
v0.14.0-rc
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ec2adc4516 | ||
|
|
b58e85c5cb | ||
|
|
233c3d2c98 | ||
|
|
60079d4206 | ||
|
|
9177c1176c | ||
|
|
220b553a97 | ||
|
|
8db2ddd276 | ||
|
|
0d64c5fb83 | ||
|
|
047d37b417 | ||
|
|
96b56fd901 | ||
|
|
db67a1f809 | ||
|
|
6bfb15ce7b | ||
|
|
f3a5a31ccf | ||
|
|
99b20e49c3 | ||
|
|
76370c40bc | ||
|
|
64c8f3dbe3 | ||
|
|
ae44efcebf | ||
|
|
d7fd2cc483 | ||
|
|
b4020bb715 | ||
|
|
f5a58258f9 | ||
|
|
202ada7c23 | ||
|
|
d7c0e3ddc9 | ||
|
|
2bb0bf3473 | ||
|
|
a662080ffe | ||
|
|
4af53fabbc | ||
|
|
57803f7a41 | ||
|
|
14f70beac2 | ||
|
|
8853496b1b | ||
|
|
7dc82e2e7a | ||
|
|
0e2a911b57 | ||
|
|
31cc29ad51 | ||
|
|
71786116d8 | ||
|
|
1e977b50df | ||
|
|
aaf373ecad | ||
|
|
ac93044286 | ||
|
|
e754e85ab6 | ||
|
|
eeeafe050b | ||
|
|
ceb06b7cca | ||
|
|
319f8e7f95 | ||
|
|
6dc7592389 | ||
|
|
fd8b36eb1c | ||
|
|
db64cb7ca4 | ||
|
|
527e8306b2 | ||
|
|
7e814247ec | ||
|
|
905ce347da | ||
|
|
4ee20b3b61 | ||
|
|
2d8a816125 | ||
|
|
0db7b03566 | ||
|
|
96f374ed69 | ||
|
|
c08d7d915d | ||
|
|
04b1678c7f | ||
|
|
58325bfb73 | ||
|
|
a3c80b7178 | ||
|
|
74b45322b2 | ||
|
|
3d6984e8e3 | ||
|
|
5bfa052a48 | ||
|
|
456f9833fa | ||
|
|
dfb0eb5233 | ||
|
|
2f0d3f1313 | ||
|
|
5eae913803 | ||
|
|
afb9fdf4ec | ||
|
|
647c7d7629 | ||
|
|
52ce709840 | ||
|
|
1b9bd33692 | ||
|
|
aa54032500 | ||
|
|
abb8413c16 | ||
|
|
2bdaf5026d | ||
|
|
511a192d8b | ||
|
|
c3ebe1f591 | ||
|
|
1119098eec | ||
|
|
8d5717b812 | ||
|
|
9f5211061e | ||
|
|
a4d8e9e4e5 | ||
|
|
2baa77a93f | ||
|
|
c051492286 | ||
|
|
63b696ff6c | ||
|
|
b2da66d670 | ||
|
|
5ade4b2bcf | ||
|
|
1b6cb2da68 | ||
|
|
0311a3a1be | ||
|
|
7d7079a389 | ||
|
|
8f578f7378 | ||
|
|
ab4019a612 | ||
|
|
ab55f2b938 | ||
|
|
075f568f61 | ||
|
|
9b0abbe52c | ||
|
|
33c2806ffb | ||
|
|
244d3c98b6 | ||
|
|
ce66bfbd6c | ||
|
|
e1e8d9777b | ||
|
|
b3ab4231bc | ||
|
|
d23c02b196 | ||
|
|
174061db57 | ||
|
|
63bbbfb839 | ||
|
|
3a1886e80e | ||
|
|
c2bf929e63 | ||
|
|
a316face83 | ||
|
|
9ad9c82c85 | ||
|
|
80d0f196c4 | ||
|
|
56ca1bc7ee | ||
|
|
14824c2b77 | ||
|
|
fb6c01a0ea | ||
|
|
41de7e0a0e | ||
|
|
2d7f60efee | ||
|
|
2410fc9754 | ||
|
|
09619339fd | ||
|
|
bb87cf6996 | ||
|
|
aeb423ce1b | ||
|
|
2a65a43039 | ||
|
|
d0a99c4f2d | ||
|
|
514338ec8a | ||
|
|
53cfaa3c45 | ||
|
|
7487ac75f7 | ||
|
|
54e0aaf8e0 | ||
|
|
90897b0741 | ||
|
|
e73b7c973d | ||
|
|
985dd44b66 | ||
|
|
e80bd9b4e5 | ||
|
|
3bf04095b1 | ||
|
|
912f953f85 | ||
|
|
93c2462089 | ||
|
|
a991960998 | ||
|
|
447373676b | ||
|
|
15b7af9a84 | ||
|
|
c315a59717 | ||
|
|
aedecfb06c | ||
|
|
15231615d4 | ||
|
|
2d093a8c2a | ||
|
|
030d5e04a3 | ||
|
|
d3fe023ec4 | ||
|
|
1139a3fa89 | ||
|
|
f67b4570a8 | ||
|
|
c0055ebbeb | ||
|
|
8bdf9d75cf | ||
|
|
d4dea52c6b | ||
|
|
d806707de0 | ||
|
|
15d8878ac0 | ||
|
|
2deb07a25b | ||
|
|
e0a872a7c5 | ||
|
|
48f3b90208 | ||
|
|
bc5129f839 | ||
|
|
fb5369f7d2 | ||
|
|
f6bcab18be | ||
|
|
a35a80ca4f | ||
|
|
0da2034a3e | ||
|
|
4ab94b397a | ||
|
|
e3e60bd372 | ||
|
|
d0a38df67a | ||
|
|
c3e34e5f05 | ||
|
|
514e042eec | ||
|
|
86d554b1dc | ||
|
|
57b34267c5 | ||
|
|
4fc49850e1 | ||
|
|
5e25844ea8 | ||
|
|
fc4da3e3bf | ||
|
|
0605d96014 | ||
|
|
37a912e7ee | ||
|
|
f33bddaadd | ||
|
|
5740274528 | ||
|
|
332640c4ba | ||
|
|
5c354dda23 | ||
|
|
9e1e7e0dbe | ||
|
|
8c17fafaca | ||
|
|
ac5e42d0dd | ||
|
|
e3dcaebe9b | ||
|
|
7fe65703f7 | ||
|
|
9d3b96e746 | ||
|
|
e47c22a23e | ||
|
|
06818761ef | ||
|
|
6419fc73f5 | ||
|
|
c62b4ed9b1 | ||
|
|
f6255906d8 | ||
|
|
f64fefa9ae | ||
|
|
2f5fc5a764 | ||
|
|
ba7991deba | ||
|
|
594d510f4f | ||
|
|
453b7d1007 | ||
|
|
7ac350ea36 | ||
|
|
b3bb2d2aa5 | ||
|
|
9139dcbd1e | ||
|
|
14b0e85850 | ||
|
|
8c1d2a4555 | ||
|
|
009e01c1b0 | ||
|
|
0d85a46e84 | ||
|
|
d05b221a6c | ||
|
|
54f4563303 | ||
|
|
7aea7f9400 | ||
|
|
9abda76d9e | ||
|
|
42582c7ccd | ||
|
|
c88a59c228 | ||
|
|
b54f949fe6 | ||
|
|
a966cc7dec | ||
|
|
55cacfba82 | ||
|
|
3bc1eef39b | ||
|
|
ee7add05ae | ||
|
|
e7d1c04bb5 | ||
|
|
247a3cebb9 | ||
|
|
5bf0b7d652 | ||
|
|
0b5fe1232f | ||
|
|
03be7eb32c | ||
|
|
3a808411f5 | ||
|
|
2524c5f861 | ||
|
|
db5f4193ec | ||
|
|
11b0cc8211 | ||
|
|
285c4f91d3 | ||
|
|
084ebe6e16 | ||
|
|
e67147213b | ||
|
|
85c0b8dea3 | ||
|
|
aec3c9961c | ||
|
|
c7aafd8410 | ||
|
|
c0720d5d24 | ||
|
|
ec0dd63470 | ||
|
|
2269c94579 | ||
|
|
e36baa8c3a | ||
|
|
d47c9d8b6e | ||
|
|
93a381218c | ||
|
|
5472dc78d7 | ||
|
|
1d2f5bafda | ||
|
|
9e614a54da | ||
|
|
30087e5c73 | ||
|
|
1d222e3507 | ||
|
|
b20dea58c6 | ||
|
|
47df5d2d60 | ||
|
|
d3c1072842 | ||
|
|
d904212033 | ||
|
|
62e90ceb0d | ||
|
|
0cdebcce89 | ||
|
|
495090c9ba | ||
|
|
f41a70fe1f | ||
|
|
bdbf0427a1 | ||
|
|
d484a1cd85 | ||
|
|
4b7561a75e | ||
|
|
31af7c583f | ||
|
|
2d0ea28a39 | ||
|
|
0f475a0e10 | ||
|
|
f3bae5c090 | ||
|
|
ca2767fd04 | ||
|
|
c659c81341 | ||
|
|
7eab0eca5b | ||
|
|
5c3e2dca17 | ||
|
|
95c45362d5 | ||
|
|
8efce30d7f | ||
|
|
44a727b205 | ||
|
|
662942ec29 | ||
|
|
83996c09d9 | ||
|
|
e46f436a47 | ||
|
|
3cbaa95184 | ||
|
|
8c75bed687 | ||
|
|
481476f835 | ||
|
|
680a0191be | ||
|
|
3abf1458fb | ||
|
|
00b7cc512b | ||
|
|
2a58de5cfc | ||
|
|
c3b000a368 | ||
|
|
675bebee33 | ||
|
|
cefd744aba | ||
|
|
325c9662c5 | ||
|
|
8b35a7b10f | ||
|
|
456aebe240 | ||
|
|
66e20298a7 | ||
|
|
a6155c98ec | ||
|
|
a26473b722 | ||
|
|
ed5162ef4e | ||
|
|
930deaea9d | ||
|
|
b80be62bb7 | ||
|
|
11806f2aa2 | ||
|
|
0d229f015b | ||
|
|
078d156824 | ||
|
|
88c4cb6eba | ||
|
|
bc4f8c4c2a | ||
|
|
7ee205a447 | ||
|
|
f6c49a2472 | ||
|
|
37fe3ac676 | ||
|
|
2926154dce | ||
|
|
200124569b | ||
|
|
662a6297e7 | ||
|
|
04bca93e0d | ||
|
|
e56b16f7d1 | ||
|
|
5c6a265b86 | ||
|
|
b0a3bd6591 | ||
|
|
8b7a941a6e | ||
|
|
394d4cf856 | ||
|
|
22b7298542 | ||
|
|
9d1a3c9011 | ||
|
|
c2aa8137bb | ||
|
|
4d0b02c683 | ||
|
|
c7146e62a0 | ||
|
|
d9409232f9 | ||
|
|
0df6f85843 | ||
|
|
13dd8e2c76 | ||
|
|
9d387c32a5 | ||
|
|
f5fc86258f | ||
|
|
321f16d8a3 | ||
|
|
d57a10e0b2 | ||
|
|
202f0e2163 | ||
|
|
77d8fe3ef1 | ||
|
|
3e5833e9f2 | ||
|
|
2b26be73f6 | ||
|
|
ce6338b853 | ||
|
|
52c5293a12 | ||
|
|
568e1f4f90 | ||
|
|
29f05c09d6 | ||
|
|
888a77b4bb | ||
|
|
4eeb7989f6 | ||
|
|
3764a5d4b7 | ||
|
|
1f3321fb37 | ||
|
|
189b7236af | ||
|
|
37b5de2251 | ||
|
|
8855cc294e | ||
|
|
935b85afe7 | ||
|
|
a819add7b0 | ||
|
|
883ee4ec75 | ||
|
|
4504ff954a | ||
|
|
68f19f9558 | ||
|
|
d55d3658f0 | ||
|
|
3481283af8 | ||
|
|
5586a02b34 | ||
|
|
670f02acf8 | ||
|
|
ff70af3f34 | ||
|
|
6f47a9b8c3 | ||
|
|
a94208e230 | ||
|
|
4386d45a97 | ||
|
|
c269abd434 | ||
|
|
152f28bf2a | ||
|
|
f940dfdd79 | ||
|
|
cf00ac34d9 | ||
|
|
a50e9d2b6b | ||
|
|
e2ef885aa6 | ||
|
|
fc844567a6 | ||
|
|
f97395f40f | ||
|
|
b65fdf6ab0 | ||
|
|
22c024cc94 | ||
|
|
b99e87ba0a | ||
|
|
e82a95a0b5 | ||
|
|
b023cc790b | ||
|
|
d3811e3287 | ||
|
|
5aec6840bf | ||
|
|
17c4839029 | ||
|
|
26f377decf | ||
|
|
004ccc47b3 | ||
|
|
fbd7860a9b | ||
|
|
586533d6ea | ||
|
|
c8bd89ce4c | ||
|
|
1a9b86b27f | ||
|
|
56300f9578 | ||
|
|
77e2ceba9e | ||
|
|
89c5be39d1 | ||
|
|
c8e87cb5a2 | ||
|
|
627ebb848d | ||
|
|
54cafec57a | ||
|
|
1405859d2c | ||
|
|
24e16e5c18 | ||
|
|
9c7783b439 | ||
|
|
a21bbd15c5 | ||
|
|
b6c002b587 | ||
|
|
9c3e4a1202 | ||
|
|
97cc7f88ef | ||
|
|
5a5b0568f2 | ||
|
|
bddab533a3 | ||
|
|
5106809394 | ||
|
|
290bf54d4f | ||
|
|
c68c54618f | ||
|
|
3788fde711 | ||
|
|
9289d1a57d | ||
|
|
d6942a455d | ||
|
|
c8af65fff4 | ||
|
|
94aa5b5f1b | ||
|
|
38e0b26153 | ||
|
|
5635614549 | ||
|
|
1bb861f6cf | ||
|
|
2eb433157a | ||
|
|
d71af40967 | ||
|
|
d2a676cad2 | ||
|
|
33cf966f34 | ||
|
|
760b961e19 | ||
|
|
2660e70e00 | ||
|
|
f3f608b35f | ||
|
|
34a3ef7e1d | ||
|
|
604d4e0a51 | ||
|
|
762f6aaf0f | ||
|
|
3600d1c667 | ||
|
|
ec5c960ebb | ||
|
|
1f26a17b29 | ||
|
|
8a7477f50c | ||
|
|
17e0d3f8a0 | ||
|
|
97116bb268 | ||
|
|
cf47b919d5 | ||
|
|
7dd85533e8 | ||
|
|
af99ac3293 | ||
|
|
843505f6a9 | ||
|
|
707cb47e10 | ||
|
|
67746b021a | ||
|
|
bfb60265cb | ||
|
|
2f5bfd9694 | ||
|
|
fbd9ba32aa | ||
|
|
3164655a21 | ||
|
|
b16dcbc057 | ||
|
|
1e4997c2c2 | ||
|
|
dc3f7f3cd1 | ||
|
|
0ea8efcaf4 | ||
|
|
fbbca2e466 | ||
|
|
2961e1949f | ||
|
|
304d281ed2 | ||
|
|
cc1ee16dec | ||
|
|
9c38794ad5 | ||
|
|
6b24aff6c5 | ||
|
|
091dfd6e54 | ||
|
|
527e5be86c | ||
|
|
e746d2331e | ||
|
|
0c7b15db47 | ||
|
|
7cc8fed61b | ||
|
|
4bc99b7f01 | ||
|
|
54a9ccdee7 | ||
|
|
25bfb52e7e | ||
|
|
8e66665bbd | ||
|
|
10c6f24a83 | ||
|
|
b69daf1041 | ||
|
|
e24ffeea44 | ||
|
|
68706a9209 | ||
|
|
db3bd1dbf0 | ||
|
|
89efbd0a71 | ||
|
|
fb1afdab1c | ||
|
|
608a359e0a | ||
|
|
0ff5d61189 | ||
|
|
c37c50e1e0 | ||
|
|
e0ae266bb2 | ||
|
|
33446bf4ff | ||
|
|
9835e2e0b4 | ||
|
|
f08b0f7800 | ||
|
|
95c746936a | ||
|
|
b73f0c7b90 | ||
|
|
8ec48db86c | ||
|
|
5fba5b30e9 | ||
|
|
c685546e9a | ||
|
|
bb6aabc017 | ||
|
|
1a0c0af447 | ||
|
|
491bb4fd1d | ||
|
|
a3e2698223 | ||
|
|
380625241e | ||
|
|
452fe44795 | ||
|
|
b0d115a64a | ||
|
|
e80c4fadea | ||
|
|
04ed2a3d09 | ||
|
|
cc4890f0b8 | ||
|
|
7924ee65e0 | ||
|
|
0aaae9bca5 | ||
|
|
fb7a071c2a | ||
|
|
a24c42b3a8 | ||
|
|
1ccffb7e58 | ||
|
|
41c7d0cb41 | ||
|
|
4e7a1e9653 | ||
|
|
0061d9ad6c | ||
|
|
2a402985aa | ||
|
|
8c315c7e0b | ||
|
|
f72b44650b | ||
|
|
8da2a29f86 | ||
|
|
72563e6114 | ||
|
|
7153d03660 | ||
|
|
fd63aac406 | ||
|
|
123ad19b28 | ||
|
|
28132eaf36 | ||
|
|
0c43edb629 | ||
|
|
43578d2366 | ||
|
|
59f1cc3922 | ||
|
|
63bedc440b | ||
|
|
bbdafeff77 | ||
|
|
d02ae30023 | ||
|
|
58b7530134 | ||
|
|
4f384b2325 | ||
|
|
93f05ceea3 | ||
|
|
5fff46fdac | ||
|
|
0f5785c27b | ||
|
|
854a665627 | ||
|
|
2e9f309415 | ||
|
|
6fc173eaa9 | ||
|
|
15e5f13969 | ||
|
|
5f4d011606 | ||
|
|
9da799c2dd | ||
|
|
21b693f3c8 | ||
|
|
a7ac003064 | ||
|
|
9ec1f9b07d | ||
|
|
57f1dd1d68 | ||
|
|
a346cf393d | ||
|
|
c825ab0fa3 | ||
|
|
c4dc59dc41 | ||
|
|
43b3c013f2 | ||
|
|
c0a5c28d80 | ||
|
|
6e477b66c6 | ||
|
|
c28d9e5cde | ||
|
|
0bd68ce068 | ||
|
|
c3a0c26610 | ||
|
|
f2e66590da | ||
|
|
7cb59bddb0 | ||
|
|
f7a26ddb91 | ||
|
|
26269986f5 | ||
|
|
cecaca61a3 | ||
|
|
e4f7cbe85c | ||
|
|
08be00a154 | ||
|
|
5132d2132b | ||
|
|
1b24e643de | ||
|
|
21d7c4d92a | ||
|
|
aab044a14c | ||
|
|
ee35fdb483 | ||
|
|
82756ffc6b | ||
|
|
eff2c140f6 | ||
|
|
7130f4aee8 | ||
|
|
aad2069a51 | ||
|
|
bac8b34e26 | ||
|
|
6ebab2cb8d | ||
|
|
538e1d2446 | ||
|
|
dff791d478 | ||
|
|
eb40de4670 | ||
|
|
67ca1515d8 | ||
|
|
1ab5ff079c | ||
|
|
38cdc0782d | ||
|
|
ef6fcaf703 | ||
|
|
4c8f77bb80 | ||
|
|
e788f23148 | ||
|
|
07cc5dc6c9 | ||
|
|
58f2e51af5 | ||
|
|
1e5fabed97 | ||
|
|
63c4a14dc2 | ||
|
|
3c9210e376 | ||
|
|
1e7007423b | ||
|
|
4657f89b3e | ||
|
|
cb235a29fa | ||
|
|
1e2e4397f7 | ||
|
|
84c5ce1b4e | ||
|
|
42e601005f | ||
|
|
311bdf71fb | ||
|
|
4949f2f763 | ||
|
|
ae6c985d39 | ||
|
|
509c833896 | ||
|
|
53a793b8fd | ||
|
|
b00cf8c939 | ||
|
|
45ed5b13ca | ||
|
|
6f15c67d0b | ||
|
|
0a55c87dd3 | ||
|
|
ed3a6d29ac | ||
|
|
2893cee685 | ||
|
|
bbcf74f774 | ||
|
|
bfb4ae3083 | ||
|
|
26231e458e | ||
|
|
10b17b7fd0 | ||
|
|
5e7faf3083 | ||
|
|
9664b4d176 | ||
|
|
629a18ebef | ||
|
|
7e5f80c9f7 | ||
|
|
898bb6f9d8 | ||
|
|
02c2e1a14c | ||
|
|
7ab693d776 | ||
|
|
ffada4f6fe | ||
|
|
1fc44a32c0 | ||
|
|
3a2c778e1c | ||
|
|
a9cd62633e | ||
|
|
a583c2b658 | ||
|
|
0cfd34ac9f | ||
|
|
142a9d7549 | ||
|
|
492f923d1b | ||
|
|
bd89fe59c0 | ||
|
|
86509abbfb | ||
|
|
148ace93ca | ||
|
|
9f61cb8137 | ||
|
|
8bd66b93c5 | ||
|
|
b254ee4190 | ||
|
|
3e72d8d969 | ||
|
|
fcd58a2544 | ||
|
|
ca4b71b6e2 | ||
|
|
c8dd31ba28 | ||
|
|
aceabd6d28 | ||
|
|
81ef9b143c | ||
|
|
93eab05239 | ||
|
|
55170aa2a7 | ||
|
|
534504b618 | ||
|
|
e4fcf24f44 | ||
|
|
bea95fde3a | ||
|
|
cf2850834e | ||
|
|
e3bdcf4d0d | ||
|
|
940f229102 | ||
|
|
a22cd487a0 | ||
|
|
69b8ff8668 | ||
|
|
03f1f7f75a | ||
|
|
e540fd40cb | ||
|
|
a7a9433ef9 | ||
|
|
ad0cb6f0a8 | ||
|
|
29ddf98592 | ||
|
|
5e8ddc6d7c | ||
|
|
e1c762dcaa | ||
|
|
977599a660 | ||
|
|
7570ce580f | ||
|
|
564ea8bfb2 | ||
|
|
261f91da6e | ||
|
|
557fd8f734 | ||
|
|
809dd0856f | ||
|
|
0a80774066 | ||
|
|
5abee4fddc | ||
|
|
47d9e7f2a1 | ||
|
|
d7ceddfe61 | ||
|
|
42bb54b202 | ||
|
|
7a42e844d1 | ||
|
|
43fb359d8f | ||
|
|
31e0cde900 | ||
|
|
53143cb033 | ||
|
|
7eeb7babc4 | ||
|
|
883ec159e2 | ||
|
|
ef9f2f7ce6 | ||
|
|
d9bb6c52b4 | ||
|
|
ea0cfa92b4 | ||
|
|
150fa43735 | ||
|
|
718f48ba04 | ||
|
|
1b21b8cce2 | ||
|
|
73e7581fc6 | ||
|
|
83373bcf6e | ||
|
|
29abb5eed0 | ||
|
|
277a6dee10 | ||
|
|
25bff3f4b1 | ||
|
|
71d0ecf37d | ||
|
|
5c9dd17d21 | ||
|
|
b494b458bb | ||
|
|
0630d856f8 | ||
|
|
1008ede4d1 | ||
|
|
cf1beb1d94 | ||
|
|
d0fe0499aa | ||
|
|
bfa4f59f3d | ||
|
|
63f520b5ee | ||
|
|
a0b0b6f053 | ||
|
|
88cd46bfcf | ||
|
|
7094df900a | ||
|
|
1f524f3085 | ||
|
|
405504dca4 | ||
|
|
2bb13fba7e | ||
|
|
d45940f204 | ||
|
|
81b085fbb8 | ||
|
|
910a5f7e6c | ||
|
|
092ec1cc6c | ||
|
|
106430f7b6 | ||
|
|
76570a0f14 | ||
|
|
e7fbad2236 | ||
|
|
2fa1f16284 | ||
|
|
d4128af224 | ||
|
|
e90419e40d | ||
|
|
16991a8f68 | ||
|
|
b788e759da | ||
|
|
3ee45b21b8 | ||
|
|
8af90b052b | ||
|
|
60de1dbffb | ||
|
|
38b5b27aa9 | ||
|
|
c7dba61d92 | ||
|
|
26d9677bbe | ||
|
|
beddf3a2cb | ||
|
|
144cbd144e | ||
|
|
1bdc666197 | ||
|
|
a72cc77e24 | ||
|
|
4c22f9a549 | ||
|
|
f280fe3c66 | ||
|
|
4c0e956cc1 | ||
|
|
e1d16acddb | ||
|
|
a45ae588e5 | ||
|
|
c8edaf1ba9 | ||
|
|
9ff1fe8a72 | ||
|
|
aa4feb0563 | ||
|
|
d87d6cbc64 | ||
|
|
3633f55e20 | ||
|
|
a8bdde9f55 | ||
|
|
e1eba559fe | ||
|
|
01401fe4f8 | ||
|
|
ba1ab9bdd1 | ||
|
|
25782404d4 | ||
|
|
a1512af9f9 | ||
|
|
cd26f63315 | ||
|
|
68bb61d281 | ||
|
|
63607f29e7 | ||
|
|
d14285eb08 | ||
|
|
555847e5e9 | ||
|
|
816042d3a8 | ||
|
|
9a0bbfb871 | ||
|
|
adedf23cfb | ||
|
|
b4b4fefffb | ||
|
|
2b49b68ba5 | ||
|
|
69939e2fe3 | ||
|
|
5a1498dec3 | ||
|
|
441aa91831 | ||
|
|
31c5122fa6 | ||
|
|
f290569487 | ||
|
|
c0b343c89f | ||
|
|
a42414eabd | ||
|
|
c90834114b | ||
|
|
038b3ed1eb | ||
|
|
5d9a1b42a6 | ||
|
|
290a501523 | ||
|
|
67bc346ebb | ||
|
|
923295973b | ||
|
|
8518e2b056 | ||
|
|
04c866ce9c | ||
|
|
f59ea648f0 | ||
|
|
3192c345be | ||
|
|
6432792d86 | ||
|
|
22b82182a7 | ||
|
|
c60ff5d283 | ||
|
|
a3d15e05b1 | ||
|
|
2c4c6e82bb | ||
|
|
4d11e739b5 | ||
|
|
f6974407e3 | ||
|
|
61287b5f08 | ||
|
|
69a82f7859 | ||
|
|
ee71c72685 | ||
|
|
06ce467876 | ||
|
|
c01ea56676 | ||
|
|
ac89b5dc5e | ||
|
|
fb8e41a9c1 | ||
|
|
7ab3be0a11 | ||
|
|
2e8f960ee3 | ||
|
|
65ea7a8460 | ||
|
|
819122c111 | ||
|
|
cd84d86fd1 | ||
|
|
2163a54617 | ||
|
|
8ef3811f28 | ||
|
|
8f289519e1 | ||
|
|
df58bdd529 | ||
|
|
1b7e42f5e8 | ||
|
|
62d249442e | ||
|
|
007ff8d177 | ||
|
|
56c6a15ddf | ||
|
|
04d1a72307 | ||
|
|
ea785aa888 | ||
|
|
841503f907 | ||
|
|
ba1ad84d59 | ||
|
|
1ffa7ae906 | ||
|
|
2d69595beb | ||
|
|
cd6a3d2293 | ||
|
|
d86841c1c8 | ||
|
|
58b9b04e35 | ||
|
|
71fc072301 | ||
|
|
07a17829ea | ||
|
|
c39044f397 | ||
|
|
71c8dca91a | ||
|
|
6da2f88dc5 | ||
|
|
ea9b630082 | ||
|
|
f1c81be633 | ||
|
|
ccf52b2a69 | ||
|
|
f6177cd7b5 | ||
|
|
5d3caf8157 | ||
|
|
b87fad991f | ||
|
|
19320c37df | ||
|
|
5063fef4f5 | ||
|
|
b9e2b59504 | ||
|
|
159343dd23 | ||
|
|
c74e6c3c0c | ||
|
|
4c7d07c109 | ||
|
|
c971aab453 | ||
|
|
3dcc397f67 | ||
|
|
0a81419978 | ||
|
|
7bae7fe9e5 | ||
|
|
8ad9728bef | ||
|
|
d4696345d1 | ||
|
|
7e9b63822b | ||
|
|
ce2d40b775 | ||
|
|
52ae5ba5dc | ||
|
|
de3a384513 | ||
|
|
3df1808fd0 | ||
|
|
d188fdb9fe | ||
|
|
7588814ec5 | ||
|
|
c26aaa8d01 | ||
|
|
ca0092469b | ||
|
|
3ffebfbf0b | ||
|
|
b65ee5f28e | ||
|
|
1798bff8f5 | ||
|
|
26d142f893 | ||
|
|
468f8ccab8 | ||
|
|
50b348c68e | ||
|
|
ca74b09867 | ||
|
|
b9cf2c6b6c | ||
|
|
ad9d78684e | ||
|
|
e5b1ded7e3 | ||
|
|
a8f2980dcc | ||
|
|
8f0f34e761 | ||
|
|
ffd526af1a | ||
|
|
0453b1c422 | ||
|
|
15466f02ed | ||
|
|
507cef3ba4 | ||
|
|
ebbb677f2c | ||
|
|
13c1829cd4 | ||
|
|
6212e805d2 | ||
|
|
225c7ee621 | ||
|
|
f86b616769 | ||
|
|
ea19096db3 | ||
|
|
a152eba023 | ||
|
|
953398b486 | ||
|
|
79a9f2168b | ||
|
|
6c796cd311 | ||
|
|
45ca890f68 | ||
|
|
53185fc23d | ||
|
|
044519f9ea | ||
|
|
5db44bd4ae | ||
|
|
007177b7ba | ||
|
|
bc3df74c2f | ||
|
|
3fc0c455fa | ||
|
|
4a8729dd1d | ||
|
|
f6a920a018 | ||
|
|
7e7acb6922 | ||
|
|
a627784c41 | ||
|
|
fcfec1694e | ||
|
|
a3b82bcd3d | ||
|
|
7c7ae3a31f | ||
|
|
cd0888ce5a | ||
|
|
9679051269 | ||
|
|
0561c5bd4f | ||
|
|
9d86716b0f | ||
|
|
eedcda1d0e | ||
|
|
29cfbba2ce | ||
|
|
73e7fe2764 | ||
|
|
b053f08991 | ||
|
|
313f4f03b7 | ||
|
|
3bff844a62 | ||
|
|
a747a78e06 | ||
|
|
bd15a88c89 | ||
|
|
e2b80e9e80 | ||
|
|
858e1fa341 | ||
|
|
a58ea58380 | ||
|
|
e2924d30df | ||
|
|
f258b3253f | ||
|
|
01d6577abd | ||
|
|
43f1951f37 | ||
|
|
1704a2fb9c | ||
|
|
6a0ecfba7f | ||
|
|
6e5ae0c664 | ||
|
|
ff5fbd4863 | ||
|
|
b5629ac3e6 | ||
|
|
f1a700ef99 | ||
|
|
cc1fb8ac94 | ||
|
|
d91c652590 | ||
|
|
8672939f0c | ||
|
|
c8f89fbc9b | ||
|
|
61e06d8cf3 | ||
|
|
e05ec68a61 | ||
|
|
c7d18ff52e | ||
|
|
508a850dec | ||
|
|
ec12b8ee93 | ||
|
|
0e20b20fb2 | ||
|
|
052c00bd86 | ||
|
|
146a75f7e7 | ||
|
|
d9fa11d03a | ||
|
|
b16d4280b7 | ||
|
|
eb45b00b32 | ||
|
|
84d1f838f0 | ||
|
|
16cd69f7dd | ||
|
|
190811ac1c | ||
|
|
01b3d6128c | ||
|
|
b28192cc0b | ||
|
|
9d56f7e214 | ||
|
|
cd31e6532b | ||
|
|
6fa2d35630 | ||
|
|
5898a972a8 | ||
|
|
14b5006645 | ||
|
|
94454333d5 | ||
|
|
b33998c1f9 | ||
|
|
63bcca1c7d | ||
|
|
060b5d100f | ||
|
|
3e435e4581 | ||
|
|
95b5bcc6b0 | ||
|
|
25a7fb07a3 | ||
|
|
b72d35e0df | ||
|
|
667556f3ce | ||
|
|
483762cc35 | ||
|
|
a76fdc750a | ||
|
|
1f9b5b25cb | ||
|
|
0e3fbb6770 | ||
|
|
cc0a6d5c94 | ||
|
|
449af3c2e1 | ||
|
|
528a856d54 | ||
|
|
b2288e6525 | ||
|
|
c6f75fbf37 | ||
|
|
7369719492 | ||
|
|
62fd98245d | ||
|
|
8317bcbb9f | ||
|
|
b2e9b36978 | ||
|
|
ea459c84ba | ||
|
|
86226bc22d | ||
|
|
289743c5fe | ||
|
|
acb678afbd | ||
|
|
42ca840fef | ||
|
|
fc87fd2bb4 | ||
|
|
e5df06b2ab | ||
|
|
9d8b59e082 | ||
|
|
7395d866f6 | ||
|
|
c4de42c6af | ||
|
|
00f902cab1 | ||
|
|
ae9263fa59 | ||
|
|
f712804018 | ||
|
|
4e31aea402 | ||
|
|
568cd0aac6 | ||
|
|
ae3229b40c | ||
|
|
987072b25a | ||
|
|
6910b83c20 | ||
|
|
42ddafcfd4 | ||
|
|
4711356c3f | ||
|
|
137cf32d3b | ||
|
|
7bb0ed4a66 | ||
|
|
6b589c4945 | ||
|
|
fe490341d0 | ||
|
|
6e24f4ba09 | ||
|
|
f3b1c6cc5b | ||
|
|
e5c128fcb8 | ||
|
|
7c399974ce | ||
|
|
6ccacfee46 | ||
|
|
2effdfb840 | ||
|
|
55b14d5d5d | ||
|
|
f24fd61ae0 | ||
|
|
85307ffd23 | ||
|
|
e85f205e8f | ||
|
|
fdf07f6d89 | ||
|
|
027b751bbc | ||
|
|
8716f93a6d | ||
|
|
2401f21336 | ||
|
|
bf56a00d60 | ||
|
|
66de8756b7 | ||
|
|
2ca0d6621c | ||
|
|
bfae8e98a1 | ||
|
|
102651332a | ||
|
|
12ebe91f83 | ||
|
|
0807a2a26d | ||
|
|
2cefa58d5d | ||
|
|
18faa2d8ba | ||
|
|
ef5fc7347a | ||
|
|
498ae90040 | ||
|
|
da67a2c078 | ||
|
|
f9186ae8fc | ||
|
|
deb50b2d43 | ||
|
|
e2b02ad60d | ||
|
|
1ca041c59c | ||
|
|
b71bcb4e9b | ||
|
|
f143315618 | ||
|
|
6f968522f5 | ||
|
|
4a5e2e347b | ||
|
|
6926c96f36 | ||
|
|
6f819606c1 | ||
|
|
3e066d3aef | ||
|
|
2667ed2561 | ||
|
|
5bb2992f93 | ||
|
|
b70bd1987a | ||
|
|
5c1e2a8a82 | ||
|
|
6f81142bde | ||
|
|
9d17ed7407 | ||
|
|
56e775c56a | ||
|
|
c7723ba0b0 | ||
|
|
1adb63ac74 | ||
|
|
f5397acfa1 | ||
|
|
bdd96c6a9a | ||
|
|
e0de9cbdfe | ||
|
|
f555f2036e | ||
|
|
3b2650e5ea | ||
|
|
d1476e0cc7 | ||
|
|
b727944b11 | ||
|
|
398e0839f1 | ||
|
|
adceda7588 | ||
|
|
577db02140 | ||
|
|
4bd53eb821 | ||
|
|
b3da206a92 | ||
|
|
f8554ca2f2 | ||
|
|
470ea8d6a7 | ||
|
|
79154e26fc | ||
|
|
64cfc9b717 | ||
|
|
bbcf46bb69 | ||
|
|
832465655b | ||
|
|
392fea1207 | ||
|
|
0c093b5ca2 | ||
|
|
8216d8999c | ||
|
|
7d12e2f64b | ||
|
|
bbf859aad7 | ||
|
|
783aebe5eb | ||
|
|
eb6ce753aa | ||
|
|
6df69138a2 | ||
|
|
ca0d8e425e | ||
|
|
ae1a5a50b0 | ||
|
|
e405d6cbd6 | ||
|
|
508ff4f917 | ||
|
|
83f7af5d7e | ||
|
|
27a81c25d2 | ||
|
|
e39730d52e | ||
|
|
415ffac978 | ||
|
|
16764382a5 | ||
|
|
fd7ddd9ec8 | ||
|
|
20d2a6685f | ||
|
|
25413b2b35 | ||
|
|
e1f17e2cdc | ||
|
|
a5e41102bc | ||
|
|
85a590ad5a | ||
|
|
bf6a3470b4 | ||
|
|
3d7b1cb382 | ||
|
|
70bbf2df7a | ||
|
|
56c366ebd3 | ||
|
|
a9d308004e | ||
|
|
a75fa7fd3e | ||
|
|
44162d5c8a | ||
|
|
ec414147d1 | ||
|
|
23c1a3233b | ||
|
|
9680bcb117 | ||
|
|
f040a248d6 | ||
|
|
171353a87d | ||
|
|
65e73c71cd | ||
|
|
3b8ad0e12e | ||
|
|
834801e9d7 | ||
|
|
233a611c22 | ||
|
|
d082e44d94 | ||
|
|
195395e7ee | ||
|
|
a8767e823a | ||
|
|
fa4a22cd2e | ||
|
|
2d153a72c1 | ||
|
|
078ee54edf | ||
|
|
2d5acfc0bc | ||
|
|
b0190f6a65 | ||
|
|
0a3bc1c667 | ||
|
|
aff02885de | ||
|
|
965a25ba84 | ||
|
|
f7389b70aa | ||
|
|
014464d82b | ||
|
|
efdb4b02c6 | ||
|
|
59a253af37 | ||
|
|
9b11f576fe | ||
|
|
fa5a23e0df | ||
|
|
5daa16ab53 | ||
|
|
774c3dbd38 | ||
|
|
9f7823f2df | ||
|
|
f35289a664 | ||
|
|
d3b8d8bf9d | ||
|
|
7194f30dc0 | ||
|
|
f6c28dce4a | ||
|
|
5544270bc4 | ||
|
|
47919bc291 | ||
|
|
412affefb9 | ||
|
|
e2b7ff3675 | ||
|
|
bb64e9a18b | ||
|
|
f9a92ad15a | ||
|
|
ce13837216 | ||
|
|
26ce62250b | ||
|
|
25cf115533 | ||
|
|
9c86a655ca | ||
|
|
1d5f2bec65 | ||
|
|
1740319b7a | ||
|
|
fb344bc606 | ||
|
|
2adf08dee0 | ||
|
|
fcd4a1c7c6 | ||
|
|
42840c1e3c | ||
|
|
c99299ab6f | ||
|
|
e446f50618 | ||
|
|
f64f293cdb | ||
|
|
888e3abc75 | ||
|
|
bc659032e6 | ||
|
|
cfc830b294 | ||
|
|
94855c0f48 | ||
|
|
110993cc67 | ||
|
|
798558e5cc | ||
|
|
f79b8e0c71 | ||
|
|
44c0fb77da | ||
|
|
bfdb92ff6b | ||
|
|
77f30aacf9 | ||
|
|
fd7e81193e | ||
|
|
7149510c4e | ||
|
|
f5e7059c1b | ||
|
|
377740901f | ||
|
|
75fef3f21a | ||
|
|
28e9fdc873 | ||
|
|
7137ba7188 | ||
|
|
6795ee84e1 | ||
|
|
9413b1537c | ||
|
|
b424eea573 | ||
|
|
3cff8c1230 | ||
|
|
813615610f | ||
|
|
d2334fcd96 | ||
|
|
ae6b705d7b | ||
|
|
1b67e7d606 | ||
|
|
87470a690f | ||
|
|
8434a71cf8 | ||
|
|
90f7cecec6 | ||
|
|
7d472a3bdb | ||
|
|
39c7bf633d | ||
|
|
133e17c1db | ||
|
|
e1f008e0b3 | ||
|
|
b7b9330086 | ||
|
|
ef503cca11 | ||
|
|
2b7ee756f8 | ||
|
|
b25075974c | ||
|
|
af3feccc2d | ||
|
|
aaff9133c7 | ||
|
|
6e7ee7ef34 | ||
|
|
50e6536195 | ||
|
|
fbccf22e00 | ||
|
|
e8c347a755 | ||
|
|
4f8660870a | ||
|
|
dbd4cf8756 | ||
|
|
f450ce422e | ||
|
|
874e88c4a8 | ||
|
|
7e87964e82 | ||
|
|
0eefae031f | ||
|
|
406f36a2d1 | ||
|
|
96b9570465 | ||
|
|
22580b5fd3 | ||
|
|
96bb804eb8 | ||
|
|
e968de12dd | ||
|
|
1cca4c2133 | ||
|
|
fcb705d79b | ||
|
|
26ec25b2f7 | ||
|
|
88551afef3 | ||
|
|
9b9073f0ed | ||
|
|
b4ea938be3 | ||
|
|
6ec26932af | ||
|
|
21d233b5af | ||
|
|
a8a9f5ec6b | ||
|
|
b9b4ac3166 | ||
|
|
0d4b3b41f9 | ||
|
|
6ff91789b2 | ||
|
|
9b988f1a19 | ||
|
|
8d9f06cc47 | ||
|
|
2ea9fc3f9a | ||
|
|
d96759b8ad | ||
|
|
e814eb4555 | ||
|
|
d957f0cdd7 | ||
|
|
be938ac0f4 | ||
|
|
e4082d4f45 | ||
|
|
7f4695bba2 | ||
|
|
72bb08b99f | ||
|
|
e8c3c2bc20 | ||
|
|
8561e43cb5 | ||
|
|
16123ff5db | ||
|
|
546397e676 | ||
|
|
fbe1c82dfa | ||
|
|
37ccf3b93f | ||
|
|
86d8a95e32 | ||
|
|
0b7ebf8764 | ||
|
|
8fc69198b1 | ||
|
|
ecbd42c71c | ||
|
|
0b0e74cd63 | ||
|
|
283829cb0c | ||
|
|
0d6b09a5f6 | ||
|
|
7469ab5ed9 | ||
|
|
b6a183aa5b | ||
|
|
49f85703da | ||
|
|
3cf641d281 | ||
|
|
d409e96e2a | ||
|
|
fbcccd8be0 | ||
|
|
d25c3be627 | ||
|
|
ca50d1f04a | ||
|
|
ab66833c45 | ||
|
|
8a4710b270 | ||
|
|
57851cd508 | ||
|
|
38c0d62478 | ||
|
|
e8ff3ca7ed | ||
|
|
ff8bc1ca68 | ||
|
|
c32e736754 | ||
|
|
ca13e35413 | ||
|
|
8ab0caaf0c | ||
|
|
26c8d23c21 | ||
|
|
d97224e69e | ||
|
|
51069a370e | ||
|
|
00976d9338 | ||
|
|
dccee6d419 | ||
|
|
af450df513 | ||
|
|
821ab6c13e | ||
|
|
cca7b239ee | ||
|
|
5ad860f186 | ||
|
|
828e9d5eb4 | ||
|
|
aa6e68776c | ||
|
|
c8ced6e360 | ||
|
|
193b69246a | ||
|
|
662431043e | ||
|
|
b9d7789d71 | ||
|
|
7f746ce2c6 | ||
|
|
30efd02d22 | ||
|
|
b2e1a2956f | ||
|
|
a4e33bf46a | ||
|
|
ac0f593c7c | ||
|
|
7d033e1c0e | ||
|
|
06fe240be2 | ||
|
|
f148844573 | ||
|
|
2316f4230e | ||
|
|
c140088f82 | ||
|
|
9691173032 | ||
|
|
8513ea2a31 | ||
|
|
a5a1b5fcd8 | ||
|
|
30f81e2143 | ||
|
|
f48cfdcfe0 | ||
|
|
728ffd37b8 | ||
|
|
5ffc9c56ee | ||
|
|
2357e7fe41 | ||
|
|
f18f13643f | ||
|
|
3ac154b7da | ||
|
|
47ddc6dedf | ||
|
|
82f2e47667 | ||
|
|
55c656ead9 | ||
|
|
dc6a7e7425 | ||
|
|
3a77d8aa21 | ||
|
|
b7f31d0a64 | ||
|
|
95af34ca99 | ||
|
|
079f39efed | ||
|
|
83acdee013 | ||
|
|
941f92530d | ||
|
|
942021e4bb | ||
|
|
7a62b058c9 | ||
|
|
ff8527c819 | ||
|
|
76be54b2be | ||
|
|
5511fdd0c3 | ||
|
|
3c82e61567 | ||
|
|
d374425a20 | ||
|
|
95947323a2 | ||
|
|
38575a653d | ||
|
|
dba05488bf | ||
|
|
7202556f45 | ||
|
|
32ea675c92 | ||
|
|
6a5da1011c | ||
|
|
8b250bda64 | ||
|
|
92d31a8890 | ||
|
|
1b3ffb150b | ||
|
|
2ab9dc4270 | ||
|
|
e8dd7be8a3 | ||
|
|
ba6b35ad84 | ||
|
|
b6a20f6441 | ||
|
|
e6d43f9d77 | ||
|
|
2e5a79e76c | ||
|
|
60c2338543 | ||
|
|
fca86be077 | ||
|
|
8a8aea0927 | ||
|
|
b8d9276f29 | ||
|
|
89e9a6f583 | ||
|
|
4327b264bc | ||
|
|
4ff9131e61 | ||
|
|
c1e2ee8123 | ||
|
|
308bcc4ab9 | ||
|
|
0ced816505 | ||
|
|
ac3c664385 | ||
|
|
17bf8cb4ab | ||
|
|
6f5054f645 | ||
|
|
0c04df88cd | ||
|
|
32423654b4 | ||
|
|
f3a9f95477 | ||
|
|
3615ba2bdb | ||
|
|
a94710a9a5 | ||
|
|
ae287dfc00 | ||
|
|
c39df96b1d | ||
|
|
b15b4735bb | ||
|
|
b55174e5e9 | ||
|
|
cde03565be | ||
|
|
1f3f7af1e1 | ||
|
|
d13c712103 | ||
|
|
1e203cade7 | ||
|
|
4511805e3d | ||
|
|
ba2f7b78e8 | ||
|
|
c222457c86 | ||
|
|
e8424d71db | ||
|
|
a09b59392e | ||
|
|
5857476e1b | ||
|
|
3f8564f641 | ||
|
|
cb42ae0719 | ||
|
|
8b59c8c167 | ||
|
|
c1fe3dff22 | ||
|
|
4b35df6c51 | ||
|
|
3aa12246ea | ||
|
|
8a3fe14df7 | ||
|
|
b84f258f87 | ||
|
|
4702697e9e | ||
|
|
da9dcc8f50 | ||
|
|
68fc202086 | ||
|
|
ce0861d5bd | ||
|
|
a3e830127d | ||
|
|
fb3ac0cad0 | ||
|
|
0339afa10c | ||
|
|
a70e7751e9 | ||
|
|
a29cb58f1f | ||
|
|
861b6a2c6c | ||
|
|
8e5427d626 | ||
|
|
4beb54e096 | ||
|
|
d6a662dcd8 | ||
|
|
b23838804e | ||
|
|
676ce6aec1 | ||
|
|
8874c4dd43 | ||
|
|
9471ff87c4 | ||
|
|
2c954d42ce | ||
|
|
679836aa08 | ||
|
|
88228a5a3f | ||
|
|
e5912b996d | ||
|
|
dd73aeec70 | ||
|
|
6f6ac46156 | ||
|
|
0e16f095a0 | ||
|
|
8cb76be414 | ||
|
|
c8a22d31cd | ||
|
|
0b84873b92 | ||
|
|
106adfe9ed | ||
|
|
7fd3e4133b | ||
|
|
2ad24a0c0f | ||
|
|
f560dc4c11 | ||
|
|
a499efc8cf | ||
|
|
a2b57f502c | ||
|
|
1c387c1fd1 | ||
|
|
d14f16f0e9 | ||
|
|
a437f23e9d | ||
|
|
78aa0a59de | ||
|
|
6616d14e9e | ||
|
|
5cf7a0f180 | ||
|
|
c2f01d8d1e | ||
|
|
3726926776 | ||
|
|
bf19d20ec3 | ||
|
|
a673cbcf1e | ||
|
|
a30d8cfa2f | ||
|
|
52717ae486 | ||
|
|
0f09cca0e3 | ||
|
|
0beaa76f87 | ||
|
|
a3d0072e45 | ||
|
|
1a56f0f162 | ||
|
|
65f0bd04f2 | ||
|
|
0e87deb9ff | ||
|
|
843b608939 | ||
|
|
f69d5d7e3f | ||
|
|
2270f801ad | ||
|
|
2aedfde9fe | ||
|
|
635ac35d55 | ||
|
|
50d6c5f90f | ||
|
|
a45e42a056 | ||
|
|
61d9c1a57a | ||
|
|
a65196ee8c | ||
|
|
1dfa8361c5 | ||
|
|
436c9b3488 | ||
|
|
9e57c9d78f | ||
|
|
16bc5359e4 | ||
|
|
2cec34021a | ||
|
|
c900b58120 | ||
|
|
f523d93720 | ||
|
|
6c7fa77684 | ||
|
|
c7ddf6a80d | ||
|
|
ab2a72a193 | ||
|
|
6bdad8b5f6 | ||
|
|
0b29b7f9fd | ||
|
|
1b84fc1d2e | ||
|
|
60d9ef5c67 | ||
|
|
0df68cb8e6 | ||
|
|
bbe00b2f54 | ||
|
|
f551cfef81 | ||
|
|
013f2ce66a | ||
|
|
f38df8b61b | ||
|
|
77dbac81ed | ||
|
|
0d1d30ab32 | ||
|
|
c28ad8e8ef | ||
|
|
2306d6ffd6 | ||
|
|
b54dabddd5 | ||
|
|
e0bc1133d7 | ||
|
|
94877b0ac4 | ||
|
|
07b6e215a1 | ||
|
|
ee6e36cd90 | ||
|
|
fe6857c6c2 | ||
|
|
fd7966b25e | ||
|
|
3664a86722 | ||
|
|
93848fab53 | ||
|
|
59d2b4d819 | ||
|
|
4981723cea | ||
|
|
cc3d772f69 | ||
|
|
7114216394 | ||
|
|
7023e7e096 | ||
|
|
e0d292ace5 | ||
|
|
24e463116b | ||
|
|
1bd9590c53 | ||
|
|
849097a7a0 | ||
|
|
b738fc4319 | ||
|
|
48b3075e44 | ||
|
|
3dc347fbb8 | ||
|
|
befc9b7a66 | ||
|
|
f0967d4f18 | ||
|
|
1a7a670c96 | ||
|
|
5db01373bb | ||
|
|
6cf671ad42 | ||
|
|
064181731c | ||
|
|
35cd9ca12e | ||
|
|
e5dd37d2d6 | ||
|
|
c07c060b7d | ||
|
|
cc8518101b | ||
|
|
d684a33ae9 | ||
|
|
6068647840 | ||
|
|
57eb2feeb6 | ||
|
|
61b4fdb53a | ||
|
|
e65ae80fce | ||
|
|
90cb9b04f4 | ||
|
|
6cc62a183f | ||
|
|
be611f53e1 | ||
|
|
7857eea58f | ||
|
|
d5038b35f6 | ||
|
|
2ff23f3b62 | ||
|
|
eb0c0e63ea | ||
|
|
07ca70fd44 | ||
|
|
ce1e9c3050 | ||
|
|
504209b5a6 | ||
|
|
7911df46a0 | ||
|
|
d610788866 | ||
|
|
711a8cee8a | ||
|
|
7a3c52af7e | ||
|
|
e633d43c38 | ||
|
|
3eeabe8d91 | ||
|
|
84f4fbe142 | ||
|
|
3fd1a366bf | ||
|
|
eb036bd8f1 | ||
|
|
4bb8aecc25 | ||
|
|
72cbdb2e39 | ||
|
|
752934350f | ||
|
|
5bfb5d4c3c | ||
|
|
a72fc80ef6 | ||
|
|
44c6f3fafc | ||
|
|
2d4484e0f2 | ||
|
|
68dd47aa7b | ||
|
|
a13c0b12cb | ||
|
|
535e33509b | ||
|
|
4c6836bc3f | ||
|
|
9c5ceb6775 | ||
|
|
d20c1fe029 | ||
|
|
aae7515339 | ||
|
|
7269e7b84a | ||
|
|
81d123f652 | ||
|
|
b8c0e844ea | ||
|
|
6cab2ed6b9 | ||
|
|
72d250d8c4 | ||
|
|
57f82c3c9e | ||
|
|
918d0eb4fd | ||
|
|
435ec448d6 | ||
|
|
1e4d621ee7 | ||
|
|
370268bba8 | ||
|
|
8906aeb766 | ||
|
|
7c4b6739fc | ||
|
|
d9ebb11ba9 | ||
|
|
12628b67ea | ||
|
|
906ed3c78f | ||
|
|
ee2fb17945 | ||
|
|
06ef674597 | ||
|
|
df33d40285 | ||
|
|
b3108e4dff | ||
|
|
0b2120e423 | ||
|
|
a3525f411d | ||
|
|
f7c38992cc | ||
|
|
3e96892a91 | ||
|
|
274fc34868 | ||
|
|
6cb979fc6f | ||
|
|
10ee9f4de4 | ||
|
|
c31f66aed5 | ||
|
|
7b024751d1 | ||
|
|
9c3c1b7608 | ||
|
|
a8ddf528a8 | ||
|
|
9f3c33758c | ||
|
|
ed9a4a3933 | ||
|
|
bf38fead18 | ||
|
|
b75402e772 | ||
|
|
a98c734eb5 | ||
|
|
fb69ac33a0 | ||
|
|
25d1d785ba | ||
|
|
41afbb117d | ||
|
|
8b1650c382 | ||
|
|
4b5febadb7 | ||
|
|
8ca2af0fe7 | ||
|
|
03228d945d | ||
|
|
3e845bc37c | ||
|
|
531f1e52eb | ||
|
|
f5e5bb8720 | ||
|
|
a6d5158830 | ||
|
|
dfa1ce8d77 | ||
|
|
3ba4823fd7 | ||
|
|
1b004f170d | ||
|
|
9ab30b7b17 | ||
|
|
131d1c74c9 | ||
|
|
b9ff6c873c | ||
|
|
29f43f8fe8 | ||
|
|
6653ccf9a1 | ||
|
|
4b8764c070 | ||
|
|
bf09c14e44 | ||
|
|
2f99a4883f | ||
|
|
27a1038e8d | ||
|
|
73e5cc9721 | ||
|
|
b12741464e | ||
|
|
af85f18eae | ||
|
|
2551a945b8 | ||
|
|
6bab8295d7 | ||
|
|
6bfdd69279 | ||
|
|
5b6dbfb701 | ||
|
|
8b26d5b7fb | ||
|
|
384727a553 | ||
|
|
397523f4ac | ||
|
|
ca388b8c7c | ||
|
|
ca5fdff72f | ||
|
|
317ff8c6af | ||
|
|
50f5abf535 | ||
|
|
c1fe3533c4 | ||
|
|
93a3c896a4 | ||
|
|
0bee03e86f | ||
|
|
de5db26214 | ||
|
|
a5771c48ba | ||
|
|
5b3fb36ac7 | ||
|
|
c8a39e361d | ||
|
|
068a2b869e | ||
|
|
e7c3563358 | ||
|
|
ff2554c8a6 | ||
|
|
35c239aae8 | ||
|
|
4fa85723ab | ||
|
|
3ff628254d | ||
|
|
c2e1b6c613 | ||
|
|
ec6efd2488 | ||
|
|
1a09fc60f0 | ||
|
|
bcedc206e1 | ||
|
|
77582e0a17 | ||
|
|
be0cb667c8 | ||
|
|
dbeeacf11c | ||
|
|
d0344fef8b | ||
|
|
7dbb4bba09 | ||
|
|
bc2f639aae | ||
|
|
8445eb0959 | ||
|
|
de04cba41f | ||
|
|
e923847dac | ||
|
|
efa156b53a | ||
|
|
d2f02e8e99 | ||
|
|
5ba3453dcc | ||
|
|
9d8215e49f | ||
|
|
2cc153c796 | ||
|
|
55084d3aca | ||
|
|
878ff9826a | ||
|
|
7e00a86048 | ||
|
|
e133160a68 | ||
|
|
62579ed6b0 | ||
|
|
98e3746a1e | ||
|
|
01eef7eb41 | ||
|
|
ccf5d6fc90 | ||
|
|
055224693a | ||
|
|
9864ce5bb2 | ||
|
|
238afde00a | ||
|
|
4b67900225 | ||
|
|
fb10357dd5 | ||
|
|
f7d282fc8e | ||
|
|
11ae3dd46c | ||
|
|
3544c2b0c8 | ||
|
|
edfa3c1980 | ||
|
|
620f39c6a2 | ||
|
|
0c253e2437 | ||
|
|
53ae42ed68 | ||
|
|
871c9e6d3e | ||
|
|
ccc30fb52e | ||
|
|
745b803d28 | ||
|
|
bd693768cc | ||
|
|
6e1c40ea0f | ||
|
|
b45108d80d | ||
|
|
ec68c54644 | ||
|
|
4e5e5dd6b3 | ||
|
|
e7ba618bbe | ||
|
|
fc470cd20d | ||
|
|
c6bc20cd2a | ||
|
|
cd418a5525 | ||
|
|
65b9086f18 | ||
|
|
0e71ea7a5a | ||
|
|
faa9fa8db9 | ||
|
|
f272961fbd | ||
|
|
ac0d29dc06 | ||
|
|
cb4f57eb4a | ||
|
|
a1b4b9992e | ||
|
|
18a6ee5a52 | ||
|
|
de0fd588b6 | ||
|
|
54f44af494 | ||
|
|
38899c6011 | ||
|
|
dd77147313 | ||
|
|
1690f875ca | ||
|
|
66ddf25977 | ||
|
|
c24b04d19b | ||
|
|
0c31c62a62 | ||
|
|
8c9afc2dfd | ||
|
|
bd06a1c393 | ||
|
|
40a47f8c7a | ||
|
|
8516c9d5b5 | ||
|
|
caa5751d50 | ||
|
|
01d954e4ab | ||
|
|
f6f461c571 | ||
|
|
e1e7492f17 | ||
|
|
ea85a3c3d9 | ||
|
|
c0830b48d0 | ||
|
|
e60bf48134 | ||
|
|
ea7d923d76 | ||
|
|
5e259ec176 | ||
|
|
3ec4b25793 | ||
|
|
c5b72f0192 | ||
|
|
b9b0e98ccf | ||
|
|
32ef273f9d | ||
|
|
76f6a19733 | ||
|
|
348ec52b14 | ||
|
|
76181f4771 | ||
|
|
9072ff93b9 | ||
|
|
a303e1e1b8 | ||
|
|
acbcde85ce | ||
|
|
ba1166d0d0 | ||
|
|
7238c4dfac | ||
|
|
d901515059 | ||
|
|
f5c4d903e6 | ||
|
|
e15c8e473f | ||
|
|
69eb1a49d4 | ||
|
|
1d2d086a58 | ||
|
|
4c5b5ca0ba | ||
|
|
d5b550f89a | ||
|
|
b29b4a959b | ||
|
|
10decf95f6 | ||
|
|
b2403d59b7 | ||
|
|
0f8a2554dc | ||
|
|
668199e219 | ||
|
|
498feeed21 | ||
|
|
4040c1d931 | ||
|
|
e774e807c6 | ||
|
|
f80629db44 | ||
|
|
248944a300 | ||
|
|
188a58e5c7 | ||
|
|
3e1a909b1d | ||
|
|
41cd238e02 | ||
|
|
4fe4e10abb | ||
|
|
659ac2e8c7 | ||
|
|
71396e062d | ||
|
|
2ba1a84b0c | ||
|
|
b5ef34b0a0 | ||
|
|
898725082a | ||
|
|
a00781b733 | ||
|
|
a619001533 | ||
|
|
2c65bd097b | ||
|
|
0bbce1c140 | ||
|
|
b3abf7c592 | ||
|
|
a201f74115 | ||
|
|
bc60fa81af | ||
|
|
c465f40179 | ||
|
|
d25b441add | ||
|
|
d755903fdb | ||
|
|
8ac26dd19f | ||
|
|
4d34809279 | ||
|
|
b375c71a28 | ||
|
|
cefc3e6da9 | ||
|
|
bc88585026 | ||
|
|
7a1494fc46 | ||
|
|
ab95905472 | ||
|
|
61e5fd759a | ||
|
|
c1b8879b6b | ||
|
|
f033234abe | ||
|
|
f133409207 | ||
|
|
a1681f8576 | ||
|
|
d7d61ab01d | ||
|
|
3175387c73 | ||
|
|
d98d493420 | ||
|
|
c2c6c14ec5 | ||
|
|
e77b1ea87b | ||
|
|
3930720127 | ||
|
|
ae2f1ff382 | ||
|
|
5ce3d5dc36 | ||
|
|
5f5a802b44 | ||
|
|
052f9effc1 | ||
|
|
b4602fd2b1 | ||
|
|
43bdc04637 | ||
|
|
700672b6ec | ||
|
|
e36899c30f | ||
|
|
e04f34a202 | ||
|
|
d34164ec49 | ||
|
|
fc5ce7fb61 | ||
|
|
a8d5f7d5eb | ||
|
|
efa0184034 | ||
|
|
0796b304cc | ||
|
|
3d167d8a27 | ||
|
|
d4435daf31 | ||
|
|
07e8d4ef69 | ||
|
|
e8c8a0a2c8 | ||
|
|
8daa0fced8 | ||
|
|
65a160f24a | ||
|
|
04fd29c8b7 | ||
|
|
43a70c2bfb | ||
|
|
a14bc9a9b1 | ||
|
|
ba0073ca71 | ||
|
|
e128434acd | ||
|
|
9f05236503 | ||
|
|
60703bdcfc | ||
|
|
2ccd36d09e | ||
|
|
cfe9e762ad | ||
|
|
9969d6095d | ||
|
|
38b1ca9b90 | ||
|
|
b4b33ae06f | ||
|
|
1e569e67b1 | ||
|
|
8b6ed9f993 | ||
|
|
48889b51b0 | ||
|
|
c6492b3d8a | ||
|
|
92ff1f2671 | ||
|
|
5312c9ad4c | ||
|
|
77a52b02cb | ||
|
|
bd1196716a | ||
|
|
185a5b51ff | ||
|
|
d5e1bfab48 | ||
|
|
8178f12ae8 | ||
|
|
97c4cd49b0 | ||
|
|
b7cc469f7b | ||
|
|
c565d31e53 | ||
|
|
cb17cb0535 | ||
|
|
e0b9b4320a | ||
|
|
5e5096c69d | ||
|
|
c45f976d34 | ||
|
|
39ff11fe82 | ||
|
|
3a055634f2 | ||
|
|
802e2e6bba | ||
|
|
ca1b5ed611 | ||
|
|
5475f8ffbd | ||
|
|
657e195455 | ||
|
|
7894ac6651 | ||
|
|
5d4b98d4f6 | ||
|
|
6fcf504a4b | ||
|
|
042e7acca5 | ||
|
|
17bd323376 | ||
|
|
796b51113f | ||
|
|
7a1a0e613c | ||
|
|
233a7dbf68 | ||
|
|
af3374e210 | ||
|
|
515f8de2c5 | ||
|
|
2ea69624af | ||
|
|
ed6ea13773 | ||
|
|
7aff42ca9d | ||
|
|
c320c64f27 | ||
|
|
b55fa94db9 | ||
|
|
a5bc9a953c | ||
|
|
34f52e8315 | ||
|
|
15dcc507d8 | ||
|
|
962f081fcd | ||
|
|
991789da72 | ||
|
|
d5c37ad8bc | ||
|
|
4ee5431e07 | ||
|
|
176f7f1515 | ||
|
|
105c54a1f1 | ||
|
|
f36c1ca207 | ||
|
|
83353e9419 | ||
|
|
f6627937fa | ||
|
|
a122e72a2b | ||
|
|
fcde56f614 | ||
|
|
59692d0190 | ||
|
|
15634a8435 | ||
|
|
d05d7a09c4 | ||
|
|
b4b4b8d350 | ||
|
|
9541fc1033 | ||
|
|
ffcc495f98 | ||
|
|
63a5f22e58 | ||
|
|
6e8246206a | ||
|
|
c4e8b5586f | ||
|
|
7bb2e83ff4 | ||
|
|
7b7e240af6 | ||
|
|
2a72c2e19b | ||
|
|
9ca37c6cb8 | ||
|
|
a9b8626ad3 | ||
|
|
c614bc2356 | ||
|
|
f7f5255378 | ||
|
|
23a0e9a96c | ||
|
|
8b89a1770d | ||
|
|
bfe43d841f | ||
|
|
423a047687 | ||
|
|
cc56ef3abd | ||
|
|
fbcdc5adad | ||
|
|
b75180d959 | ||
|
|
fab50bc1f1 | ||
|
|
cfe7fbb23e | ||
|
|
8477ed2967 | ||
|
|
a1132ca7aa | ||
|
|
6e52ab6182 | ||
|
|
e33e0effa3 | ||
|
|
0788826a71 | ||
|
|
c79c0bd333 | ||
|
|
e4c3a63375 | ||
|
|
a9c8429d2e | ||
|
|
9af8cfd1dc | ||
|
|
93502b3c2a | ||
|
|
46ff43e9ba | ||
|
|
954d56e151 | ||
|
|
f040a72765 | ||
|
|
8b65b96adf | ||
|
|
cf5cf02529 | ||
|
|
26ea8a7494 | ||
|
|
27d83ba440 | ||
|
|
c380e7566a | ||
|
|
81518069ed | ||
|
|
a06eb5dfe1 | ||
|
|
7d3f75ef87 | ||
|
|
54ef2dd39b | ||
|
|
b51101038f | ||
|
|
79ad89c673 | ||
|
|
e7dd6fa714 | ||
|
|
a46a0c0949 | ||
|
|
a13b766bad | ||
|
|
969c7c93d6 | ||
|
|
aade0d557d | ||
|
|
d1c97d8f9a | ||
|
|
ae8ad6969a | ||
|
|
6d62bf0e25 | ||
|
|
26a27a6de4 | ||
|
|
51cfad5b9f | ||
|
|
ca3399df77 | ||
|
|
c4a3211cfc | ||
|
|
d9f662c06e | ||
|
|
abf21675d5 | ||
|
|
8a17e3543a | ||
|
|
c70ad2fa65 | ||
|
|
8f8b28425d | ||
|
|
6b5bfe24e6 | ||
|
|
ae23664a41 | ||
|
|
bbbb82351f | ||
|
|
67a9b6502b | ||
|
|
fe1b0b5cd8 | ||
|
|
8dade0d84e | ||
|
|
499b1c2e70 | ||
|
|
047b255e14 | ||
|
|
3926e4dd98 | ||
|
|
639b17c663 | ||
|
|
ea8a49f1b7 | ||
|
|
eda3f20b26 | ||
|
|
6ef32f182a | ||
|
|
6bae293bdf | ||
|
|
d5d29c1c92 | ||
|
|
556ff24c5f | ||
|
|
f5d9af9b0b | ||
|
|
3ff0ed52b2 | ||
|
|
4ae6e9fdfd | ||
|
|
b9fc46fa41 | ||
|
|
133f3d24f5 | ||
|
|
241ebe50d2 | ||
|
|
7fda26f268 | ||
|
|
0729d50e47 | ||
|
|
f6cbb708b0 | ||
|
|
8b7692cf3b | ||
|
|
7523251098 | ||
|
|
5b5e6d83d9 | ||
|
|
db70272902 | ||
|
|
78068bfaa0 | ||
|
|
9f7cf463b9 | ||
|
|
9eca0d2fde | ||
|
|
45bb74d8f6 | ||
|
|
07103431a9 | ||
|
|
3588ce7bc5 | ||
|
|
557d4ae4c1 | ||
|
|
563d1dc3f1 | ||
|
|
5a8a41ad50 | ||
|
|
60be24c665 | ||
|
|
4a968cd34f | ||
|
|
0608c67767 | ||
|
|
bd1b06c9b4 | ||
|
|
98f8be45b7 | ||
|
|
641f20a4f6 | ||
|
|
7cbfa228ee | ||
|
|
1c82b7b0c3 | ||
|
|
b7368fa933 | ||
|
|
ecf163d4e7 | ||
|
|
1a72d3134c | ||
|
|
612cad5d9e | ||
|
|
9b1b5b3a4b | ||
|
|
6b1ffaff7a | ||
|
|
ffa24eac84 | ||
|
|
82eb69324d | ||
|
|
eaf61526fb | ||
|
|
47906d23f0 | ||
|
|
2fa05f8d61 | ||
|
|
6bee3f22da | ||
|
|
396ecf6570 | ||
|
|
f9ef5e8498 | ||
|
|
cf9cd503e5 | ||
|
|
0e00f708f1 | ||
|
|
a4abccdcef | ||
|
|
6ace710a65 | ||
|
|
23b99f83ce | ||
|
|
8bc2b4a122 | ||
|
|
2b3ec55850 | ||
|
|
9a203aab67 | ||
|
|
5cc1f62839 | ||
|
|
ad57dd3169 | ||
|
|
0635a344ae | ||
|
|
12dab61a67 | ||
|
|
7ae1a70a8d | ||
|
|
4afec6fb7f | ||
|
|
886475af7e | ||
|
|
4d89e997b3 | ||
|
|
93a6e03f70 | ||
|
|
851f4d4a87 | ||
|
|
f2fa326c0c | ||
|
|
d9b63a482c | ||
|
|
c585d80e3e | ||
|
|
9c8be72574 | ||
|
|
e6551e4590 | ||
|
|
7cdb73d74b | ||
|
|
3d0da059dc | ||
|
|
274536bf13 | ||
|
|
6df1574b8b | ||
|
|
490a696567 | ||
|
|
55fad1910a | ||
|
|
aff2a50cdd | ||
|
|
5bc676a042 | ||
|
|
f5b2a92e84 | ||
|
|
1fcd462660 | ||
|
|
152e3c6258 | ||
|
|
b6d2ba2019 | ||
|
|
53e2ce33b8 | ||
|
|
9493f4a872 | ||
|
|
a32ce4fbf6 | ||
|
|
89533706a8 | ||
|
|
deb7ed660c | ||
|
|
a520f0bfed | ||
|
|
c4fd139586 | ||
|
|
4c8ff0955d | ||
|
|
6592526109 | ||
|
|
3a86e659af | ||
|
|
b032accdfa | ||
|
|
272d36995b | ||
|
|
9302c60b47 | ||
|
|
76880e0de7 | ||
|
|
0ef800073b | ||
|
|
93f148fca3 | ||
|
|
5981887705 | ||
|
|
a4c1aee5ea | ||
|
|
f5ba6fa952 | ||
|
|
3ebd90565c | ||
|
|
b95ad701af | ||
|
|
efc68c078e | ||
|
|
0e6012ad45 | ||
|
|
113533ad61 | ||
|
|
ac9075a82a | ||
|
|
16357a9bc7 | ||
|
|
998739a7dc | ||
|
|
8afc9f9a09 | ||
|
|
7a63cfd717 | ||
|
|
7ea6157b67 | ||
|
|
553c53e7e8 | ||
|
|
53796f55be | ||
|
|
5020307a6c | ||
|
|
85040a2e6d |
2
.babelrc
2
.babelrc
@@ -1,4 +1,4 @@
|
||||
{
|
||||
"presets": ["react", "es2015", "es2016"],
|
||||
"plugins": ["transform-class-properties", "transform-object-rest-spread", "transform-async-to-generator", "transform-runtime", "add-module-exports"]
|
||||
"plugins": ["transform-class-properties", "transform-object-rest-spread", "transform-async-to-bluebird", "transform-runtime", "add-module-exports"]
|
||||
}
|
||||
|
||||
2
.github/ISSUE_TEMPLATE.md
vendored
2
.github/ISSUE_TEMPLATE.md
vendored
@@ -1,3 +1,5 @@
|
||||
<!-- Please report security issues by email to security@matrix.org -->
|
||||
|
||||
<!-- This is a bug report template. By following the instructions below and
|
||||
filling out the sections with your information, you will help the us to get all
|
||||
the necessary data to fix your issue.
|
||||
|
||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -14,6 +14,6 @@
|
||||
npm-debug.log
|
||||
electron/dist
|
||||
electron/pub
|
||||
/.idea
|
||||
**/.idea
|
||||
/config.json
|
||||
/src/component-index.js
|
||||
|
||||
17
.travis.yml
17
.travis.yml
@@ -1,3 +1,13 @@
|
||||
# we need trusty for the chrome addon
|
||||
dist: trusty
|
||||
|
||||
# we don't need sudo, so can run in a container, which makes startup much
|
||||
# quicker.
|
||||
#
|
||||
# unfortunately we do temporarily require sudo as a workaround for
|
||||
# https://github.com/travis-ci/travis-ci/issues/8836
|
||||
sudo: required
|
||||
|
||||
language: node_js
|
||||
node_js:
|
||||
# make sure we work with a range of node versions.
|
||||
@@ -5,8 +15,9 @@ node_js:
|
||||
# - 4.x is still in LTS (until April 2018), but some of our deps (notably
|
||||
# extract-zip) don't work with it
|
||||
# - 5.x has been EOLed for nearly a year.
|
||||
# - 6.x is the current 'LTS' version
|
||||
# - 7.x is the current 'current' version (until October 2017)
|
||||
# - 6.x is the active 'LTS' version
|
||||
# - 7.x is no longer supported
|
||||
# - 8.x is the current 'current' version (until October 2017)
|
||||
#
|
||||
# see: https://github.com/nodejs/LTS/
|
||||
#
|
||||
@@ -16,6 +27,8 @@ node_js:
|
||||
- 6.3
|
||||
- 6
|
||||
- 7
|
||||
addons:
|
||||
chrome: stable
|
||||
install:
|
||||
# clone the deps with depth 1: we know we will only ever need that one
|
||||
# commit.
|
||||
|
||||
@@ -13,3 +13,6 @@ include:
|
||||
|
||||
* Michael Telatynski (https://github.com/t3chguy)
|
||||
Improved consistency of inverted elements in dark theme across browsers
|
||||
|
||||
* Alexandr Korsak (https://github.com/oivoodoo)
|
||||
Improved multiple file uploading
|
||||
|
||||
729
CHANGELOG.md
729
CHANGELOG.md
@@ -1,3 +1,732 @@
|
||||
Changes in [0.14.0-rc.5](https://github.com/vector-im/riot-web/releases/tag/v0.14.0-rc.5) (2018-04-09)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.0-rc.4...v0.14.0-rc.5)
|
||||
* Add CSS for new control to set group join policy
|
||||
|
||||
Changes in [0.14.0-rc.4](https://github.com/vector-im/riot-web/releases/tag/v0.14.0-rc.4) (2018-03-22)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.0-rc.3...v0.14.0-rc.4)
|
||||
|
||||
* Fix tagging rooms as direct messages
|
||||
|
||||
Changes in [0.14.0-rc.3](https://github.com/vector-im/riot-web/releases/tag/v0.14.0-rc.3) (2018-03-20)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.0-rc.2...v0.14.0-rc.3)
|
||||
|
||||
* Fix a bug where the badge on a room tile would not update
|
||||
when a room was read from a different device.
|
||||
|
||||
Changes in [0.14.0-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.14.0-rc.2) (2018-03-19)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.0-rc.1...v0.14.0-rc.2)
|
||||
|
||||
* Take TagPanel out of labs
|
||||
[\#6347](https://github.com/vector-im/riot-web/pull/6347)
|
||||
* Add languages (czech, galician and serbian)
|
||||
[\#6343](https://github.com/vector-im/riot-web/pull/6343)
|
||||
|
||||
Changes in [0.14.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.14.0-rc.1) (2018-03-19)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.13.5...v0.14.0-rc.1)
|
||||
|
||||
* Force update RoomSubList after reading a room
|
||||
[\#6342](https://github.com/vector-im/riot-web/pull/6342)
|
||||
* Ensure entire LeftPanel is faded when settings open
|
||||
[\#6340](https://github.com/vector-im/riot-web/pull/6340)
|
||||
* Update from Weblate.
|
||||
[\#6330](https://github.com/vector-im/riot-web/pull/6330)
|
||||
* Implement a simple shouldComponentUpdate for DNDRoomTile
|
||||
[\#6313](https://github.com/vector-im/riot-web/pull/6313)
|
||||
* Remove og:image with status.im URL
|
||||
[\#6317](https://github.com/vector-im/riot-web/pull/6317)
|
||||
* Add change delay warning in GroupView settings
|
||||
[\#6316](https://github.com/vector-im/riot-web/pull/6316)
|
||||
* Correctly position mx_TagPanel_clearButton
|
||||
[\#6289](https://github.com/vector-im/riot-web/pull/6289)
|
||||
* Fix gap between avatar and border
|
||||
[\#6290](https://github.com/vector-im/riot-web/pull/6290)
|
||||
* Fix bug where cannot send group invite on GroupMemberInfo phase
|
||||
[\#6303](https://github.com/vector-im/riot-web/pull/6303)
|
||||
* Fix themeing bug with Firefox where "disabled" ignored
|
||||
[\#6301](https://github.com/vector-im/riot-web/pull/6301)
|
||||
* Changes for E2E "fudge-button"
|
||||
[\#6288](https://github.com/vector-im/riot-web/pull/6288)
|
||||
* Make sure mx_TagPanel_tagTileContainer occupies full height
|
||||
[\#6286](https://github.com/vector-im/riot-web/pull/6286)
|
||||
* Add transparent CSS class for RoomTile
|
||||
[\#6281](https://github.com/vector-im/riot-web/pull/6281)
|
||||
* Fix crash; fs event received /w langauge file empty
|
||||
[\#6273](https://github.com/vector-im/riot-web/pull/6273)
|
||||
* Add setting to disable TagPanel
|
||||
[\#6269](https://github.com/vector-im/riot-web/pull/6269)
|
||||
* CSS for my groups microcopy
|
||||
[\#6257](https://github.com/vector-im/riot-web/pull/6257)
|
||||
* Add Bulgarian to the list of languages
|
||||
[\#6246](https://github.com/vector-im/riot-web/pull/6246)
|
||||
* Make media dropdown wider
|
||||
[\#6245](https://github.com/vector-im/riot-web/pull/6245)
|
||||
* Make dropdowns with long options degrade more gracefully
|
||||
[\#6244](https://github.com/vector-im/riot-web/pull/6244)
|
||||
* Fix un-tinted "View Community" icon in TagTile context menu
|
||||
[\#6223](https://github.com/vector-im/riot-web/pull/6223)
|
||||
* Fix RoomDropTarget and emptySubListTip to have containers
|
||||
[\#6160](https://github.com/vector-im/riot-web/pull/6160)
|
||||
* Fix syntax error of wrong use of self-closing HTML tag
|
||||
[\#6154](https://github.com/vector-im/riot-web/pull/6154)
|
||||
* Use translucent black for RoomSubList bg to fix tinting
|
||||
[\#6227](https://github.com/vector-im/riot-web/pull/6227)
|
||||
* CSS for changing "R" to "X" for clearing group filter
|
||||
[\#6216](https://github.com/vector-im/riot-web/pull/6216)
|
||||
* CSS for new global TagPanel filter
|
||||
[\#6187](https://github.com/vector-im/riot-web/pull/6187)
|
||||
* Separate the middle panel from the room list
|
||||
[\#6194](https://github.com/vector-im/riot-web/pull/6194)
|
||||
* Only use DNDRoomTile for editable sub lists
|
||||
[\#6176](https://github.com/vector-im/riot-web/pull/6176)
|
||||
* Adjust CSS to prevent scrollbars on message panel spinner
|
||||
[\#6131](https://github.com/vector-im/riot-web/pull/6131)
|
||||
* Implement riot-web side of dragging GroupTile avatars to TagPanel
|
||||
[\#6143](https://github.com/vector-im/riot-web/pull/6143)
|
||||
* Fix LeftPanel size being incorrect when TagPanel disabled
|
||||
[\#6140](https://github.com/vector-im/riot-web/pull/6140)
|
||||
* Fix TagPanel from collapsing to < 60px when LP collapsed
|
||||
[\#6134](https://github.com/vector-im/riot-web/pull/6134)
|
||||
* Temporary hack to constrain LLP container size.
|
||||
[\#6138](https://github.com/vector-im/riot-web/pull/6138)
|
||||
* Fix typo
|
||||
[\#6137](https://github.com/vector-im/riot-web/pull/6137)
|
||||
* Add context menu to TagPanel
|
||||
[\#6127](https://github.com/vector-im/riot-web/pull/6127)
|
||||
* Make room tagging flux-y
|
||||
[\#6096](https://github.com/vector-im/riot-web/pull/6096)
|
||||
* Move groups button to TagPanel
|
||||
[\#6130](https://github.com/vector-im/riot-web/pull/6130)
|
||||
* Fix long group name pushing settings cog into void
|
||||
[\#6106](https://github.com/vector-im/riot-web/pull/6106)
|
||||
* Fix horizontal scrollbar under certain circumstances
|
||||
[\#6103](https://github.com/vector-im/riot-web/pull/6103)
|
||||
* Split MImageBody into MFileBody to match JS Classes.
|
||||
[\#6067](https://github.com/vector-im/riot-web/pull/6067)
|
||||
* Add Catalan
|
||||
[\#6040](https://github.com/vector-im/riot-web/pull/6040)
|
||||
* Update from Weblate.
|
||||
[\#5777](https://github.com/vector-im/riot-web/pull/5777)
|
||||
* make FilteredList controlled, such that it can externally persist filter
|
||||
[\#5718](https://github.com/vector-im/riot-web/pull/5718)
|
||||
* Linear Rich Quoting
|
||||
[\#6017](https://github.com/vector-im/riot-web/pull/6017)
|
||||
* Highlight ViewSource and Devtools ViewSource
|
||||
[\#5995](https://github.com/vector-im/riot-web/pull/5995)
|
||||
* default url, not domain
|
||||
[\#6022](https://github.com/vector-im/riot-web/pull/6022)
|
||||
* T3chguy/num members tooltip
|
||||
[\#5929](https://github.com/vector-im/riot-web/pull/5929)
|
||||
* Swap RoomList to react-beautiful-dnd
|
||||
[\#6008](https://github.com/vector-im/riot-web/pull/6008)
|
||||
* CSS required as part of moving TagPanel from react-dnd to react-beautiful-
|
||||
dnd
|
||||
[\#5992](https://github.com/vector-im/riot-web/pull/5992)
|
||||
* fix&refactor DateSeparator and MessageTimestamp
|
||||
[\#5984](https://github.com/vector-im/riot-web/pull/5984)
|
||||
* Iterative fixes on Rich Quoting
|
||||
[\#5978](https://github.com/vector-im/riot-web/pull/5978)
|
||||
* move piwik whitelists to conf and add piwik config.json info to readme
|
||||
[\#5653](https://github.com/vector-im/riot-web/pull/5653)
|
||||
* Implement Rich Quoting/Replies
|
||||
[\#5804](https://github.com/vector-im/riot-web/pull/5804)
|
||||
* Change author
|
||||
[\#5950](https://github.com/vector-im/riot-web/pull/5950)
|
||||
* Revert "Add a after timestamp"
|
||||
[\#5944](https://github.com/vector-im/riot-web/pull/5944)
|
||||
* Add a after timestamp
|
||||
[\#3046](https://github.com/vector-im/riot-web/pull/3046)
|
||||
* Corrected language name
|
||||
[\#5938](https://github.com/vector-im/riot-web/pull/5938)
|
||||
* Hide Options button from copy to clipboard
|
||||
[\#2892](https://github.com/vector-im/riot-web/pull/2892)
|
||||
* Fix for `If riot is narrow enough, such that 'Send a message (unecrypted)'
|
||||
wraps to a second line, the timeline doesn't fit the window.`
|
||||
[\#5900](https://github.com/vector-im/riot-web/pull/5900)
|
||||
* Screenshot UI
|
||||
[\#5849](https://github.com/vector-im/riot-web/pull/5849)
|
||||
* add missing config.json entry such that scalar-staging widgets work
|
||||
[\#5855](https://github.com/vector-im/riot-web/pull/5855)
|
||||
* add dark theme styling to devtools input box
|
||||
[\#5610](https://github.com/vector-im/riot-web/pull/5610)
|
||||
* Fixes #1953 by adding oivoodoo as author
|
||||
[\#5851](https://github.com/vector-im/riot-web/pull/5851)
|
||||
* Instructions on security issues
|
||||
[\#5824](https://github.com/vector-im/riot-web/pull/5824)
|
||||
* Move DND wrapper to top level component
|
||||
[\#5790](https://github.com/vector-im/riot-web/pull/5790)
|
||||
* Widget title bar max / min visual cues.
|
||||
[\#5786](https://github.com/vector-im/riot-web/pull/5786)
|
||||
* Implement renumeration of ordered tags upon collision
|
||||
[\#5759](https://github.com/vector-im/riot-web/pull/5759)
|
||||
* Update imports for accessing KeyCode
|
||||
[\#5751](https://github.com/vector-im/riot-web/pull/5751)
|
||||
* Set html lang attribute from language setting
|
||||
[\#5685](https://github.com/vector-im/riot-web/pull/5685)
|
||||
* CSS for new TagPanel
|
||||
[\#5723](https://github.com/vector-im/riot-web/pull/5723)
|
||||
* getGroupStore no longer needs a matrix client
|
||||
[\#5707](https://github.com/vector-im/riot-web/pull/5707)
|
||||
* CSS required for moving group publication toggles to UserSettings
|
||||
[\#5702](https://github.com/vector-im/riot-web/pull/5702)
|
||||
* Make sure the SettingsStore is ready to load the theme before loading it
|
||||
[\#5630](https://github.com/vector-im/riot-web/pull/5630)
|
||||
* Add some aria-labels to RightPanel
|
||||
[\#5661](https://github.com/vector-im/riot-web/pull/5661)
|
||||
* Use badge count format for member count in RightPanel
|
||||
[\#5657](https://github.com/vector-im/riot-web/pull/5657)
|
||||
* Exclude the default language on page load
|
||||
[\#5640](https://github.com/vector-im/riot-web/pull/5640)
|
||||
* Use SettingsStore to get the default theme
|
||||
[\#5615](https://github.com/vector-im/riot-web/pull/5615)
|
||||
* Refactor translations
|
||||
[\#5613](https://github.com/vector-im/riot-web/pull/5613)
|
||||
* TintableSvgButton styling
|
||||
[\#5605](https://github.com/vector-im/riot-web/pull/5605)
|
||||
* Granular settings
|
||||
[\#5468](https://github.com/vector-im/riot-web/pull/5468)
|
||||
* CSS/components for custom presence controls
|
||||
[\#5286](https://github.com/vector-im/riot-web/pull/5286)
|
||||
* Set widget tile background colour
|
||||
[\#5574](https://github.com/vector-im/riot-web/pull/5574)
|
||||
* Widget styling tweaks
|
||||
[\#5573](https://github.com/vector-im/riot-web/pull/5573)
|
||||
* Center mixed content warnings in panel.
|
||||
[\#5567](https://github.com/vector-im/riot-web/pull/5567)
|
||||
* Status.im theme
|
||||
[\#5578](https://github.com/vector-im/riot-web/pull/5578)
|
||||
|
||||
Changes in [0.13.5](https://github.com/vector-im/riot-web/releases/tag/v0.13.5) (2018-02-09)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.13.4...v0.13.5)
|
||||
|
||||
* SECURITY UPDATE: Sanitise URLs from 'external_url'. Thanks to walle303 for contacting
|
||||
us about this vulnerability.
|
||||
|
||||
Changes in [0.13.4](https://github.com/vector-im/riot-web/releases/tag/v0.13.4) (2018-01-03)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.13.3...v0.13.4)
|
||||
|
||||
* Change config of riot.im electron build to fix some widgets not working. This only affects
|
||||
electron builds using the riot.im config - for all other builds, this is identical to
|
||||
v0.13.3.
|
||||
|
||||
Changes in [0.13.3](https://github.com/vector-im/riot-web/releases/tag/v0.13.3) (2017-12-04)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.13.2...v0.13.3)
|
||||
|
||||
* Bump js-sdk, react-sdk version to pull in fix for [setting room publicity in a group](https://github.com/matrix-org/matrix-js-sdk/commit/aa3201ebb0fff5af2fb733080aa65ed1f7213de6).
|
||||
|
||||
Changes in [0.13.2](https://github.com/vector-im/riot-web/releases/tag/v0.13.2) (2017-11-28)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.13.1...v0.13.2)
|
||||
|
||||
|
||||
Changes in [0.13.1](https://github.com/vector-im/riot-web/releases/tag/v0.13.1) (2017-11-17)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.13.0...v0.13.1)
|
||||
|
||||
* SECURITY UPDATE: Fix the force TURN option for inbound calls. This option forced the use
|
||||
of TURN but only worked for outbound calls and not inbound calls. This means that if you
|
||||
enabled this option expecting it to mask your IP address in calls, your IP would still
|
||||
have been revealed to the room if you accepted an incoming call.
|
||||
* Also adds the Slovak translation.
|
||||
|
||||
Changes in [0.13.0](https://github.com/vector-im/riot-web/releases/tag/v0.13.0) (2017-11-15)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.13.0-rc.3...v0.13.0)
|
||||
|
||||
|
||||
Changes in [0.13.0-rc.3](https://github.com/vector-im/riot-web/releases/tag/v0.13.0-rc.3) (2017-11-14)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.13.0-rc.2...v0.13.0-rc.3)
|
||||
|
||||
|
||||
Changes in [0.13.0-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.13.0-rc.2) (2017-11-10)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.13.0-rc.1...v0.13.0-rc.2)
|
||||
|
||||
* Make groups a fully-fleged baked-in feature
|
||||
[\#5566](https://github.com/vector-im/riot-web/pull/5566)
|
||||
|
||||
Changes in [0.13.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.13.0-rc.1) (2017-11-10)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.7...v0.13.0-rc.1)
|
||||
|
||||
* Fix app tile margins.
|
||||
[\#5561](https://github.com/vector-im/riot-web/pull/5561)
|
||||
* Fix wrapping of long room topics (and overlap with apps)
|
||||
[\#5549](https://github.com/vector-im/riot-web/pull/5549)
|
||||
* Don't display widget iframes whilst loading.
|
||||
[\#5555](https://github.com/vector-im/riot-web/pull/5555)
|
||||
* Update from Weblate.
|
||||
[\#5558](https://github.com/vector-im/riot-web/pull/5558)
|
||||
* Adjust CSS for GroupView
|
||||
[\#5543](https://github.com/vector-im/riot-web/pull/5543)
|
||||
* CSS for adding rooms to a group with visibility
|
||||
[\#5546](https://github.com/vector-im/riot-web/pull/5546)
|
||||
* CSS for pinned indicators
|
||||
[\#5511](https://github.com/vector-im/riot-web/pull/5511)
|
||||
* Implement general-purpose tooltip "(?)"-style
|
||||
[\#5540](https://github.com/vector-im/riot-web/pull/5540)
|
||||
* CSS for improving group creation UX, namely setting long description
|
||||
[\#5535](https://github.com/vector-im/riot-web/pull/5535)
|
||||
* CSS for room notif pills in composer
|
||||
[\#5531](https://github.com/vector-im/riot-web/pull/5531)
|
||||
* Do not init a group store when no groupId specified
|
||||
[\#5520](https://github.com/vector-im/riot-web/pull/5520)
|
||||
* CSS for new pinned events indicator
|
||||
[\#5293](https://github.com/vector-im/riot-web/pull/5293)
|
||||
* T3chguy/devtools 1
|
||||
[\#5471](https://github.com/vector-im/riot-web/pull/5471)
|
||||
* Use margin to separate "perms" in the room directory
|
||||
[\#5498](https://github.com/vector-im/riot-web/pull/5498)
|
||||
* Add CSS for CreateGroupDialog to give group ID input suffix and prefix style
|
||||
[\#5505](https://github.com/vector-im/riot-web/pull/5505)
|
||||
* Fix group invites such that they look similar to room invites
|
||||
[\#5504](https://github.com/vector-im/riot-web/pull/5504)
|
||||
* CSS for Your Communities scrollbar
|
||||
[\#5501](https://github.com/vector-im/riot-web/pull/5501)
|
||||
* Add toggle to alter visibility of room-group association
|
||||
[\#5497](https://github.com/vector-im/riot-web/pull/5497)
|
||||
* CSS for room notification pills
|
||||
[\#5494](https://github.com/vector-im/riot-web/pull/5494)
|
||||
* Implement simple GroupRoomInfo
|
||||
[\#5493](https://github.com/vector-im/riot-web/pull/5493)
|
||||
* Add back bottom border to widget title bar
|
||||
[\#5458](https://github.com/vector-im/riot-web/pull/5458)
|
||||
* Prevent group name looking clickable for non-members
|
||||
[\#5478](https://github.com/vector-im/riot-web/pull/5478)
|
||||
* Fix instanceof check, was checking against the Package rather than class
|
||||
[\#5472](https://github.com/vector-im/riot-web/pull/5472)
|
||||
* Use correct group store state when rendering "Invite to this community"
|
||||
[\#5455](https://github.com/vector-im/riot-web/pull/5455)
|
||||
* Leverages ES6 in Notifications
|
||||
[\#5453](https://github.com/vector-im/riot-web/pull/5453)
|
||||
* Re-PR #4412
|
||||
[\#5437](https://github.com/vector-im/riot-web/pull/5437)
|
||||
* fix comma error of features example
|
||||
[\#5410](https://github.com/vector-im/riot-web/pull/5410)
|
||||
* Devtools: make filtering case-insensitive
|
||||
[\#5387](https://github.com/vector-im/riot-web/pull/5387)
|
||||
* Highlight group members icon in group member info
|
||||
[\#5432](https://github.com/vector-im/riot-web/pull/5432)
|
||||
* Use CSS to stop greyed Right/LeftPanel UI from being interactable
|
||||
[\#5422](https://github.com/vector-im/riot-web/pull/5422)
|
||||
* CSS for preventing editing of UI requiring user privilege if user
|
||||
unprivileged
|
||||
[\#5417](https://github.com/vector-im/riot-web/pull/5417)
|
||||
* Only show UI for adding rooms/users to groups to privileged users
|
||||
[\#5409](https://github.com/vector-im/riot-web/pull/5409)
|
||||
* Only show "Invite to this community" when viewing group members
|
||||
[\#5407](https://github.com/vector-im/riot-web/pull/5407)
|
||||
* Add trash can icon for delete widget
|
||||
[\#5397](https://github.com/vector-im/riot-web/pull/5397)
|
||||
* CSS to improve MyGroups in general, and add placeholder
|
||||
[\#5375](https://github.com/vector-im/riot-web/pull/5375)
|
||||
* Rxl881/parallelshell
|
||||
[\#4881](https://github.com/vector-im/riot-web/pull/4881)
|
||||
* Custom server text was i18ned by key
|
||||
[\#5371](https://github.com/vector-im/riot-web/pull/5371)
|
||||
* Run prunei18n
|
||||
[\#5370](https://github.com/vector-im/riot-web/pull/5370)
|
||||
* Update from Weblate.
|
||||
[\#5369](https://github.com/vector-im/riot-web/pull/5369)
|
||||
* Add script to prune unused translations
|
||||
[\#5339](https://github.com/vector-im/riot-web/pull/5339)
|
||||
* CSS for improved MyGroups page
|
||||
[\#5360](https://github.com/vector-im/riot-web/pull/5360)
|
||||
* Add padding-right to Dialogs
|
||||
[\#5346](https://github.com/vector-im/riot-web/pull/5346)
|
||||
* Add div.warning and use the scss var
|
||||
[\#5344](https://github.com/vector-im/riot-web/pull/5344)
|
||||
* Groups->Communities
|
||||
[\#5343](https://github.com/vector-im/riot-web/pull/5343)
|
||||
* Make the 'add rooms' button clickable
|
||||
[\#5342](https://github.com/vector-im/riot-web/pull/5342)
|
||||
* Switch to gen-i18n script
|
||||
[\#5338](https://github.com/vector-im/riot-web/pull/5338)
|
||||
* Use _t as _t
|
||||
[\#5334](https://github.com/vector-im/riot-web/pull/5334)
|
||||
* fix groupview header editing visuals (pt 1)
|
||||
[\#5330](https://github.com/vector-im/riot-web/pull/5330)
|
||||
* bump version to prevent eslint errors
|
||||
[\#5316](https://github.com/vector-im/riot-web/pull/5316)
|
||||
* CSS for invited group members section
|
||||
[\#5303](https://github.com/vector-im/riot-web/pull/5303)
|
||||
* Handle long names in EntityTiles by overflowing correctly
|
||||
[\#5302](https://github.com/vector-im/riot-web/pull/5302)
|
||||
* Disable labs in electron
|
||||
[\#5296](https://github.com/vector-im/riot-web/pull/5296)
|
||||
* CSS for Modifying GroupView UI matrix-org/matrix-react-sdk#1475
|
||||
[\#5295](https://github.com/vector-im/riot-web/pull/5295)
|
||||
* Message/event pinning
|
||||
[\#5142](https://github.com/vector-im/riot-web/pull/5142)
|
||||
* Sorting of networks within a protocol based on name
|
||||
[\#4054](https://github.com/vector-im/riot-web/pull/4054)
|
||||
* allow hiding of notification body for privacy reasons
|
||||
[\#4988](https://github.com/vector-im/riot-web/pull/4988)
|
||||
* Don't use MXIDs on the lightbox if possible
|
||||
[\#5281](https://github.com/vector-im/riot-web/pull/5281)
|
||||
* CSS for lonely room message
|
||||
[\#5267](https://github.com/vector-im/riot-web/pull/5267)
|
||||
* Bring back dark theme code block border
|
||||
[\#5037](https://github.com/vector-im/riot-web/pull/5037)
|
||||
* CSS for remove avatar buttons
|
||||
[\#5282](https://github.com/vector-im/riot-web/pull/5282)
|
||||
|
||||
Changes in [0.12.7](https://github.com/vector-im/riot-web/releases/tag/v0.12.7) (2017-10-16)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.7-rc.3...v0.12.7)
|
||||
|
||||
* Released versions of react-sdk & js-sdk
|
||||
|
||||
Changes in [0.12.7-rc.3](https://github.com/vector-im/riot-web/releases/tag/v0.12.7-rc.3) (2017-10-13)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.7-rc.2...v0.12.7-rc.3)
|
||||
|
||||
* Hide the join group button
|
||||
[\#5275](https://github.com/vector-im/riot-web/pull/5275)
|
||||
|
||||
Changes in [0.12.7-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.12.7-rc.2) (2017-10-13)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.7-rc.1...v0.12.7-rc.2)
|
||||
|
||||
|
||||
Changes in [0.12.7-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.12.7-rc.1) (2017-10-13)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.6...v0.12.7-rc.1)
|
||||
|
||||
* switch to new logos, and use import rather than VAR
|
||||
[\#5203](https://github.com/vector-im/riot-web/pull/5203)
|
||||
* Clarify what an integrations server is
|
||||
[\#5266](https://github.com/vector-im/riot-web/pull/5266)
|
||||
* Update from Weblate.
|
||||
[\#5269](https://github.com/vector-im/riot-web/pull/5269)
|
||||
* Remove trailing comma in JSON
|
||||
[\#5167](https://github.com/vector-im/riot-web/pull/5167)
|
||||
* Added default_federate property
|
||||
[\#3849](https://github.com/vector-im/riot-web/pull/3849)
|
||||
* CSS for greying out login form
|
||||
[\#5197](https://github.com/vector-im/riot-web/pull/5197)
|
||||
* Fix bug that made sub list placeholders not show for ILAG etc.
|
||||
[\#5164](https://github.com/vector-im/riot-web/pull/5164)
|
||||
* Factor out EditableItemList component from AliasSettings
|
||||
[\#5161](https://github.com/vector-im/riot-web/pull/5161)
|
||||
* Mark and remove some translations
|
||||
[\#5110](https://github.com/vector-im/riot-web/pull/5110)
|
||||
* CSS for "remove" button on GroupRoomTile
|
||||
[\#5141](https://github.com/vector-im/riot-web/pull/5141)
|
||||
* Create basic icon for the GroupRoomList tab and adding rooms to groups
|
||||
[\#5140](https://github.com/vector-im/riot-web/pull/5140)
|
||||
* Add button to get to MyGroups
|
||||
[\#5131](https://github.com/vector-im/riot-web/pull/5131)
|
||||
* Remove `key` prop pass-thru on HeaderButton
|
||||
[\#5137](https://github.com/vector-im/riot-web/pull/5137)
|
||||
* Implement "Add room to group" feature
|
||||
[\#5125](https://github.com/vector-im/riot-web/pull/5125)
|
||||
* Add Jitsi screensharing support in electron app
|
||||
[\#4967](https://github.com/vector-im/riot-web/pull/4967)
|
||||
* Refactor right panel header buttons
|
||||
[\#5117](https://github.com/vector-im/riot-web/pull/5117)
|
||||
* CSS for publicity status & toggle button
|
||||
[\#5104](https://github.com/vector-im/riot-web/pull/5104)
|
||||
* CSS for "X" in top right of features users/rooms
|
||||
[\#5103](https://github.com/vector-im/riot-web/pull/5103)
|
||||
* Include Finnish translation
|
||||
[\#5051](https://github.com/vector-im/riot-web/pull/5051)
|
||||
* Redesign membership section of GroupView
|
||||
[\#5096](https://github.com/vector-im/riot-web/pull/5096)
|
||||
* Make --config accept globs
|
||||
[\#5090](https://github.com/vector-im/riot-web/pull/5090)
|
||||
* CSS for GroupView: Add a User
|
||||
[\#5093](https://github.com/vector-im/riot-web/pull/5093)
|
||||
* T3chguy/devtools 1
|
||||
[\#5074](https://github.com/vector-im/riot-web/pull/5074)
|
||||
* Alter opacity for flair
|
||||
[\#5085](https://github.com/vector-im/riot-web/pull/5085)
|
||||
* Fix ugly integ button
|
||||
[\#5082](https://github.com/vector-im/riot-web/pull/5082)
|
||||
* Group Membership UI
|
||||
[\#4830](https://github.com/vector-im/riot-web/pull/4830)
|
||||
|
||||
Changes in [0.12.6](https://github.com/vector-im/riot-web/releases/tag/v0.12.6) (2017-09-21)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.5...v0.12.6)
|
||||
|
||||
* Use matrix-js-sdk v0.8.4 to fix build
|
||||
|
||||
Changes in [0.12.5](https://github.com/vector-im/riot-web/releases/tag/v0.12.5) (2017-09-21)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.4...v0.12.5)
|
||||
|
||||
* Use react-sdk v0.10.5 to fix build
|
||||
|
||||
Changes in [0.12.4](https://github.com/vector-im/riot-web/releases/tag/v0.12.4) (2017-09-20)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.4-rc.1...v0.12.4)
|
||||
|
||||
* No changes
|
||||
|
||||
Changes in [0.12.4-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.12.4-rc.1) (2017-09-19)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.3...v0.12.4-rc.1)
|
||||
|
||||
* Fix test for new behaviour of 'joining' flag
|
||||
[\#5053](https://github.com/vector-im/riot-web/pull/5053)
|
||||
* fix really dumb blunder/typo preventing system from going to sleep.
|
||||
[\#5080](https://github.com/vector-im/riot-web/pull/5080)
|
||||
* T3chguy/devtools
|
||||
[\#4735](https://github.com/vector-im/riot-web/pull/4735)
|
||||
* CSS for unignore button in UserSettings
|
||||
[\#5042](https://github.com/vector-im/riot-web/pull/5042)
|
||||
* Fix alias on home page for identity room
|
||||
[\#5044](https://github.com/vector-im/riot-web/pull/5044)
|
||||
* generic contextual menu for tooltip/responses
|
||||
[\#4989](https://github.com/vector-im/riot-web/pull/4989)
|
||||
* Update from Weblate.
|
||||
[\#5018](https://github.com/vector-im/riot-web/pull/5018)
|
||||
* Avoid re-rendering RoomList on room switch
|
||||
[\#5015](https://github.com/vector-im/riot-web/pull/5015)
|
||||
* Fix menu on change keyboard language issue #4345
|
||||
[\#4623](https://github.com/vector-im/riot-web/pull/4623)
|
||||
* Make isInvite default to false
|
||||
[\#4999](https://github.com/vector-im/riot-web/pull/4999)
|
||||
* Revert "Implement sticky date separators"
|
||||
[\#4991](https://github.com/vector-im/riot-web/pull/4991)
|
||||
* Implement sticky date separators
|
||||
[\#4939](https://github.com/vector-im/riot-web/pull/4939)
|
||||
|
||||
Changes in [0.12.3](https://github.com/vector-im/riot-web/releases/tag/v0.12.3) (2017-09-06)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.3-rc.3...v0.12.3)
|
||||
|
||||
* No changes
|
||||
|
||||
Changes in [0.12.3-rc.3](https://github.com/vector-im/riot-web/releases/tag/v0.12.3-rc.3) (2017-09-05)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.3-rc.2...v0.12.3-rc.3)
|
||||
|
||||
* Fix plurals in translations
|
||||
[\#4971](https://github.com/vector-im/riot-web/pull/4971)
|
||||
* Update from Weblate.
|
||||
[\#4968](https://github.com/vector-im/riot-web/pull/4968)
|
||||
|
||||
Changes in [0.12.3-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.12.3-rc.2) (2017-09-05)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.3-rc.1...v0.12.3-rc.2)
|
||||
|
||||
* New react-sdk version to pull in new translations and fix some translation bugs.
|
||||
|
||||
|
||||
Changes in [0.12.3-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.12.3-rc.1) (2017-09-01)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.2...v0.12.3-rc.1)
|
||||
|
||||
* Fix overflowing login/register buttons on some languages issue #4804
|
||||
[\#4858](https://github.com/vector-im/riot-web/pull/4858)
|
||||
* Update vector-im to riot-im on Login
|
||||
[\#4943](https://github.com/vector-im/riot-web/pull/4943)
|
||||
* lets let people know that the bug report actually sent properly :)
|
||||
[\#4910](https://github.com/vector-im/riot-web/pull/4910)
|
||||
* another s/vector/riot/ in README
|
||||
[\#4934](https://github.com/vector-im/riot-web/pull/4934)
|
||||
* fix two room list regressions
|
||||
[\#4907](https://github.com/vector-im/riot-web/pull/4907)
|
||||
|
||||
Changes in [0.12.2](https://github.com/vector-im/riot-web/releases/tag/v0.12.2) (2017-08-24)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.1...v0.12.2)
|
||||
|
||||
* Update react-sdk and js-sdk to fix bugs with incoming calls, messages and notifications
|
||||
in encrypted rooms.
|
||||
|
||||
Changes in [0.12.1](https://github.com/vector-im/riot-web/releases/tag/v0.12.1) (2017-08-23)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.1-rc.1...v0.12.1)
|
||||
|
||||
* [No changes]
|
||||
|
||||
Changes in [0.12.1-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.12.1-rc.1) (2017-08-22)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.0-rc.2...v0.12.1-rc.1)
|
||||
|
||||
* Update from Weblate.
|
||||
[\#4832](https://github.com/vector-im/riot-web/pull/4832)
|
||||
* Misc styling fixes.
|
||||
[\#4826](https://github.com/vector-im/riot-web/pull/4826)
|
||||
* Show / Hide apps icons
|
||||
[\#4774](https://github.com/vector-im/riot-web/pull/4774)
|
||||
|
||||
Changes in [0.12.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.12.0-rc.1) (2017-08-16)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.11.4...v0.12.0-rc.1)
|
||||
|
||||
* Update from Weblate.
|
||||
[\#4797](https://github.com/vector-im/riot-web/pull/4797)
|
||||
* move focus-via-up/down cursors to LeftPanel
|
||||
[\#4777](https://github.com/vector-im/riot-web/pull/4777)
|
||||
* Remove userId property on RightPanel
|
||||
[\#4775](https://github.com/vector-im/riot-web/pull/4775)
|
||||
* Make member device info buttons fluid and stackable with flexbox
|
||||
[\#4776](https://github.com/vector-im/riot-web/pull/4776)
|
||||
* un-i18n Modal Analytics
|
||||
[\#4688](https://github.com/vector-im/riot-web/pull/4688)
|
||||
* Quote using innerText
|
||||
[\#4773](https://github.com/vector-im/riot-web/pull/4773)
|
||||
* Karma tweaks for riot-web
|
||||
[\#4765](https://github.com/vector-im/riot-web/pull/4765)
|
||||
* Fix typo with scripts/fetch-develop-deps.sh in Building From Source
|
||||
[\#4764](https://github.com/vector-im/riot-web/pull/4764)
|
||||
* Adjust CSS for optional avatars in pills
|
||||
[\#4757](https://github.com/vector-im/riot-web/pull/4757)
|
||||
* Fix crypto on develop
|
||||
[\#4754](https://github.com/vector-im/riot-web/pull/4754)
|
||||
* Fix signing key url in readme
|
||||
[\#4464](https://github.com/vector-im/riot-web/pull/4464)
|
||||
* update gitignore to allow .idea directory to exist in subdirs
|
||||
[\#4749](https://github.com/vector-im/riot-web/pull/4749)
|
||||
* tweak compact theme
|
||||
[\#4665](https://github.com/vector-im/riot-web/pull/4665)
|
||||
* Update draft-js from 0.10.1 to 0.11.0-alpha
|
||||
[\#4740](https://github.com/vector-im/riot-web/pull/4740)
|
||||
* electron support for mouse forward/back buttons in Windows
|
||||
[\#4739](https://github.com/vector-im/riot-web/pull/4739)
|
||||
* Update draft-js from 0.8.1 to 0.10.1
|
||||
[\#4730](https://github.com/vector-im/riot-web/pull/4730)
|
||||
* Make pills, emoji translucent when sending
|
||||
[\#4693](https://github.com/vector-im/riot-web/pull/4693)
|
||||
* Widget permissions styling and icon
|
||||
[\#4690](https://github.com/vector-im/riot-web/pull/4690)
|
||||
* CSS required for composer autoscroll
|
||||
[\#4682](https://github.com/vector-im/riot-web/pull/4682)
|
||||
* CSS for group edit UI
|
||||
[\#4608](https://github.com/vector-im/riot-web/pull/4608)
|
||||
* Fix a couple of minor errors in the room list
|
||||
[\#4671](https://github.com/vector-im/riot-web/pull/4671)
|
||||
* Styling for beta testing icon.
|
||||
[\#4584](https://github.com/vector-im/riot-web/pull/4584)
|
||||
* Increase the timeout for clearing indexeddbs
|
||||
[\#4650](https://github.com/vector-im/riot-web/pull/4650)
|
||||
* Make some adjustments to mx_UserPill and mx_RoomPill
|
||||
[\#4597](https://github.com/vector-im/riot-web/pull/4597)
|
||||
* Apply CSS to <pre> tags to distinguish them from each other
|
||||
[\#4639](https://github.com/vector-im/riot-web/pull/4639)
|
||||
* Use `catch` instead of `fail` to handle room tag error
|
||||
[\#4643](https://github.com/vector-im/riot-web/pull/4643)
|
||||
* CSS for decorated matrix.to links in the composer
|
||||
[\#4583](https://github.com/vector-im/riot-web/pull/4583)
|
||||
* Deflake the joining test
|
||||
[\#4579](https://github.com/vector-im/riot-web/pull/4579)
|
||||
* Bump react to 15.6 to fix build problems
|
||||
[\#4577](https://github.com/vector-im/riot-web/pull/4577)
|
||||
* Improve AppTile menu bar button styling.
|
||||
[\#4567](https://github.com/vector-im/riot-web/pull/4567)
|
||||
* Transform `async` functions to bluebird promises
|
||||
[\#4572](https://github.com/vector-im/riot-web/pull/4572)
|
||||
* use flushAllExpected in joining test
|
||||
[\#4570](https://github.com/vector-im/riot-web/pull/4570)
|
||||
* Switch riot-web to bluebird
|
||||
[\#4565](https://github.com/vector-im/riot-web/pull/4565)
|
||||
* loading tests: wait for login component
|
||||
[\#4564](https://github.com/vector-im/riot-web/pull/4564)
|
||||
* Remove CSS for the MessageComposerInputOld
|
||||
[\#4568](https://github.com/vector-im/riot-web/pull/4568)
|
||||
* Implement the focus_room_filter action
|
||||
[\#4560](https://github.com/vector-im/riot-web/pull/4560)
|
||||
* CSS for Rooms in Group View
|
||||
[\#4530](https://github.com/vector-im/riot-web/pull/4530)
|
||||
* more HomePage tweaks
|
||||
[\#4557](https://github.com/vector-im/riot-web/pull/4557)
|
||||
* Give HomePage an unmounted guard
|
||||
[\#4556](https://github.com/vector-im/riot-web/pull/4556)
|
||||
* Take RTE out of labs
|
||||
[\#4500](https://github.com/vector-im/riot-web/pull/4500)
|
||||
* CSS for Groups page
|
||||
[\#4468](https://github.com/vector-im/riot-web/pull/4468)
|
||||
* CSS for GroupView
|
||||
[\#4442](https://github.com/vector-im/riot-web/pull/4442)
|
||||
* remove unused class
|
||||
[\#4525](https://github.com/vector-im/riot-web/pull/4525)
|
||||
* Fix long words causing MessageComposer to widen
|
||||
[\#4466](https://github.com/vector-im/riot-web/pull/4466)
|
||||
* Add visual bell animation for RTE
|
||||
[\#4516](https://github.com/vector-im/riot-web/pull/4516)
|
||||
* Truncate auto-complete pills properly
|
||||
[\#4502](https://github.com/vector-im/riot-web/pull/4502)
|
||||
* Use chrome headless instead of phantomjs
|
||||
[\#4512](https://github.com/vector-im/riot-web/pull/4512)
|
||||
* Use external mock-request
|
||||
[\#4489](https://github.com/vector-im/riot-web/pull/4489)
|
||||
* fix Quote not closing contextual menu
|
||||
[\#4443](https://github.com/vector-im/riot-web/pull/4443)
|
||||
* Apply white-space: pre-wrap to mx_MEmoteBody
|
||||
[\#4470](https://github.com/vector-im/riot-web/pull/4470)
|
||||
* Add some style improvements to autocompletions
|
||||
[\#4456](https://github.com/vector-im/riot-web/pull/4456)
|
||||
* Styling for apps / widgets
|
||||
[\#4447](https://github.com/vector-im/riot-web/pull/4447)
|
||||
* Attempt to flush the rageshake logs on close
|
||||
[\#4400](https://github.com/vector-im/riot-web/pull/4400)
|
||||
* Update from Weblate.
|
||||
[\#4401](https://github.com/vector-im/riot-web/pull/4401)
|
||||
* improve update polling electron and provide a manual check for updates
|
||||
button
|
||||
[\#4176](https://github.com/vector-im/riot-web/pull/4176)
|
||||
* Fix load failure in firefox when indexedDB is disabled
|
||||
[\#4395](https://github.com/vector-im/riot-web/pull/4395)
|
||||
* Change missed 'Redact' to 'Remove' in ImageView.
|
||||
[\#4362](https://github.com/vector-im/riot-web/pull/4362)
|
||||
* explicit convert to nativeImage to stabilise trayIcon on Windows [Electron]
|
||||
[\#4355](https://github.com/vector-im/riot-web/pull/4355)
|
||||
* Use _tJsx for PasswordNagBar (because it has <u>)
|
||||
[\#4373](https://github.com/vector-im/riot-web/pull/4373)
|
||||
* Clean up some log outputs from the integ tests
|
||||
[\#4376](https://github.com/vector-im/riot-web/pull/4376)
|
||||
* CSS for redeisng of password warning
|
||||
[\#4367](https://github.com/vector-im/riot-web/pull/4367)
|
||||
* Give _t to PasswordNagBar, add CSS for UserSettings password warning
|
||||
[\#4366](https://github.com/vector-im/riot-web/pull/4366)
|
||||
* Update from Weblate.
|
||||
[\#4361](https://github.com/vector-im/riot-web/pull/4361)
|
||||
* Update from Weblate.
|
||||
[\#4360](https://github.com/vector-im/riot-web/pull/4360)
|
||||
* Test 'return-to-app' functionality
|
||||
[\#4352](https://github.com/vector-im/riot-web/pull/4352)
|
||||
* Update from Weblate.
|
||||
[\#4354](https://github.com/vector-im/riot-web/pull/4354)
|
||||
* onLoadCompleted is now onTokenLoginCompleted
|
||||
[\#4335](https://github.com/vector-im/riot-web/pull/4335)
|
||||
* Tweak tests to match updates to matrixchat
|
||||
[\#4325](https://github.com/vector-im/riot-web/pull/4325)
|
||||
* Update from Weblate.
|
||||
[\#4346](https://github.com/vector-im/riot-web/pull/4346)
|
||||
* change dispatcher forward_event signature
|
||||
[\#4337](https://github.com/vector-im/riot-web/pull/4337)
|
||||
* Add border on hover for code blocks
|
||||
[\#4259](https://github.com/vector-im/riot-web/pull/4259)
|
||||
|
||||
Changes in [0.11.4](https://github.com/vector-im/riot-web/releases/tag/v0.11.4) (2017-06-22)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.11.3...v0.11.4)
|
||||
|
||||
* Update matrix-js-sdk and react-sdk to fix a regression where the
|
||||
background indexedb worker was disabled, failures to open indexeddb
|
||||
causing the app to fail to start, a race when starting that could break
|
||||
switching to rooms, and the inability to invite users with mixed case
|
||||
usernames.
|
||||
|
||||
Changes in [0.11.3](https://github.com/vector-im/riot-web/releases/tag/v0.11.3) (2017-06-20)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.11.2...v0.11.3)
|
||||
|
||||
* Update to matrix-react-sdk 0.9.6 to fix infinite spinner bugs
|
||||
and some parts of the app that had missed translation.
|
||||
|
||||
Changes in [0.11.2](https://github.com/vector-im/riot-web/releases/tag/v0.11.2) (2017-06-19)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.11.2-rc.2...v0.11.2)
|
||||
|
||||
122
README.md
122
README.md
@@ -16,13 +16,13 @@ released version of Riot:
|
||||
|
||||
1. Download the latest version from https://github.com/vector-im/riot-web/releases
|
||||
1. Untar the tarball on your web server
|
||||
1. Move (or symlink) the vector-x.x.x directory to an appropriate name
|
||||
1. Move (or symlink) the riot-x.x.x directory to an appropriate name
|
||||
1. If desired, copy `config.sample.json` to `config.json` and edit it
|
||||
as desired. See below for details.
|
||||
1. Enter the URL into your browser and log into Riot!
|
||||
|
||||
Releases are signed by PGP, and can be checked against the public key
|
||||
at https://riot.im/packages/keys/riot-master.asc
|
||||
at https://riot.im/packages/keys/riot.asc
|
||||
|
||||
Note that Chrome does not allow microphone or webcam access for sites served
|
||||
over http (except localhost), so for working VoIP you will need to serve Riot
|
||||
@@ -62,7 +62,7 @@ to build.
|
||||
1. If you're using the `develop` branch, install the develop versions of the
|
||||
dependencies, as the released ones will be too old:
|
||||
```
|
||||
scripts/fetch-develop-deps.sh
|
||||
scripts/fetch-develop.deps.sh
|
||||
```
|
||||
Whenever you git pull on riot-web you will also probably need to force an update
|
||||
to these dependencies - the simplest way is to re-run the script, but you can also
|
||||
@@ -81,7 +81,7 @@ to build.
|
||||
npm run build
|
||||
```
|
||||
However, we recommend setting up a proper development environment (see "Setting
|
||||
up a development environment" below) if you want to run your own copy of the
|
||||
up a dev environment" below) if you want to run your own copy of the
|
||||
`develop` branch, as it makes it much easier to keep these dependencies
|
||||
up-to-date. Or just use https://riot.im/develop - the continuous integration
|
||||
release of the develop branch.
|
||||
@@ -106,7 +106,9 @@ config.json
|
||||
You can configure the app by copying `config.sample.json` to
|
||||
`config.json` and customising it:
|
||||
|
||||
1. `default_hs_url` is the default home server url.
|
||||
For a good example, see https://riot.im/develop/config.json
|
||||
|
||||
1. `default_hs_url` is the default homeserver url.
|
||||
1. `default_is_url` is the default identity server url (this is the server used
|
||||
for verifying third party identifiers like email addresses). If this is blank,
|
||||
registering with an email address, adding an email address to your account,
|
||||
@@ -115,19 +117,49 @@ You can configure the app by copying `config.sample.json` to
|
||||
addresses) to matrix IDs: see http://matrix.org/docs/spec/identity_service/unstable.html
|
||||
for more details. Currently the only public matrix identity servers are https://matrix.org
|
||||
and https://vector.im. In future identity servers will be decentralised.
|
||||
1. `integrations_ui_url`: URL to the web interface for the integrations server.
|
||||
1. `features`: Lookup of optional features that may be `enable`d, `disable`d, or exposed to the user
|
||||
in the `labs` section of settings. The available optional experimental features vary from
|
||||
release to release.
|
||||
1. `brand`: String to pass to your homeserver when configuring email notifications, to let the
|
||||
homeserver know what email template to use when talking to you.
|
||||
1. `integrations_ui_url`: URL to the web interface for the integrations server. The integrations
|
||||
server is not Riot and normally not your Home Server either. The integration server settings
|
||||
may be left blank to disable integrations.
|
||||
1. `integrations_rest_url`: URL to the REST interface for the integrations server.
|
||||
1. `integrations_widgets_urls`: list of URLs to the REST interface for the widget integrations server.
|
||||
1. `bug_report_endpoint_url`: endpoint to send bug reports to (must be running a
|
||||
https://github.com/matrix-org/rageshake server)
|
||||
1. `roomDirectory`: config for the public room directory. This section is optional.
|
||||
1. `roomDirectory.servers`: List of other Home Servers' directories to include in the drop
|
||||
1. `roomDirectory.servers`: List of other homeservers' directories to include in the drop
|
||||
down list. Optional.
|
||||
1. `default_theme`: name of theme to use by default (e.g. 'light')
|
||||
1. `update_base_url` (electron app only): HTTPS URL to a web server to download
|
||||
updates from. This should be the path to the directory containing `macos`
|
||||
and `win32` (for update packages, not installer packages).
|
||||
1. `cross_origin_renderer_url`: URL to a static HTML page hosting code to help display
|
||||
encrypted file attachments. This MUST be hosted on a completely separate domain to
|
||||
anything else since it is used to isolate the privileges of file attachments to this
|
||||
domain. Default: `usercontent.riot.im`. This needs to contain v1.html from
|
||||
domain. Default: `https://usercontent.riot.im/v1.html`. This needs to contain v1.html from
|
||||
https://github.com/matrix-org/usercontent/blob/master/v1.html
|
||||
1. `piwik`: an object containing the following properties:
|
||||
1. `url`: The URL of the Piwik instance to use for collecting Analytics
|
||||
1. `whitelistedHSUrls`: a list of HS URLs to not redact from the Analytics
|
||||
1. `whitelistedISUrls`: a list of IS URLs to not redact from the Analytics
|
||||
1. `siteId`: The Piwik Site ID to use when sending Analytics to the Piwik server configured above
|
||||
1. `teamServerConfig`, `teamTokenMap`, `referralBaseUrl`: an obsolete precursor to communities
|
||||
with referral tracking; please ignore it.
|
||||
1. `welcomeUserId`: the user ID of a bot to invite whenever users register that can give them a tour
|
||||
|
||||
|
||||
Note that `index.html` also has an og:image meta tag that is set to an image
|
||||
hosted on riot.im. This is the image used if links to your copy of Riot
|
||||
appear in some websites like Facebook, and indeed Riot itself. This has to be
|
||||
static in the HTML and an absolute URL (and HTTP rather than HTTPS), so it's
|
||||
not possible for this to be an option in config.json. If you'd like to change
|
||||
it, you can build Riot as above, but run
|
||||
`RIOT_OG_IMAGE_URL="http://example.com/logo.png" npm run build`.
|
||||
Alternatively, you can edit the `og:image` meta tag in `index.html` directly
|
||||
each time you download a new version of Riot.
|
||||
|
||||
Running as a Desktop app
|
||||
========================
|
||||
@@ -253,7 +285,6 @@ Finally, build and start Riot itself:
|
||||
1. `rm -r node_modules/matrix-react-sdk; ln -s ../../matrix-react-sdk node_modules/`
|
||||
1. `npm start`
|
||||
1. Wait a few seconds for the initial build to finish; you should see something like:
|
||||
|
||||
```
|
||||
Hash: b0af76309dd56d7275c8
|
||||
Version: webpack 1.12.14
|
||||
@@ -282,47 +313,82 @@ If any of these steps error with, `file table overflow`, you are probably on a m
|
||||
which has a very low limit on max open files. Run `ulimit -Sn 1024` and try again.
|
||||
You'll need to do this in each new terminal you open before building Riot.
|
||||
|
||||
How to add a new translation?
|
||||
=============================
|
||||
Running the tests
|
||||
-----------------
|
||||
|
||||
There are a number of application-level tests in the `tests` directory; these
|
||||
are designed to run in a browser instance under the control of
|
||||
[karma](https://karma-runner.github.io). To run them:
|
||||
|
||||
* Make sure you have Chrome installed (a recent version, like 59)
|
||||
* Make sure you have `matrix-js-sdk` and `matrix-react-sdk` installed and
|
||||
built, as above
|
||||
* `npm run test`
|
||||
|
||||
The above will run the tests under Chrome in a `headless` mode.
|
||||
|
||||
You can also tell karma to run the tests in a loop (every time the source
|
||||
changes), in an instance of Chrome on your desktop, with `npm run
|
||||
test-multi`. This also gives you the option of running the tests in 'debug'
|
||||
mode, which is useful for stepping through the tests in the developer tools.
|
||||
|
||||
Translations
|
||||
============
|
||||
|
||||
To add a new translation, head to the [translating doc](docs/translating.md).
|
||||
|
||||
For a developer guide, see the [translating dev doc](docs/translating-dev.md).
|
||||
|
||||
[<img src="https://translate.riot.im/widgets/riot-web/-/multi-auto.svg" alt="translationsstatus" width="340">](https://translate.riot.im/engage/riot-web/?utm_source=widget)
|
||||
|
||||
|
||||
Head to the [translating doc](docs/translating.md)
|
||||
|
||||
Adding Strings to the translations (Developer Guide)
|
||||
====================================================
|
||||
|
||||
Head to the [translating dev doc](docs/translating-dev.md)
|
||||
|
||||
Triaging issues
|
||||
===============
|
||||
|
||||
Issues will be triaged by the core team using the following primary set of tags:
|
||||
Issues will be triaged by the core team using the below set of tags.
|
||||
|
||||
priority:
|
||||
Tags are meant to be used in combination - e.g.:
|
||||
* P1 critical bug == really urgent stuff that should be next in the bugfixing todo list
|
||||
* "release blocker" == stuff which is blocking us from cutting the next release.
|
||||
* P1 feature type:voip == what VoIP features should we be working on next?
|
||||
|
||||
* P1: top priority; typically blocks releases
|
||||
priority: **compulsory**
|
||||
|
||||
* P1: top priority - i.e. pool of stuff which we should be working on next
|
||||
* P2: still need to fix, but lower than P1
|
||||
* P3: non-urgent
|
||||
* P4: intereseting idea - bluesky some day
|
||||
* P4: interesting idea - bluesky some day
|
||||
* P5: recorded for posterity/to avoid duplicates. No intention to resolves right now.
|
||||
|
||||
bug or feature:
|
||||
bug or feature: **compulsory**
|
||||
|
||||
* bug
|
||||
* feature
|
||||
|
||||
bug severity:
|
||||
bug severity: **compulsory, if bug**
|
||||
|
||||
* cosmetic - feature works functionally but UI/UX is broken
|
||||
* critical - whole app doesn't work
|
||||
* major - entire feature doesn't work
|
||||
* minor - partially broken feature (but still usable)
|
||||
* cosmetic - feature works functionally but UI/UX is broken
|
||||
|
||||
additional categories:
|
||||
types
|
||||
* type:* - refers to a particular part of the app; used to filter bugs
|
||||
on a given topic - e.g. VOIP, signup, timeline, etc.
|
||||
|
||||
additional categories (self-explanatory):
|
||||
|
||||
* release blocker
|
||||
* ui/ux (think of this as cosmetic)
|
||||
* network (specific to network conditions)
|
||||
* platform (platform specific)
|
||||
* platform specific
|
||||
* accessibility
|
||||
* maintenance
|
||||
* performance
|
||||
* i18n
|
||||
* blocked - whether this issue currently can't be progressed due to outside factors
|
||||
|
||||
community engagement
|
||||
* easy
|
||||
* hacktoberfest
|
||||
* bounty? - proposal to be included in a bounty programme
|
||||
* bounty - included in Status Open Bounty
|
||||
|
||||
@@ -1,11 +1,21 @@
|
||||
{
|
||||
"default_hs_url": "https://matrix.org",
|
||||
"default_is_url": "https://vector.im",
|
||||
"disable_custom_urls": false,
|
||||
"disable_guests": false,
|
||||
"disable_login_language_selector": false,
|
||||
"disable_3pid_login": false,
|
||||
"brand": "Riot",
|
||||
"integrations_ui_url": "https://scalar.vector.im/",
|
||||
"integrations_rest_url": "https://scalar.vector.im/api",
|
||||
"bug_report_endpoint_url": "https://riot.im/bugreports/submit",
|
||||
"enableLabs": true,
|
||||
"features": {
|
||||
"feature_groups": "labs",
|
||||
"feature_pinning": "labs"
|
||||
},
|
||||
"default_federate": true,
|
||||
"welcomePageUrl": "home.html",
|
||||
"default_theme": "light",
|
||||
"roomDirectory": {
|
||||
"servers": [
|
||||
"matrix.org"
|
||||
@@ -14,6 +24,8 @@
|
||||
"welcomeUserId": "@riot-bot:matrix.org",
|
||||
"piwik": {
|
||||
"url": "https://piwik.riot.im/",
|
||||
"whitelistedHSUrls": ["https://matrix.org"],
|
||||
"whitelistedISUrls": ["https://vector.im", "https://matrix.org"],
|
||||
"siteId": 1
|
||||
}
|
||||
}
|
||||
|
||||
68
docs/skinning thoughts.md
Normal file
68
docs/skinning thoughts.md
Normal file
@@ -0,0 +1,68 @@
|
||||
== Skinning refactor ==
|
||||
|
||||
matrix-react-sdk
|
||||
- base images
|
||||
- base CSS
|
||||
- all the components needed to build a workable app (including the top layer)
|
||||
|
||||
riot-web: the riot skin
|
||||
- riot-specific classes (e.g. login header/footer)
|
||||
- riot-specific themes
|
||||
- light
|
||||
- dark
|
||||
|
||||
i.e. the only things which should go into riot-web are bits which apply vector-specific skinning
|
||||
specifically "Stuff that any other brand would not want to use. (e.g. riot logos, links, T&Cs)"
|
||||
- Questions:
|
||||
- Electron app? (should probably be a separate repo in its own right? but might as well go here for now)
|
||||
- index.html & index.js? (should be in matrix-react-sdk, given the SDK is useless without them?)
|
||||
|
||||
ideally matrix-react-sdk itself should ship with a default skin which actually works built in.
|
||||
|
||||
status skin (can go in the same app for now)
|
||||
- has status theme
|
||||
- which inherits from riot light theme
|
||||
- how do we share graphics between skins?
|
||||
- shove them into react-sdk, or...
|
||||
- guess we do ../../vector/img
|
||||
- this means keeping the skin name in the images (unless /img is a shortcut to the right skin's images)
|
||||
|
||||
out of scope:
|
||||
- making the components more independent, so they can be used in isolation.
|
||||
- that said, the bits which should probably be used by being embeded into a different app:
|
||||
- login/reg
|
||||
- RoomView + RoomSettings
|
||||
- MessageComposer
|
||||
- RoomList
|
||||
- MemberList
|
||||
- MemberInfo
|
||||
- Voip UI
|
||||
- UserSettings
|
||||
- sharing different js-sdks between the different isolated modules
|
||||
|
||||
other changes:
|
||||
- how do we handle i18n?
|
||||
- each skin should really be its own i18n project. As long as all the commonality stuff is in matrix-react-sdk this shouldn't be too bad.
|
||||
- ability to associate components with a given skin
|
||||
- skins/vector/src <-- components
|
||||
- skins/vector/css
|
||||
- skins/vector/img
|
||||
- skins/vector/fonts
|
||||
- gather together themes (per skin) into a single place too
|
||||
- skins/vector/themes/foo/css
|
||||
- skins/vector/themes/foo/img
|
||||
- skins/vector/themes/foo/fonts
|
||||
- ideally riot-web would contain almost nothing but skins/vector directory.
|
||||
- ability to entirely replace CSS rather than override it for a given theme
|
||||
- e.g. if we replace `Login.js` with `StatusLogin.js`, then we should similarly be able to replace `_Login.scss` with `_StatusLogin.scss`.
|
||||
|
||||
random thoughts;
|
||||
- should we be able to change the entire skin at runtime (more like wordpress) - to the extent of replacing entire components?
|
||||
- might pose security issues if a theme can be swapped out to replace MatrixChat or other fundamental functionality at runtime
|
||||
- if so, perhaps skins & themes should converge...
|
||||
|
||||
-----------------
|
||||
|
||||
Immediate plan for Status:
|
||||
* Implement it as a theme for the riot skin
|
||||
* Ideally move skins to a sensible level (possibly even including src?)
|
||||
@@ -6,21 +6,50 @@
|
||||
- Be able to understand English
|
||||
- Be able to understand the language you want to translate riot-web into
|
||||
|
||||
## Translating strings vs. marking strings for translation
|
||||
|
||||
Translating strings are done with the `_t()` function found in matrix-react-sdk/lib/languageHandler.js. It is recommended to call this function wherever you introduce a string constant which should be translated. However, translating can not be performed until after the translation system has been initialized. Thus, sometimes translation must be performed at a different location in the source code than where the string is introduced. This breaks some tooling and makes it difficult to find translatable strings. Therefore, there is the alternative `_td()` function which is used to mark strings for translation, without actually performing the translation (which must still be performed separately, and after the translation system has been initialized).
|
||||
|
||||
Basically, whenever a translatable string is introduced, you should call either `_t()` immediately OR `_td()` and later `_t()`.
|
||||
|
||||
Example:
|
||||
```
|
||||
// Module-level constant
|
||||
const COLORS = {
|
||||
'#f8481c': _td('reddish orange'), // Can't call _t() here yet
|
||||
'#fc2647': _td('pinky red') // Use _td() instead so the text is picked up for translation anyway
|
||||
}
|
||||
|
||||
// Function that is called some time after i18n has been loaded
|
||||
function getColorName(hex) {
|
||||
return _t(COLORS[hex]); // Perform actual translation here
|
||||
}
|
||||
```
|
||||
|
||||
## Adding new strings
|
||||
|
||||
1. Check if the import ``import { _t } from 'matrix-react-sdk/lib/languageHandler';`` is present. If not add it to the other import statements.
|
||||
2. Add ``_t()`` to your string. (Don't forget curly braces when you assign an expression to JSX attributes in the render method)
|
||||
3. Add the String to the ``en_EN.json`` file in ``src/i18n/strings`` (respect which repository you are on).
|
||||
1. Check if the import ``import { _t } from 'matrix-react-sdk/lib/languageHandler';`` is present. If not add it to the other import statements. Also import `_td` if needed.
|
||||
1. Add ``_t()`` to your string. (Don't forget curly braces when you assign an expression to JSX attributes in the render method). If the string is introduced at a point before the translation system has not yet been initialized, use `_td()` instead, and call `_t()` at the appropriate time.
|
||||
1. Run `npm run i18n` to update ``src/i18n/strings/en_EN.json`` (if it fails because it can't find the script, your dev environment predates the script, so reinstall/link react-sdk with `npm link ../matrix-react-sdk`). If it segfaults, you may be on Node 6, so try a newer version of node.
|
||||
1. If you added a string with a plural, you can add other English plural variants to ``src/i18n/strings/en_EN.json`` (remeber to edit the one in the same project as the source file containing your new translation).
|
||||
|
||||
## Adding variables inside a string.
|
||||
|
||||
1. Extend your ``_t()`` call. Instead of ``_t(STRING)`` use ``_t(STRING, {})``
|
||||
2. Decide how to name it. Please think about if the person who has to translate it can understand what it does.
|
||||
3. Add it to the array in ``_t`` for example ``_t(STRING, {variable: this.variable})``
|
||||
4. Add the variable inside the string. The syntax for variables is ``%(variable)s``. Please note the s at the end. The name of the variable has to match the previous used name.
|
||||
1. Decide how to name it. Please think about if the person who has to translate it can understand what it does. E.g. using the name 'recipient' is bad, because a translator does not know if it is the name of a person, an email address, a user ID, etc. Rather use e.g. recipientEmailAddress.
|
||||
1. Add it to the array in ``_t`` for example ``_t(STRING, {variable: this.variable})``
|
||||
1. Add the variable inside the string. The syntax for variables is ``%(variable)s``. Please note the _s_ at the end. The name of the variable has to match the previous used name.
|
||||
|
||||
- You can use the special ``count`` variable to choose between multiple versions of the same string, in order to get the correct pluralization. E.g. ``_t('You have %(count)s new messages', { count: 2 })`` would show 'You have 2 new messages', while ``_t('You have %(count)s new messages', { count: 1 })`` would show 'You have one new message' (assuming a singular version of the string has been added to the translation file. See above). Passing in ``count`` is much prefered over having an if-statement choose the correct string to use, because some languages have much more complicated plural rules than english (e.g. they might need a completely different form if there are three things rather than two).
|
||||
- If you want to translate text that includes e.g. hyperlinks or other HTML you have to also use tag substitution, e.g. ``_t('<a>Click here!</a>', {}, { 'a': (sub) => <a>{sub}</a> })``. If you don't do the tag substitution you will end up showing literally '<a>' rather than making a hyperlink.
|
||||
- You can also use React components with normal variable substitution if you want to insert HTML markup, e.g. ``_t('Your email address is %(emailAddress)s', { emailAddress: <i>{userEmailAddress}</i> })``.
|
||||
|
||||
## Things to know/Style Guides
|
||||
|
||||
- Do not use it inside ``getDefaultProps`` at the point where ``getDefaultProps`` is initialized the translations aren't loaded yet and it causes missing translations.
|
||||
- If using translated strings as constants, translated strings can't be in constants loaded at class-load time since the translations won't be loaded.
|
||||
- Do not use `_t()` inside ``getDefaultProps``: the translations aren't loaded when `getDefaultProps` is called, leading to missing translations. Use `_td()` to indicate that `_t()` will be called on the string later.
|
||||
- If using translated strings as constants, translated strings can't be in constants loaded at class-load time since the translations won't be loaded. Mark the strings using `_td()` instead and perform the actual translation later.
|
||||
- If a string is presented in the UI with punctuation like a full stop, include this in the translation strings, since punctuation varies between languages too.
|
||||
- Avoid "translation in parts", i.e. concatenating translated strings or using translated strings in variable substitutions. Context is important for translations, and translating partial strings this way is simply not always possible.
|
||||
- Concatenating strings often also introduces an implicit assumption about word order (e.g. that the subject of the sentence comes first), which is incorrect for many languages.
|
||||
- Translation 'smell test': If you have a string that does not begin with a capital letter (is not the start of a sentence) or it ends with e.g. ':' or a preposition (e.g. 'to') you should recheck that you are not trying to translate a partial sentence.
|
||||
- If you have multiple strings, that are almost identical, except some part (e.g. a word or two) it is still better to translate the full sentence multiple times. It may seem like inefficient repetion, but unlike programming where you try to minimize repetition, translation is much faster if you have many, full, clear, sentences to work with, rather than fewer, but incomplete sentence fragments.
|
||||
|
||||
@@ -35,7 +35,7 @@ Head to the explanations under Steb 2b
|
||||
## Step 2b: Adding a new language
|
||||
|
||||
1. Go to one of the projects listed https://translate.riot.im/projects/riot-web/
|
||||
2. Click the ``Start new language`` button at the bottom
|
||||
2. Click the ``Start new translation`` button at the bottom
|
||||
3. Select a language
|
||||
4. Start translating like in 2a.3
|
||||
5. Repeat these steps for the other projects which are listed at the link of step 2b.1
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"name": "riot-web",
|
||||
"productName": "Riot",
|
||||
"main": "src/electron-main.js",
|
||||
"version": "0.11.2",
|
||||
"version": "0.14.0-rc.5",
|
||||
"description": "A feature-rich client for Matrix.org",
|
||||
"author": "Vector Creations Ltd.",
|
||||
"dependencies": {
|
||||
|
||||
34
electron_app/riot.im/New Vector Ltd.pem
Normal file
34
electron_app/riot.im/New Vector Ltd.pem
Normal file
@@ -0,0 +1,34 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIF0jCCBLqgAwIBAgIRAISYBqZi3VvCUeSfHXF+cbwwDQYJKoZIhvcNAQELBQAw
|
||||
gZExCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
|
||||
BgNVBAcTB1NhbGZvcmQxGjAYBgNVBAoTEUNPTU9ETyBDQSBMaW1pdGVkMTcwNQYD
|
||||
VQQDEy5DT01PRE8gUlNBIEV4dGVuZGVkIFZhbGlkYXRpb24gQ29kZSBTaWduaW5n
|
||||
IENBMB4XDTE3MDgyMzAwMDAwMFoXDTIwMDgyMjIzNTk1OVowgdgxETAPBgNVBAUT
|
||||
CDEwODczNjYxMRMwEQYLKwYBBAGCNzwCAQMTAkdCMR0wGwYDVQQPExRQcml2YXRl
|
||||
IE9yZ2FuaXphdGlvbjELMAkGA1UEBhMCR0IxETAPBgNVBBEMCFdDMVIgNEFHMQ8w
|
||||
DQYDVQQIDAZMb25kb24xDzANBgNVBAcMBkxvbmRvbjEbMBkGA1UECQwSMjYgUmVk
|
||||
IExpb24gU3F1YXJlMRcwFQYDVQQKDA5OZXcgVmVjdG9yIEx0ZDEXMBUGA1UEAwwO
|
||||
TmV3IFZlY3RvciBMdGQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7
|
||||
X0HP3oM/SVr6PboD03ndtYTONZDcJ/GJ3EyYi6UNrcbKjuDHwPktx9hjAhNjcVkG
|
||||
lmuTEPluPj9DbvjaTrers0cQsAS1vJ0RHjLfA93Flg1ys9Q6OThUMw77FtFPtiJU
|
||||
z5cSYzfFAhn/4dv7BcgGptn+Mv/8CaTu+RUZJUgoSlRWcT1TREmxkzWotbblqsHO
|
||||
zjDmUg20tL5/qpt6BSWsNespf5udKQFXMtqkczBcLvBLmql0vurVcQy8BibB+Q89
|
||||
QKwRzwLgaIa7O8WEssFcW8uJe9s0SNtUy8ehbuoSxpA/DbHFwsiDbNA78vp7HrqM
|
||||
qY6t6OIgLtDYBFCfe/btAgMBAAGjggHaMIIB1jAfBgNVHSMEGDAWgBTfj/MgDOnK
|
||||
pgTYW1g3Kj2rRtyDSTAdBgNVHQ4EFgQUH+mDOdRkF3bYDxCWEaGB4lxiCxcwDgYD
|
||||
VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwMw
|
||||
EQYJYIZIAYb4QgEBBAQDAgQQMEYGA1UdIAQ/MD0wOwYMKwYBBAGyMQECAQYBMCsw
|
||||
KQYIKwYBBQUHAgEWHWh0dHBzOi8vc2VjdXJlLmNvbW9kby5jb20vQ1BTMFUGA1Ud
|
||||
HwROMEwwSqBIoEaGRGh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL0NPTU9ET1JTQUV4
|
||||
dGVuZGVkVmFsaWRhdGlvbkNvZGVTaWduaW5nQ0EuY3JsMIGGBggrBgEFBQcBAQR6
|
||||
MHgwUAYIKwYBBQUHMAKGRGh0dHA6Ly9jcnQuY29tb2RvY2EuY29tL0NPTU9ET1JT
|
||||
QUV4dGVuZGVkVmFsaWRhdGlvbkNvZGVTaWduaW5nQ0EuY3J0MCQGCCsGAQUFBzAB
|
||||
hhhodHRwOi8vb2NzcC5jb21vZG9jYS5jb20wJgYDVR0RBB8wHaAbBggrBgEFBQcI
|
||||
A6APMA0MC0dCLTEwODczNjYxMA0GCSqGSIb3DQEBCwUAA4IBAQBJ2aH4aixh0aiz
|
||||
4WKlK+LMVLHpQ2POE3FZYNpAW7o1q2YDGEADXdGrygPE9NCGNBXKo0CAemCYNWfX
|
||||
Ov/jdoiMfeqW3vrZ66oEy8OqbvJSwK1xmomWuYw3wYPWcPVG+YbWYD2CGdQu8jTz
|
||||
fzAJCpvAuY3Wji3fQjiecAC7JCSB4fBHa0ALJOmiSqKQUUpkXs5kW7O0lPBnHzNF
|
||||
2tQGltXMSIrq1QfFtcreMyKlwDOxPIh360dv5aHhaeSRDRKxq7uq5ikQF2gjKx4k
|
||||
ieg2HRbAW6fVPpFr4zRS5umpeZV3i06i11VQQPS/mA/OBEXyaqzx4mr6B7U6ptrp
|
||||
jMqiUv2w
|
||||
-----END CERTIFICATE-----
|
||||
@@ -5,9 +5,12 @@
|
||||
"brand": "Riot",
|
||||
"integrations_ui_url": "https://scalar.vector.im/",
|
||||
"integrations_rest_url": "https://scalar.vector.im/api",
|
||||
"integrations_widgets_urls": [
|
||||
"https://scalar-staging.riot.im/scalar/api",
|
||||
"https://scalar.vector.im/api"
|
||||
],
|
||||
"bug_report_endpoint_url": "https://riot.im/bugreports/submit",
|
||||
"welcomeUserId": "@riot-bot:matrix.org",
|
||||
"enableLabs": true,
|
||||
"roomDirectory": {
|
||||
"servers": [
|
||||
"matrix.org"
|
||||
|
||||
@@ -29,6 +29,7 @@ const AutoLaunch = require('auto-launch');
|
||||
const tray = require('./tray');
|
||||
const vectorMenu = require('./vectormenu');
|
||||
const webContentsHandler = require('./webcontents-handler');
|
||||
const updater = require('./updater');
|
||||
|
||||
const windowStateKeeper = require('electron-window-state');
|
||||
|
||||
@@ -46,69 +47,9 @@ try {
|
||||
// Continue with the defaults (ie. an empty config)
|
||||
}
|
||||
|
||||
const UPDATE_POLL_INTERVAL_MS = 60 * 60 * 1000;
|
||||
const INITIAL_UPDATE_DELAY_MS = 30 * 1000;
|
||||
|
||||
let mainWindow = null;
|
||||
let appQuitting = false;
|
||||
global.appQuitting = false;
|
||||
|
||||
function installUpdate() {
|
||||
// for some reason, quitAndInstall does not fire the
|
||||
// before-quit event, so we need to set the flag here.
|
||||
appQuitting = true;
|
||||
electron.autoUpdater.quitAndInstall();
|
||||
}
|
||||
|
||||
function pollForUpdates() {
|
||||
try {
|
||||
electron.autoUpdater.checkForUpdates();
|
||||
} catch (e) {
|
||||
console.log('Couldn\'t check for update', e);
|
||||
}
|
||||
}
|
||||
|
||||
function startAutoUpdate(updateBaseUrl) {
|
||||
if (updateBaseUrl.slice(-1) !== '/') {
|
||||
updateBaseUrl = updateBaseUrl + '/';
|
||||
}
|
||||
try {
|
||||
// For reasons best known to Squirrel, the way it checks for updates
|
||||
// is completely different between macOS and windows. On macOS, it
|
||||
// hits a URL that either gives it a 200 with some json or
|
||||
// 204 No Content. On windows it takes a base path and looks for
|
||||
// files under that path.
|
||||
if (process.platform === 'darwin') {
|
||||
// include the current version in the URL we hit. Electron doesn't add
|
||||
// it anywhere (apart from the User-Agent) so it's up to us. We could
|
||||
// (and previously did) just use the User-Agent, but this doesn't
|
||||
// rely on NSURLConnection setting the User-Agent to what we expect,
|
||||
// and also acts as a convenient cache-buster to ensure that when the
|
||||
// app updates it always gets a fresh value to avoid update-looping.
|
||||
electron.autoUpdater.setFeedURL(
|
||||
`${updateBaseUrl}macos/?localVersion=${encodeURIComponent(electron.app.getVersion())}`);
|
||||
|
||||
} else if (process.platform === 'win32') {
|
||||
electron.autoUpdater.setFeedURL(`${updateBaseUrl}win32/${process.arch}/`);
|
||||
} else {
|
||||
// Squirrel / electron only supports auto-update on these two platforms.
|
||||
// I'm not even going to try to guess which feed style they'd use if they
|
||||
// implemented it on Linux, or if it would be different again.
|
||||
console.log('Auto update not supported on this platform');
|
||||
}
|
||||
// We check for updates ourselves rather than using 'updater' because we need to
|
||||
// do it in the main process (and we don't really need to check every 10 minutes:
|
||||
// every hour should be just fine for a desktop app)
|
||||
// However, we still let the main window listen for the update events.
|
||||
// We also wait a short time before checking for updates the first time because
|
||||
// of squirrel on windows and it taking a small amount of time to release a
|
||||
// lock file.
|
||||
setTimeout(pollForUpdates, INITIAL_UPDATE_DELAY_MS);
|
||||
setInterval(pollForUpdates, UPDATE_POLL_INTERVAL_MS);
|
||||
} catch (err) {
|
||||
// will fail if running in debug mode
|
||||
console.log('Couldn\'t enable update checking', err);
|
||||
}
|
||||
}
|
||||
|
||||
// handle uncaught errors otherwise it displays
|
||||
// stack traces in popup dialogs, which is terrible (which
|
||||
@@ -120,8 +61,6 @@ process.on('uncaughtException', function(error) {
|
||||
console.log('Unhandled exception', error);
|
||||
});
|
||||
|
||||
electron.ipcMain.on('install_update', installUpdate);
|
||||
|
||||
let focusHandlerAttached = false;
|
||||
electron.ipcMain.on('setBadgeCount', function(ev, count) {
|
||||
electron.app.setBadgeCount(count);
|
||||
@@ -145,7 +84,7 @@ let powerSaveBlockerId;
|
||||
electron.ipcMain.on('app_onAction', function(ev, payload) {
|
||||
switch (payload.action) {
|
||||
case 'call_state':
|
||||
if (powerSaveBlockerId && powerSaveBlockerId.isStarted(powerSaveBlockerId)) {
|
||||
if (powerSaveBlockerId && electron.powerSaveBlocker.isStarted(powerSaveBlockerId)) {
|
||||
if (payload.state === 'ended') {
|
||||
electron.powerSaveBlocker.stop(powerSaveBlockerId);
|
||||
}
|
||||
@@ -233,7 +172,7 @@ electron.app.on('ready', () => {
|
||||
|
||||
if (vectorConfig.update_base_url) {
|
||||
console.log(`Starting auto update with base URL: ${vectorConfig.update_base_url}`);
|
||||
startAutoUpdate(vectorConfig.update_base_url);
|
||||
updater.start(vectorConfig.update_base_url);
|
||||
} else {
|
||||
console.log('No update_base_url is defined: auto update is disabled');
|
||||
}
|
||||
@@ -246,7 +185,7 @@ electron.app.on('ready', () => {
|
||||
defaultHeight: 768,
|
||||
});
|
||||
|
||||
mainWindow = new electron.BrowserWindow({
|
||||
mainWindow = global.mainWindow = new electron.BrowserWindow({
|
||||
icon: iconPath,
|
||||
show: false,
|
||||
autoHideMenuBar: true,
|
||||
@@ -264,7 +203,7 @@ electron.app.on('ready', () => {
|
||||
mainWindow.hide();
|
||||
|
||||
// Create trayIcon icon
|
||||
tray.create(mainWindow, {
|
||||
tray.create({
|
||||
icon_path: iconPath,
|
||||
brand: vectorConfig.brand || 'Riot',
|
||||
});
|
||||
@@ -276,10 +215,10 @@ electron.app.on('ready', () => {
|
||||
}
|
||||
|
||||
mainWindow.on('closed', () => {
|
||||
mainWindow = null;
|
||||
mainWindow = global.mainWindow = null;
|
||||
});
|
||||
mainWindow.on('close', (e) => {
|
||||
if (!appQuitting && (tray.hasTray() || process.platform === 'darwin')) {
|
||||
if (!global.appQuitting && (tray.hasTray() || process.platform === 'darwin')) {
|
||||
// On Mac, closing the window just hides it
|
||||
// (this is generally how single-window Mac apps
|
||||
// behave, eg. Mail.app)
|
||||
@@ -289,6 +228,17 @@ electron.app.on('ready', () => {
|
||||
}
|
||||
});
|
||||
|
||||
if (process.platform === 'win32') {
|
||||
// Handle forward/backward mouse buttons in Windows
|
||||
mainWindow.on('app-command', (e, cmd) => {
|
||||
if (cmd === 'browser-backward' && mainWindow.webContents.canGoBack()) {
|
||||
mainWindow.webContents.goBack();
|
||||
} else if (cmd === 'browser-forward' && mainWindow.webContents.canGoForward()) {
|
||||
mainWindow.webContents.goForward();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
webContentsHandler(mainWindow.webContents);
|
||||
mainWindowState.manage(mainWindow);
|
||||
});
|
||||
@@ -302,7 +252,10 @@ electron.app.on('activate', () => {
|
||||
});
|
||||
|
||||
electron.app.on('before-quit', () => {
|
||||
appQuitting = true;
|
||||
global.appQuitting = true;
|
||||
if (mainWindow) {
|
||||
mainWindow.webContents.send('before-quit');
|
||||
}
|
||||
});
|
||||
|
||||
// Set the App User Model ID to match what the squirrel
|
||||
|
||||
@@ -26,17 +26,17 @@ exports.hasTray = function hasTray() {
|
||||
return (trayIcon !== null);
|
||||
};
|
||||
|
||||
exports.create = function(win, config) {
|
||||
exports.create = function(config) {
|
||||
// no trays on darwin
|
||||
if (process.platform === 'darwin' || trayIcon) return;
|
||||
|
||||
const toggleWin = function() {
|
||||
if (win.isVisible() && !win.isMinimized()) {
|
||||
win.hide();
|
||||
if (global.mainWindow.isVisible() && !global.mainWindow.isMinimized()) {
|
||||
global.mainWindow.hide();
|
||||
} else {
|
||||
if (win.isMinimized()) win.restore();
|
||||
if (!win.isVisible()) win.show();
|
||||
win.focus();
|
||||
if (global.mainWindow.isMinimized()) global.mainWindow.restore();
|
||||
if (!global.mainWindow.isVisible()) global.mainWindow.show();
|
||||
global.mainWindow.focus();
|
||||
}
|
||||
};
|
||||
|
||||
@@ -54,41 +54,46 @@ exports.create = function(win, config) {
|
||||
},
|
||||
]);
|
||||
|
||||
trayIcon = new Tray(config.icon_path);
|
||||
const defaultIcon = nativeImage.createFromPath(config.icon_path);
|
||||
|
||||
trayIcon = new Tray(defaultIcon);
|
||||
trayIcon.setToolTip(config.brand);
|
||||
trayIcon.setContextMenu(contextMenu);
|
||||
trayIcon.on('click', toggleWin);
|
||||
|
||||
let lastFavicon = null;
|
||||
win.webContents.on('page-favicon-updated', async function(ev, favicons) {
|
||||
let newFavicon = config.icon_path;
|
||||
if (favicons && favicons.length > 0 && favicons[0].startsWith('data:')) {
|
||||
newFavicon = favicons[0];
|
||||
global.mainWindow.webContents.on('page-favicon-updated', async function(ev, favicons) {
|
||||
if (!favicons || favicons.length <= 0 || !favicons[0].startsWith('data:')) {
|
||||
if (lastFavicon !== null) {
|
||||
win.setIcon(defaultIcon);
|
||||
trayIcon.setImage(defaultIcon);
|
||||
lastFavicon = null;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// No need to change, shortcut
|
||||
if (newFavicon === lastFavicon) return;
|
||||
lastFavicon = newFavicon;
|
||||
if (favicons[0] === lastFavicon) return;
|
||||
lastFavicon = favicons[0];
|
||||
|
||||
// if its not default we have to construct into nativeImage
|
||||
if (newFavicon !== config.icon_path) {
|
||||
newFavicon = nativeImage.createFromDataURL(favicons[0]);
|
||||
let newFavicon = nativeImage.createFromDataURL(favicons[0]);
|
||||
|
||||
if (process.platform === 'win32') {
|
||||
try {
|
||||
const icoPath = path.join(app.getPath('temp'), 'win32_riot_icon.ico')
|
||||
const icoBuf = await pngToIco(newFavicon.toPNG());
|
||||
fs.writeFileSync(icoPath, icoBuf);
|
||||
newFavicon = icoPath;
|
||||
} catch (e) {console.error(e);}
|
||||
// Windows likes ico's too much.
|
||||
if (process.platform === 'win32') {
|
||||
try {
|
||||
const icoPath = path.join(app.getPath('temp'), 'win32_riot_icon.ico');
|
||||
fs.writeFileSync(icoPath, await pngToIco(newFavicon.toPNG()));
|
||||
newFavicon = nativeImage.createFromPath(icoPath);
|
||||
} catch (e) {
|
||||
console.error("Failed to make win32 ico", e);
|
||||
}
|
||||
}
|
||||
|
||||
trayIcon.setImage(newFavicon);
|
||||
win.setIcon(newFavicon);
|
||||
global.mainWindow.setIcon(newFavicon);
|
||||
});
|
||||
|
||||
win.webContents.on('page-title-updated', function(ev, title) {
|
||||
global.mainWindow.webContents.on('page-title-updated', function(ev, title) {
|
||||
trayIcon.setToolTip(title);
|
||||
});
|
||||
};
|
||||
|
||||
84
electron_app/src/updater.js
Normal file
84
electron_app/src/updater.js
Normal file
@@ -0,0 +1,84 @@
|
||||
const { app, autoUpdater, ipcMain } = require('electron');
|
||||
|
||||
const UPDATE_POLL_INTERVAL_MS = 60 * 60 * 1000;
|
||||
const INITIAL_UPDATE_DELAY_MS = 30 * 1000;
|
||||
|
||||
function installUpdate() {
|
||||
// for some reason, quitAndInstall does not fire the
|
||||
// before-quit event, so we need to set the flag here.
|
||||
global.appQuitting = true;
|
||||
autoUpdater.quitAndInstall();
|
||||
}
|
||||
|
||||
function pollForUpdates() {
|
||||
try {
|
||||
autoUpdater.checkForUpdates();
|
||||
} catch (e) {
|
||||
console.log('Couldn\'t check for update', e);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {};
|
||||
module.exports.start = function startAutoUpdate(updateBaseUrl) {
|
||||
if (updateBaseUrl.slice(-1) !== '/') {
|
||||
updateBaseUrl = updateBaseUrl + '/';
|
||||
}
|
||||
try {
|
||||
let url;
|
||||
// For reasons best known to Squirrel, the way it checks for updates
|
||||
// is completely different between macOS and windows. On macOS, it
|
||||
// hits a URL that either gives it a 200 with some json or
|
||||
// 204 No Content. On windows it takes a base path and looks for
|
||||
// files under that path.
|
||||
if (process.platform === 'darwin') {
|
||||
// include the current version in the URL we hit. Electron doesn't add
|
||||
// it anywhere (apart from the User-Agent) so it's up to us. We could
|
||||
// (and previously did) just use the User-Agent, but this doesn't
|
||||
// rely on NSURLConnection setting the User-Agent to what we expect,
|
||||
// and also acts as a convenient cache-buster to ensure that when the
|
||||
// app updates it always gets a fresh value to avoid update-looping.
|
||||
url = `${updateBaseUrl}macos/?localVersion=${encodeURIComponent(app.getVersion())}`;
|
||||
|
||||
} else if (process.platform === 'win32') {
|
||||
url = `${updateBaseUrl}win32/${process.arch}/`;
|
||||
} else {
|
||||
// Squirrel / electron only supports auto-update on these two platforms.
|
||||
// I'm not even going to try to guess which feed style they'd use if they
|
||||
// implemented it on Linux, or if it would be different again.
|
||||
console.log('Auto update not supported on this platform');
|
||||
}
|
||||
|
||||
if (url) {
|
||||
autoUpdater.setFeedURL(url);
|
||||
// We check for updates ourselves rather than using 'updater' because we need to
|
||||
// do it in the main process (and we don't really need to check every 10 minutes:
|
||||
// every hour should be just fine for a desktop app)
|
||||
// However, we still let the main window listen for the update events.
|
||||
// We also wait a short time before checking for updates the first time because
|
||||
// of squirrel on windows and it taking a small amount of time to release a
|
||||
// lock file.
|
||||
setTimeout(pollForUpdates, INITIAL_UPDATE_DELAY_MS);
|
||||
setInterval(pollForUpdates, UPDATE_POLL_INTERVAL_MS);
|
||||
}
|
||||
} catch (err) {
|
||||
// will fail if running in debug mode
|
||||
console.log('Couldn\'t enable update checking', err);
|
||||
}
|
||||
}
|
||||
|
||||
ipcMain.on('install_update', installUpdate);
|
||||
ipcMain.on('check_updates', pollForUpdates);
|
||||
|
||||
function ipcChannelSendUpdateStatus(status) {
|
||||
if (global.mainWindow) {
|
||||
global.mainWindow.webContents.send('check_updates', status);
|
||||
}
|
||||
}
|
||||
|
||||
autoUpdater.on('update-available', function() {
|
||||
ipcChannelSendUpdateStatus(true);
|
||||
}).on('update-not-available', function() {
|
||||
ipcChannelSendUpdateStatus(false);
|
||||
}).on('error', function(error) {
|
||||
ipcChannelSendUpdateStatus(error.message);
|
||||
});
|
||||
@@ -19,7 +19,7 @@ const {app, shell, Menu} = require('electron');
|
||||
// Menu template from http://electron.atom.io/docs/api/menu/, edited
|
||||
const template = [
|
||||
{
|
||||
label: 'Edit',
|
||||
label: '&Edit',
|
||||
submenu: [
|
||||
{ role: 'undo' },
|
||||
{ role: 'redo' },
|
||||
@@ -33,7 +33,7 @@ const template = [
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'View',
|
||||
label: '&View',
|
||||
submenu: [
|
||||
{ type: 'separator' },
|
||||
{ role: 'resetzoom' },
|
||||
@@ -45,6 +45,7 @@ const template = [
|
||||
],
|
||||
},
|
||||
{
|
||||
label: '&Window',
|
||||
role: 'window',
|
||||
submenu: [
|
||||
{ role: 'minimize' },
|
||||
@@ -52,6 +53,7 @@ const template = [
|
||||
],
|
||||
},
|
||||
{
|
||||
label: '&Help',
|
||||
role: 'help',
|
||||
submenu: [
|
||||
{
|
||||
@@ -122,7 +124,7 @@ if (process.platform === 'darwin') {
|
||||
];
|
||||
} else {
|
||||
template.unshift({
|
||||
label: 'File',
|
||||
label: '&File',
|
||||
submenu: [
|
||||
// For some reason, 'about' does not seem to work on windows.
|
||||
/*{
|
||||
|
||||
@@ -84,13 +84,23 @@ module.exports = function (config) {
|
||||
// available preprocessors:
|
||||
// https://npmjs.org/browse/keyword/karma-preprocessor
|
||||
preprocessors: {
|
||||
'{src,test}/**/*.js': ['webpack'],
|
||||
'{src,test}/**/*.js': ['webpack', 'sourcemap'],
|
||||
},
|
||||
|
||||
// test results reporter to use
|
||||
// possible values: 'dots', 'progress'
|
||||
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
|
||||
reporters: ['progress', 'junit'],
|
||||
reporters: ['logcapture', 'spec', 'junit', 'summary'],
|
||||
|
||||
specReporter: {
|
||||
suppressErrorSummary: false, // do print error summary
|
||||
suppressFailed: false, // do print information about failed tests
|
||||
suppressPassed: false, // do print information about passed tests
|
||||
showSpecTiming: true, // print the time elapsed for each spec
|
||||
},
|
||||
|
||||
client: {
|
||||
captureLogs: true,
|
||||
},
|
||||
|
||||
// web server port
|
||||
port: 9876,
|
||||
@@ -113,8 +123,23 @@ module.exports = function (config) {
|
||||
browsers: [
|
||||
'Chrome',
|
||||
//'PhantomJS',
|
||||
//'ChromeHeadless'
|
||||
],
|
||||
|
||||
customLaunchers: {
|
||||
'ChromeHeadless': {
|
||||
base: 'Chrome',
|
||||
flags: [
|
||||
// '--no-sandbox',
|
||||
// See https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md
|
||||
'--headless',
|
||||
'--disable-gpu',
|
||||
// Without a remote debugging port, Google Chrome exits immediately.
|
||||
'--remote-debugging-port=9222',
|
||||
],
|
||||
}
|
||||
},
|
||||
|
||||
// Continuous Integration mode
|
||||
// if true, Karma captures browsers, runs the tests and exits
|
||||
// singleRun: false,
|
||||
|
||||
9512
package-lock.json
generated
Normal file
9512
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
50
package.json
50
package.json
@@ -2,9 +2,9 @@
|
||||
"name": "riot-web",
|
||||
"productName": "Riot",
|
||||
"main": "electron_app/src/electron-main.js",
|
||||
"version": "0.11.2",
|
||||
"version": "0.14.0-rc.5",
|
||||
"description": "A feature-rich client for Matrix.org",
|
||||
"author": "Vector Creations Ltd.",
|
||||
"author": "New Vector Ltd.",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/vector-im/riot-web"
|
||||
@@ -28,11 +28,13 @@
|
||||
"scripts": {
|
||||
"reskindex": "reskindex -h src/header",
|
||||
"reskindex:watch": "reskindex -h src/header -w",
|
||||
"i18n": "matrix-gen-i18n",
|
||||
"prunei18n": "matrix-prune-i18n",
|
||||
"build:res": "node scripts/copy-res.js",
|
||||
"build:modernizr": "modernizr -c .modernizr.json -d src/vector/modernizr.js",
|
||||
"build:compile": "npm run reskindex && babel --source-maps -d lib src",
|
||||
"build:bundle": "cross-env NODE_ENV=production webpack -p --progress",
|
||||
"build:bundle:dev": "webpack --optimize-occurence-order --progress",
|
||||
"build:bundle": "cross-env NODE_ENV=production webpack -p --progress --bail",
|
||||
"build:bundle:dev": "webpack --optimize-occurence-order --progress --bail",
|
||||
"build:electron": "npm run clean && npm run build && npm run install:electron && build -wml --ia32 --x64",
|
||||
"build": "npm run reskindex && npm run build:res && npm run build:bundle",
|
||||
"build:dev": "npm run reskindex && npm run build:res && npm run build:bundle:dev",
|
||||
@@ -47,16 +49,17 @@
|
||||
"lint": "eslint src/",
|
||||
"lintall": "eslint src/ test/",
|
||||
"clean": "rimraf lib webapp electron_app/dist",
|
||||
"prepublish": "npm run build:compile",
|
||||
"test": "karma start --single-run=true --autoWatch=false --browsers PhantomJS --colors=false",
|
||||
"prepublish": "npm run clean && npm run build:compile",
|
||||
"test": "karma start --single-run=true --autoWatch=false --browsers ChromeHeadless",
|
||||
"test-multi": "karma start"
|
||||
},
|
||||
"dependencies": {
|
||||
"babel-polyfill": "^6.5.0",
|
||||
"babel-runtime": "^6.11.6",
|
||||
"bluebird": "^3.5.0",
|
||||
"browser-request": "^0.3.3",
|
||||
"classnames": "^2.1.2",
|
||||
"draft-js": "^0.8.1",
|
||||
"draft-js": "^0.11.0-alpha",
|
||||
"extract-text-webpack-plugin": "^0.9.1",
|
||||
"favico.js": "^0.3.10",
|
||||
"filesize": "3.5.6",
|
||||
@@ -65,15 +68,14 @@
|
||||
"gfm.css": "^1.1.1",
|
||||
"highlight.js": "^9.0.0",
|
||||
"linkifyjs": "^2.1.3",
|
||||
"matrix-js-sdk": "0.7.12",
|
||||
"matrix-react-sdk": "0.9.5",
|
||||
"matrix-js-sdk": "0.10.0-rc.2",
|
||||
"matrix-react-sdk": "0.12.0-rc.5",
|
||||
"modernizr": "^3.1.0",
|
||||
"pako": "^1.0.5",
|
||||
"q": "^1.4.1",
|
||||
"react": "^15.4.0",
|
||||
"react-dnd": "^2.1.4",
|
||||
"react-dnd-html5-backend": "^2.1.2",
|
||||
"react-dom": "^15.4.0",
|
||||
"prop-types": "^15.5.10",
|
||||
"react": "^15.6.0",
|
||||
"react-beautiful-dnd": "^4.0.1",
|
||||
"react-dom": "^15.6.0",
|
||||
"react-gemini-scrollbar": "matrix-org/react-gemini-scrollbar#5e97aef",
|
||||
"sanitize-html": "^1.11.1",
|
||||
"text-encoding-utf-8": "^1.0.1",
|
||||
@@ -88,7 +90,7 @@
|
||||
"babel-eslint": "^6.1.0",
|
||||
"babel-loader": "^6.2.5",
|
||||
"babel-plugin-add-module-exports": "^0.2.1",
|
||||
"babel-plugin-transform-async-to-generator": "^6.16.0",
|
||||
"babel-plugin-transform-async-to-bluebird": "^1.1.1",
|
||||
"babel-plugin-transform-class-properties": "^6.16.0",
|
||||
"babel-plugin-transform-object-rest-spread": "^6.16.0",
|
||||
"babel-plugin-transform-runtime": "^6.15.0",
|
||||
@@ -109,23 +111,27 @@
|
||||
"eslint-config-google": "^0.7.1",
|
||||
"eslint-plugin-babel": "^4.1.1",
|
||||
"eslint-plugin-flowtype": "^2.30.0",
|
||||
"eslint-plugin-react": "^6.9.0",
|
||||
"eslint-plugin-react": "^7.4.0",
|
||||
"expect": "^1.16.0",
|
||||
"fs-extra": "^0.30.0",
|
||||
"html-webpack-plugin": "^2.24.0",
|
||||
"json-loader": "^0.5.3",
|
||||
"karma": "^0.13.22",
|
||||
"karma": "^1.7.0",
|
||||
"karma-chrome-launcher": "^0.2.3",
|
||||
"karma-cli": "^0.1.2",
|
||||
"karma-junit-reporter": "^0.4.1",
|
||||
"karma-logcapture-reporter": "0.0.1",
|
||||
"karma-mocha": "^0.2.2",
|
||||
"karma-phantomjs-launcher": "^1.0.0",
|
||||
"karma-sourcemap-loader": "^0.3.7",
|
||||
"karma-spec-reporter": "0.0.31",
|
||||
"karma-summary-reporter": "^1.3.3",
|
||||
"karma-webpack": "^1.7.0",
|
||||
"matrix-mock-request": "^1.2.0",
|
||||
"matrix-react-test-utils": "^0.2.0",
|
||||
"minimist": "^1.2.0",
|
||||
"mkdirp": "^0.5.1",
|
||||
"mocha": "^2.4.5",
|
||||
"parallelshell": "^1.2.0",
|
||||
"phantomjs-prebuilt": "^2.1.7",
|
||||
"parallelshell": "^3.0.2",
|
||||
"postcss-extend": "^1.0.5",
|
||||
"postcss-import": "^9.0.0",
|
||||
"postcss-loader": "^1.2.2",
|
||||
@@ -135,7 +141,7 @@
|
||||
"postcss-simple-vars": "^3.0.0",
|
||||
"postcss-strip-inline-comments": "^0.1.5",
|
||||
"react-addons-perf": "^15.4.0",
|
||||
"react-addons-test-utils": "^15.4.0",
|
||||
"react-addons-test-utils": "^15.6.0",
|
||||
"rimraf": "^2.4.3",
|
||||
"source-map-loader": "^0.1.5",
|
||||
"webpack": "^1.12.14",
|
||||
@@ -147,7 +153,7 @@
|
||||
"build": {
|
||||
"appId": "im.riot.app",
|
||||
"category": "Network",
|
||||
"electronVersion": "1.6.8",
|
||||
"electronVersion": "1.8.3",
|
||||
"//asar=false": "https://github.com/electron-userland/electron-builder/issues/675",
|
||||
"asar": false,
|
||||
"dereference": true,
|
||||
|
||||
@@ -11,7 +11,7 @@ cd `dirname $0`
|
||||
|
||||
for i in matrix-js-sdk matrix-react-sdk
|
||||
do
|
||||
depver=`cat package.json | jq -r .dependencies.\"$i\"`
|
||||
depver=`cat package.json | jq -r .dependencies[\"$i\"]`
|
||||
latestver=`npm show $i version`
|
||||
if [ "$depver" != "$latestver" ]
|
||||
then
|
||||
|
||||
192
res/home-status.html
Normal file
192
res/home-status.html
Normal file
@@ -0,0 +1,192 @@
|
||||
<style type="text/css">
|
||||
|
||||
/* we deliberately inline style here to avoid flash-of-CSS problems, and to avoid
|
||||
* voodoo where we have to set display: none by default
|
||||
*/
|
||||
|
||||
.mx_HomePage_container {
|
||||
text-align: center;
|
||||
display: block ! important;
|
||||
width: 690px;
|
||||
margin: 20px;
|
||||
}
|
||||
|
||||
.mx_HomePage_header {
|
||||
margin-top: 37px;
|
||||
margin-left: 10px;
|
||||
width: 670px;
|
||||
box-sizing: border-box;
|
||||
font-size: 18px;
|
||||
background-color: #fff;
|
||||
box-shadow: 0px 2px 10px 0px rgba(48,55,81,0.05);
|
||||
border-radius: 5px;
|
||||
padding: 20px 80px 20px 80px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.mx_HomePage_header h1 {
|
||||
font-size: 29px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.mx_HomePage_intro h2 {
|
||||
margin-top: 32px;
|
||||
font-size: 25px;
|
||||
color: #49555F;
|
||||
}
|
||||
|
||||
.mx_HomePage_intro {
|
||||
margin: auto;
|
||||
width: 600px;
|
||||
margin-top: 40px;
|
||||
margin-bottom: 40px;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.mx_HomePage_coc {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.mx_HomePage_coc a {
|
||||
color: #4360DF;
|
||||
}
|
||||
|
||||
.mx_HomePage_room, .mx_HomePage_telegram {
|
||||
float: left;
|
||||
background-color: #fff;
|
||||
box-shadow: 0px 2px 10px 0px rgba(48,55,81,0.05);
|
||||
border-radius: 5px;
|
||||
margin: 10px;
|
||||
width: 210px;
|
||||
height: 250px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.mx_HomePage_telegram {
|
||||
background-color: transparent;
|
||||
border: 1px solid rgba(113, 129, 142, 0.2);
|
||||
box-shadow: none;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
font-size: 16px;
|
||||
line-height: 25px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.mx_HomePage_telegram a {
|
||||
text-transform: uppercase;
|
||||
color: #4360DF;
|
||||
font-size: 13px;
|
||||
font-family: PostGrotesk-Medium, Arial, Helvetica, Sans-Serif;
|
||||
font-weight: 600;
|
||||
opacity: 1.0;
|
||||
transition: opacity .2s ease;
|
||||
}
|
||||
|
||||
.mx_HomePage_telegram a:hover {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.mx_HomePage_room .mx_HomePage_icon {
|
||||
margin-top: 24px;
|
||||
margin-bottom: 16px;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
}
|
||||
|
||||
.mx_HomePage_room .mx_HomePage_name {
|
||||
display: block;
|
||||
font-family: PostGrotesk-Medium, Arial, Helvetica, Sans-Serif;
|
||||
font-weight: 600;
|
||||
font-size: 15px;
|
||||
color: #49555F;
|
||||
line-height: 25px;
|
||||
margin: 0px 12px 0px 12px;
|
||||
}
|
||||
|
||||
.mx_HomePage_room .mx_HomePage_desc {
|
||||
flex: 1;
|
||||
display: block;
|
||||
margin: 0px 12px 0px 12px;
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
}
|
||||
|
||||
.mx_HomePage_button {
|
||||
align-self: normal;
|
||||
margin: 12px;
|
||||
border-radius: 8px;
|
||||
border: 1px solid rgba(199, 206, 209, 0.12);
|
||||
background-color: #6CC1F6;
|
||||
font-size: 13px;
|
||||
font-family: PostGrotesk-Medium, Arial, Helvetica, Sans-Serif;
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 1px;
|
||||
color: #fff ! important;
|
||||
cursor: pointer;
|
||||
outline: none;
|
||||
padding: 14px;
|
||||
box-sizing: border-box;
|
||||
padding-left: 1.5em;
|
||||
padding-right: 1.5em;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<div class="mx_HomePage_container">
|
||||
<div class="mx_HomePage_header">
|
||||
<div>
|
||||
<h1>Welcome to Status Community Chat, powered by Riot.</h1>
|
||||
<p>For contributors, developers and Ethereum-enthusiasts who care about the movement for decentralization.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mx_HomePage_intro">
|
||||
<h2>Our rooms</h2>
|
||||
<p>Please abide by the channels discussion categories and remain on topic to the specific category details listed.</p>
|
||||
<p class="mx_HomePage_coc">Before posting please refer to our <a href="https://wiki.status.im/Code_of_conduct">Code of Conduct</a></p>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="mx_HomePage_room">
|
||||
<img class="mx_HomePage_icon" src="themes/status/img/a.png">
|
||||
<span class="mx_HomePage_name">#announcements</span>
|
||||
<span class="mx_HomePage_desc">Company wide announcements.</span>
|
||||
<a class="mx_HomePage_button" href="#/room/#announcements:status.im">Join</a>
|
||||
</div>
|
||||
<div class="mx_HomePage_room">
|
||||
<img class="mx_HomePage_icon" src="themes/status/img/i.png">
|
||||
<span class="mx_HomePage_name">#introductions</span>
|
||||
<span class="mx_HomePage_desc">Newcomer introductions.</span>
|
||||
<a class="mx_HomePage_button" href="#/room/#introductions:status.im">Join</a>
|
||||
</div>
|
||||
<div class="mx_HomePage_room">
|
||||
<img class="mx_HomePage_icon" src="themes/status/img/g.png">
|
||||
<span class="mx_HomePage_name">#general</span>
|
||||
<span class="mx_HomePage_desc">General discussions of Status.</span>
|
||||
<a class="mx_HomePage_button" href="#/room/#general:status.im">Join</a>
|
||||
</div>
|
||||
<div class="mx_HomePage_room">
|
||||
<img class="mx_HomePage_icon" src="themes/status/img/d.png">
|
||||
<span class="mx_HomePage_name">#dev-status</span>
|
||||
<span class="mx_HomePage_desc">Contributing to our codebase? Building a DApp or a chatbot? We're here to help.</span>
|
||||
<a class="mx_HomePage_button" href="#/room/#dev-status:status.im">Join</a>
|
||||
</div>
|
||||
<div class="mx_HomePage_room">
|
||||
<img class="mx_HomePage_icon" src="themes/status/img/n.png">
|
||||
<span class="mx_HomePage_name">#news-articles</span>
|
||||
<span class="mx_HomePage_desc">Share news, articles related to Ethereum or projects you're excited about</span>
|
||||
<a class="mx_HomePage_button" href="#/room/#news-articles:status.im">Join</a>
|
||||
</div>
|
||||
<div class="mx_HomePage_telegram">
|
||||
<p>
|
||||
Interested in market and cryptocurrency type discussions?
|
||||
</p>
|
||||
<a href="https://t.me/StatusNetworkChat">Join Telegram</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -249,7 +249,7 @@
|
||||
<span class="mx_HomePage_desc">_t("Implementing VoIP services with Matrix")</span>
|
||||
</div>
|
||||
<div class="mx_HomePage_room">
|
||||
<a href="#/room/#identity:matrix.org">
|
||||
<a href="#/room/#matrix-identity:matrix.org">
|
||||
<img class="mx_HomePage_icon" src="home/rooms/identity.jpg">
|
||||
<span class="mx_HomePage_name">Matrix Identity</span>
|
||||
</a>
|
||||
|
||||
@@ -7,25 +7,35 @@
|
||||
// a translation in the app (because having a translation with only
|
||||
// 3 strings translated is just frustrating)
|
||||
// This could readily be automated, but it's nice to explicitly
|
||||
// control when we languages are available.
|
||||
// control when new languages are available.
|
||||
const INCLUDE_LANGS = [
|
||||
{'value': 'bg', 'label': 'Български'},
|
||||
{'value': 'ca', 'label': 'Català'},
|
||||
{'value': 'cs', 'label': 'čeština'},
|
||||
{'value': 'da', 'label': 'Dansk'},
|
||||
{'value': 'de_DE', 'label': 'Deutsch'},
|
||||
{'value': 'el', 'label': 'Ελληνικά'},
|
||||
{'value': 'en_EN', 'label': 'English'},
|
||||
{'value': 'en_US', 'label': 'English (US)'},
|
||||
{'value': 'da', 'label': 'Dansk'},
|
||||
{'value': 'el', 'label': 'Ελληνικά'},
|
||||
{'value': 'eo', 'label': 'Esperanto'},
|
||||
{'value': 'nl', 'label': 'Nederlands'},
|
||||
{'value': 'de_DE', 'label': 'Deutsch'},
|
||||
{'value': 'es', 'label': 'Español'},
|
||||
{'value': 'eu', 'label': 'Euskara'},
|
||||
{'value': 'fi', 'label': 'Suomi'},
|
||||
{'value': 'fr', 'label': 'Français'},
|
||||
{'value': 'gl', 'label': 'Galego'},
|
||||
{'value': 'hu', 'label': 'Magyar'},
|
||||
{'value': 'ko', 'label': '한국어'},
|
||||
{'value': 'lv', 'label': 'Latviešu'},
|
||||
{'value': 'nb_NO', 'label': 'Norwegian Bokmål'},
|
||||
{'value': 'nl', 'label': 'Nederlands'},
|
||||
{'value': 'pl', 'label': 'Polski'},
|
||||
{'value': 'pt', 'label': 'Português'},
|
||||
{'value': 'pt_BR', 'label': 'Português do Brasil'},
|
||||
{'value': 'ru', 'label': 'Русский'},
|
||||
{'value': 'sk', 'label': 'Slovenčina'},
|
||||
{'value': 'sr', 'label': 'српски'},
|
||||
{'value': 'sv', 'label': 'Svenska'},
|
||||
{'value': 'es', 'label': 'Español'},
|
||||
{'value': 'te', 'label': 'తెలుగు'},
|
||||
{'value': 'th', 'label': 'ไทย'},
|
||||
{'value': 'tr', 'label': 'Türk'},
|
||||
{'value': 'zh_Hans', 'label': '简体中文'}, // simplified chinese
|
||||
@@ -38,10 +48,11 @@ const INCLUDE_LANGS = [
|
||||
const COPY_LIST = [
|
||||
["res/manifest.json", "webapp"],
|
||||
["res/home.html", "webapp"],
|
||||
["res/home-status.html", "webapp"],
|
||||
["res/home/**", "webapp/home"],
|
||||
["res/{media,vector-icons}/**", "webapp"],
|
||||
["res/flags/*", "webapp/flags/"],
|
||||
["src/skins/vector/{fonts,img}/**", "webapp"],
|
||||
["src/skins/vector/{fonts,img,themes}/**", "webapp"],
|
||||
["node_modules/emojione/assets/svg/*", "webapp/emojione/svg/"],
|
||||
["node_modules/emojione/assets/png/*", "webapp/emojione/png/"],
|
||||
["./config.json", "webapp", { directwatch: 1 }],
|
||||
@@ -126,8 +137,19 @@ function next(i, err) {
|
||||
const reactSdkFile = 'node_modules/matrix-react-sdk/src/i18n/strings/' + source + '.json';
|
||||
const riotWebFile = 'src/i18n/strings/' + source + '.json';
|
||||
|
||||
const translations = {};
|
||||
const makeLang = () => { genLangFile(source, dest) };
|
||||
// XXX: Use a debounce because for some reason if we read the language
|
||||
// file immediately after the FS event is received, the file contents
|
||||
// appears empty. Possibly https://github.com/nodejs/node/issues/6112
|
||||
let makeLangDebouncer;
|
||||
const makeLang = () => {
|
||||
if (makeLangDebouncer) {
|
||||
clearTimeout(makeLangDebouncer);
|
||||
}
|
||||
makeLangDebouncer = setTimeout(() => {
|
||||
genLangFile(source, dest);
|
||||
}, 500);
|
||||
};
|
||||
|
||||
[reactSdkFile, riotWebFile].forEach(function(f) {
|
||||
chokidar.watch(f)
|
||||
.on('add', makeLang)
|
||||
@@ -153,15 +175,23 @@ function genLangFile(lang, dest) {
|
||||
const reactSdkFile = 'node_modules/matrix-react-sdk/src/i18n/strings/' + lang + '.json';
|
||||
const riotWebFile = 'src/i18n/strings/' + lang + '.json';
|
||||
|
||||
const translations = {};
|
||||
let translations = {};
|
||||
[reactSdkFile, riotWebFile].forEach(function(f) {
|
||||
if (fs.existsSync(f)) {
|
||||
Object.assign(
|
||||
translations,
|
||||
JSON.parse(fs.readFileSync(f).toString())
|
||||
);
|
||||
try {
|
||||
Object.assign(
|
||||
translations,
|
||||
JSON.parse(fs.readFileSync(f).toString())
|
||||
);
|
||||
} catch (e) {
|
||||
console.error("Failed: " + f, e);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
translations = weblateToCounterpart(translations);
|
||||
|
||||
fs.writeFileSync(dest + lang + '.json', JSON.stringify(translations, null, 4));
|
||||
if (verbose) {
|
||||
console.log("Generated language file: " + lang);
|
||||
@@ -190,5 +220,39 @@ function genLangList() {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert translation key from weblate format
|
||||
* (which only supports a single level) to counterpart
|
||||
* which requires object values for 'count' translations.
|
||||
*
|
||||
* eg.
|
||||
* "there are %(count)s badgers|one": "a badger",
|
||||
* "there are %(count)s badgers|other": "%(count)s badgers"
|
||||
* becomes
|
||||
* "there are %(count)s badgers": {
|
||||
* "one": "a badger",
|
||||
* "other": "%(count)s badgers"
|
||||
* }
|
||||
*/
|
||||
function weblateToCounterpart(inTrs) {
|
||||
const outTrs = {};
|
||||
|
||||
for (const key of Object.keys(inTrs)) {
|
||||
const keyParts = key.split('|', 2);
|
||||
if (keyParts.length === 2) {
|
||||
let obj = outTrs[keyParts[0]];
|
||||
if (obj === undefined) {
|
||||
obj = {};
|
||||
outTrs[keyParts[0]] = obj;
|
||||
}
|
||||
obj[keyParts[1]] = inTrs[key];
|
||||
} else {
|
||||
outTrs[key] = inTrs[key];
|
||||
}
|
||||
}
|
||||
|
||||
return outTrs;
|
||||
}
|
||||
|
||||
genLangList();
|
||||
next(0);
|
||||
|
||||
@@ -13,6 +13,8 @@ import os.path
|
||||
import subprocess
|
||||
import sys
|
||||
import tarfile
|
||||
import shutil
|
||||
import glob
|
||||
|
||||
try:
|
||||
# python3
|
||||
@@ -48,11 +50,12 @@ def move_bundles(source, dest):
|
||||
for f in os.listdir(source):
|
||||
dst = os.path.join(dest, f)
|
||||
if os.path.exists(dst):
|
||||
raise DeployException(
|
||||
"Not deploying. The bundle includes '%s' which we have previously deployed."
|
||||
print (
|
||||
"Skipping bundle. The bundle includes '%s' which we have previously deployed."
|
||||
% f
|
||||
)
|
||||
renames[os.path.join(source, f)] = dst
|
||||
else:
|
||||
renames[os.path.join(source, f)] = dst
|
||||
|
||||
for (src, dst) in renames.iteritems():
|
||||
print ("Move %s -> %s" % (src, dst))
|
||||
@@ -63,7 +66,8 @@ class Deployer:
|
||||
self.packages_path = "."
|
||||
self.bundles_path = None
|
||||
self.should_clean = False
|
||||
self.config_location = None
|
||||
# filename -> symlink path e.g 'config.localhost.json' => '../localhost/config.json'
|
||||
self.symlink_paths = {}
|
||||
self.verify_signature = True
|
||||
|
||||
def deploy(self, tarball, extract_path):
|
||||
@@ -95,19 +99,20 @@ class Deployer:
|
||||
|
||||
print ("Extracted into: %s" % extracted_dir)
|
||||
|
||||
if self.config_location:
|
||||
create_relative_symlink(
|
||||
target=self.config_location,
|
||||
linkname=os.path.join(extracted_dir, 'config.json')
|
||||
)
|
||||
if self.symlink_paths:
|
||||
for link_path, file_path in self.symlink_paths.iteritems():
|
||||
create_relative_symlink(
|
||||
target=file_path,
|
||||
linkname=os.path.join(extracted_dir, link_path)
|
||||
)
|
||||
|
||||
if self.bundles_path:
|
||||
extracted_bundles = os.path.join(extracted_dir, 'bundles')
|
||||
move_bundles(source=extracted_bundles, dest=self.bundles_path)
|
||||
|
||||
# replace the (hopefully now empty) extracted_bundles dir with a
|
||||
# symlink to the common dir.
|
||||
os.rmdir(extracted_bundles)
|
||||
# replace the extracted_bundles dir (which may not be empty if some
|
||||
# bundles were skipped) with a symlink to the common dir.
|
||||
shutil.rmtree(extracted_bundles)
|
||||
create_relative_symlink(
|
||||
target=self.bundles_path,
|
||||
linkname=extracted_bundles,
|
||||
@@ -161,9 +166,10 @@ if __name__ == "__main__":
|
||||
)
|
||||
)
|
||||
parser.add_argument(
|
||||
"--config", nargs='?', default='./config.json', help=(
|
||||
"Write a symlink at config.json in the extracted tarball to this \
|
||||
location. (Default: '%(default)s')"
|
||||
"--include", nargs='*', default='./config*.json', help=(
|
||||
"Symlink these files into the root of the deployed tarball. \
|
||||
Useful for config files and home pages. Supports glob syntax. \
|
||||
(Default: '%(default)s')"
|
||||
)
|
||||
)
|
||||
parser.add_argument(
|
||||
@@ -178,6 +184,8 @@ if __name__ == "__main__":
|
||||
deployer.packages_path = args.packages_dir
|
||||
deployer.bundles_path = args.bundles_dir
|
||||
deployer.should_clean = args.clean
|
||||
deployer.config_location = args.config
|
||||
|
||||
for include in args.include:
|
||||
deployer.symlink_paths.update({ os.path.basename(pth): pth for pth in glob.iglob(include) })
|
||||
|
||||
deployer.deploy(args.tarball, args.extract_path)
|
||||
|
||||
@@ -94,17 +94,20 @@ distdir="$builddir/electron_app/dist"
|
||||
pubdir="$projdir/electron_app/pub"
|
||||
rm -r "$pubdir" || true
|
||||
mkdir -p "$pubdir"
|
||||
rm -r "$projdir/electron_app/dist" || true
|
||||
mkdir -p "$projdir/electron_app/dist/unsigned/"
|
||||
|
||||
# Install packages: what the user downloads the first time,
|
||||
# (DMGs for mac, exe installer for windows)
|
||||
mkdir -p "$pubdir/install/macos"
|
||||
cp $distdir/mac/*.dmg "$pubdir/install/macos/"
|
||||
|
||||
# Windows installers go to the dist dir because they need signing
|
||||
mkdir -p "$pubdir/install/win32/ia32/"
|
||||
cp $distdir/win-ia32/*.exe "$pubdir/install/win32/ia32/"
|
||||
cp $distdir/win-ia32/*.exe "$projdir/electron_app/dist/unsigned/"
|
||||
|
||||
mkdir -p "$pubdir/install/win32/x64/"
|
||||
cp $distdir/win/*.exe "$pubdir/install/win32/x64/"
|
||||
cp $distdir/win/*.exe "$projdir/electron_app/dist/unsigned/"
|
||||
|
||||
# Packages for auto-update
|
||||
mkdir -p "$pubdir/update/macos"
|
||||
@@ -120,11 +123,11 @@ cp $distdir/win/*.nupkg "$pubdir/update/win32/x64/"
|
||||
cp $distdir/win/RELEASES "$pubdir/update/win32/x64/"
|
||||
|
||||
# Move the debs to the main project dir's dist folder
|
||||
rm -r "$projdir/electron_app/dist" || true
|
||||
mkdir -p "$projdir/electron_app/dist"
|
||||
cp $distdir/*.deb "$projdir/electron_app/dist/"
|
||||
|
||||
rm -rf "$builddir"
|
||||
|
||||
echo "Riot Desktop is ready to go in $pubdir: this directory can be hosted on your web server."
|
||||
echo "Unsigned Windows installers have been placed in electron_app/dist/unsigned/ - sign them,"
|
||||
echo "or just copy them to "$pubdir/install/win32/\<arch\>/""
|
||||
echo "Once you've done this, $pubdir can be hosted on your web server."
|
||||
echo "deb archives are in electron_app/dist/ - these should be added into your debian repository"
|
||||
|
||||
@@ -49,42 +49,47 @@ function dodep() {
|
||||
[ "$curbranch" != 'develop' ] && clone $org $repo develop
|
||||
} || return $?
|
||||
|
||||
(
|
||||
cd $repo
|
||||
echo "$repo set to branch "`git rev-parse --abbrev-ref HEAD`
|
||||
)
|
||||
echo "$repo set to branch "`git -C "$repo" rev-parse --abbrev-ref HEAD`
|
||||
|
||||
mkdir -p node_modules
|
||||
rm -r "node_modules/$repo" 2>/dev/null || true
|
||||
ln -sv "../$repo" node_modules/
|
||||
|
||||
(
|
||||
cd $repo
|
||||
npm install
|
||||
)
|
||||
}
|
||||
|
||||
##############################
|
||||
|
||||
echo -en 'travis_fold:start:matrix-js-sdk\r'
|
||||
echo 'Setting up matrix-js-sdk'
|
||||
|
||||
dodep matrix-org matrix-js-sdk
|
||||
(
|
||||
cd node_modules/matrix-js-sdk
|
||||
npm install
|
||||
)
|
||||
|
||||
echo -en 'travis_fold:end:matrix-js-sdk\r'
|
||||
|
||||
##############################
|
||||
|
||||
echo -en 'travis_fold:start:matrix-react-sdk\r'
|
||||
echo 'Setting up matrix-react-sdk'
|
||||
|
||||
dodep matrix-org matrix-react-sdk
|
||||
|
||||
mkdir -p node_modules/matrix-react-sdk/node_modules
|
||||
# replace the version of js-sdk that got pulled into react-sdk with a symlink
|
||||
# to our version. Make sure to do this *after* doing 'npm i' in react-sdk,
|
||||
# otherwise npm helpfully moves another-json from matrix-js-sdk/node_modules
|
||||
# into matrix-react-sdk/node_modules.
|
||||
#
|
||||
# (note this matches the instructions in the README.)
|
||||
rm -r node_modules/matrix-react-sdk/node_modules/matrix-js-sdk
|
||||
ln -s ../../matrix-js-sdk node_modules/matrix-react-sdk/node_modules/
|
||||
|
||||
(
|
||||
cd node_modules/matrix-react-sdk
|
||||
npm install
|
||||
)
|
||||
|
||||
echo -en 'travis_fold:end:matrix-react-sdk\r'
|
||||
|
||||
##############################
|
||||
|
||||
# Link the reskindex binary in place: if we used npm link,
|
||||
# npm would do this for us, but we don't because we'd have
|
||||
# to define the npm prefix somewhere so it could put the
|
||||
|
||||
@@ -8,8 +8,11 @@ nvm use 6
|
||||
|
||||
set -x
|
||||
|
||||
# check out corresponding branches of dependencies
|
||||
`dirname $0`/fetch-develop.deps.sh
|
||||
# check out corresponding branches of dependencies.
|
||||
#
|
||||
# clone the deps with depth 1: we know we will only ever need that one
|
||||
# commit.
|
||||
`dirname $0`/fetch-develop.deps.sh --depth 1
|
||||
|
||||
npm install
|
||||
|
||||
|
||||
@@ -13,7 +13,9 @@
|
||||
from __future__ import print_function
|
||||
import json, requests, tarfile, argparse, os, errno
|
||||
import time
|
||||
import traceback
|
||||
from urlparse import urljoin
|
||||
import glob
|
||||
|
||||
from flask import Flask, jsonify, request, abort
|
||||
|
||||
@@ -124,6 +126,7 @@ def fetch_jenkins_build(job_name, build_num):
|
||||
try:
|
||||
extracted_dir = deploy_tarball(tar_gz_url, build_dir)
|
||||
except DeployException as e:
|
||||
traceback.print_exc()
|
||||
abort(400, e.message)
|
||||
|
||||
create_symlink(source=extracted_dir, linkname=arg_symlink)
|
||||
@@ -185,10 +188,13 @@ if __name__ == "__main__":
|
||||
to the /vector directory INSIDE the tarball."
|
||||
)
|
||||
)
|
||||
|
||||
# --include ../../config.json ./localhost.json homepages/*
|
||||
parser.add_argument(
|
||||
"--config", dest="config", help=(
|
||||
"Write a symlink to config.json in the extracted tarball. \
|
||||
To this location."
|
||||
"--include", nargs='*', default='./config*.json', help=(
|
||||
"Symlink these files into the root of the deployed tarball. \
|
||||
Useful for config files and home pages. Supports glob syntax. \
|
||||
(Default: '%(default)s')"
|
||||
)
|
||||
)
|
||||
parser.add_argument(
|
||||
@@ -212,7 +218,10 @@ if __name__ == "__main__":
|
||||
deployer = Deployer()
|
||||
deployer.bundles_path = args.bundles_dir
|
||||
deployer.should_clean = args.clean
|
||||
deployer.config_location = args.config
|
||||
|
||||
for include in args.include:
|
||||
deployer.symlink_paths.update({ os.path.basename(pth): pth for pth in glob.iglob(include) })
|
||||
|
||||
|
||||
# we don't pgp-sign jenkins artifacts; instead we rely on HTTPS access to
|
||||
# the jenkins server (and the jenkins server not being compromised and/or
|
||||
@@ -225,13 +234,13 @@ if __name__ == "__main__":
|
||||
deploy_tarball(args.tarball_uri, build_dir)
|
||||
else:
|
||||
print(
|
||||
"Listening on port %s. Extracting to %s%s. Symlinking to %s. Jenkins URL: %s. Config location: %s" %
|
||||
"Listening on port %s. Extracting to %s%s. Symlinking to %s. Jenkins URL: %s. Include files: %s" %
|
||||
(args.port,
|
||||
arg_extract_path,
|
||||
" (clean after)" if deployer.should_clean else "",
|
||||
arg_symlink,
|
||||
arg_jenkins_url,
|
||||
deployer.config_location,
|
||||
deployer.symlink_paths,
|
||||
)
|
||||
)
|
||||
app.run(host="0.0.0.0", port=args.port, debug=True)
|
||||
|
||||
@@ -16,7 +16,7 @@ limitations under the License.
|
||||
|
||||
"use strict";
|
||||
|
||||
var q = require("q");
|
||||
import Promise from 'bluebird';
|
||||
var Matrix = require("matrix-js-sdk");
|
||||
var Room = Matrix.Room;
|
||||
var CallHandler = require('matrix-react-sdk/lib/CallHandler');
|
||||
@@ -53,11 +53,11 @@ ConferenceCall.prototype._joinConferenceUser = function() {
|
||||
// Make sure the conference user is in the group chat room
|
||||
var groupRoom = this.client.getRoom(this.groupRoomId);
|
||||
if (!groupRoom) {
|
||||
return q.reject("Bad group room ID");
|
||||
return Promise.reject("Bad group room ID");
|
||||
}
|
||||
var member = groupRoom.getMember(this.confUserId);
|
||||
if (member && member.membership === "join") {
|
||||
return q();
|
||||
return Promise.resolve();
|
||||
}
|
||||
return this.client.invite(this.groupRoomId, this.confUserId);
|
||||
};
|
||||
@@ -75,7 +75,7 @@ ConferenceCall.prototype._getConferenceUserRoom = function() {
|
||||
}
|
||||
}
|
||||
if (confRoom) {
|
||||
return q(confRoom);
|
||||
return Promise.resolve(confRoom);
|
||||
}
|
||||
return this.client.createRoom({
|
||||
preset: "private_chat",
|
||||
|
||||
@@ -19,9 +19,9 @@ import React from 'react';
|
||||
import ReactDOM from 'react-dom';
|
||||
import sdk from 'matrix-react-sdk';
|
||||
import dis from 'matrix-react-sdk/lib/dispatcher';
|
||||
import AccessibleButton from 'matrix-react-sdk/lib/components/views/elements/AccessibleButton';
|
||||
import Velocity from 'velocity-vector';
|
||||
import 'velocity-vector/velocity.ui';
|
||||
import SettingsStore from "matrix-react-sdk/lib/settings/SettingsStore";
|
||||
|
||||
const CALLOUT_ANIM_DURATION = 1000;
|
||||
|
||||
@@ -168,6 +168,10 @@ module.exports = React.createClass({
|
||||
const RoomDirectoryButton = sdk.getComponent('elements.RoomDirectoryButton');
|
||||
const CreateRoomButton = sdk.getComponent('elements.CreateRoomButton');
|
||||
const SettingsButton = sdk.getComponent('elements.SettingsButton');
|
||||
const GroupsButton = sdk.getComponent('elements.GroupsButton');
|
||||
|
||||
const groupsButton = SettingsStore.getValue("TagPanel.disableTagPanel") ?
|
||||
<GroupsButton tooltip={true} /> : null;
|
||||
|
||||
return (
|
||||
<div className="mx_BottomLeftMenu">
|
||||
@@ -182,11 +186,12 @@ module.exports = React.createClass({
|
||||
<div ref={this._collectCreateRoomButton}>
|
||||
<CreateRoomButton tooltip={true} />
|
||||
</div>
|
||||
{ groupsButton }
|
||||
<span className="mx_BottomLeftMenu_settings">
|
||||
<SettingsButton tooltip={true} />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
@@ -17,7 +17,7 @@ limitations under the License.
|
||||
'use strict';
|
||||
|
||||
var React = require('react');
|
||||
import { _t, _tJsx } from 'matrix-react-sdk/lib/languageHandler';
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'CompatibilityPage',
|
||||
@@ -40,30 +40,24 @@ module.exports = React.createClass({
|
||||
return (
|
||||
<div className="mx_CompatibilityPage">
|
||||
<div className="mx_CompatibilityPage_box">
|
||||
<p>{ _tJsx("Sorry, your browser is <b>not</b> able to run Riot.", /<b>(.*?)<\/b>/, (sub) => <b>{sub}</b>) } </p>
|
||||
<p>{ _t("Sorry, your browser is <b>not</b> able to run Riot.", {}, { 'b': (sub) => <b>{sub}</b> }) } </p>
|
||||
<p>
|
||||
{ _t("Riot uses many advanced browser features, some of which are not available or experimental in your current browser.") }
|
||||
</p>
|
||||
<p>
|
||||
{ _tJsx('Please install <a href="https://www.google.com/chrome">Chrome</a> or <a href="https://getfirefox.com">Firefox</a> for the best experience.',
|
||||
[
|
||||
/<a href="https:\/\/www.google.com\/chrome">(.*?)<\/a>/,
|
||||
/<a href="https:\/\/getfirefox.com">(.*?)<\/a>/,
|
||||
],
|
||||
[
|
||||
(sub) => <a href="https://www.google.com/chrome">{sub}</a>,
|
||||
(sub) => <a href="https://getfirefox.com">{sub}</a>,
|
||||
]
|
||||
{ _t('Please install <chromeLink>Chrome</chromeLink> or <firefoxLink>Firefox</firefoxLink> for the best experience.',
|
||||
{},
|
||||
{
|
||||
'chromeLink': (sub) => <a href="https://www.google.com/chrome">{sub}</a>,
|
||||
'firefoxLink': (sub) => <a href="https://getfirefox.com">{sub}</a>,
|
||||
},
|
||||
)}
|
||||
{ _tJsx('<a href="http://apple.com/safari">Safari</a> and <a href="http://opera.com">Opera</a> work too.',
|
||||
[
|
||||
/<a href="http:\/\/apple\.com\/safari">(.*?)<\/a>/,
|
||||
/<a href="http:\/\/opera\.com">(.*?)<\/a>/,
|
||||
],
|
||||
[
|
||||
(sub) => <a href="http://apple.com/safari">{sub}</a>,
|
||||
(sub) => <a href="http://opera.com">{sub}</a>,
|
||||
]
|
||||
{ _t('<safariLink>Safari</safariLink> and <operaLink>Opera</operaLink> work too.',
|
||||
{},
|
||||
{
|
||||
'safariLink': (sub) => <a href="http://apple.com/safari">{sub}</a>,
|
||||
'operaLink': (sub) => <a href="http://opera.com">{sub}</a>,
|
||||
},
|
||||
)}
|
||||
</p>
|
||||
<p>
|
||||
|
||||
@@ -52,6 +52,8 @@ module.exports = React.createClass({
|
||||
},
|
||||
|
||||
componentWillMount: function() {
|
||||
this._unmounted = false;
|
||||
|
||||
if (this.props.teamToken && this.props.teamServerUrl) {
|
||||
this.setState({
|
||||
iframeSrc: `${this.props.teamServerUrl}/static/${this.props.teamToken}/home.html`
|
||||
@@ -67,9 +69,14 @@ module.exports = React.createClass({
|
||||
request(
|
||||
{ method: "GET", url: src },
|
||||
(err, response, body) => {
|
||||
if (this._unmounted) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (err || response.status < 200 || response.status >= 300) {
|
||||
console.log(err);
|
||||
this.setState({ page: "Couldn't load home page" });
|
||||
console.warn(`Error loading home page: ${err}`);
|
||||
this.setState({ page: _t("Couldn't load home page") });
|
||||
return;
|
||||
}
|
||||
|
||||
body = body.replace(/_t\(['"]([\s\S]*?)['"]\)/mg, (match, g1)=>this.translate(g1));
|
||||
@@ -79,6 +86,10 @@ module.exports = React.createClass({
|
||||
}
|
||||
},
|
||||
|
||||
componentWillUnmount: function() {
|
||||
this._unmounted = true;
|
||||
},
|
||||
|
||||
render: function() {
|
||||
if (this.state.iframeSrc) {
|
||||
return (
|
||||
|
||||
@@ -16,64 +16,145 @@ limitations under the License.
|
||||
|
||||
'use strict';
|
||||
|
||||
var React = require('react');
|
||||
var DragDropContext = require('react-dnd').DragDropContext;
|
||||
var HTML5Backend = require('react-dnd-html5-backend');
|
||||
var sdk = require('matrix-react-sdk')
|
||||
var dis = require('matrix-react-sdk/lib/dispatcher');
|
||||
import MatrixClientPeg from 'matrix-react-sdk/lib/MatrixClientPeg';
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import classNames from 'classnames';
|
||||
import { MatrixClient } from 'matrix-js-sdk';
|
||||
import { KeyCode } from 'matrix-react-sdk/lib/Keyboard';
|
||||
import sdk from 'matrix-react-sdk';
|
||||
import dis from 'matrix-react-sdk/lib/dispatcher';
|
||||
import VectorConferenceHandler from '../../VectorConferenceHandler';
|
||||
|
||||
var VectorConferenceHandler = require('../../VectorConferenceHandler');
|
||||
var CallHandler = require("matrix-react-sdk/lib/CallHandler");
|
||||
import SettingsStore from 'matrix-react-sdk/lib/settings/SettingsStore';
|
||||
|
||||
import AccessibleButton from 'matrix-react-sdk/lib/components/views/elements/AccessibleButton';
|
||||
|
||||
var LeftPanel = React.createClass({
|
||||
displayName: 'LeftPanel',
|
||||
|
||||
// NB. If you add props, don't forget to update
|
||||
// shouldComponentUpdate!
|
||||
propTypes: {
|
||||
collapsed: React.PropTypes.bool.isRequired,
|
||||
collapsed: PropTypes.bool.isRequired,
|
||||
},
|
||||
|
||||
contextTypes: {
|
||||
matrixClient: PropTypes.instanceOf(MatrixClient),
|
||||
},
|
||||
|
||||
getInitialState: function() {
|
||||
return {
|
||||
showCallElement: null,
|
||||
searchFilter: '',
|
||||
};
|
||||
},
|
||||
|
||||
componentDidMount: function() {
|
||||
this.dispatcherRef = dis.register(this.onAction);
|
||||
componentWillMount: function() {
|
||||
this.focusedElement = null;
|
||||
},
|
||||
|
||||
componentWillReceiveProps: function(newProps) {
|
||||
this._recheckCallElement(newProps.selectedRoom);
|
||||
shouldComponentUpdate: function(nextProps, nextState) {
|
||||
// MatrixChat will update whenever the user switches
|
||||
// rooms, but propagating this change all the way down
|
||||
// the react tree is quite slow, so we cut this off
|
||||
// here. The RoomTiles listen for the room change
|
||||
// events themselves to know when to update.
|
||||
// We just need to update if any of these things change.
|
||||
if (
|
||||
this.props.collapsed !== nextProps.collapsed ||
|
||||
this.props.disabled !== nextProps.disabled
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (this.state.searchFilter !== nextState.searchFilter) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
},
|
||||
|
||||
componentWillUnmount: function() {
|
||||
dis.unregister(this.dispatcherRef);
|
||||
_onFocus: function(ev) {
|
||||
this.focusedElement = ev.target;
|
||||
},
|
||||
|
||||
onAction: function(payload) {
|
||||
switch (payload.action) {
|
||||
// listen for call state changes to prod the render method, which
|
||||
// may hide the global CallView if the call it is tracking is dead
|
||||
case 'call_state':
|
||||
this._recheckCallElement(this.props.selectedRoom);
|
||||
_onBlur: function(ev) {
|
||||
this.focusedElement = null;
|
||||
},
|
||||
|
||||
_onKeyDown: function(ev) {
|
||||
if (!this.focusedElement) return;
|
||||
let handled = false;
|
||||
|
||||
switch (ev.keyCode) {
|
||||
case KeyCode.UP:
|
||||
this._onMoveFocus(true);
|
||||
handled = true;
|
||||
break;
|
||||
case KeyCode.DOWN:
|
||||
this._onMoveFocus(false);
|
||||
handled = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if (handled) {
|
||||
ev.stopPropagation();
|
||||
ev.preventDefault();
|
||||
}
|
||||
},
|
||||
|
||||
_recheckCallElement: function(selectedRoomId) {
|
||||
// if we aren't viewing a room with an ongoing call, but there is an
|
||||
// active call, show the call element - we need to do this to make
|
||||
// audio/video not crap out
|
||||
var activeCall = CallHandler.getAnyActiveCall();
|
||||
var callForRoom = CallHandler.getCallForRoom(selectedRoomId);
|
||||
var showCall = (activeCall && activeCall.call_state === 'connected' && !callForRoom);
|
||||
this.setState({
|
||||
showCallElement: showCall
|
||||
});
|
||||
_onMoveFocus: function(up) {
|
||||
var element = this.focusedElement;
|
||||
|
||||
// unclear why this isn't needed
|
||||
// var descending = (up == this.focusDirection) ? this.focusDescending : !this.focusDescending;
|
||||
// this.focusDirection = up;
|
||||
|
||||
var descending = false; // are we currently descending or ascending through the DOM tree?
|
||||
var classes;
|
||||
|
||||
do {
|
||||
var child = up ? element.lastElementChild : element.firstElementChild;
|
||||
var sibling = up ? element.previousElementSibling : element.nextElementSibling;
|
||||
|
||||
if (descending) {
|
||||
if (child) {
|
||||
element = child;
|
||||
}
|
||||
else if (sibling) {
|
||||
element = sibling;
|
||||
}
|
||||
else {
|
||||
descending = false;
|
||||
element = element.parentElement;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (sibling) {
|
||||
element = sibling;
|
||||
descending = true;
|
||||
}
|
||||
else {
|
||||
element = element.parentElement;
|
||||
}
|
||||
}
|
||||
|
||||
if (element) {
|
||||
classes = element.classList;
|
||||
if (classes.contains("mx_LeftPanel")) { // we hit the top
|
||||
element = up ? element.lastElementChild : element.firstElementChild;
|
||||
descending = true;
|
||||
}
|
||||
}
|
||||
|
||||
} while(element && !(
|
||||
classes.contains("mx_RoomTile") ||
|
||||
classes.contains("mx_SearchBox_search") ||
|
||||
classes.contains("mx_RoomSubList_ellipsis")));
|
||||
|
||||
if (element) {
|
||||
element.focus();
|
||||
this.focusedElement = element;
|
||||
this.focusedDescending = descending;
|
||||
}
|
||||
},
|
||||
|
||||
onHideClick: function() {
|
||||
@@ -82,62 +163,64 @@ var LeftPanel = React.createClass({
|
||||
});
|
||||
},
|
||||
|
||||
onCallViewClick: function() {
|
||||
var call = CallHandler.getAnyActiveCall();
|
||||
if (call) {
|
||||
dis.dispatch({
|
||||
action: 'view_room',
|
||||
room_id: call.groupRoomId || call.roomId,
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
onSearch: function(term) {
|
||||
this.setState({ searchFilter: term });
|
||||
},
|
||||
|
||||
render: function() {
|
||||
var RoomList = sdk.getComponent('rooms.RoomList');
|
||||
var BottomLeftMenu = sdk.getComponent('structures.BottomLeftMenu');
|
||||
collectRoomList: function(ref) {
|
||||
this._roomList = ref;
|
||||
},
|
||||
|
||||
var topBox;
|
||||
if (MatrixClientPeg.get().isGuest()) {
|
||||
var LoginBox = sdk.getComponent('structures.LoginBox');
|
||||
render: function() {
|
||||
const RoomList = sdk.getComponent('rooms.RoomList');
|
||||
const TagPanel = sdk.getComponent('structures.TagPanel');
|
||||
const BottomLeftMenu = sdk.getComponent('structures.BottomLeftMenu');
|
||||
const CallPreview = sdk.getComponent('voip.CallPreview');
|
||||
|
||||
let topBox;
|
||||
if (this.context.matrixClient.isGuest()) {
|
||||
const LoginBox = sdk.getComponent('structures.LoginBox');
|
||||
topBox = <LoginBox collapsed={ this.props.collapsed }/>;
|
||||
}
|
||||
else {
|
||||
var SearchBox = sdk.getComponent('structures.SearchBox');
|
||||
} else {
|
||||
const SearchBox = sdk.getComponent('structures.SearchBox');
|
||||
topBox = <SearchBox collapsed={ this.props.collapsed } onSearch={ this.onSearch } />;
|
||||
}
|
||||
|
||||
var classes = "mx_LeftPanel mx_fadable";
|
||||
if (this.props.collapsed) {
|
||||
classes += " collapsed";
|
||||
}
|
||||
const classes = classNames(
|
||||
"mx_LeftPanel",
|
||||
{
|
||||
"collapsed": this.props.collapsed,
|
||||
},
|
||||
);
|
||||
|
||||
var callPreview;
|
||||
if (this.state.showCallElement && !this.props.collapsed) {
|
||||
var CallView = sdk.getComponent('voip.CallView');
|
||||
callPreview = (
|
||||
<CallView
|
||||
className="mx_LeftPanel_callView" showVoice={true} onClick={this.onCallViewClick}
|
||||
ConferenceHandler={VectorConferenceHandler} />
|
||||
);
|
||||
}
|
||||
const tagPanelEnabled = !SettingsStore.getValue("TagPanel.disableTagPanel");
|
||||
const tagPanel = tagPanelEnabled ? <TagPanel /> : <div />;
|
||||
|
||||
const containerClasses = classNames(
|
||||
"mx_LeftPanel_container", "mx_fadable",
|
||||
{
|
||||
"mx_LeftPanel_container_collapsed": this.props.collapsed,
|
||||
"mx_LeftPanel_container_hasTagPanel": tagPanelEnabled,
|
||||
"mx_fadable_faded": this.props.disabled,
|
||||
},
|
||||
);
|
||||
|
||||
return (
|
||||
<aside className={classes} style={{ opacity: this.props.opacity }}>
|
||||
{ topBox }
|
||||
{ callPreview }
|
||||
<RoomList
|
||||
selectedRoom={this.props.selectedRoom}
|
||||
collapsed={this.props.collapsed}
|
||||
searchFilter={this.state.searchFilter}
|
||||
ConferenceHandler={VectorConferenceHandler} />
|
||||
<BottomLeftMenu collapsed={this.props.collapsed}/>
|
||||
</aside>
|
||||
<div className={containerClasses}>
|
||||
{ tagPanel }
|
||||
<aside className={classes} onKeyDown={ this._onKeyDown } onFocus={ this._onFocus } onBlur={ this._onBlur }>
|
||||
{ topBox }
|
||||
<CallPreview ConferenceHandler={VectorConferenceHandler} />
|
||||
<RoomList
|
||||
ref={this.collectRoomList}
|
||||
collapsed={this.props.collapsed}
|
||||
searchFilter={this.state.searchFilter}
|
||||
ConferenceHandler={VectorConferenceHandler} />
|
||||
<BottomLeftMenu collapsed={this.props.collapsed}/>
|
||||
</aside>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = DragDropContext(HTML5Backend)(LeftPanel);
|
||||
module.exports = LeftPanel;
|
||||
|
||||
@@ -84,7 +84,7 @@ module.exports = React.createClass({
|
||||
|
||||
var self = this;
|
||||
return (
|
||||
<div className="mx_SearchBox">
|
||||
<div className="mx_SearchBox mx_LoginBox">
|
||||
{ loginButton }
|
||||
{ toggleCollapse }
|
||||
</div>
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
/*
|
||||
Copyright 2015, 2016 OpenMarket Ltd
|
||||
Copyright 2017 Vector Creations Ltd
|
||||
Copyright 2017 New Vector Ltd
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
@@ -14,75 +16,143 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import classNames from 'classnames';
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
import sdk from 'matrix-react-sdk';
|
||||
import Matrix from "matrix-js-sdk";
|
||||
import dis from 'matrix-react-sdk/lib/dispatcher';
|
||||
import MatrixClientPeg from 'matrix-react-sdk/lib/MatrixClientPeg';
|
||||
import { MatrixClient } from 'matrix-js-sdk';
|
||||
import Analytics from 'matrix-react-sdk/lib/Analytics';
|
||||
import rate_limited_func from 'matrix-react-sdk/lib/ratelimitedfunc';
|
||||
import Modal from 'matrix-react-sdk/lib/Modal';
|
||||
import RateLimitedFunc from 'matrix-react-sdk/lib/ratelimitedfunc';
|
||||
import AccessibleButton from 'matrix-react-sdk/lib/components/views/elements/AccessibleButton';
|
||||
import { showGroupInviteDialog, showGroupAddRoomDialog } from 'matrix-react-sdk/lib/GroupAddressPicker';
|
||||
import GroupStoreCache from 'matrix-react-sdk/lib/stores/GroupStoreCache';
|
||||
|
||||
import { formatCount } from 'matrix-react-sdk/lib/utils/FormattingUtils';
|
||||
|
||||
class HeaderButton extends React.Component {
|
||||
constructor() {
|
||||
super();
|
||||
this.onClick = this.onClick.bind(this);
|
||||
}
|
||||
|
||||
onClick(ev) {
|
||||
Analytics.trackEvent(...this.props.analytics);
|
||||
dis.dispatch({
|
||||
action: 'view_right_panel_phase',
|
||||
phase: this.props.clickPhase,
|
||||
});
|
||||
}
|
||||
|
||||
render() {
|
||||
const TintableSvg = sdk.getComponent("elements.TintableSvg");
|
||||
const AccessibleButton = sdk.getComponent("elements.AccessibleButton");
|
||||
|
||||
return <AccessibleButton
|
||||
aria-label={this.props.title}
|
||||
title={this.props.title}
|
||||
className="mx_RightPanel_headerButton"
|
||||
onClick={this.onClick} >
|
||||
|
||||
<div className="mx_RightPanel_headerButton_badge">
|
||||
{ this.props.badge ? this.props.badge : <span> </span> }
|
||||
</div>
|
||||
<TintableSvg src={this.props.iconSrc} width="25" height="25" />
|
||||
{ this.props.isHighlighted ? <div className="mx_RightPanel_headerButton_highlight" /> : <div /> }
|
||||
|
||||
</AccessibleButton>;
|
||||
}
|
||||
}
|
||||
|
||||
HeaderButton.propTypes = {
|
||||
// Whether this button is highlighted
|
||||
isHighlighted: PropTypes.bool.isRequired,
|
||||
// The phase to swap to when the button is clicked
|
||||
clickPhase: PropTypes.string.isRequired,
|
||||
// The source file of the icon to display
|
||||
iconSrc: PropTypes.string.isRequired,
|
||||
|
||||
// The badge to display above the icon
|
||||
badge: PropTypes.node,
|
||||
// The parameters to track the click event
|
||||
analytics: PropTypes.arrayOf(PropTypes.string).isRequired,
|
||||
|
||||
// Button title
|
||||
title: PropTypes.string.isRequired,
|
||||
};
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'RightPanel',
|
||||
|
||||
propTypes: {
|
||||
userId: React.PropTypes.string, // if showing an orphaned MemberInfo page, this is set
|
||||
// TODO: We're trying to move away from these being props, but we need to know
|
||||
// whether we should be displaying a room or group member list
|
||||
roomId: React.PropTypes.string, // if showing panels for a given room, this is set
|
||||
groupId: React.PropTypes.string, // if showing panels for a given group, this is set
|
||||
collapsed: React.PropTypes.bool, // currently unused property to request for a minimized view of the panel
|
||||
},
|
||||
|
||||
contextTypes: {
|
||||
matrixClient: PropTypes.instanceOf(MatrixClient),
|
||||
},
|
||||
|
||||
Phase: {
|
||||
MemberList: 'MemberList',
|
||||
RoomMemberList: 'RoomMemberList',
|
||||
GroupMemberList: 'GroupMemberList',
|
||||
GroupRoomList: 'GroupRoomList',
|
||||
GroupRoomInfo: 'GroupRoomInfo',
|
||||
FilePanel: 'FilePanel',
|
||||
NotificationPanel: 'NotificationPanel',
|
||||
MemberInfo: 'MemberInfo',
|
||||
RoomMemberInfo: 'RoomMemberInfo',
|
||||
GroupMemberInfo: 'GroupMemberInfo',
|
||||
},
|
||||
|
||||
componentWillMount: function() {
|
||||
this.dispatcherRef = dis.register(this.onAction);
|
||||
var cli = MatrixClientPeg.get();
|
||||
const cli = this.context.matrixClient;
|
||||
cli.on("RoomState.members", this.onRoomStateMember);
|
||||
this._initGroupStore(this.props.groupId);
|
||||
},
|
||||
|
||||
componentWillUnmount: function() {
|
||||
dis.unregister(this.dispatcherRef);
|
||||
if (MatrixClientPeg.get()) {
|
||||
MatrixClientPeg.get().removeListener("RoomState.members", this.onRoomStateMember);
|
||||
if (this.context.matrixClient) {
|
||||
this.context.matrixClient.removeListener("RoomState.members", this.onRoomStateMember);
|
||||
}
|
||||
this._unregisterGroupStore();
|
||||
},
|
||||
|
||||
getInitialState: function() {
|
||||
if (this.props.userId) {
|
||||
var member = new Matrix.RoomMember(null, this.props.userId);
|
||||
return {
|
||||
phase: this.Phase.MemberInfo,
|
||||
member: member,
|
||||
};
|
||||
} else {
|
||||
return {
|
||||
phase: this.Phase.MemberList
|
||||
};
|
||||
return {
|
||||
phase: this.props.groupId ? this.Phase.GroupMemberList : this.Phase.RoomMemberList,
|
||||
isUserPrivilegedInGroup: null,
|
||||
};
|
||||
},
|
||||
|
||||
componentWillReceiveProps(newProps) {
|
||||
if (newProps.groupId !== this.props.groupId) {
|
||||
this._unregisterGroupStore();
|
||||
this._initGroupStore(newProps.groupId);
|
||||
}
|
||||
},
|
||||
|
||||
onMemberListButtonClick: function() {
|
||||
Analytics.trackEvent('Right Panel', 'Member List Button', 'click');
|
||||
this.setState({ phase: this.Phase.MemberList });
|
||||
_initGroupStore(groupId) {
|
||||
if (!groupId) return;
|
||||
this._groupStore = GroupStoreCache.getGroupStore(groupId);
|
||||
this._groupStore.registerListener(this.onGroupStoreUpdated);
|
||||
},
|
||||
|
||||
onFileListButtonClick: function() {
|
||||
Analytics.trackEvent('Right Panel', 'File List Button', 'click');
|
||||
this.setState({ phase: this.Phase.FilePanel });
|
||||
_unregisterGroupStore() {
|
||||
if (this._groupStore) {
|
||||
this._groupStore.unregisterListener(this.onGroupStoreUpdated);
|
||||
}
|
||||
},
|
||||
|
||||
onNotificationListButtonClick: function() {
|
||||
Analytics.trackEvent('Right Panel', 'Notification List Button', 'click');
|
||||
this.setState({ phase: this.Phase.NotificationPanel });
|
||||
onGroupStoreUpdated: function() {
|
||||
this.setState({
|
||||
isUserPrivilegedInGroup: this._groupStore.isUserPrivileged(),
|
||||
});
|
||||
},
|
||||
|
||||
onCollapseClick: function() {
|
||||
@@ -92,32 +162,45 @@ module.exports = React.createClass({
|
||||
},
|
||||
|
||||
onInviteButtonClick: function() {
|
||||
if (MatrixClientPeg.get().isGuest()) {
|
||||
if (this.context.matrixClient.isGuest()) {
|
||||
dis.dispatch({action: 'view_set_mxid'});
|
||||
return;
|
||||
}
|
||||
|
||||
// call ChatInviteDialog
|
||||
// call AddressPickerDialog
|
||||
dis.dispatch({
|
||||
action: 'view_invite',
|
||||
roomId: this.props.roomId,
|
||||
});
|
||||
},
|
||||
|
||||
onInviteToGroupButtonClick: function() {
|
||||
showGroupInviteDialog(this.props.groupId).then(() => {
|
||||
this.setState({
|
||||
phase: this.Phase.GroupMemberList,
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
onAddRoomToGroupButtonClick: function() {
|
||||
showGroupAddRoomDialog(this.props.groupId).then(() => {
|
||||
this.forceUpdate();
|
||||
});
|
||||
},
|
||||
|
||||
onRoomStateMember: function(ev, state, member) {
|
||||
// redraw the badge on the membership list
|
||||
if (this.state.phase == this.Phase.MemberList && member.roomId === this.props.roomId) {
|
||||
if (this.state.phase === this.Phase.RoomMemberList && member.roomId === this.props.roomId) {
|
||||
this._delayedUpdate();
|
||||
}
|
||||
else if (this.state.phase === this.Phase.MemberInfo && member.roomId === this.props.roomId &&
|
||||
} else if (this.state.phase === this.Phase.RoomMemberInfo && member.roomId === this.props.roomId &&
|
||||
member.userId === this.state.member.userId) {
|
||||
// refresh the member info (e.g. new power level)
|
||||
this._delayedUpdate();
|
||||
}
|
||||
},
|
||||
|
||||
_delayedUpdate: new rate_limited_func(function() {
|
||||
this.forceUpdate();
|
||||
_delayedUpdate: new RateLimitedFunc(function() {
|
||||
this.forceUpdate(); // eslint-disable-line babel/no-invalid-this
|
||||
}, 500),
|
||||
|
||||
onAction: function(payload) {
|
||||
@@ -127,131 +210,209 @@ module.exports = React.createClass({
|
||||
});
|
||||
if (payload.member) {
|
||||
this.setState({
|
||||
phase: this.Phase.MemberInfo,
|
||||
phase: this.Phase.RoomMemberInfo,
|
||||
member: payload.member,
|
||||
});
|
||||
} else {
|
||||
if (this.props.roomId) {
|
||||
this.setState({
|
||||
phase: this.Phase.RoomMemberList,
|
||||
});
|
||||
} else if (this.props.groupId) {
|
||||
this.setState({
|
||||
phase: this.Phase.GroupMemberList,
|
||||
member: payload.member,
|
||||
});
|
||||
}
|
||||
}
|
||||
else {
|
||||
this.setState({
|
||||
phase: this.Phase.MemberList
|
||||
});
|
||||
}
|
||||
}
|
||||
else if (payload.action === "view_room") {
|
||||
if (this.state.phase === this.Phase.MemberInfo) {
|
||||
this.setState({
|
||||
phase: this.Phase.MemberList
|
||||
});
|
||||
}
|
||||
} else if (payload.action === "view_group") {
|
||||
this.setState({
|
||||
phase: this.Phase.GroupMemberList,
|
||||
member: null,
|
||||
});
|
||||
} else if (payload.action === "view_group_room") {
|
||||
this.setState({
|
||||
phase: this.Phase.GroupRoomInfo,
|
||||
groupRoomId: payload.groupRoomId,
|
||||
});
|
||||
} else if (payload.action === "view_group_room_list") {
|
||||
this.setState({
|
||||
phase: this.Phase.GroupRoomList,
|
||||
});
|
||||
} else if (payload.action === "view_group_member_list") {
|
||||
this.setState({
|
||||
phase: this.Phase.GroupMemberList,
|
||||
});
|
||||
} else if (payload.action === "view_group_user") {
|
||||
this.setState({
|
||||
phase: this.Phase.GroupMemberInfo,
|
||||
member: payload.member,
|
||||
});
|
||||
} else if (payload.action === "view_room") {
|
||||
this.setState({
|
||||
phase: this.Phase.RoomMemberList,
|
||||
});
|
||||
} else if (payload.action === "view_right_panel_phase") {
|
||||
this.setState({
|
||||
phase: payload.phase,
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
render: function() {
|
||||
var MemberList = sdk.getComponent('rooms.MemberList');
|
||||
var NotificationPanel = sdk.getComponent('structures.NotificationPanel');
|
||||
var FilePanel = sdk.getComponent('structures.FilePanel');
|
||||
var TintableSvg = sdk.getComponent("elements.TintableSvg");
|
||||
var buttonGroup;
|
||||
var inviteGroup;
|
||||
var panel;
|
||||
const MemberList = sdk.getComponent('rooms.MemberList');
|
||||
const MemberInfo = sdk.getComponent('rooms.MemberInfo');
|
||||
const NotificationPanel = sdk.getComponent('structures.NotificationPanel');
|
||||
const FilePanel = sdk.getComponent('structures.FilePanel');
|
||||
|
||||
var filesHighlight;
|
||||
var membersHighlight;
|
||||
var notificationsHighlight;
|
||||
if (!this.props.collapsed) {
|
||||
if (this.state.phase == this.Phase.MemberList || this.state.phase === this.Phase.MemberInfo) {
|
||||
membersHighlight = <div className="mx_RightPanel_headerButton_highlight"></div>;
|
||||
}
|
||||
else if (this.state.phase == this.Phase.FilePanel) {
|
||||
filesHighlight = <div className="mx_RightPanel_headerButton_highlight"></div>;
|
||||
}
|
||||
else if (this.state.phase == this.Phase.NotificationPanel) {
|
||||
notificationsHighlight = <div className="mx_RightPanel_headerButton_highlight"></div>;
|
||||
}
|
||||
}
|
||||
const GroupMemberList = sdk.getComponent('groups.GroupMemberList');
|
||||
const GroupMemberInfo = sdk.getComponent('groups.GroupMemberInfo');
|
||||
const GroupRoomList = sdk.getComponent('groups.GroupRoomList');
|
||||
const GroupRoomInfo = sdk.getComponent('groups.GroupRoomInfo');
|
||||
|
||||
var membersBadge;
|
||||
if ((this.state.phase == this.Phase.MemberList || this.state.phase === this.Phase.MemberInfo) && this.props.roomId) {
|
||||
var cli = MatrixClientPeg.get();
|
||||
var room = cli.getRoom(this.props.roomId);
|
||||
var user_is_in_room;
|
||||
const TintableSvg = sdk.getComponent("elements.TintableSvg");
|
||||
|
||||
let inviteGroup;
|
||||
|
||||
let membersBadge;
|
||||
let membersTitle = _t('Members');
|
||||
if ((this.state.phase === this.Phase.RoomMemberList || this.state.phase === this.Phase.RoomMemberInfo)
|
||||
&& this.props.roomId
|
||||
) {
|
||||
const cli = this.context.matrixClient;
|
||||
const room = cli.getRoom(this.props.roomId);
|
||||
let isUserInRoom;
|
||||
if (room) {
|
||||
membersBadge = room.getJoinedMembers().length;
|
||||
user_is_in_room = room.hasMembershipState(
|
||||
MatrixClientPeg.get().credentials.userId, 'join'
|
||||
);
|
||||
const numMembers = room.getJoinedMembers().length;
|
||||
membersTitle = _t('%(count)s Members', { count: numMembers });
|
||||
membersBadge = <div title={membersTitle}>{ formatCount(numMembers) }</div>;
|
||||
isUserInRoom = room.hasMembershipState(this.context.matrixClient.credentials.userId, 'join');
|
||||
}
|
||||
|
||||
if (user_is_in_room) {
|
||||
if (isUserInRoom) {
|
||||
inviteGroup =
|
||||
<AccessibleButton className="mx_RightPanel_invite" onClick={ this.onInviteButtonClick } >
|
||||
<AccessibleButton className="mx_RightPanel_invite" onClick={this.onInviteButtonClick}>
|
||||
<div className="mx_RightPanel_icon" >
|
||||
<TintableSvg src="img/icon-invite-people.svg" width="35" height="35" />
|
||||
</div>
|
||||
<div className="mx_RightPanel_message">{ _t('Invite to this room') }</div>
|
||||
</AccessibleButton>;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
const isPhaseGroup = [
|
||||
this.Phase.GroupMemberInfo,
|
||||
this.Phase.GroupMemberList,
|
||||
].includes(this.state.phase);
|
||||
|
||||
let headerButtons = [];
|
||||
if (this.props.roomId) {
|
||||
buttonGroup =
|
||||
<div className="mx_RightPanel_headerButtonGroup">
|
||||
<AccessibleButton className="mx_RightPanel_headerButton"
|
||||
title={ _t('Members') } onClick={ this.onMemberListButtonClick }>
|
||||
<div className="mx_RightPanel_headerButton_badge">{ membersBadge ? membersBadge : <span> </span>}</div>
|
||||
<TintableSvg src="img/icons-people.svg" width="25" height="25"/>
|
||||
{ membersHighlight }
|
||||
</AccessibleButton>
|
||||
<AccessibleButton
|
||||
className="mx_RightPanel_headerButton mx_RightPanel_filebutton"
|
||||
title={ _t('Files') } onClick={ this.onFileListButtonClick }>
|
||||
<div className="mx_RightPanel_headerButton_badge"> </div>
|
||||
<TintableSvg src="img/icons-files.svg" width="25" height="25"/>
|
||||
{ filesHighlight }
|
||||
</AccessibleButton>
|
||||
<AccessibleButton
|
||||
className="mx_RightPanel_headerButton mx_RightPanel_notificationbutton"
|
||||
title={ _t('Notifications') } onClick={ this.onNotificationListButtonClick }>
|
||||
<div className="mx_RightPanel_headerButton_badge"> </div>
|
||||
<TintableSvg src="img/icons-notifications.svg" width="25" height="25"/>
|
||||
{ notificationsHighlight }
|
||||
</AccessibleButton>
|
||||
<div className="mx_RightPanel_headerButton mx_RightPanel_collapsebutton" title={ _t("Hide panel") } onClick={ this.onCollapseClick }>
|
||||
<TintableSvg src="img/minimise.svg" width="10" height="16"/>
|
||||
</div>
|
||||
</div>;
|
||||
headerButtons = [
|
||||
<HeaderButton key="_membersButton" title={membersTitle} iconSrc="img/icons-people.svg"
|
||||
isHighlighted={[this.Phase.RoomMemberList, this.Phase.RoomMemberInfo].includes(this.state.phase)}
|
||||
clickPhase={this.Phase.RoomMemberList}
|
||||
badge={membersBadge}
|
||||
analytics={['Right Panel', 'Member List Button', 'click']}
|
||||
/>,
|
||||
<HeaderButton key="_filesButton" title={_t('Files')} iconSrc="img/icons-files.svg"
|
||||
isHighlighted={this.state.phase === this.Phase.FilePanel}
|
||||
clickPhase={this.Phase.FilePanel}
|
||||
analytics={['Right Panel', 'File List Button', 'click']}
|
||||
/>,
|
||||
<HeaderButton key="_notifsButton" title={_t('Notifications')} iconSrc="img/icons-notifications.svg"
|
||||
isHighlighted={this.state.phase === this.Phase.NotificationPanel}
|
||||
clickPhase={this.Phase.NotificationPanel}
|
||||
analytics={['Right Panel', 'Notification List Button', 'click']}
|
||||
/>,
|
||||
];
|
||||
} else if (this.props.groupId) {
|
||||
headerButtons = [
|
||||
<HeaderButton key="_groupMembersButton" title={_t('Members')} iconSrc="img/icons-people.svg"
|
||||
isHighlighted={isPhaseGroup}
|
||||
clickPhase={this.Phase.GroupMemberList}
|
||||
analytics={['Right Panel', 'Group Member List Button', 'click']}
|
||||
/>,
|
||||
<HeaderButton key="_roomsButton" title={_t('Rooms')} iconSrc="img/icons-room.svg"
|
||||
isHighlighted={[this.Phase.GroupRoomList, this.Phase.GroupRoomInfo].includes(this.state.phase)}
|
||||
clickPhase={this.Phase.GroupRoomList}
|
||||
analytics={['Right Panel', 'Group Room List Button', 'click']}
|
||||
/>,
|
||||
];
|
||||
}
|
||||
|
||||
if (this.props.roomId || this.props.groupId) {
|
||||
// Hiding the right panel hides it completely and relies on an 'expand' button
|
||||
// being put in the RoomHeader or GroupView header, so only show the minimise
|
||||
// button on these 2 screens or you won't be able to re-expand the panel.
|
||||
headerButtons.push(
|
||||
<div className="mx_RightPanel_headerButton mx_RightPanel_collapsebutton" key="_minimizeButton"
|
||||
title={_t("Hide panel")} aria-label={_t("Hide panel")} onClick={this.onCollapseClick}
|
||||
>
|
||||
<TintableSvg src="img/minimise.svg" width="10" height="16" />
|
||||
</div>,
|
||||
);
|
||||
}
|
||||
|
||||
let panel = <div />;
|
||||
if (!this.props.collapsed) {
|
||||
if(this.props.roomId && this.state.phase == this.Phase.MemberList) {
|
||||
panel = <MemberList roomId={this.props.roomId} key={this.props.roomId} />
|
||||
}
|
||||
else if(this.state.phase == this.Phase.MemberInfo) {
|
||||
var MemberInfo = sdk.getComponent('rooms.MemberInfo');
|
||||
panel = <MemberInfo member={this.state.member} key={this.props.roomId || this.props.userId} />
|
||||
}
|
||||
else if (this.state.phase == this.Phase.NotificationPanel) {
|
||||
panel = <NotificationPanel />
|
||||
}
|
||||
else if (this.state.phase == this.Phase.FilePanel) {
|
||||
panel = <FilePanel roomId={this.props.roomId} />
|
||||
if (this.props.roomId && this.state.phase === this.Phase.RoomMemberList) {
|
||||
panel = <MemberList roomId={this.props.roomId} key={this.props.roomId} />;
|
||||
} else if (this.props.groupId && this.state.phase === this.Phase.GroupMemberList) {
|
||||
panel = <GroupMemberList groupId={this.props.groupId} key={this.props.groupId} />;
|
||||
} else if (this.state.phase === this.Phase.GroupRoomList) {
|
||||
panel = <GroupRoomList groupId={this.props.groupId} key={this.props.groupId} />;
|
||||
} else if (this.state.phase === this.Phase.RoomMemberInfo) {
|
||||
panel = <MemberInfo member={this.state.member} key={this.props.roomId || this.state.member.userId} />;
|
||||
} else if (this.state.phase === this.Phase.GroupMemberInfo) {
|
||||
panel = <GroupMemberInfo
|
||||
groupMember={this.state.member}
|
||||
groupId={this.props.groupId}
|
||||
key={this.state.member.user_id} />;
|
||||
} else if (this.state.phase === this.Phase.GroupRoomInfo) {
|
||||
panel = <GroupRoomInfo
|
||||
groupRoomId={this.state.groupRoomId}
|
||||
groupId={this.props.groupId}
|
||||
key={this.state.groupRoomId} />;
|
||||
} else if (this.state.phase === this.Phase.NotificationPanel) {
|
||||
panel = <NotificationPanel />;
|
||||
} else if (this.state.phase === this.Phase.FilePanel) {
|
||||
panel = <FilePanel roomId={this.props.roomId} />;
|
||||
}
|
||||
}
|
||||
|
||||
if (!panel) {
|
||||
panel = <div className="mx_RightPanel_blank"></div>;
|
||||
panel = <div className="mx_RightPanel_blank" />;
|
||||
}
|
||||
|
||||
var classes = "mx_RightPanel mx_fadable";
|
||||
if (this.props.collapsed) {
|
||||
classes += " collapsed";
|
||||
if (this.props.groupId && this.state.isUserPrivilegedInGroup) {
|
||||
inviteGroup = isPhaseGroup ? (
|
||||
<AccessibleButton className="mx_RightPanel_invite" onClick={this.onInviteToGroupButtonClick}>
|
||||
<div className="mx_RightPanel_icon" >
|
||||
<TintableSvg src="img/icon-invite-people.svg" width="35" height="35" />
|
||||
</div>
|
||||
<div className="mx_RightPanel_message">{ _t('Invite to this community') }</div>
|
||||
</AccessibleButton>
|
||||
) : (
|
||||
<AccessibleButton className="mx_RightPanel_invite" onClick={this.onAddRoomToGroupButtonClick}>
|
||||
<div className="mx_RightPanel_icon" >
|
||||
<TintableSvg src="img/icons-room-add.svg" width="35" height="35" />
|
||||
</div>
|
||||
<div className="mx_RightPanel_message">{ _t('Add rooms to this community') }</div>
|
||||
</AccessibleButton>
|
||||
);
|
||||
}
|
||||
|
||||
const classes = classNames("mx_RightPanel", "mx_fadable", {
|
||||
"collapsed": this.props.collapsed,
|
||||
"mx_fadable_faded": this.props.disabled,
|
||||
});
|
||||
|
||||
return (
|
||||
<aside className={classes} style={{ opacity: this.props.opacity }}>
|
||||
<aside className={classes}>
|
||||
<div className="mx_RightPanel_header">
|
||||
{ buttonGroup }
|
||||
<div className="mx_RightPanel_headerButtonGroup">
|
||||
{ headerButtons }
|
||||
</div>
|
||||
</div>
|
||||
{ panel }
|
||||
<div className="mx_RightPanel_footer">
|
||||
@@ -259,5 +420,5 @@ module.exports = React.createClass({
|
||||
</div>
|
||||
</aside>
|
||||
);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
@@ -28,7 +28,7 @@ var linkify = require('linkifyjs');
|
||||
var linkifyString = require('linkifyjs/string');
|
||||
var linkifyMatrix = require('matrix-react-sdk/lib/linkify-matrix');
|
||||
var sanitizeHtml = require('sanitize-html');
|
||||
var q = require('q');
|
||||
import Promise from 'bluebird';
|
||||
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
|
||||
@@ -73,6 +73,7 @@ module.exports = React.createClass({
|
||||
this.protocols = response;
|
||||
this.setState({protocolsLoading: false});
|
||||
}, (err) => {
|
||||
console.warn(`error loading thirdparty protocols: ${err}`);
|
||||
this.setState({protocolsLoading: false});
|
||||
if (MatrixClientPeg.get().isGuest()) {
|
||||
// Guests currently aren't allowed to use this API, so
|
||||
@@ -81,24 +82,24 @@ module.exports = React.createClass({
|
||||
return;
|
||||
}
|
||||
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
Modal.createTrackedDialog('Failed to get protocol list from Home Server', '', ErrorDialog, {
|
||||
title: _t('Failed to get protocol list from Home Server'),
|
||||
description: _t('The Home Server may be too old to support third party networks'),
|
||||
});
|
||||
});
|
||||
|
||||
// dis.dispatch({
|
||||
// action: 'ui_opacity',
|
||||
// sideOpacity: 0.3,
|
||||
// middleOpacity: 0.3,
|
||||
// action: 'panel_disable',
|
||||
// sideDisabled: true,
|
||||
// middleDisabled: true,
|
||||
// });
|
||||
},
|
||||
|
||||
componentWillUnmount: function() {
|
||||
// dis.dispatch({
|
||||
// action: 'ui_opacity',
|
||||
// sideOpacity: 1.0,
|
||||
// middleOpacity: 1.0,
|
||||
// action: 'panel_disable',
|
||||
// sideDisabled: false,
|
||||
// middleDisabled: false,
|
||||
// });
|
||||
if (this.filterTimeout) {
|
||||
clearTimeout(this.filterTimeout);
|
||||
@@ -116,7 +117,7 @@ module.exports = React.createClass({
|
||||
},
|
||||
|
||||
getMoreRooms: function() {
|
||||
if (!MatrixClientPeg.get()) return q();
|
||||
if (!MatrixClientPeg.get()) return Promise.resolve();
|
||||
|
||||
const my_filter_string = this.state.filterString;
|
||||
const my_server = this.state.roomServer;
|
||||
@@ -177,7 +178,7 @@ module.exports = React.createClass({
|
||||
this.setState({ loading: false });
|
||||
console.error("Failed to get publicRooms: %s", JSON.stringify(err));
|
||||
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
Modal.createTrackedDialog('Failed to get public room list', '', ErrorDialog, {
|
||||
title: _t('Failed to get public room list'),
|
||||
description: ((err && err.message) ? err.message : _t('The server may be unavailable or overloaded'))
|
||||
});
|
||||
@@ -205,7 +206,7 @@ module.exports = React.createClass({
|
||||
desc = _t('Remove %(name)s from the directory?', {name: name});
|
||||
}
|
||||
|
||||
Modal.createDialog(QuestionDialog, {
|
||||
Modal.createTrackedDialog('Remove from Directory', '', QuestionDialog, {
|
||||
title: _t('Remove from Directory'),
|
||||
description: desc,
|
||||
onFinished: (should_delete) => {
|
||||
@@ -226,7 +227,7 @@ module.exports = React.createClass({
|
||||
modal.close();
|
||||
this.refreshRoomList();
|
||||
console.error("Failed to " + step + ": " + err);
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
Modal.createTrackedDialog('Remove from Directory Error', '', ErrorDialog, {
|
||||
title: _t('Error'),
|
||||
description: ((err && err.message) ? err.message : _t('The server may be unavailable or overloaded'))
|
||||
});
|
||||
@@ -265,7 +266,7 @@ module.exports = React.createClass({
|
||||
},
|
||||
|
||||
onFillRequest: function(backwards) {
|
||||
if (backwards || !this.nextBatch) return q(false);
|
||||
if (backwards || !this.nextBatch) return Promise.resolve(false);
|
||||
|
||||
return this.getMoreRooms();
|
||||
},
|
||||
@@ -315,7 +316,7 @@ module.exports = React.createClass({
|
||||
const fields = protocolName ? this._getFieldsForThirdPartyLocation(alias, this.protocols[protocolName], instance) : null;
|
||||
if (!fields) {
|
||||
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
Modal.createTrackedDialog('Unable to join network', '', ErrorDialog, {
|
||||
title: _t('Unable to join network'),
|
||||
description: _t('Riot does not know how to join a room on this network'),
|
||||
});
|
||||
@@ -326,14 +327,14 @@ module.exports = React.createClass({
|
||||
this.showRoomAlias(resp[0].alias);
|
||||
} else {
|
||||
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
Modal.createTrackedDialog('Room not found', '', ErrorDialog, {
|
||||
title: _t('Room not found'),
|
||||
description: _t('Couldn\'t find a matching Matrix room'),
|
||||
});
|
||||
}
|
||||
}, (e) => {
|
||||
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
Modal.createTrackedDialog('Fetching third party location failed', '', ErrorDialog, {
|
||||
title: _t('Fetching third party location failed'),
|
||||
description: _t('Unable to look up room ID from server'),
|
||||
});
|
||||
@@ -408,7 +409,7 @@ module.exports = React.createClass({
|
||||
|
||||
perms = null;
|
||||
if (guestRead || guestJoin) {
|
||||
perms = <div className="mx_RoomDirectory_perms">{guestRead} {guestJoin}</div>;
|
||||
perms = <div className="mx_RoomDirectory_perms">{guestRead}{guestJoin}</div>;
|
||||
}
|
||||
|
||||
var topic = rooms[i].topic || '';
|
||||
|
||||
@@ -20,8 +20,8 @@ limitations under the License.
|
||||
var React = require('react');
|
||||
var ReactDOM = require('react-dom');
|
||||
var classNames = require('classnames');
|
||||
var DropTarget = require('react-dnd').DropTarget;
|
||||
var sdk = require('matrix-react-sdk');
|
||||
import { Droppable } from 'react-beautiful-dnd';
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
var dis = require('matrix-react-sdk/lib/dispatcher');
|
||||
var Unread = require('matrix-react-sdk/lib/Unread');
|
||||
@@ -30,37 +30,14 @@ var RoomNotifs = require('matrix-react-sdk/lib/RoomNotifs');
|
||||
var FormattingUtils = require('matrix-react-sdk/lib/utils/FormattingUtils');
|
||||
var AccessibleButton = require('matrix-react-sdk/lib/components/views/elements/AccessibleButton');
|
||||
import Modal from 'matrix-react-sdk/lib/Modal';
|
||||
import { KeyCode } from 'matrix-react-sdk/lib/Keyboard';
|
||||
|
||||
|
||||
// turn this on for drop & drag console debugging galore
|
||||
var debug = false;
|
||||
|
||||
const TRUNCATE_AT = 10;
|
||||
|
||||
var roomListTarget = {
|
||||
canDrop: function() {
|
||||
return true;
|
||||
},
|
||||
|
||||
drop: function(props, monitor, component) {
|
||||
if (debug) console.log("dropped on sublist")
|
||||
},
|
||||
|
||||
hover: function(props, monitor, component) {
|
||||
var item = monitor.getItem();
|
||||
|
||||
if (component.state.sortedList.length == 0 && props.editable) {
|
||||
if (debug) console.log("hovering on sublist " + props.label + ", isOver=" + monitor.isOver());
|
||||
|
||||
if (item.targetList !== component) {
|
||||
item.targetList.removeRoomTile(item.room);
|
||||
item.targetList = component;
|
||||
}
|
||||
|
||||
component.moveRoomTile(item.room, 0);
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
var RoomSubList = React.createClass({
|
||||
displayName: 'RoomSubList',
|
||||
|
||||
@@ -74,8 +51,8 @@ var RoomSubList = React.createClass({
|
||||
|
||||
order: React.PropTypes.string.isRequired,
|
||||
|
||||
// undefined if no room is selected (eg we are showing settings)
|
||||
selectedRoom: React.PropTypes.string,
|
||||
// passed through to RoomTile and used to highlight room with `!` regardless of notifications count
|
||||
isInvite: React.PropTypes.bool,
|
||||
|
||||
startAsHidden: React.PropTypes.bool,
|
||||
showSpinner: React.PropTypes.bool, // true to show a spinner if 0 elements when expanded
|
||||
@@ -87,6 +64,7 @@ var RoomSubList = React.createClass({
|
||||
searchFilter: React.PropTypes.string,
|
||||
emptyContent: React.PropTypes.node, // content shown if the list is empty
|
||||
headerItems: React.PropTypes.node, // content shown in the sublist header
|
||||
extraTiles: React.PropTypes.arrayOf(React.PropTypes.node), // extra elements added beneath tiles
|
||||
},
|
||||
|
||||
getInitialState: function() {
|
||||
@@ -100,18 +78,29 @@ var RoomSubList = React.createClass({
|
||||
getDefaultProps: function() {
|
||||
return {
|
||||
onHeaderClick: function() {}, // NOP
|
||||
onShowMoreRooms: function() {} // NOP
|
||||
onShowMoreRooms: function() {}, // NOP
|
||||
extraTiles: [],
|
||||
isInvite: false,
|
||||
};
|
||||
},
|
||||
|
||||
componentWillMount: function() {
|
||||
this.sortList(this.applySearchFilter(this.props.list, this.props.searchFilter), this.props.order);
|
||||
this.setState({
|
||||
sortedList: this.applySearchFilter(this.props.list, this.props.searchFilter),
|
||||
});
|
||||
this.dispatcherRef = dis.register(this.onAction);
|
||||
},
|
||||
|
||||
componentWillUnmount: function() {
|
||||
dis.unregister(this.dispatcherRef);
|
||||
},
|
||||
|
||||
componentWillReceiveProps: function(newProps) {
|
||||
// order the room list appropriately before we re-render
|
||||
//if (debug) console.log("received new props, list = " + newProps.list);
|
||||
this.sortList(this.applySearchFilter(newProps.list, newProps.searchFilter), newProps.order);
|
||||
this.setState({
|
||||
sortedList: this.applySearchFilter(newProps.list, newProps.searchFilter),
|
||||
});
|
||||
},
|
||||
|
||||
applySearchFilter: function(list, filter) {
|
||||
@@ -132,6 +121,21 @@ var RoomSubList = React.createClass({
|
||||
}
|
||||
},
|
||||
|
||||
onAction: function(payload) {
|
||||
// XXX: Previously RoomList would forceUpdate whenever on_room_read is dispatched,
|
||||
// but this is no longer true, so we must do it here (and can apply the small
|
||||
// optimisation of checking that we care about the room being read).
|
||||
//
|
||||
// Ultimately we need to transition to a state pushing flow where something
|
||||
// explicitly notifies the components concerned that the notif count for a room
|
||||
// has change (e.g. a Flux store).
|
||||
if (payload.action === 'on_room_read' &&
|
||||
this.props.list.some((r) => r.roomId === payload.roomId)
|
||||
) {
|
||||
this.forceUpdate();
|
||||
}
|
||||
},
|
||||
|
||||
onClick: function(ev) {
|
||||
if (this.isCollapsableOnClick()) {
|
||||
// The header isCollapsable, so the click is to be interpreted as collapse and truncation logic
|
||||
@@ -151,78 +155,14 @@ var RoomSubList = React.createClass({
|
||||
}
|
||||
},
|
||||
|
||||
onRoomTileClick(roomId) {
|
||||
onRoomTileClick(roomId, ev) {
|
||||
dis.dispatch({
|
||||
action: 'view_room',
|
||||
room_id: roomId,
|
||||
clear_search: (ev && (ev.keyCode == KeyCode.ENTER || ev.keyCode == KeyCode.SPACE)),
|
||||
});
|
||||
},
|
||||
|
||||
tsOfNewestEvent: function(room) {
|
||||
for (var i = room.timeline.length - 1; i >= 0; --i) {
|
||||
var ev = room.timeline[i];
|
||||
if (ev.getTs() &&
|
||||
(Unread.eventTriggersUnreadCount(ev) ||
|
||||
(ev.getSender() === MatrixClientPeg.get().credentials.userId))
|
||||
) {
|
||||
return ev.getTs();
|
||||
}
|
||||
}
|
||||
|
||||
// we might only have events that don't trigger the unread indicator,
|
||||
// in which case use the oldest event even if normally it wouldn't count.
|
||||
// This is better than just assuming the last event was forever ago.
|
||||
if (room.timeline.length && room.timeline[0].getTs()) {
|
||||
return room.timeline[0].getTs();
|
||||
} else {
|
||||
return Number.MAX_SAFE_INTEGER;
|
||||
}
|
||||
},
|
||||
|
||||
// TODO: factor the comparators back out into a generic comparator
|
||||
// so that view_prev_room and view_next_room can do the right thing
|
||||
|
||||
recentsComparator: function(roomA, roomB) {
|
||||
return this.tsOfNewestEvent(roomB) - this.tsOfNewestEvent(roomA);
|
||||
},
|
||||
|
||||
lexicographicalComparator: function(roomA, roomB) {
|
||||
return roomA.name > roomB.name ? 1 : -1;
|
||||
},
|
||||
|
||||
// Generates the manual comparator using the given list
|
||||
manualComparator: function(roomA, roomB) {
|
||||
if (!roomA.tags[this.props.tagName] || !roomB.tags[this.props.tagName]) return 0;
|
||||
|
||||
// Make sure the room tag has an order element, if not set it to be the bottom
|
||||
var a = roomA.tags[this.props.tagName].order;
|
||||
var b = roomB.tags[this.props.tagName].order;
|
||||
|
||||
// Order undefined room tag orders to the bottom
|
||||
if (a === undefined && b !== undefined) {
|
||||
return 1;
|
||||
} else if (a !== undefined && b === undefined) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return a == b ? this.lexicographicalComparator(roomA, roomB) : ( a > b ? 1 : -1);
|
||||
},
|
||||
|
||||
sortList: function(list, order) {
|
||||
if (list === undefined) list = this.state.sortedList;
|
||||
if (order === undefined) order = this.props.order;
|
||||
var comparator;
|
||||
list = list || [];
|
||||
if (order === "manual") comparator = this.manualComparator;
|
||||
if (order === "recent") comparator = this.recentsComparator;
|
||||
|
||||
// Fix undefined orders here, and make sure the backend gets updated as well
|
||||
this._fixUndefinedOrder(list);
|
||||
|
||||
//if (debug) console.log("sorting list for sublist " + this.props.label + " with length " + list.length + ", this.props.list = " + this.props.list);
|
||||
this.setState({ sortedList: list.sort(comparator) });
|
||||
},
|
||||
|
||||
_shouldShowNotifBadge: function(roomNotifState) {
|
||||
const showBadgeInStates = [RoomNotifs.ALL_MESSAGES, RoomNotifs.ALL_MESSAGES_LOUD];
|
||||
return showBadgeInStates.indexOf(roomNotifState) > -1;
|
||||
@@ -241,10 +181,14 @@ var RoomSubList = React.createClass({
|
||||
roomNotificationCount: function(truncateAt) {
|
||||
var self = this;
|
||||
|
||||
if (this.props.isInvite) {
|
||||
return [0, true];
|
||||
}
|
||||
|
||||
return this.props.list.reduce(function(result, room, index) {
|
||||
if (truncateAt === undefined || index >= truncateAt) {
|
||||
var roomNotifState = RoomNotifs.getRoomNotifsState(room.roomId);
|
||||
var highlight = room.getUnreadNotificationCount('highlight') > 0 || self.props.label === 'Invites';
|
||||
var highlight = room.getUnreadNotificationCount('highlight') > 0;
|
||||
var notificationCount = room.getUnreadNotificationCount();
|
||||
|
||||
const notifBadges = notificationCount > 0 && self._shouldShowNotifBadge(roomNotifState);
|
||||
@@ -269,118 +213,28 @@ var RoomSubList = React.createClass({
|
||||
this.setState(this.state);
|
||||
},
|
||||
|
||||
moveRoomTile: function(room, atIndex) {
|
||||
if (debug) console.log("moveRoomTile: id " + room.roomId + ", atIndex " + atIndex);
|
||||
//console.log("moveRoomTile before: " + JSON.stringify(this.state.rooms));
|
||||
var found = this.findRoomTile(room);
|
||||
var rooms = this.state.sortedList;
|
||||
if (found.room) {
|
||||
if (debug) console.log("removing at index " + found.index + " and adding at index " + atIndex);
|
||||
rooms.splice(found.index, 1);
|
||||
rooms.splice(atIndex, 0, found.room);
|
||||
}
|
||||
else {
|
||||
if (debug) console.log("Adding at index " + atIndex);
|
||||
rooms.splice(atIndex, 0, room);
|
||||
}
|
||||
this.setState({ sortedList: rooms });
|
||||
// console.log("moveRoomTile after: " + JSON.stringify(this.state.rooms));
|
||||
},
|
||||
|
||||
// XXX: this isn't invoked via a property method but indirectly via
|
||||
// the roomList property method. Unsure how evil this is.
|
||||
removeRoomTile: function(room) {
|
||||
if (debug) console.log("remove room " + room.roomId);
|
||||
var found = this.findRoomTile(room);
|
||||
var rooms = this.state.sortedList;
|
||||
if (found.room) {
|
||||
rooms.splice(found.index, 1);
|
||||
}
|
||||
else {
|
||||
console.warn("Can't remove room " + room.roomId + " - can't find it");
|
||||
}
|
||||
this.setState({ sortedList: rooms });
|
||||
},
|
||||
|
||||
findRoomTile: function(room) {
|
||||
var index = this.state.sortedList.indexOf(room);
|
||||
if (index >= 0) {
|
||||
// console.log("found: room: " + room.roomId + " with index " + index);
|
||||
}
|
||||
else {
|
||||
if (debug) console.log("didn't find room");
|
||||
room = null;
|
||||
}
|
||||
return ({
|
||||
room: room,
|
||||
index: index,
|
||||
});
|
||||
},
|
||||
|
||||
calcManualOrderTagData: function(room) {
|
||||
var index = this.state.sortedList.indexOf(room);
|
||||
|
||||
// we sort rooms by the lexicographic ordering of the 'order' metadata on their tags.
|
||||
// for convenience, we calculate this for now a floating point number between 0.0 and 1.0.
|
||||
|
||||
var orderA = 0.0; // by default we're next to the beginning of the list
|
||||
if (index > 0) {
|
||||
var prevTag = this.state.sortedList[index - 1].tags[this.props.tagName];
|
||||
if (!prevTag) {
|
||||
console.error("Previous room in sublist is not tagged to be in this list. This should never happen.")
|
||||
}
|
||||
else if (prevTag.order === undefined) {
|
||||
console.error("Previous room in sublist has no ordering metadata. This should never happen.");
|
||||
}
|
||||
else {
|
||||
orderA = prevTag.order;
|
||||
}
|
||||
}
|
||||
|
||||
var orderB = 1.0; // by default we're next to the end of the list too
|
||||
if (index < this.state.sortedList.length - 1) {
|
||||
var nextTag = this.state.sortedList[index + 1].tags[this.props.tagName];
|
||||
if (!nextTag) {
|
||||
console.error("Next room in sublist is not tagged to be in this list. This should never happen.")
|
||||
}
|
||||
else if (nextTag.order === undefined) {
|
||||
console.error("Next room in sublist has no ordering metadata. This should never happen.");
|
||||
}
|
||||
else {
|
||||
orderB = nextTag.order;
|
||||
}
|
||||
}
|
||||
|
||||
var order = (orderA + orderB) / 2.0;
|
||||
if (order === orderA || order === orderB) {
|
||||
console.error("Cannot describe new list position. This should be incredibly unlikely.");
|
||||
// TODO: renumber the list
|
||||
}
|
||||
|
||||
return order;
|
||||
},
|
||||
|
||||
makeRoomTiles: function() {
|
||||
var self = this;
|
||||
var DNDRoomTile = sdk.getComponent("rooms.DNDRoomTile");
|
||||
return this.state.sortedList.map(function(room) {
|
||||
var selected = room.roomId == self.props.selectedRoom;
|
||||
// XXX: is it evil to pass in self as a prop to RoomTile?
|
||||
return (
|
||||
<DNDRoomTile
|
||||
room={ room }
|
||||
roomSubList={ self }
|
||||
key={ room.roomId }
|
||||
collapsed={ self.props.collapsed || false}
|
||||
selected={ selected }
|
||||
unread={ Unread.doesRoomHaveUnreadMessages(room) }
|
||||
highlight={ room.getUnreadNotificationCount('highlight') > 0 || self.props.label === 'Invites' }
|
||||
isInvite={ self.props.label === 'Invites' }
|
||||
refreshSubList={ self._updateSubListCount }
|
||||
incomingCall={ null }
|
||||
onClick={ self.onRoomTileClick }
|
||||
/>
|
||||
);
|
||||
const DNDRoomTile = sdk.getComponent("rooms.DNDRoomTile");
|
||||
const RoomTile = sdk.getComponent("rooms.RoomTile");
|
||||
return this.state.sortedList.map((room, index) => {
|
||||
// XXX: is it evil to pass in this as a prop to RoomTile? Yes.
|
||||
|
||||
// We should only use <DNDRoomTile /> when editable
|
||||
const RoomTileComponent = this.props.editable ? DNDRoomTile : RoomTile;
|
||||
return <RoomTileComponent
|
||||
index={index} // For DND
|
||||
room={room}
|
||||
roomSubList={this}
|
||||
tagName={this.props.tagName}
|
||||
key={room.roomId}
|
||||
collapsed={this.props.collapsed || false}
|
||||
unread={Unread.doesRoomHaveUnreadMessages(room)}
|
||||
highlight={room.getUnreadNotificationCount('highlight') > 0 || this.props.isInvite}
|
||||
isInvite={this.props.isInvite}
|
||||
refreshSubList={this._updateSubListCount}
|
||||
incomingCall={null}
|
||||
onClick={this.onRoomTileClick}
|
||||
/>;
|
||||
});
|
||||
},
|
||||
|
||||
@@ -391,7 +245,8 @@ var RoomSubList = React.createClass({
|
||||
var subListNotifCount = subListNotifications[0];
|
||||
var subListNotifHighlight = subListNotifications[1];
|
||||
|
||||
var roomCount = this.props.list.length > 0 ? this.props.list.length : '';
|
||||
var totalTiles = this.props.list.length + (this.props.extraTiles || []).length;
|
||||
var roomCount = totalTiles > 0 ? totalTiles : '';
|
||||
|
||||
var chevronClasses = classNames({
|
||||
'mx_RoomSubList_chevron': true,
|
||||
@@ -407,6 +262,9 @@ var RoomSubList = React.createClass({
|
||||
var badge;
|
||||
if (subListNotifCount > 0) {
|
||||
badge = <div className={badgeClasses}>{ FormattingUtils.formatCount(subListNotifCount) }</div>;
|
||||
} else if (this.props.isInvite) {
|
||||
// no notifications but highlight anyway because this is an invite badge
|
||||
badge = <div className={badgeClasses}>!</div>;
|
||||
}
|
||||
|
||||
// When collapsed, allow a long hover on the header to show user
|
||||
@@ -482,47 +340,6 @@ var RoomSubList = React.createClass({
|
||||
this.props.onHeaderClick(false);
|
||||
},
|
||||
|
||||
// Fix any undefined order elements of a room in a manual ordered list
|
||||
// room.tag[tagname].order
|
||||
_fixUndefinedOrder: function(list) {
|
||||
if (this.props.order === "manual") {
|
||||
var order = 0.0;
|
||||
var self = this;
|
||||
|
||||
// Find the highest (lowest position) order of a room in a manual ordered list
|
||||
list.forEach(function(room) {
|
||||
if (room.tags.hasOwnProperty(self.props.tagName)) {
|
||||
if (order < room.tags[self.props.tagName].order) {
|
||||
order = room.tags[self.props.tagName].order;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Fix any undefined order elements of a room in a manual ordered list
|
||||
// Do this one at a time, as each time a rooms tag data is updated the RoomList
|
||||
// gets triggered and another list is passed in. Doing it one at a time means that
|
||||
// we always correctly calculate the highest order for the list - stops multiple
|
||||
// rooms getting the same order. This is only really relevant for the first time this
|
||||
// is run with historical room tag data, after that there should only be undefined
|
||||
// in the list at a time anyway.
|
||||
for (let i = 0; i < list.length; i++) {
|
||||
if (list[i].tags[self.props.tagName] && list[i].tags[self.props.tagName].order === undefined) {
|
||||
MatrixClientPeg.get().setRoomTag(list[i].roomId, self.props.tagName, {order: (order + 1.0) / 2.0}).finally(function() {
|
||||
// Do any final stuff here
|
||||
}).fail(function(err) {
|
||||
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
console.error("Failed to add tag " + self.props.tagName + " to room" + err);
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
title: _t('Failed to add tag %(tagName)s to room', {tagName: self.props.tagName}),
|
||||
description: ((err && err.message) ? err.message : _t('Operation failed')),
|
||||
});
|
||||
});
|
||||
break;
|
||||
};
|
||||
};
|
||||
}
|
||||
},
|
||||
|
||||
render: function() {
|
||||
var connectDropTarget = this.props.connectDropTarget;
|
||||
var TruncatedList = sdk.getComponent('elements.TruncatedList');
|
||||
@@ -530,13 +347,14 @@ var RoomSubList = React.createClass({
|
||||
var label = this.props.collapsed ? null : this.props.label;
|
||||
|
||||
let content;
|
||||
if (this.state.sortedList.length == 0 && !this.props.searchFilter) {
|
||||
if (this.state.sortedList.length === 0 && !this.props.searchFilter && this.props.extraTiles.length === 0) {
|
||||
content = this.props.emptyContent;
|
||||
} else {
|
||||
content = this.makeRoomTiles();
|
||||
content.push(...this.props.extraTiles);
|
||||
}
|
||||
|
||||
if (this.state.sortedList.length > 0 || this.props.editable) {
|
||||
if (this.state.sortedList.length > 0 || this.props.extraTiles.length > 0 || this.props.editable) {
|
||||
var subList;
|
||||
var classes = "mx_RoomSubList";
|
||||
|
||||
@@ -551,12 +369,22 @@ var RoomSubList = React.createClass({
|
||||
</TruncatedList>;
|
||||
}
|
||||
|
||||
return connectDropTarget(
|
||||
<div>
|
||||
{ this._getHeaderJsx() }
|
||||
{ subList }
|
||||
</div>
|
||||
);
|
||||
const subListContent = <div>
|
||||
{ this._getHeaderJsx() }
|
||||
{ subList }
|
||||
</div>;
|
||||
|
||||
return this.props.editable ?
|
||||
<Droppable
|
||||
droppableId={"room-sub-list-droppable_" + this.props.tagName}
|
||||
type="draggable-RoomTile"
|
||||
>
|
||||
{ (provided, snapshot) => (
|
||||
<div ref={provided.innerRef}>
|
||||
{ subListContent }
|
||||
</div>
|
||||
) }
|
||||
</Droppable> : subListContent;
|
||||
}
|
||||
else {
|
||||
var Loader = sdk.getComponent("elements.Spinner");
|
||||
@@ -570,11 +398,4 @@ var RoomSubList = React.createClass({
|
||||
}
|
||||
});
|
||||
|
||||
// Export the wrapped version, inlining the 'collect' functions
|
||||
// to more closely resemble the ES7
|
||||
module.exports =
|
||||
DropTarget('RoomTile', roomListTarget, function(connect) {
|
||||
return {
|
||||
connectDropTarget: connect.dropTarget(),
|
||||
}
|
||||
})(RoomSubList);
|
||||
module.exports = RoomSubList;
|
||||
|
||||
@@ -16,12 +16,13 @@ limitations under the License.
|
||||
|
||||
'use strict';
|
||||
|
||||
var React = require('react');
|
||||
import React from 'react';
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
var sdk = require('matrix-react-sdk')
|
||||
var dis = require('matrix-react-sdk/lib/dispatcher');
|
||||
var rate_limited_func = require('matrix-react-sdk/lib/ratelimitedfunc');
|
||||
var AccessibleButton = require('matrix-react-sdk/lib/components/views/elements/AccessibleButton');
|
||||
import { KeyCode } from 'matrix-react-sdk/lib/Keyboard';
|
||||
import sdk from 'matrix-react-sdk';
|
||||
import dis from 'matrix-react-sdk/lib/dispatcher';
|
||||
import rate_limited_func from 'matrix-react-sdk/lib/ratelimitedfunc';
|
||||
import AccessibleButton from 'matrix-react-sdk/lib/components/views/elements/AccessibleButton';
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'SearchBox',
|
||||
@@ -46,18 +47,19 @@ module.exports = React.createClass({
|
||||
},
|
||||
|
||||
onAction: function(payload) {
|
||||
// Disabling this as I find it really really annoying, and was used to the
|
||||
// previous behaviour - see https://github.com/vector-im/riot-web/issues/3348
|
||||
/*
|
||||
switch (payload.action) {
|
||||
// Clear up the text field when a room is selected.
|
||||
case 'view_room':
|
||||
if (this.refs.search) {
|
||||
if (this.refs.search && payload.clear_search) {
|
||||
this._clearSearch();
|
||||
}
|
||||
break;
|
||||
case 'focus_room_filter':
|
||||
if (this.refs.search) {
|
||||
this.refs.search.focus();
|
||||
this.refs.search.select();
|
||||
}
|
||||
break;
|
||||
}
|
||||
*/
|
||||
},
|
||||
|
||||
onChange: function() {
|
||||
@@ -86,6 +88,15 @@ module.exports = React.createClass({
|
||||
}
|
||||
},
|
||||
|
||||
_onKeyDown: function(ev) {
|
||||
switch (ev.keyCode) {
|
||||
case KeyCode.ESCAPE:
|
||||
this._clearSearch();
|
||||
dis.dispatch({action: 'focus_composer'});
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
_clearSearch: function() {
|
||||
this.refs.search.value = "";
|
||||
this.onChange();
|
||||
@@ -135,6 +146,7 @@ module.exports = React.createClass({
|
||||
className="mx_SearchBox_search"
|
||||
value={ this.state.searchTerm }
|
||||
onChange={ this.onChange }
|
||||
onKeyDown={ this._onKeyDown }
|
||||
placeholder={ _t('Filter room names') }
|
||||
/>
|
||||
];
|
||||
|
||||
@@ -16,14 +16,17 @@ limitations under the License.
|
||||
|
||||
'use strict';
|
||||
|
||||
var React = require('react');
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import SyntaxHighlight from '../views/elements/SyntaxHighlight';
|
||||
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'ViewSource',
|
||||
|
||||
propTypes: {
|
||||
content: React.PropTypes.object.isRequired,
|
||||
onFinished: React.PropTypes.func.isRequired,
|
||||
content: PropTypes.object.isRequired,
|
||||
onFinished: PropTypes.func.isRequired,
|
||||
},
|
||||
|
||||
componentDidMount: function() {
|
||||
@@ -45,9 +48,9 @@ module.exports = React.createClass({
|
||||
render: function() {
|
||||
return (
|
||||
<div className="mx_ViewSource">
|
||||
<pre>
|
||||
{JSON.stringify(this.props.content, null, 2)}
|
||||
</pre>
|
||||
<SyntaxHighlight className="json">
|
||||
{ JSON.stringify(this.props.content, null, 2) }
|
||||
</SyntaxHighlight>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright 2016 OpenMarket Ltd
|
||||
Copyright 2017 Michael Telatynski <7t3chguy@gmail.com>
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
@@ -14,17 +14,17 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
import PlatformPeg from 'matrix-react-sdk/lib/PlatformPeg';
|
||||
'use strict';
|
||||
|
||||
var POKE_RATE_MS = 10 * 60 * 1000; // 10 min
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
|
||||
module.exports = {
|
||||
start: function() {
|
||||
module.exports.poll();
|
||||
setInterval(module.exports.poll, POKE_RATE_MS);
|
||||
},
|
||||
export default class GenericTextContextMenu extends React.Component {
|
||||
static PropTypes = {
|
||||
message: PropTypes.string.isRequired,
|
||||
};
|
||||
|
||||
poll: function() {
|
||||
PlatformPeg.get().pollForUpdate();
|
||||
render() {
|
||||
return <div>{ this.props.message }</div>;
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
Copyright 2015, 2016 OpenMarket Ltd
|
||||
Copyright 2018 New Vector Ltd
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
@@ -16,15 +17,17 @@ limitations under the License.
|
||||
|
||||
'use strict';
|
||||
|
||||
const React = require('react');
|
||||
import React from 'react';
|
||||
|
||||
const MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg');
|
||||
const dis = require('matrix-react-sdk/lib/dispatcher');
|
||||
const sdk = require('matrix-react-sdk');
|
||||
import MatrixClientPeg from 'matrix-react-sdk/lib/MatrixClientPeg';
|
||||
import dis from 'matrix-react-sdk/lib/dispatcher';
|
||||
import sdk from 'matrix-react-sdk';
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
const Modal = require('matrix-react-sdk/lib/Modal');
|
||||
const Resend = require("matrix-react-sdk/lib/Resend");
|
||||
import * as UserSettingsStore from 'matrix-react-sdk/lib/UserSettingsStore';
|
||||
import Modal from 'matrix-react-sdk/lib/Modal';
|
||||
import Resend from "matrix-react-sdk/lib/Resend";
|
||||
import SettingsStore from "matrix-react-sdk/lib/settings/SettingsStore";
|
||||
import {makeEventPermalink} from 'matrix-react-sdk/lib/matrix-to';
|
||||
import { isUrlPermitted } from 'matrix-react-sdk/lib/HtmlUtils';
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'MessageContextMenu',
|
||||
@@ -43,75 +46,88 @@ module.exports = React.createClass({
|
||||
getInitialState: function() {
|
||||
return {
|
||||
canRedact: false,
|
||||
canPin: false,
|
||||
};
|
||||
},
|
||||
|
||||
componentWillMount: function() {
|
||||
MatrixClientPeg.get().on('RoomMember.powerLevel', this._checkCanRedact);
|
||||
this._checkCanRedact();
|
||||
MatrixClientPeg.get().on('RoomMember.powerLevel', this._checkPermissions);
|
||||
this._checkPermissions();
|
||||
},
|
||||
|
||||
componentWillUnmount: function() {
|
||||
const cli = MatrixClientPeg.get();
|
||||
if (cli) {
|
||||
cli.removeListener('RoomMember.powerLevel', this._checkCanRedact);
|
||||
cli.removeListener('RoomMember.powerLevel', this._checkPermissions);
|
||||
}
|
||||
},
|
||||
|
||||
_checkCanRedact: function() {
|
||||
_checkPermissions: function() {
|
||||
const cli = MatrixClientPeg.get();
|
||||
const room = cli.getRoom(this.props.mxEvent.getRoomId());
|
||||
|
||||
const canRedact = room.currentState.maySendRedactionForEvent(this.props.mxEvent, cli.credentials.userId);
|
||||
this.setState({canRedact});
|
||||
let canPin = room.currentState.mayClientSendStateEvent('m.room.pinned_events', cli);
|
||||
|
||||
// HACK: Intentionally say we can't pin if the user doesn't want to use the functionality
|
||||
if (!SettingsStore.isFeatureEnabled("feature_pinning")) canPin = false;
|
||||
|
||||
this.setState({canRedact, canPin});
|
||||
},
|
||||
|
||||
_isPinned: function() {
|
||||
const room = MatrixClientPeg.get().getRoom(this.props.mxEvent.getRoomId());
|
||||
const pinnedEvent = room.currentState.getStateEvents('m.room.pinned_events', '');
|
||||
if (!pinnedEvent) return false;
|
||||
return pinnedEvent.getContent().pinned.includes(this.props.mxEvent.getId());
|
||||
},
|
||||
|
||||
onResendClick: function() {
|
||||
Resend.resend(this.props.mxEvent);
|
||||
if (this.props.onFinished) this.props.onFinished();
|
||||
this.closeMenu();
|
||||
},
|
||||
|
||||
onViewSourceClick: function() {
|
||||
const ViewSource = sdk.getComponent('structures.ViewSource');
|
||||
Modal.createDialog(ViewSource, {
|
||||
Modal.createTrackedDialog('View Event Source', '', ViewSource, {
|
||||
content: this.props.mxEvent.event,
|
||||
}, 'mx_Dialog_viewsource');
|
||||
if (this.props.onFinished) this.props.onFinished();
|
||||
this.closeMenu();
|
||||
},
|
||||
|
||||
onViewClearSourceClick: function() {
|
||||
const ViewSource = sdk.getComponent('structures.ViewSource');
|
||||
Modal.createDialog(ViewSource, {
|
||||
Modal.createTrackedDialog('View Clear Event Source', '', ViewSource, {
|
||||
// FIXME: _clearEvent is private
|
||||
content: this.props.mxEvent._clearEvent,
|
||||
}, 'mx_Dialog_viewsource');
|
||||
if (this.props.onFinished) this.props.onFinished();
|
||||
this.closeMenu();
|
||||
},
|
||||
|
||||
onRedactClick: function() {
|
||||
const ConfirmRedactDialog = sdk.getComponent("dialogs.ConfirmRedactDialog");
|
||||
Modal.createDialog(ConfirmRedactDialog, {
|
||||
Modal.createTrackedDialog('Confirm Redact Dialog', '', ConfirmRedactDialog, {
|
||||
onFinished: (proceed) => {
|
||||
if (!proceed) return;
|
||||
|
||||
MatrixClientPeg.get().redactEvent(
|
||||
this.props.mxEvent.getRoomId(), this.props.mxEvent.getId()
|
||||
).catch(function(e) {
|
||||
const cli = MatrixClientPeg.get();
|
||||
cli.redactEvent(this.props.mxEvent.getRoomId(), this.props.mxEvent.getId()).catch(function(e) {
|
||||
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
// display error message stating you couldn't delete this.
|
||||
const code = e.errcode || e.statusCode;
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
Modal.createTrackedDialog('You cannot delete this message', '', ErrorDialog, {
|
||||
title: _t('Error'),
|
||||
description: _t('You cannot delete this message. (%(code)s)', {code: code})
|
||||
description: _t('You cannot delete this message. (%(code)s)', {code}),
|
||||
});
|
||||
}).done();
|
||||
},
|
||||
}, 'mx_Dialog_confirmredact');
|
||||
if (this.props.onFinished) this.props.onFinished();
|
||||
this.closeMenu();
|
||||
},
|
||||
|
||||
onCancelSendClick: function() {
|
||||
Resend.removeFromQueue(this.props.mxEvent);
|
||||
if (this.props.onFinished) this.props.onFinished();
|
||||
this.closeMenu();
|
||||
},
|
||||
|
||||
onForwardClick: function() {
|
||||
@@ -122,6 +138,29 @@ module.exports = React.createClass({
|
||||
this.closeMenu();
|
||||
},
|
||||
|
||||
onPinClick: function() {
|
||||
MatrixClientPeg.get().getStateEvent(this.props.mxEvent.getRoomId(), 'm.room.pinned_events', '')
|
||||
.catch((e) => {
|
||||
// Intercept the Event Not Found error and fall through the promise chain with no event.
|
||||
if (e.errcode === "M_NOT_FOUND") return null;
|
||||
throw e;
|
||||
})
|
||||
.then((event) => {
|
||||
const eventIds = (event ? event.pinned : []) || [];
|
||||
if (!eventIds.includes(this.props.mxEvent.getId())) {
|
||||
// Not pinned - add
|
||||
eventIds.push(this.props.mxEvent.getId());
|
||||
} else {
|
||||
// Pinned - remove
|
||||
eventIds.splice(eventIds.indexOf(this.props.mxEvent.getId()), 1);
|
||||
}
|
||||
|
||||
const cli = MatrixClientPeg.get();
|
||||
cli.sendStateEvent(this.props.mxEvent.getRoomId(), 'm.room.pinned_events', {pinned: eventIds}, '');
|
||||
});
|
||||
this.closeMenu();
|
||||
},
|
||||
|
||||
closeMenu: function() {
|
||||
if (this.props.onFinished) this.props.onFinished();
|
||||
},
|
||||
@@ -130,15 +169,23 @@ module.exports = React.createClass({
|
||||
if (this.props.eventTileOps) {
|
||||
this.props.eventTileOps.unhideWidget();
|
||||
}
|
||||
if (this.props.onFinished) this.props.onFinished();
|
||||
this.closeMenu();
|
||||
},
|
||||
|
||||
onQuoteClick: function() {
|
||||
console.log(this.props.mxEvent);
|
||||
dis.dispatch({
|
||||
action: 'quote',
|
||||
text: this.props.eventTileOps.getInnerText(),
|
||||
});
|
||||
this.closeMenu();
|
||||
},
|
||||
|
||||
onReplyClick: function() {
|
||||
dis.dispatch({
|
||||
action: 'quote_event',
|
||||
event: this.props.mxEvent,
|
||||
});
|
||||
this.closeMenu();
|
||||
},
|
||||
|
||||
render: function() {
|
||||
@@ -147,11 +194,12 @@ module.exports = React.createClass({
|
||||
let redactButton;
|
||||
let cancelButton;
|
||||
let forwardButton;
|
||||
let viewSourceButton;
|
||||
let pinButton;
|
||||
let viewClearSourceButton;
|
||||
let unhidePreviewButton;
|
||||
let permalinkButton;
|
||||
let externalURLButton;
|
||||
let quoteButton;
|
||||
let replyButton;
|
||||
|
||||
if (eventStatus === 'not_sent') {
|
||||
resendButton = (
|
||||
@@ -185,10 +233,26 @@ module.exports = React.createClass({
|
||||
{ _t('Forward Message') }
|
||||
</div>
|
||||
);
|
||||
|
||||
if (SettingsStore.isFeatureEnabled("feature_rich_quoting")) {
|
||||
replyButton = (
|
||||
<div className="mx_MessageContextMenu_field" onClick={this.onReplyClick}>
|
||||
{ _t('Reply') }
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
if (this.state.canPin) {
|
||||
pinButton = (
|
||||
<div className="mx_MessageContextMenu_field" onClick={this.onPinClick}>
|
||||
{ this._isPinned() ? _t('Unpin Message') : _t('Pin Message') }
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
viewSourceButton = (
|
||||
const viewSourceButton = (
|
||||
<div className="mx_MessageContextMenu_field" onClick={this.onViewSourceClick}>
|
||||
{ _t('View Source') }
|
||||
</div>
|
||||
@@ -213,42 +277,49 @@ module.exports = React.createClass({
|
||||
}
|
||||
|
||||
// XXX: if we use room ID, we should also include a server where the event can be found (other than in the domain of the event ID)
|
||||
permalinkButton = (
|
||||
const permalinkButton = (
|
||||
<div className="mx_MessageContextMenu_field">
|
||||
<a href={ "https://matrix.to/#/" + this.props.mxEvent.getRoomId() +"/"+ this.props.mxEvent.getId() }
|
||||
target="_blank" rel="noopener" onClick={ this.closeMenu }>{ _t('Permalink') }</a>
|
||||
<a href={makeEventPermalink(this.props.mxEvent.getRoomId(), this.props.mxEvent.getId())}
|
||||
target="_blank" rel="noopener" onClick={this.closeMenu}>{ _t('Permalink') }</a>
|
||||
</div>
|
||||
);
|
||||
|
||||
const quoteButton = (
|
||||
<div className="mx_MessageContextMenu_field" onClick={this.onQuoteClick}>
|
||||
{ _t('Quote') }
|
||||
</div>
|
||||
);
|
||||
if (this.props.eventTileOps && this.props.eventTileOps.getInnerText) {
|
||||
quoteButton = (
|
||||
<div className="mx_MessageContextMenu_field" onClick={this.onQuoteClick}>
|
||||
{ _t('Quote') }
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
// Bridges can provide a 'external_url' to link back to the source.
|
||||
if( typeof(this.props.mxEvent.event.content.external_url) === "string") {
|
||||
externalURLButton = (
|
||||
<div className="mx_MessageContextMenu_field">
|
||||
<a href={ this.props.mxEvent.event.content.external_url }
|
||||
rel="noopener" target="_blank" onClick={ this.closeMenu }>{ _t('Source URL') }</a>
|
||||
</div>
|
||||
if (
|
||||
typeof(this.props.mxEvent.event.content.external_url) === "string" &&
|
||||
isUrlPermitted(this.props.mxEvent.event.content.external_url)
|
||||
) {
|
||||
externalURLButton = (
|
||||
<div className="mx_MessageContextMenu_field">
|
||||
<a href={this.props.mxEvent.event.content.external_url}
|
||||
rel="noopener" target="_blank" onClick={this.closeMenu}>{ _t('Source URL') }</a>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
return (
|
||||
<div>
|
||||
{resendButton}
|
||||
{redactButton}
|
||||
{cancelButton}
|
||||
{forwardButton}
|
||||
{viewSourceButton}
|
||||
{viewClearSourceButton}
|
||||
{unhidePreviewButton}
|
||||
{permalinkButton}
|
||||
{UserSettingsStore.isFeatureEnabled('rich_text_editor') ? quoteButton : null}
|
||||
{externalURLButton}
|
||||
{ resendButton }
|
||||
{ redactButton }
|
||||
{ cancelButton }
|
||||
{ forwardButton }
|
||||
{ pinButton }
|
||||
{ viewSourceButton }
|
||||
{ viewClearSourceButton }
|
||||
{ unhidePreviewButton }
|
||||
{ permalinkButton }
|
||||
{ quoteButton }
|
||||
{ replyButton }
|
||||
{ externalURLButton }
|
||||
</div>
|
||||
);
|
||||
},
|
||||
|
||||
101
src/components/views/context_menus/PresenceContextMenu.js
Normal file
101
src/components/views/context_menus/PresenceContextMenu.js
Normal file
@@ -0,0 +1,101 @@
|
||||
/*
|
||||
Copyright 2017 Travis Ralston
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
import React from 'react';
|
||||
import { _t, _td } from 'matrix-react-sdk/lib/languageHandler';
|
||||
import sdk from 'matrix-react-sdk';
|
||||
|
||||
const STATUS_LABELS = {
|
||||
"online": _td("Online"),
|
||||
"unavailable": _td("Away"),
|
||||
"offline": _td("Appear Offline"),
|
||||
};
|
||||
|
||||
const PresenceContextMenuOption = React.createClass({
|
||||
displayName: 'PresenceContextMenuOption',
|
||||
|
||||
propTypes: {
|
||||
forStatus: React.PropTypes.string.isRequired,
|
||||
isCurrent: React.PropTypes.bool,
|
||||
onChange: React.PropTypes.func.isRequired,
|
||||
},
|
||||
|
||||
onClick: function() {
|
||||
if (this.isCurrent) return;
|
||||
this.props.onChange(this.props.forStatus);
|
||||
},
|
||||
|
||||
render: function() {
|
||||
const AccessibleButton = sdk.getComponent("elements.AccessibleButton");
|
||||
|
||||
const indicatorClasses = "mx_PresenceContextMenuOption_indicator "
|
||||
+ "mx_PresenceContextMenuOption_indicator_" + this.props.forStatus;
|
||||
|
||||
let classNames = "mx_PresenceContextMenuOption";
|
||||
if (this.props.isCurrent) classNames += " mx_PresenceContextMenuOption_current";
|
||||
|
||||
return (
|
||||
<AccessibleButton className={classNames} element="div" onClick={this.onClick}>
|
||||
<div className={indicatorClasses}></div>
|
||||
{ _t(STATUS_LABELS[this.props.forStatus]) }
|
||||
</AccessibleButton>
|
||||
);
|
||||
},
|
||||
});
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'PresenceContextMenu',
|
||||
|
||||
propTypes: {
|
||||
// "online", "unavailable", or "offline"
|
||||
currentStatus: React.PropTypes.string.isRequired,
|
||||
|
||||
// Called when the user wants to change their status.
|
||||
// Args: (newStatus:string)
|
||||
onChange: React.PropTypes.func.isRequired,
|
||||
|
||||
// callback called when the menu is dismissed
|
||||
onFinished: React.PropTypes.func,
|
||||
},
|
||||
|
||||
getInitialState() {
|
||||
return {
|
||||
currentStatus: this.props.currentStatus,
|
||||
};
|
||||
},
|
||||
|
||||
onChange: function(newStatus) {
|
||||
this.props.onChange(newStatus);
|
||||
this.setState({currentStatus: newStatus});
|
||||
},
|
||||
|
||||
render: function() {
|
||||
const statusElements = [];
|
||||
for (let status of Object.keys(STATUS_LABELS)) {
|
||||
statusElements.push((
|
||||
<PresenceContextMenuOption forStatus={status} key={status}
|
||||
onChange={this.onChange}
|
||||
isCurrent={status === this.state.currentStatus} />
|
||||
));
|
||||
}
|
||||
|
||||
return (
|
||||
<div>
|
||||
{ statusElements }
|
||||
</div>
|
||||
);
|
||||
},
|
||||
});
|
||||
@@ -17,25 +17,27 @@ limitations under the License.
|
||||
|
||||
'use strict';
|
||||
|
||||
import q from 'q';
|
||||
import Promise from 'bluebird';
|
||||
import React from 'react';
|
||||
import classNames from 'classnames';
|
||||
import PropTypes from 'prop-types';
|
||||
import sdk from 'matrix-react-sdk';
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
import { _t, _td } from 'matrix-react-sdk/lib/languageHandler';
|
||||
import MatrixClientPeg from 'matrix-react-sdk/lib/MatrixClientPeg';
|
||||
import dis from 'matrix-react-sdk/lib/dispatcher';
|
||||
import DMRoomMap from 'matrix-react-sdk/lib/utils/DMRoomMap';
|
||||
import * as Rooms from 'matrix-react-sdk/lib/Rooms';
|
||||
import * as RoomNotifs from 'matrix-react-sdk/lib/RoomNotifs';
|
||||
import Modal from 'matrix-react-sdk/lib/Modal';
|
||||
import RoomListActions from 'matrix-react-sdk/lib/actions/RoomListActions';
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'RoomTileContextMenu',
|
||||
|
||||
propTypes: {
|
||||
room: React.PropTypes.object.isRequired,
|
||||
room: PropTypes.object.isRequired,
|
||||
/* callback called when the menu is dismissed */
|
||||
onFinished: React.PropTypes.func,
|
||||
onFinished: PropTypes.func,
|
||||
},
|
||||
|
||||
getInitialState() {
|
||||
@@ -45,7 +47,7 @@ module.exports = React.createClass({
|
||||
isFavourite: this.props.room.tags.hasOwnProperty("m.favourite"),
|
||||
isLowPriority: this.props.room.tags.hasOwnProperty("m.lowpriority"),
|
||||
isDirectMessage: Boolean(dmRoomMap.getUserIdForRoomId(this.props.room.roomId)),
|
||||
}
|
||||
};
|
||||
},
|
||||
|
||||
componentWillMount: function() {
|
||||
@@ -57,42 +59,16 @@ module.exports = React.createClass({
|
||||
},
|
||||
|
||||
_toggleTag: function(tagNameOn, tagNameOff) {
|
||||
var self = this;
|
||||
const roomId = this.props.room.roomId;
|
||||
var cli = MatrixClientPeg.get();
|
||||
if (!cli.isGuest()) {
|
||||
q.delay(500).then(function() {
|
||||
if (tagNameOff !== null && tagNameOff !== undefined) {
|
||||
cli.deleteRoomTag(roomId, tagNameOff).finally(function() {
|
||||
// Close the context menu
|
||||
if (self.props.onFinished) {
|
||||
self.props.onFinished();
|
||||
};
|
||||
}).fail(function(err) {
|
||||
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
title: _t('Failed to remove tag %(tagName)s from room', {tagName: tagNameOff}),
|
||||
description: ((err && err.message) ? err.message : _t('Operation failed')),
|
||||
});
|
||||
});
|
||||
}
|
||||
if (!MatrixClientPeg.get().isGuest()) {
|
||||
Promise.delay(500).then(() => {
|
||||
dis.dispatch(RoomListActions.tagRoom(
|
||||
MatrixClientPeg.get(),
|
||||
this.props.room,
|
||||
tagNameOff, tagNameOn,
|
||||
undefined, 0,
|
||||
), true);
|
||||
|
||||
if (tagNameOn !== null && tagNameOn !== undefined) {
|
||||
// If the tag ordering meta data is required, it is added by
|
||||
// the RoomSubList when it sorts its rooms
|
||||
cli.setRoomTag(roomId, tagNameOn, {}).finally(function() {
|
||||
// Close the context menu
|
||||
if (self.props.onFinished) {
|
||||
self.props.onFinished();
|
||||
};
|
||||
}).fail(function(err) {
|
||||
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
title: _t('Failed to remove tag %(tagName)s from room', {tagName: tagNameOn}),
|
||||
description: ((err && err.message) ? err.message : _t('Operation failed')),
|
||||
});
|
||||
});
|
||||
}
|
||||
this.props.onFinished();
|
||||
});
|
||||
}
|
||||
},
|
||||
@@ -132,23 +108,23 @@ module.exports = React.createClass({
|
||||
},
|
||||
|
||||
_onClickDM: function() {
|
||||
if (MatrixClientPeg.get().isGuest()) return;
|
||||
|
||||
const newIsDirectMessage = !this.state.isDirectMessage;
|
||||
this.setState({
|
||||
isDirectMessage: newIsDirectMessage,
|
||||
});
|
||||
|
||||
if (MatrixClientPeg.get().isGuest()) return;
|
||||
|
||||
Rooms.guessAndSetDMRoom(
|
||||
this.props.room, newIsDirectMessage
|
||||
this.props.room, newIsDirectMessage,
|
||||
).delay(500).finally(() => {
|
||||
// Close the context menu
|
||||
if (this.props.onFinished) {
|
||||
this.props.onFinished();
|
||||
};
|
||||
}
|
||||
}, (err) => {
|
||||
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
Modal.createTrackedDialog('Failed to set Direct Message status of room', '', ErrorDialog, {
|
||||
title: _t('Failed to set Direct Message status of room'),
|
||||
description: ((err && err.message) ? err.message : _t('Operation failed')),
|
||||
});
|
||||
@@ -165,7 +141,7 @@ module.exports = React.createClass({
|
||||
// Close the context menu
|
||||
if (this.props.onFinished) {
|
||||
this.props.onFinished();
|
||||
};
|
||||
}
|
||||
},
|
||||
|
||||
_onClickReject: function() {
|
||||
@@ -177,7 +153,7 @@ module.exports = React.createClass({
|
||||
// Close the context menu
|
||||
if (this.props.onFinished) {
|
||||
this.props.onFinished();
|
||||
};
|
||||
}
|
||||
},
|
||||
|
||||
_onClickForget: function() {
|
||||
@@ -185,9 +161,9 @@ module.exports = React.createClass({
|
||||
MatrixClientPeg.get().forget(this.props.room.roomId).done(function() {
|
||||
dis.dispatch({ action: 'view_next_room' });
|
||||
}, function(err) {
|
||||
var errCode = err.errcode || "unknown error code";
|
||||
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
const errCode = err.errcode || _td("unknown error code");
|
||||
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
Modal.createTrackedDialog('Failed to forget room', '', ErrorDialog, {
|
||||
title: _t('Failed to forget room %(errCode)s', {errCode: errCode}),
|
||||
description: ((err && err.message) ? err.message : _t('Operation failed')),
|
||||
});
|
||||
@@ -196,28 +172,27 @@ module.exports = React.createClass({
|
||||
// Close the context menu
|
||||
if (this.props.onFinished) {
|
||||
this.props.onFinished();
|
||||
};
|
||||
}
|
||||
},
|
||||
|
||||
_saveNotifState: function(newState) {
|
||||
if (MatrixClientPeg.get().isGuest()) return;
|
||||
|
||||
const oldState = this.state.roomNotifState;
|
||||
const roomId = this.props.room.roomId;
|
||||
var cli = MatrixClientPeg.get();
|
||||
|
||||
if (cli.isGuest()) return;
|
||||
|
||||
this.setState({
|
||||
roomNotifState: newState,
|
||||
});
|
||||
RoomNotifs.setRoomNotifsState(this.props.room.roomId, newState).done(() => {
|
||||
RoomNotifs.setRoomNotifsState(roomId, newState).done(() => {
|
||||
// delay slightly so that the user can see their state change
|
||||
// before closing the menu
|
||||
return q.delay(500).then(() => {
|
||||
return Promise.delay(500).then(() => {
|
||||
if (this._unmounted) return;
|
||||
// Close the context menu
|
||||
if (this.props.onFinished) {
|
||||
this.props.onFinished();
|
||||
};
|
||||
}
|
||||
});
|
||||
}, (error) => {
|
||||
// TODO: some form of error notification to the user
|
||||
@@ -247,22 +222,22 @@ module.exports = React.createClass({
|
||||
},
|
||||
|
||||
_renderNotifMenu: function() {
|
||||
var alertMeClasses = classNames({
|
||||
const alertMeClasses = classNames({
|
||||
'mx_RoomTileContextMenu_notif_field': true,
|
||||
'mx_RoomTileContextMenu_notif_fieldSet': this.state.roomNotifState == RoomNotifs.ALL_MESSAGES_LOUD,
|
||||
});
|
||||
|
||||
var allNotifsClasses = classNames({
|
||||
const allNotifsClasses = classNames({
|
||||
'mx_RoomTileContextMenu_notif_field': true,
|
||||
'mx_RoomTileContextMenu_notif_fieldSet': this.state.roomNotifState == RoomNotifs.ALL_MESSAGES,
|
||||
});
|
||||
|
||||
var mentionsClasses = classNames({
|
||||
const mentionsClasses = classNames({
|
||||
'mx_RoomTileContextMenu_notif_field': true,
|
||||
'mx_RoomTileContextMenu_notif_fieldSet': this.state.roomNotifState == RoomNotifs.MENTIONS_ONLY,
|
||||
});
|
||||
|
||||
var muteNotifsClasses = classNames({
|
||||
const muteNotifsClasses = classNames({
|
||||
'mx_RoomTileContextMenu_notif_field': true,
|
||||
'mx_RoomTileContextMenu_notif_fieldSet': this.state.roomNotifState == RoomNotifs.MUTE,
|
||||
});
|
||||
@@ -272,22 +247,22 @@ module.exports = React.createClass({
|
||||
<div className="mx_RoomTileContextMenu_notif_picker" >
|
||||
<img src="img/notif-slider.svg" width="20" height="107" />
|
||||
</div>
|
||||
<div className={ alertMeClasses } onClick={this._onClickAlertMe} >
|
||||
<div className={alertMeClasses} onClick={this._onClickAlertMe} >
|
||||
<img className="mx_RoomTileContextMenu_notif_activeIcon" src="img/notif-active.svg" width="12" height="12" />
|
||||
<img className="mx_RoomTileContextMenu_notif_icon mx_filterFlipColor" src="img/icon-context-mute-off-copy.svg" width="16" height="12" />
|
||||
{ _t('All messages (loud)') }
|
||||
{ _t('All messages (noisy)') }
|
||||
</div>
|
||||
<div className={ allNotifsClasses } onClick={this._onClickAllNotifs} >
|
||||
<div className={allNotifsClasses} onClick={this._onClickAllNotifs} >
|
||||
<img className="mx_RoomTileContextMenu_notif_activeIcon" src="img/notif-active.svg" width="12" height="12" />
|
||||
<img className="mx_RoomTileContextMenu_notif_icon mx_filterFlipColor" src="img/icon-context-mute-off.svg" width="16" height="12" />
|
||||
{ _t('All messages') }
|
||||
</div>
|
||||
<div className={ mentionsClasses } onClick={this._onClickMentions} >
|
||||
<div className={mentionsClasses} onClick={this._onClickMentions} >
|
||||
<img className="mx_RoomTileContextMenu_notif_activeIcon" src="img/notif-active.svg" width="12" height="12" />
|
||||
<img className="mx_RoomTileContextMenu_notif_icon mx_filterFlipColor" src="img/icon-context-mute-mentions.svg" width="16" height="12" />
|
||||
{ _t('Mentions only') }
|
||||
</div>
|
||||
<div className={ muteNotifsClasses } onClick={this._onClickMute} >
|
||||
<div className={muteNotifsClasses} onClick={this._onClickMute} >
|
||||
<img className="mx_RoomTileContextMenu_notif_activeIcon" src="img/notif-active.svg" width="12" height="12" />
|
||||
<img className="mx_RoomTileContextMenu_notif_icon mx_filterFlipColor" src="img/icon-context-mute.svg" width="16" height="12" />
|
||||
{ _t('Mute') }
|
||||
@@ -322,7 +297,7 @@ module.exports = React.createClass({
|
||||
|
||||
return (
|
||||
<div>
|
||||
<div className="mx_RoomTileContextMenu_leave" onClick={ leaveClickHandler } >
|
||||
<div className="mx_RoomTileContextMenu_leave" onClick={leaveClickHandler} >
|
||||
<img className="mx_RoomTileContextMenu_tag_icon" src="img/icon_context_delete.svg" width="15" height="15" />
|
||||
{ leaveText }
|
||||
</div>
|
||||
@@ -351,17 +326,17 @@ module.exports = React.createClass({
|
||||
|
||||
return (
|
||||
<div>
|
||||
<div className={ favouriteClasses } onClick={this._onClickFavourite} >
|
||||
<div className={favouriteClasses} onClick={this._onClickFavourite} >
|
||||
<img className="mx_RoomTileContextMenu_tag_icon" src="img/icon_context_fave.svg" width="15" height="15" />
|
||||
<img className="mx_RoomTileContextMenu_tag_icon_set" src="img/icon_context_fave_on.svg" width="15" height="15" />
|
||||
{ _t('Favourite') }
|
||||
</div>
|
||||
<div className={ lowPriorityClasses } onClick={this._onClickLowPriority} >
|
||||
<div className={lowPriorityClasses} onClick={this._onClickLowPriority} >
|
||||
<img className="mx_RoomTileContextMenu_tag_icon" src="img/icon_context_low.svg" width="15" height="15" />
|
||||
<img className="mx_RoomTileContextMenu_tag_icon_set" src="img/icon_context_low_on.svg" width="15" height="15" />
|
||||
{ _t('Low Priority') }
|
||||
</div>
|
||||
<div className={ dmClasses } onClick={this._onClickDM} >
|
||||
<div className={dmClasses} onClick={this._onClickDM} >
|
||||
<img className="mx_RoomTileContextMenu_tag_icon" src="img/icon_context_person.svg" width="15" height="15" />
|
||||
<img className="mx_RoomTileContextMenu_tag_icon_set" src="img/icon_context_person_on.svg" width="15" height="15" />
|
||||
{ _t('Direct Chat') }
|
||||
@@ -372,7 +347,7 @@ module.exports = React.createClass({
|
||||
|
||||
render: function() {
|
||||
const myMember = this.props.room.getMember(
|
||||
MatrixClientPeg.get().credentials.userId
|
||||
MatrixClientPeg.get().credentials.userId,
|
||||
);
|
||||
|
||||
// Can't set notif level or tags on non-join rooms
|
||||
@@ -389,5 +364,5 @@ module.exports = React.createClass({
|
||||
{ this._renderRoomTagMenu() }
|
||||
</div>
|
||||
);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
75
src/components/views/context_menus/TagTileContextMenu.js
Normal file
75
src/components/views/context_menus/TagTileContextMenu.js
Normal file
@@ -0,0 +1,75 @@
|
||||
/*
|
||||
Copyright 2018 New Vector Ltd
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
import dis from 'matrix-react-sdk/lib/dispatcher';
|
||||
import TagOrderActions from 'matrix-react-sdk/lib/actions/TagOrderActions';
|
||||
import MatrixClientPeg from 'matrix-react-sdk/lib/MatrixClientPeg';
|
||||
import sdk from 'matrix-react-sdk/lib/index';
|
||||
|
||||
export default class TagTileContextMenu extends React.Component {
|
||||
static propTypes = {
|
||||
tag: PropTypes.string.isRequired,
|
||||
/* callback called when the menu is dismissed */
|
||||
onFinished: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
this._onViewCommunityClick = this._onViewCommunityClick.bind(this);
|
||||
this._onRemoveClick = this._onRemoveClick.bind(this);
|
||||
}
|
||||
|
||||
_onViewCommunityClick() {
|
||||
dis.dispatch({
|
||||
action: 'view_group',
|
||||
group_id: this.props.tag,
|
||||
});
|
||||
this.props.onFinished();
|
||||
}
|
||||
|
||||
_onRemoveClick() {
|
||||
dis.dispatch(TagOrderActions.removeTag(
|
||||
// XXX: Context menus don't have a MatrixClient context
|
||||
MatrixClientPeg.get(),
|
||||
this.props.tag,
|
||||
));
|
||||
this.props.onFinished();
|
||||
}
|
||||
|
||||
render() {
|
||||
const TintableSvg = sdk.getComponent("elements.TintableSvg");
|
||||
return <div>
|
||||
<div className="mx_TagTileContextMenu_item" onClick={this._onViewCommunityClick} >
|
||||
<TintableSvg
|
||||
className="mx_TagTileContextMenu_item_icon"
|
||||
src="img/icons-groups.svg"
|
||||
width="15"
|
||||
height="15"
|
||||
/>
|
||||
{ _t('View Community') }
|
||||
</div>
|
||||
<hr className="mx_TagTileContextMenu_separator" />
|
||||
<div className="mx_TagTileContextMenu_item" onClick={this._onRemoveClick} >
|
||||
<img className="mx_TagTileContextMenu_item_icon" src="img/icon_context_delete.svg" width="15" height="15" />
|
||||
{ _t('Remove') }
|
||||
</div>
|
||||
</div>;
|
||||
}
|
||||
}
|
||||
@@ -17,6 +17,7 @@ limitations under the License.
|
||||
import React from 'react';
|
||||
import sdk from 'matrix-react-sdk';
|
||||
import SdkConfig from 'matrix-react-sdk/lib/SdkConfig';
|
||||
import Modal from 'matrix-react-sdk/lib/Modal';
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
|
||||
export default class BugReportDialog extends React.Component {
|
||||
@@ -64,8 +65,13 @@ export default class BugReportDialog extends React.Component {
|
||||
progressCallback: this._sendProgressCallback,
|
||||
}).then(() => {
|
||||
if (!this._unmounted) {
|
||||
this.setState({ busy: false, progress: null });
|
||||
this.props.onFinished(false);
|
||||
const QuestionDialog = sdk.getComponent("dialogs.QuestionDialog");
|
||||
Modal.createTrackedDialog('Bug report sent', '', QuestionDialog, {
|
||||
title: _t('Bug report sent'),
|
||||
description: _t('Thank you!'),
|
||||
hasCancelButton: false,
|
||||
});
|
||||
}
|
||||
}, (err) => {
|
||||
if (!this._unmounted) {
|
||||
|
||||
623
src/components/views/dialogs/DevtoolsDialog.js
Normal file
623
src/components/views/dialogs/DevtoolsDialog.js
Normal file
@@ -0,0 +1,623 @@
|
||||
/*
|
||||
Copyright 2017 Michael Telatynski <7t3chguy@gmail.com>
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import sdk from 'matrix-react-sdk';
|
||||
import SyntaxHighlight from '../elements/SyntaxHighlight';
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
import MatrixClientPeg from 'matrix-react-sdk/lib/MatrixClientPeg';
|
||||
|
||||
class DevtoolsComponent extends React.Component {
|
||||
static contextTypes = {
|
||||
roomId: PropTypes.string.isRequired,
|
||||
};
|
||||
}
|
||||
|
||||
class GenericEditor extends DevtoolsComponent {
|
||||
// static propTypes = {onBack: PropTypes.func.isRequired};
|
||||
|
||||
constructor(props, context) {
|
||||
super(props, context);
|
||||
this._onChange = this._onChange.bind(this);
|
||||
this.onBack = this.onBack.bind(this);
|
||||
}
|
||||
|
||||
onBack() {
|
||||
if (this.state.message) {
|
||||
this.setState({ message: null });
|
||||
} else {
|
||||
this.props.onBack();
|
||||
}
|
||||
}
|
||||
|
||||
_onChange(e) {
|
||||
this.setState({[e.target.id]: e.target.type === 'checkbox' ? e.target.checked : e.target.value});
|
||||
}
|
||||
|
||||
_buttons() {
|
||||
return <div className="mx_Dialog_buttons">
|
||||
<button onClick={this.onBack}>{ _t('Back') }</button>
|
||||
{ !this.state.message && <button onClick={this._send}>{ _t('Send') }</button> }
|
||||
</div>;
|
||||
}
|
||||
|
||||
textInput(id, label) {
|
||||
return <div className="mx_DevTools_inputRow">
|
||||
<div className="mx_DevTools_inputLabelCell">
|
||||
<label htmlFor={id}>{ label }</label>
|
||||
</div>
|
||||
<div className="mx_DevTools_inputCell">
|
||||
<input id={id} className="mx_TextInputDialog_input" onChange={this._onChange} value={this.state[id]} size="32" />
|
||||
</div>
|
||||
</div>;
|
||||
}
|
||||
}
|
||||
|
||||
class SendCustomEvent extends GenericEditor {
|
||||
static getLabel() { return _t('Send Custom Event'); }
|
||||
|
||||
static propTypes = {
|
||||
onBack: PropTypes.func.isRequired,
|
||||
forceStateEvent: PropTypes.bool,
|
||||
inputs: PropTypes.object,
|
||||
};
|
||||
|
||||
constructor(props, context) {
|
||||
super(props, context);
|
||||
this._send = this._send.bind(this);
|
||||
|
||||
const {eventType, stateKey, evContent} = Object.assign({
|
||||
eventType: '',
|
||||
stateKey: '',
|
||||
evContent: '{\n\n}',
|
||||
}, this.props.inputs);
|
||||
|
||||
this.state = {
|
||||
isStateEvent: Boolean(this.props.forceStateEvent),
|
||||
|
||||
eventType,
|
||||
stateKey,
|
||||
evContent,
|
||||
};
|
||||
}
|
||||
|
||||
send(content) {
|
||||
const cli = MatrixClientPeg.get();
|
||||
if (this.state.isStateEvent) {
|
||||
return cli.sendStateEvent(this.context.roomId, this.state.eventType, content, this.state.stateKey);
|
||||
} else {
|
||||
return cli.sendEvent(this.context.roomId, this.state.eventType, content);
|
||||
}
|
||||
}
|
||||
|
||||
async _send() {
|
||||
if (this.state.eventType === '') {
|
||||
this.setState({ message: _t('You must specify an event type!') });
|
||||
return;
|
||||
}
|
||||
|
||||
let message;
|
||||
try {
|
||||
const content = JSON.parse(this.state.evContent);
|
||||
await this.send(content);
|
||||
message = _t('Event sent!');
|
||||
} catch (e) {
|
||||
message = _t('Failed to send custom event.') + ' (' + e.toString() + ')';
|
||||
}
|
||||
this.setState({ message });
|
||||
}
|
||||
|
||||
render() {
|
||||
if (this.state.message) {
|
||||
return <div>
|
||||
<div className="mx_Dialog_content">
|
||||
{ this.state.message }
|
||||
</div>
|
||||
{ this._buttons() }
|
||||
</div>;
|
||||
}
|
||||
|
||||
return <div>
|
||||
<div className="mx_Dialog_content">
|
||||
{ this.textInput('eventType', _t('Event Type')) }
|
||||
{ this.state.isStateEvent && this.textInput('stateKey', _t('State Key')) }
|
||||
|
||||
<br />
|
||||
|
||||
<div className="mx_UserSettings_profileLabelCell">
|
||||
<label htmlFor="evContent"> { _t('Event Content') } </label>
|
||||
</div>
|
||||
<div>
|
||||
<textarea id="evContent" onChange={this._onChange} value={this.state.evContent} className="mx_TextInputDialog_input" cols="63" rows="5" />
|
||||
</div>
|
||||
</div>
|
||||
<div className="mx_Dialog_buttons">
|
||||
<button onClick={this.onBack}>{ _t('Back') }</button>
|
||||
{ !this.state.message && <button onClick={this._send}>{ _t('Send') }</button> }
|
||||
{ !this.state.message && !this.props.forceStateEvent && <div style={{float: "right"}}>
|
||||
<input id="isStateEvent" className="mx_DevTools_tgl mx_DevTools_tgl-flip" type="checkbox" onChange={this._onChange} checked={this.state.isStateEvent} />
|
||||
<label className="mx_DevTools_tgl-btn" data-tg-off="Event" data-tg-on="State Event" htmlFor="isStateEvent" />
|
||||
</div> }
|
||||
</div>
|
||||
</div>;
|
||||
}
|
||||
}
|
||||
|
||||
class SendAccountData extends GenericEditor {
|
||||
static getLabel() { return _t('Send Account Data'); }
|
||||
|
||||
static propTypes = {
|
||||
isRoomAccountData: PropTypes.bool,
|
||||
forceMode: PropTypes.bool,
|
||||
inputs: PropTypes.object,
|
||||
};
|
||||
|
||||
constructor(props, context) {
|
||||
super(props, context);
|
||||
this._send = this._send.bind(this);
|
||||
|
||||
const {eventType, evContent} = Object.assign({
|
||||
eventType: '',
|
||||
evContent: '{\n\n}',
|
||||
}, this.props.inputs);
|
||||
|
||||
this.state = {
|
||||
isRoomAccountData: Boolean(this.props.isRoomAccountData),
|
||||
|
||||
eventType,
|
||||
evContent,
|
||||
};
|
||||
}
|
||||
|
||||
send(content) {
|
||||
const cli = MatrixClientPeg.get();
|
||||
if (this.state.isRoomAccountData) {
|
||||
return cli.setRoomAccountData(this.context.roomId, this.state.eventType, content);
|
||||
}
|
||||
return cli.setAccountData(this.state.eventType, content);
|
||||
}
|
||||
|
||||
async _send() {
|
||||
if (this.state.eventType === '') {
|
||||
this.setState({ message: _t('You must specify an event type!') });
|
||||
return;
|
||||
}
|
||||
|
||||
let message;
|
||||
try {
|
||||
const content = JSON.parse(this.state.evContent);
|
||||
await this.send(content);
|
||||
message = _t('Event sent!');
|
||||
} catch (e) {
|
||||
message = _t('Failed to send custom event.') + ' (' + e.toString() + ')';
|
||||
}
|
||||
this.setState({ message });
|
||||
}
|
||||
|
||||
render() {
|
||||
if (this.state.message) {
|
||||
return <div>
|
||||
<div className="mx_Dialog_content">
|
||||
{ this.state.message }
|
||||
</div>
|
||||
{ this._buttons() }
|
||||
</div>;
|
||||
}
|
||||
|
||||
return <div>
|
||||
<div className="mx_Dialog_content">
|
||||
{ this.textInput('eventType', _t('Event Type')) }
|
||||
<br />
|
||||
|
||||
<div className="mx_UserSettings_profileLabelCell">
|
||||
<label htmlFor="evContent"> { _t('Event Content') } </label>
|
||||
</div>
|
||||
<div>
|
||||
<textarea id="evContent" onChange={this._onChange} value={this.state.evContent} className="mx_TextInputDialog_input" cols="63" rows="5" />
|
||||
</div>
|
||||
</div>
|
||||
<div className="mx_Dialog_buttons">
|
||||
<button onClick={this.onBack}>{ _t('Back') }</button>
|
||||
{ !this.state.message && <button onClick={this._send}>{ _t('Send') }</button> }
|
||||
{ !this.state.message && <div style={{float: "right"}}>
|
||||
<input id="isRoomAccountData" className="mx_DevTools_tgl mx_DevTools_tgl-flip" type="checkbox" onChange={this._onChange} checked={this.state.isRoomAccountData} disabled={this.props.forceMode} />
|
||||
<label className="mx_DevTools_tgl-btn" data-tg-off="Account Data" data-tg-on="Room Data" htmlFor="isRoomAccountData" />
|
||||
</div> }
|
||||
</div>
|
||||
</div>;
|
||||
}
|
||||
}
|
||||
|
||||
class FilteredList extends React.Component {
|
||||
static propTypes = {
|
||||
children: PropTypes.any,
|
||||
query: PropTypes.string,
|
||||
onChange: PropTypes.func,
|
||||
};
|
||||
|
||||
constructor(props, context) {
|
||||
super(props, context);
|
||||
this.onQuery = this.onQuery.bind(this);
|
||||
}
|
||||
|
||||
onQuery(ev) {
|
||||
if (this.props.onChange) this.props.onChange(ev.target.value);
|
||||
}
|
||||
|
||||
filterChildren() {
|
||||
if (this.props.query) {
|
||||
const lowerQuery = this.props.query.toLowerCase();
|
||||
return this.props.children.filter((child) => child.key.toLowerCase().includes(lowerQuery));
|
||||
}
|
||||
return this.props.children;
|
||||
}
|
||||
|
||||
render() {
|
||||
return <div>
|
||||
<input size="64"
|
||||
onChange={this.onQuery}
|
||||
value={this.props.query}
|
||||
placeholder={_t('Filter results')}
|
||||
className="mx_TextInputDialog_input mx_DevTools_RoomStateExplorer_query" />
|
||||
{ this.filterChildren() }
|
||||
</div>;
|
||||
}
|
||||
}
|
||||
|
||||
class RoomStateExplorer extends DevtoolsComponent {
|
||||
static getLabel() { return _t('Explore Room State'); }
|
||||
|
||||
|
||||
static propTypes = {
|
||||
onBack: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
constructor(props, context) {
|
||||
super(props, context);
|
||||
|
||||
const room = MatrixClientPeg.get().getRoom(this.context.roomId);
|
||||
this.roomStateEvents = room.currentState.events;
|
||||
|
||||
this.onBack = this.onBack.bind(this);
|
||||
this.editEv = this.editEv.bind(this);
|
||||
this.onQueryEventType = this.onQueryEventType.bind(this);
|
||||
this.onQueryStateKey = this.onQueryStateKey.bind(this);
|
||||
|
||||
this.state = {
|
||||
eventType: null,
|
||||
event: null,
|
||||
editing: false,
|
||||
|
||||
queryEventType: '',
|
||||
queryStateKey: '',
|
||||
};
|
||||
}
|
||||
|
||||
browseEventType(eventType) {
|
||||
return () => {
|
||||
this.setState({ eventType });
|
||||
};
|
||||
}
|
||||
|
||||
onViewSourceClick(event) {
|
||||
return () => {
|
||||
this.setState({ event });
|
||||
};
|
||||
}
|
||||
|
||||
onBack() {
|
||||
if (this.state.editing) {
|
||||
this.setState({ editing: false });
|
||||
} else if (this.state.event) {
|
||||
this.setState({ event: null });
|
||||
} else if (this.state.eventType) {
|
||||
this.setState({ eventType: null });
|
||||
} else {
|
||||
this.props.onBack();
|
||||
}
|
||||
}
|
||||
|
||||
editEv() {
|
||||
this.setState({ editing: true });
|
||||
}
|
||||
|
||||
onQueryEventType(filterEventType) {
|
||||
this.setState({ queryEventType: filterEventType });
|
||||
}
|
||||
|
||||
onQueryStateKey(filterStateKey) {
|
||||
this.setState({ queryStateKey: filterStateKey });
|
||||
}
|
||||
|
||||
render() {
|
||||
if (this.state.event) {
|
||||
if (this.state.editing) {
|
||||
return <SendCustomEvent forceStateEvent={true} onBack={this.onBack} inputs={{
|
||||
eventType: this.state.event.getType(),
|
||||
evContent: JSON.stringify(this.state.event.getContent(), null, '\t'),
|
||||
stateKey: this.state.event.getStateKey(),
|
||||
}} />;
|
||||
}
|
||||
|
||||
return <div className="mx_ViewSource">
|
||||
<div className="mx_Dialog_content">
|
||||
<SyntaxHighlight className="json">
|
||||
{ JSON.stringify(this.state.event.event, null, 2) }
|
||||
</SyntaxHighlight>
|
||||
</div>
|
||||
<div className="mx_Dialog_buttons">
|
||||
<button onClick={this.onBack}>{ _t('Back') }</button>
|
||||
<button onClick={this.editEv}>{ _t('Edit') }</button>
|
||||
</div>
|
||||
</div>;
|
||||
}
|
||||
|
||||
let list = null;
|
||||
|
||||
const classes = 'mx_DevTools_RoomStateExplorer_button';
|
||||
if (this.state.eventType === null) {
|
||||
list = <FilteredList query={this.state.queryEventType} onChange={this.onQueryEventType}>
|
||||
{
|
||||
Object.keys(this.roomStateEvents).map((evType) => {
|
||||
const stateGroup = this.roomStateEvents[evType];
|
||||
const stateKeys = Object.keys(stateGroup);
|
||||
|
||||
let onClickFn;
|
||||
if (stateKeys.length > 1) {
|
||||
onClickFn = this.browseEventType(evType);
|
||||
} else if (stateKeys.length === 1) {
|
||||
onClickFn = this.onViewSourceClick(stateGroup[stateKeys[0]]);
|
||||
}
|
||||
|
||||
return <button className={classes} key={evType} onClick={onClickFn}>
|
||||
{ evType }
|
||||
</button>;
|
||||
})
|
||||
}
|
||||
</FilteredList>;
|
||||
} else {
|
||||
const stateGroup = this.roomStateEvents[this.state.eventType];
|
||||
|
||||
list = <FilteredList query={this.state.queryStateKey} onChange={this.onQueryStateKey}>
|
||||
{
|
||||
Object.keys(stateGroup).map((stateKey) => {
|
||||
const ev = stateGroup[stateKey];
|
||||
return <button className={classes} key={stateKey} onClick={this.onViewSourceClick(ev)}>
|
||||
{ stateKey }
|
||||
</button>;
|
||||
})
|
||||
}
|
||||
</FilteredList>;
|
||||
}
|
||||
|
||||
return <div>
|
||||
<div className="mx_Dialog_content">
|
||||
{ list }
|
||||
</div>
|
||||
<div className="mx_Dialog_buttons">
|
||||
<button onClick={this.onBack}>{ _t('Back') }</button>
|
||||
</div>
|
||||
</div>;
|
||||
}
|
||||
}
|
||||
|
||||
class AccountDataExplorer extends DevtoolsComponent {
|
||||
static getLabel() { return _t('Explore Account Data'); }
|
||||
|
||||
static propTypes = {
|
||||
onBack: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
constructor(props, context) {
|
||||
super(props, context);
|
||||
|
||||
this.onBack = this.onBack.bind(this);
|
||||
this.editEv = this.editEv.bind(this);
|
||||
this._onChange = this._onChange.bind(this);
|
||||
this.onQueryEventType = this.onQueryEventType.bind(this);
|
||||
|
||||
this.state = {
|
||||
isRoomAccountData: false,
|
||||
event: null,
|
||||
editing: false,
|
||||
|
||||
queryEventType: '',
|
||||
};
|
||||
}
|
||||
|
||||
getData() {
|
||||
const cli = MatrixClientPeg.get();
|
||||
if (this.state.isRoomAccountData) {
|
||||
return cli.getRoom(this.context.roomId).accountData;
|
||||
}
|
||||
return cli.store.accountData;
|
||||
}
|
||||
|
||||
onViewSourceClick(event) {
|
||||
return () => {
|
||||
this.setState({ event });
|
||||
};
|
||||
}
|
||||
|
||||
onBack() {
|
||||
if (this.state.editing) {
|
||||
this.setState({ editing: false });
|
||||
} else if (this.state.event) {
|
||||
this.setState({ event: null });
|
||||
} else {
|
||||
this.props.onBack();
|
||||
}
|
||||
}
|
||||
|
||||
_onChange(e) {
|
||||
this.setState({[e.target.id]: e.target.type === 'checkbox' ? e.target.checked : e.target.value});
|
||||
}
|
||||
|
||||
editEv() {
|
||||
this.setState({ editing: true });
|
||||
}
|
||||
|
||||
onQueryEventType(queryEventType) {
|
||||
this.setState({ queryEventType });
|
||||
}
|
||||
|
||||
render() {
|
||||
if (this.state.event) {
|
||||
if (this.state.editing) {
|
||||
return <SendAccountData isRoomAccountData={this.state.isRoomAccountData} onBack={this.onBack} inputs={{
|
||||
eventType: this.state.event.getType(),
|
||||
evContent: JSON.stringify(this.state.event.getContent(), null, '\t'),
|
||||
}} forceMode={true} />;
|
||||
}
|
||||
|
||||
return <div className="mx_ViewSource">
|
||||
<div className="mx_Dialog_content">
|
||||
<SyntaxHighlight className="json">
|
||||
{ JSON.stringify(this.state.event.event, null, 2) }
|
||||
</SyntaxHighlight>
|
||||
</div>
|
||||
<div className="mx_Dialog_buttons">
|
||||
<button onClick={this.onBack}>{ _t('Back') }</button>
|
||||
<button onClick={this.editEv}>{ _t('Edit') }</button>
|
||||
</div>
|
||||
</div>;
|
||||
}
|
||||
|
||||
const rows = [];
|
||||
|
||||
const classes = 'mx_DevTools_RoomStateExplorer_button';
|
||||
|
||||
const data = this.getData();
|
||||
Object.keys(data).forEach((evType) => {
|
||||
const ev = data[evType];
|
||||
rows.push(<button className={classes} key={evType} onClick={this.onViewSourceClick(ev)}>
|
||||
{ evType }
|
||||
</button>);
|
||||
});
|
||||
|
||||
return <div>
|
||||
<div className="mx_Dialog_content">
|
||||
<FilteredList query={this.state.queryEventType} onChange={this.onQueryEventType}>
|
||||
{ rows }
|
||||
</FilteredList>
|
||||
</div>
|
||||
<div className="mx_Dialog_buttons">
|
||||
<button onClick={this.onBack}>{ _t('Back') }</button>
|
||||
{ !this.state.message && <div style={{float: "right"}}>
|
||||
<input id="isRoomAccountData" className="mx_DevTools_tgl mx_DevTools_tgl-flip" type="checkbox" onChange={this._onChange} checked={this.state.isRoomAccountData} />
|
||||
<label className="mx_DevTools_tgl-btn" data-tg-off="Account Data" data-tg-on="Room Data" htmlFor="isRoomAccountData" />
|
||||
</div> }
|
||||
</div>
|
||||
</div>;
|
||||
}
|
||||
}
|
||||
|
||||
const Entries = [
|
||||
SendCustomEvent,
|
||||
RoomStateExplorer,
|
||||
SendAccountData,
|
||||
AccountDataExplorer,
|
||||
];
|
||||
|
||||
export default class DevtoolsDialog extends React.Component {
|
||||
static childContextTypes = {
|
||||
roomId: PropTypes.string.isRequired,
|
||||
// client: PropTypes.instanceOf(MatixClient),
|
||||
};
|
||||
|
||||
static propTypes = {
|
||||
roomId: PropTypes.string.isRequired,
|
||||
onFinished: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
constructor(props, context) {
|
||||
super(props, context);
|
||||
this.onBack = this.onBack.bind(this);
|
||||
this.onCancel = this.onCancel.bind(this);
|
||||
|
||||
this.state = {
|
||||
mode: null,
|
||||
};
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
this._unmounted = true;
|
||||
}
|
||||
|
||||
getChildContext() {
|
||||
return { roomId: this.props.roomId };
|
||||
}
|
||||
|
||||
_setMode(mode) {
|
||||
return () => {
|
||||
this.setState({ mode });
|
||||
};
|
||||
}
|
||||
|
||||
onBack() {
|
||||
if (this.prevMode) {
|
||||
this.setState({ mode: this.prevMode });
|
||||
this.prevMode = null;
|
||||
} else {
|
||||
this.setState({ mode: null });
|
||||
}
|
||||
}
|
||||
|
||||
onCancel() {
|
||||
this.props.onFinished(false);
|
||||
}
|
||||
|
||||
render() {
|
||||
let body;
|
||||
|
||||
if (this.state.mode) {
|
||||
body = <div>
|
||||
<div className="mx_DevTools_label_left">{ this.state.mode.getLabel() }</div>
|
||||
<div className="mx_DevTools_label_right">Room ID: { this.props.roomId }</div>
|
||||
<div className="mx_DevTools_label_bottom" />
|
||||
<this.state.mode onBack={this.onBack} />
|
||||
</div>;
|
||||
} else {
|
||||
const classes = "mx_DevTools_RoomStateExplorer_button";
|
||||
body = <div>
|
||||
<div>
|
||||
<div className="mx_DevTools_label_left">{ _t('Toolbox') }</div>
|
||||
<div className="mx_DevTools_label_right">Room ID: { this.props.roomId }</div>
|
||||
<div className="mx_DevTools_label_bottom" />
|
||||
|
||||
<div className="mx_Dialog_content">
|
||||
{ Entries.map((Entry) => {
|
||||
const label = Entry.getLabel();
|
||||
const onClick = this._setMode(Entry);
|
||||
return <button className={classes} key={label} onClick={onClick}>{ label }</button>;
|
||||
}) }
|
||||
</div>
|
||||
</div>
|
||||
<div className="mx_Dialog_buttons">
|
||||
<button onClick={this.onCancel}>{ _t('Cancel') }</button>
|
||||
</div>
|
||||
</div>;
|
||||
}
|
||||
|
||||
const BaseDialog = sdk.getComponent('views.dialogs.BaseDialog');
|
||||
return (
|
||||
<BaseDialog className="mx_QuestionDialog" onFinished={this.props.onFinished} title={_t('Developer Tools')}>
|
||||
{ body }
|
||||
</BaseDialog>
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -150,7 +150,21 @@ export default class NetworkDropdown extends React.Component {
|
||||
if (this.props.protocols) {
|
||||
for (const proto of Object.keys(this.props.protocols)) {
|
||||
if (!this.props.protocols[proto].instances) continue;
|
||||
for (const instance of this.props.protocols[proto].instances) {
|
||||
|
||||
const sortedInstances = this.props.protocols[proto].instances;
|
||||
sortedInstances.sort(function(x, y) {
|
||||
const a = x.desc
|
||||
const b = y.desc
|
||||
if (a < b) {
|
||||
return -1;
|
||||
} else if (a > b) {
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
});
|
||||
|
||||
for (const instance of sortedInstances) {
|
||||
if (!instance.instance_id) continue;
|
||||
options.push(this._makeMenuOption(server, instance, false));
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ var React = require('react');
|
||||
|
||||
var MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg');
|
||||
|
||||
var DateUtils = require('matrix-react-sdk/lib/DateUtils');
|
||||
import {formatDate} from 'matrix-react-sdk/lib/DateUtils';
|
||||
var filesize = require('filesize');
|
||||
var AccessibleButton = require('matrix-react-sdk/lib/components/views/elements/AccessibleButton');
|
||||
const Modal = require('matrix-react-sdk/lib/Modal');
|
||||
@@ -66,7 +66,7 @@ module.exports = React.createClass({
|
||||
|
||||
onRedactClick: function() {
|
||||
const ConfirmRedactDialog = sdk.getComponent("dialogs.ConfirmRedactDialog");
|
||||
Modal.createDialog(ConfirmRedactDialog, {
|
||||
Modal.createTrackedDialog('Confirm Redact Dialog', 'Image View', ConfirmRedactDialog, {
|
||||
onFinished: (proceed) => {
|
||||
if (!proceed) return;
|
||||
var self = this;
|
||||
@@ -76,7 +76,7 @@ module.exports = React.createClass({
|
||||
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
// display error message stating you couldn't delete this.
|
||||
var code = e.errcode || e.statusCode;
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
Modal.createTrackedDialog('You cannot delete this image.', '', ErrorDialog, {
|
||||
title: _t('Error'),
|
||||
description: _t('You cannot delete this image. (%(code)s)', {code: code})
|
||||
});
|
||||
@@ -150,15 +150,23 @@ module.exports = React.createClass({
|
||||
|
||||
var eventMeta;
|
||||
if(showEventMeta) {
|
||||
// Figure out the sender, defaulting to mxid
|
||||
let sender = this.props.mxEvent.getSender();
|
||||
const room = MatrixClientPeg.get().getRoom(this.props.mxEvent.getRoomId());
|
||||
if (room) {
|
||||
const member = room.getMember(sender);
|
||||
if (member) sender = member.name;
|
||||
}
|
||||
|
||||
eventMeta = (<div className="mx_ImageView_metadata">
|
||||
{ _t('Uploaded on %(date)s by %(user)s', {date: DateUtils.formatDate(new Date(this.props.mxEvent.getTs())), user: this.props.mxEvent.getSender()}) }
|
||||
{ _t('Uploaded on %(date)s by %(user)s', {date: formatDate(new Date(this.props.mxEvent.getTs())), user: sender}) }
|
||||
</div>);
|
||||
}
|
||||
|
||||
var eventRedact;
|
||||
if(showEventMeta) {
|
||||
eventRedact = (<div className="mx_ImageView_button" onClick={this.onRedactClick}>
|
||||
{ _t('Redact') }
|
||||
{ _t('Remove') }
|
||||
</div>);
|
||||
}
|
||||
|
||||
|
||||
33
src/components/views/elements/InlineSpinner.js
Normal file
33
src/components/views/elements/InlineSpinner.js
Normal file
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
Copyright 2017 New Vector Ltd.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
const React = require('react');
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'InlineSpinner',
|
||||
|
||||
render: function() {
|
||||
var w = this.props.w || 16;
|
||||
var h = this.props.h || 16;
|
||||
var imgClass = this.props.imgClassName || "";
|
||||
|
||||
return (
|
||||
<div className="mx_InlineSpinner">
|
||||
<img src="img/spinner.gif" width={w} height={h} className={imgClass}/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
});
|
||||
53
src/components/views/elements/SyntaxHighlight.js
Normal file
53
src/components/views/elements/SyntaxHighlight.js
Normal file
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
Copyright 2017 Michael Telatynski <7t3chguy@gmail.com>
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import {highlightBlock} from 'highlight.js';
|
||||
|
||||
export default class SyntaxHighlight extends React.Component {
|
||||
static propTypes = {
|
||||
className: PropTypes.string,
|
||||
children: PropTypes.node,
|
||||
};
|
||||
|
||||
constructor(props, context) {
|
||||
super(props, context);
|
||||
|
||||
this._ref = this._ref.bind(this);
|
||||
}
|
||||
|
||||
// componentDidUpdate used here for reusability
|
||||
// componentWillReceiveProps fires too early to call highlightBlock on.
|
||||
componentDidUpdate() {
|
||||
if (this._el) highlightBlock(this._el);
|
||||
}
|
||||
|
||||
// call componentDidUpdate because _ref is fired on initial render
|
||||
// which does not fire componentDidUpdate
|
||||
_ref(el) {
|
||||
this._el = el;
|
||||
this.componentDidUpdate();
|
||||
}
|
||||
|
||||
render() {
|
||||
const { className, children } = this.props;
|
||||
|
||||
return <pre className={`${className} mx_SyntaxHighlight`} ref={this._ref}>
|
||||
<code>{ children }</code>
|
||||
</pre>;
|
||||
}
|
||||
}
|
||||
@@ -35,7 +35,7 @@ module.exports = React.createClass({
|
||||
render: function() {
|
||||
return (
|
||||
<div className="mx_MatrixToolbar">
|
||||
<img className="mx_MatrixToolbar_warning" src="img/warning.svg" width="24" height="23" alt="/!\"/>
|
||||
<img className="mx_MatrixToolbar_warning" src="img/warning.svg" width="24" height="23" alt="Warning"/>
|
||||
<div className="mx_MatrixToolbar_content">
|
||||
{ _t('You are not receiving desktop notifications') } <a className="mx_MatrixToolbar_link" onClick={ this.onClick }> { _t('Enable them now') }</a>
|
||||
</div>
|
||||
|
||||
@@ -40,9 +40,9 @@ export default React.createClass({
|
||||
|
||||
displayReleaseNotes: function(releaseNotes) {
|
||||
const QuestionDialog = sdk.getComponent('dialogs.QuestionDialog');
|
||||
Modal.createDialog(QuestionDialog, {
|
||||
Modal.createTrackedDialog('Display release notes', '', QuestionDialog, {
|
||||
title: _t("What's New"),
|
||||
description: <pre className="changelog_text">{releaseNotes}</pre>,
|
||||
description: <div className="mx_MatrixToolbar_changelog">{releaseNotes}</div>,
|
||||
button: _t("Update"),
|
||||
onFinished: (update) => {
|
||||
if(update && PlatformPeg.get()) {
|
||||
@@ -54,7 +54,7 @@ export default React.createClass({
|
||||
|
||||
displayChangelog: function() {
|
||||
const ChangelogDialog = sdk.getComponent('dialogs.ChangelogDialog');
|
||||
Modal.createDialog(ChangelogDialog, {
|
||||
Modal.createTrackedDialog('Display Changelog', '', ChangelogDialog, {
|
||||
version: this.props.version,
|
||||
newVersion: this.props.newVersion,
|
||||
onFinished: (update) => {
|
||||
@@ -96,7 +96,7 @@ export default React.createClass({
|
||||
}
|
||||
return (
|
||||
<div className="mx_MatrixToolbar">
|
||||
<img className="mx_MatrixToolbar_warning" src="img/warning.svg" width="24" height="23" alt="/!\"/>
|
||||
<img className="mx_MatrixToolbar_warning" src="img/warning.svg" width="24" height="23" alt="Warning"/>
|
||||
<div className="mx_MatrixToolbar_content">
|
||||
{_t("A new version of Riot is available.")}
|
||||
</div>
|
||||
|
||||
@@ -20,11 +20,12 @@ import React from 'react';
|
||||
import sdk from 'matrix-react-sdk';
|
||||
import Modal from 'matrix-react-sdk/lib/Modal';
|
||||
import dis from 'matrix-react-sdk/lib/dispatcher';
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
|
||||
export default React.createClass({
|
||||
onUpdateClicked: function() {
|
||||
const SetPasswordDialog = sdk.getComponent('dialogs.SetPasswordDialog');
|
||||
Modal.createDialog(SetPasswordDialog, {
|
||||
Modal.createTrackedDialog('Set Password Dialog', 'Password Nag Bar', SetPasswordDialog, {
|
||||
onFinished: (passwordChanged) => {
|
||||
if (!passwordChanged) {
|
||||
return;
|
||||
@@ -33,12 +34,11 @@ export default React.createClass({
|
||||
dis.dispatch({
|
||||
action: 'password_changed',
|
||||
});
|
||||
}
|
||||
},
|
||||
});
|
||||
},
|
||||
|
||||
render: function() {
|
||||
const AccessibleButton = sdk.getComponent('elements.AccessibleButton');
|
||||
const toolbarClasses = "mx_MatrixToolbar mx_MatrixToolbar_clickable";
|
||||
return (
|
||||
<div className={toolbarClasses} onClick={this.onUpdateClicked}>
|
||||
@@ -49,12 +49,16 @@ export default React.createClass({
|
||||
alt="Warning"
|
||||
/>
|
||||
<div className="mx_MatrixToolbar_content">
|
||||
To return to your account in future you need to <u>set a password</u>
|
||||
{ _t(
|
||||
"To return to your account in future you need to <u>set a password</u>",
|
||||
{},
|
||||
{ 'u': (sub) => <u>{ sub }</u> },
|
||||
) }
|
||||
</div>
|
||||
<button className="mx_MatrixToolbar_action">
|
||||
Set Password
|
||||
{ _t("Set Password") }
|
||||
</button>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
85
src/components/views/globals/UpdateCheckBar.js
Normal file
85
src/components/views/globals/UpdateCheckBar.js
Normal file
@@ -0,0 +1,85 @@
|
||||
/*
|
||||
Copyright 2017 Michael Telatynski <7t3chguy@gmail.com>
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import React from 'react';
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
import PlatformPeg from 'matrix-react-sdk/lib/PlatformPeg';
|
||||
import {updateCheckStatusEnum} from '../../../vector/platform/VectorBasePlatform';
|
||||
import AccessibleButton from 'matrix-react-sdk/lib/components/views/elements/AccessibleButton';
|
||||
|
||||
const doneStatuses = [
|
||||
updateCheckStatusEnum.ERROR,
|
||||
updateCheckStatusEnum.NOTAVAILABLE,
|
||||
];
|
||||
|
||||
export default React.createClass({
|
||||
propTypes: {
|
||||
status: React.PropTypes.oneOf(Object.values(updateCheckStatusEnum)).isRequired,
|
||||
// Currently for error detail but will be usable for download progress
|
||||
// once that is a thing that squirrel passes through electron.
|
||||
detail: React.PropTypes.string,
|
||||
},
|
||||
|
||||
getDefaultProps: function() {
|
||||
return {
|
||||
detail: '',
|
||||
}
|
||||
},
|
||||
|
||||
getStatusText: function() {
|
||||
switch(this.props.status) {
|
||||
case updateCheckStatusEnum.ERROR:
|
||||
return _t('Error encountered (%(errorDetail)s).', { errorDetail: this.props.detail });
|
||||
case updateCheckStatusEnum.CHECKING:
|
||||
return _t('Checking for an update...');
|
||||
case updateCheckStatusEnum.NOTAVAILABLE:
|
||||
return _t('No update available.');
|
||||
case updateCheckStatusEnum.DOWNLOADING:
|
||||
return _t('Downloading update...');
|
||||
}
|
||||
}
|
||||
,
|
||||
|
||||
hideToolbar: function() {
|
||||
PlatformPeg.get().stopUpdateCheck();
|
||||
},
|
||||
|
||||
render: function() {
|
||||
const message = this.getStatusText();
|
||||
const warning = _t('Warning');
|
||||
|
||||
let image;
|
||||
if (doneStatuses.includes(this.props.status)) {
|
||||
image = <img className="mx_MatrixToolbar_warning" src="img/warning.svg" width="24" height="23" alt={warning}/>;
|
||||
} else {
|
||||
image = <img className="mx_MatrixToolbar_warning" src="img/spinner.gif" width="24" height="23" alt={message}/>;
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="mx_MatrixToolbar">
|
||||
{image}
|
||||
<div className="mx_MatrixToolbar_content">
|
||||
{message}
|
||||
</div>
|
||||
<AccessibleButton className="mx_MatrixToolbar_close" onClick={this.hideToolbar}>
|
||||
<img src="img/cancel.svg" width="18" height="18" />
|
||||
</AccessibleButton>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
});
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
Copyright 2015, 2016 OpenMarket Ltd
|
||||
Copyright 2017 New Vector Ltd
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
@@ -31,7 +32,13 @@ module.exports = React.createClass({
|
||||
{ _t('Custom Server Options') }
|
||||
</div>
|
||||
<div className="mx_Dialog_content">
|
||||
<span dangerouslySetInnerHTML={{__html: sanitizeHtml(_t('customServer_text'))}} />
|
||||
<span dangerouslySetInnerHTML={{__html: sanitizeHtml(_t(
|
||||
"You can use the custom server options to sign into other Matrix "+
|
||||
"servers by specifying a different Home server URL.<br/>This allows "+
|
||||
"you to use Riot with an existing Matrix account on a different home "+
|
||||
"server.<br/><br/>You can also set a custom identity server but you won't "+
|
||||
"be able to invite users by email address, or be invited by email address yourself.",
|
||||
))}} />
|
||||
</div>
|
||||
<div className="mx_Dialog_buttons">
|
||||
<button onClick={this.props.onFinished} autoFocus={true}>
|
||||
|
||||
@@ -18,6 +18,7 @@ limitations under the License.
|
||||
|
||||
var React = require('react');
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
import SettingsStore from 'matrix-react-sdk/lib/settings/SettingsStore';
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'VectorLoginFooter',
|
||||
@@ -26,11 +27,14 @@ module.exports = React.createClass({
|
||||
},
|
||||
|
||||
render: function() {
|
||||
// FIXME: replace this with a proper Status skin
|
||||
if (SettingsStore.getValue("theme") === 'status') return <div/>;
|
||||
|
||||
return (
|
||||
<div className="mx_Login_links">
|
||||
<a href="https://medium.com/@RiotChat">blog</a> ·
|
||||
<a href="https://twitter.com/@RiotChat">twitter</a> ·
|
||||
<a href="https://github.com/vector-im/vector-web">github</a> ·
|
||||
<a href="https://github.com/vector-im/riot-web">github</a> ·
|
||||
<a href="https://matrix.org">{ _t('powered by Matrix') }</a>
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -16,10 +16,11 @@ limitations under the License.
|
||||
|
||||
'use strict';
|
||||
|
||||
var React = require('react');
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
|
||||
const i = [1, 2, 3, 4, 5][Math.floor(Math.random() * 5)];
|
||||
const DEFAULT_LOGO_URI = "img/logos/riot-logo-" + i + ".svg";
|
||||
const DEFAULT_LOGO_URI = "img/logos/riot-im-logo-" + i + ".svg";
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'VectorLoginHeader',
|
||||
@@ -27,13 +28,15 @@ module.exports = React.createClass({
|
||||
replaces: 'LoginHeader',
|
||||
},
|
||||
propTypes: {
|
||||
icon: React.PropTypes.string,
|
||||
icon: PropTypes.string,
|
||||
},
|
||||
|
||||
render: function() {
|
||||
return (
|
||||
<div className="mx_Login_logo">
|
||||
<img src={this.props.icon || DEFAULT_LOGO_URI} alt="Riot"/>
|
||||
<div className="mx_Login_header">
|
||||
<div className="mx_Login_logo">
|
||||
<img src={this.props.icon || DEFAULT_LOGO_URI} alt="Riot"/>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
Copyright 2015, 2016 OpenMarket Ltd
|
||||
Copyright 2018 Michael Telatynski <7t3chguy@gmail.com>
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
@@ -15,8 +16,9 @@ limitations under the License.
|
||||
*/
|
||||
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
import DateUtils from 'matrix-react-sdk/lib/DateUtils';
|
||||
import {formatFullDateNoTime} from 'matrix-react-sdk/lib/DateUtils';
|
||||
|
||||
function getdaysArray() {
|
||||
return [
|
||||
@@ -30,30 +32,30 @@ function getdaysArray() {
|
||||
];
|
||||
}
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'DateSeparator',
|
||||
render: function() {
|
||||
var date = new Date(this.props.ts);
|
||||
var today = new Date();
|
||||
var yesterday = new Date();
|
||||
var days = getdaysArray();
|
||||
yesterday.setDate(today.getDate() - 1);
|
||||
var label;
|
||||
if (date.toDateString() === today.toDateString()) {
|
||||
label = _t('Today');
|
||||
}
|
||||
else if (date.toDateString() === yesterday.toDateString()) {
|
||||
label = _t('Yesterday');
|
||||
}
|
||||
else if (today.getTime() - date.getTime() < 6 * 24 * 60 * 60 * 1000) {
|
||||
label = days[date.getDay()];
|
||||
}
|
||||
else {
|
||||
label = DateUtils.formatFullDate(date, this.props.showTwelveHour);
|
||||
}
|
||||
export default class DateSeparator extends React.Component {
|
||||
static propTypes = {
|
||||
ts: PropTypes.number.isRequired,
|
||||
};
|
||||
|
||||
return (
|
||||
<h2 className="mx_DateSeparator">{ label }</h2>
|
||||
);
|
||||
getLabel() {
|
||||
const date = new Date(this.props.ts);
|
||||
const today = new Date();
|
||||
const yesterday = new Date();
|
||||
const days = getdaysArray();
|
||||
yesterday.setDate(today.getDate() - 1);
|
||||
|
||||
if (date.toDateString() === today.toDateString()) {
|
||||
return _t('Today');
|
||||
} else if (date.toDateString() === yesterday.toDateString()) {
|
||||
return _t('Yesterday');
|
||||
} else if (today.getTime() - date.getTime() < 6 * 24 * 60 * 60 * 1000) {
|
||||
return days[date.getDay()];
|
||||
} else {
|
||||
return formatFullDateNoTime(date);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
render() {
|
||||
return <h2 className="mx_DateSeparator">{ this.getLabel() }</h2>;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
Copyright 2015, 2016 OpenMarket Ltd
|
||||
Copyright 2018 Michael Telatynski <7t3chguy@gmail.com>
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
@@ -14,24 +15,22 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import React from 'react';
|
||||
import DateUtils from 'matrix-react-sdk/lib/DateUtils';
|
||||
import PropTypes from 'prop-types';
|
||||
import {formatFullDate, formatTime} from 'matrix-react-sdk/lib/DateUtils';
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'MessageTimestamp',
|
||||
export default class MessageTimestamp extends React.Component {
|
||||
static propTypes = {
|
||||
ts: PropTypes.number.isRequired,
|
||||
showTwelveHour: PropTypes.bool,
|
||||
};
|
||||
|
||||
propTypes: {
|
||||
showTwelveHour: React.PropTypes.bool,
|
||||
},
|
||||
|
||||
render: function() {
|
||||
render() {
|
||||
const date = new Date(this.props.ts);
|
||||
return (
|
||||
<span className="mx_MessageTimestamp" title={ DateUtils.formatFullDate(date, this.props.showTwelveHour) }>
|
||||
{ DateUtils.formatTime(date, this.props.showTwelveHour) }
|
||||
<span className="mx_MessageTimestamp" title={formatFullDate(date, this.props.showTwelveHour)}>
|
||||
{ formatTime(date, this.props.showTwelveHour) }
|
||||
</span>
|
||||
);
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,230 +14,52 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import React from 'react';
|
||||
import {DragSource} from 'react-dnd';
|
||||
import {DropTarget} from 'react-dnd';
|
||||
|
||||
import MatrixClientPeg from 'matrix-react-sdk/lib/MatrixClientPeg';
|
||||
import sdk from 'matrix-react-sdk';
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
import { Draggable } from 'react-beautiful-dnd';
|
||||
import RoomTile from 'matrix-react-sdk/lib/components/views/rooms/RoomTile';
|
||||
import * as Rooms from 'matrix-react-sdk/lib/Rooms';
|
||||
import Modal from 'matrix-react-sdk/lib/Modal';
|
||||
|
||||
/**
|
||||
* Defines a new Component, DNDRoomTile that wraps RoomTile, making it draggable.
|
||||
* Requires extra props:
|
||||
* roomSubList: React.PropTypes.object.isRequired,
|
||||
* refreshSubList: React.PropTypes.func.isRequired,
|
||||
*/
|
||||
import classNames from 'classnames';
|
||||
|
||||
/**
|
||||
* Specifies the drag source contract.
|
||||
* Only `beginDrag` function is required.
|
||||
*/
|
||||
var roomTileSource = {
|
||||
canDrag: function(props, monitor) {
|
||||
return props.roomSubList.props.editable;
|
||||
},
|
||||
|
||||
beginDrag: function (props) {
|
||||
// Return the data describing the dragged item
|
||||
var item = {
|
||||
room: props.room,
|
||||
originalList: props.roomSubList,
|
||||
originalIndex: props.roomSubList.findRoomTile(props.room).index,
|
||||
targetList: props.roomSubList, // at first target is same as original
|
||||
// lastTargetRoom: null,
|
||||
// lastYOffset: null,
|
||||
// lastYDelta: null,
|
||||
};
|
||||
|
||||
if (props.roomSubList.debug) console.log("roomTile beginDrag for " + item.room.roomId);
|
||||
|
||||
// doing this 'correctly' with state causes react-dnd to break seemingly due to the state transitions
|
||||
props.room._dragging = true;
|
||||
|
||||
return item;
|
||||
},
|
||||
|
||||
endDrag: function (props, monitor, component) {
|
||||
var item = monitor.getItem();
|
||||
|
||||
if (props.roomSubList.debug) console.log("roomTile endDrag for " + item.room.roomId + " with didDrop=" + monitor.didDrop());
|
||||
|
||||
props.room._dragging = false;
|
||||
if (monitor.didDrop()) {
|
||||
if (props.roomSubList.debug) console.log("force updating component " + item.targetList.props.label);
|
||||
item.targetList.forceUpdate(); // as we're not using state
|
||||
}
|
||||
|
||||
const prevTag = item.originalList.props.tagName;
|
||||
const newTag = item.targetList.props.tagName;
|
||||
|
||||
if (monitor.didDrop() && item.targetList.props.editable) {
|
||||
// Evil hack to get DMs behaving
|
||||
if ((prevTag === undefined && newTag === 'im.vector.fake.direct') ||
|
||||
(prevTag === 'im.vector.fake.direct' && newTag === undefined)
|
||||
) {
|
||||
Rooms.guessAndSetDMRoom(
|
||||
item.room, newTag === 'im.vector.fake.direct',
|
||||
).done(() => {
|
||||
item.originalList.removeRoomTile(item.room);
|
||||
}, (err) => {
|
||||
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
console.error("Failed to set direct chat tag " + err);
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
title: _t('Failed to set direct chat tag'),
|
||||
description: ((err && err.message) ? err.message : _t('Operation failed')),
|
||||
});
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// More evilness: We will still be dealing with moving to favourites/low prio,
|
||||
// but we avoid ever doing a request with 'im.vector.fake.direct`.
|
||||
|
||||
// if we moved lists, remove the old tag
|
||||
if (prevTag && prevTag !== 'im.vector.fake.direct' &&
|
||||
item.targetList !== item.originalList
|
||||
) {
|
||||
// commented out attempts to set a spinner on our target component as component is actually
|
||||
// the original source component being dragged, not our target. To fix we just need to
|
||||
// move all of this to endDrop in the target instead. FIXME later.
|
||||
|
||||
//component.state.set({ spinner: component.state.spinner ? component.state.spinner++ : 1 });
|
||||
MatrixClientPeg.get().deleteRoomTag(item.room.roomId, prevTag).finally(function() {
|
||||
//component.state.set({ spinner: component.state.spinner-- });
|
||||
}).fail(function(err) {
|
||||
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
console.error("Failed to remove tag " + prevTag + " from room: " + err);
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
title: _t('Failed to remove tag %(tagName)s from room', {tagName: prevTag}),
|
||||
description: ((err && err.message) ? err.message : _t('Operation failed')),
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
var newOrder= {};
|
||||
if (item.targetList.props.order === 'manual') {
|
||||
newOrder['order'] = item.targetList.calcManualOrderTagData(item.room);
|
||||
}
|
||||
|
||||
// if we moved lists or the ordering changed, add the new tag
|
||||
if (newTag && newTag !== 'im.vector.fake.direct' &&
|
||||
(item.targetList !== item.originalList || newOrder)
|
||||
) {
|
||||
//component.state.set({ spinner: component.state.spinner ? component.state.spinner++ : 1 });
|
||||
MatrixClientPeg.get().setRoomTag(item.room.roomId, newTag, newOrder).finally(function() {
|
||||
//component.state.set({ spinner: component.state.spinner-- });
|
||||
}).fail(function(err) {
|
||||
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
console.error("Failed to add tag " + newTag + " to room: " + err);
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
title: _t('Failed to add tag %(tagName)s to room', {tagName: newTag}),
|
||||
description: ((err && err.message) ? err.message : _t('Operation failed')),
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
else {
|
||||
// cancel the drop and reset our original position
|
||||
if (props.roomSubList.debug) console.log("cancelling drop & drag");
|
||||
props.roomSubList.moveRoomTile(item.room, item.originalIndex);
|
||||
if (item.targetList && item.targetList !== item.originalList) {
|
||||
item.targetList.removeRoomTile(item.room);
|
||||
}
|
||||
}
|
||||
export default class DNDRoomTile extends React.PureComponent {
|
||||
constructor() {
|
||||
super();
|
||||
this.getClassName = this.getClassName.bind(this);
|
||||
}
|
||||
};
|
||||
|
||||
var roomTileTarget = {
|
||||
canDrop: function() {
|
||||
return false;
|
||||
},
|
||||
|
||||
hover: function(props, monitor) {
|
||||
var item = monitor.getItem();
|
||||
//var off = monitor.getClientOffset();
|
||||
// console.log("hovering on room " + props.room.roomId + ", isOver=" + monitor.isOver());
|
||||
|
||||
//console.log("item.targetList=" + item.targetList + ", roomSubList=" + props.roomSubList);
|
||||
|
||||
var switchedTarget = false;
|
||||
if (item.targetList !== props.roomSubList) {
|
||||
// we've switched target, so remove the tile from the previous target.
|
||||
// n.b. the previous target might actually be the source list.
|
||||
if (props.roomSubList.debug) console.log("switched target sublist");
|
||||
switchedTarget = true;
|
||||
item.targetList.removeRoomTile(item.room);
|
||||
item.targetList = props.roomSubList;
|
||||
}
|
||||
|
||||
if (!item.targetList.props.editable) return;
|
||||
|
||||
if (item.targetList.props.order === 'manual') {
|
||||
if (item.room.roomId !== props.room.roomId && props.room !== item.lastTargetRoom) {
|
||||
// find the offset of the target tile in the list.
|
||||
var roomTile = props.roomSubList.findRoomTile(props.room);
|
||||
// shuffle the list to add our tile to that position.
|
||||
props.roomSubList.moveRoomTile(item.room, roomTile.index);
|
||||
}
|
||||
|
||||
// stop us from flickering between our droptarget and the previous room.
|
||||
// whenever the cursor changes direction we have to reset the flicker-damping.
|
||||
/*
|
||||
var yDelta = off.y - item.lastYOffset;
|
||||
|
||||
if ((yDelta > 0 && item.lastYDelta < 0) ||
|
||||
(yDelta < 0 && item.lastYDelta > 0))
|
||||
{
|
||||
// the cursor changed direction - forget our previous room
|
||||
item.lastTargetRoom = null;
|
||||
}
|
||||
else {
|
||||
// track the last room we were hovering over so we can stop
|
||||
// bouncing back and forth if the droptarget is narrower than
|
||||
// the other list items. The other way to do this would be
|
||||
// to reduce the size of the hittarget on the list items, but
|
||||
// can't see an easy way to do that.
|
||||
item.lastTargetRoom = props.room;
|
||||
}
|
||||
|
||||
if (yDelta) item.lastYDelta = yDelta;
|
||||
item.lastYOffset = off.y;
|
||||
*/
|
||||
}
|
||||
else if (switchedTarget) {
|
||||
if (!props.roomSubList.findRoomTile(item.room).room) {
|
||||
// add to the list in the right place
|
||||
props.roomSubList.moveRoomTile(item.room, 0);
|
||||
}
|
||||
// we have to sort the list whatever to recalculate it
|
||||
props.roomSubList.sortList();
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
// Export the wrapped version, inlining the 'collect' functions
|
||||
// to more closely resemble the ES7
|
||||
module.exports =
|
||||
DropTarget('RoomTile', roomTileTarget, function(connect, monitor) {
|
||||
return {
|
||||
// Call this function inside render()
|
||||
// to let React DnD handle the drag events:
|
||||
connectDropTarget: connect.dropTarget(),
|
||||
isOver: monitor.isOver(),
|
||||
getClassName(isDragging) {
|
||||
return classNames({
|
||||
"mx_DNDRoomTile": true,
|
||||
"mx_DNDRoomTile_dragging": isDragging,
|
||||
});
|
||||
}
|
||||
})(
|
||||
DragSource('RoomTile', roomTileSource, function(connect, monitor) {
|
||||
return {
|
||||
// Call this function inside render()
|
||||
// to let React DnD handle the drag events:
|
||||
connectDragSource: connect.dragSource(),
|
||||
// You can ask the monitor about the current drag state:
|
||||
isDragging: monitor.isDragging()
|
||||
};
|
||||
})(RoomTile));
|
||||
|
||||
render() {
|
||||
const props = this.props;
|
||||
|
||||
return <div>
|
||||
<Draggable
|
||||
key={props.room.roomId}
|
||||
draggableId={props.tagName + '_' + props.room.roomId}
|
||||
index={props.index}
|
||||
type="draggable-RoomTile"
|
||||
>
|
||||
{ (provided, snapshot) => {
|
||||
return (
|
||||
<div>
|
||||
<div
|
||||
ref={provided.innerRef}
|
||||
{...provided.draggableProps}
|
||||
{...provided.dragHandleProps}
|
||||
>
|
||||
<div className={this.getClassName(snapshot.isDragging)}>
|
||||
<RoomTile {...props} />
|
||||
</div>
|
||||
</div>
|
||||
{ provided.placeholder }
|
||||
</div>
|
||||
);
|
||||
} }
|
||||
</Draggable>
|
||||
</div>;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,9 +23,11 @@ module.exports = React.createClass({
|
||||
|
||||
render: function() {
|
||||
return (
|
||||
<div className="mx_RoomDropTarget">
|
||||
<div className="mx_RoomDropTarget_label">
|
||||
{ this.props.label }
|
||||
<div className="mx_RoomDropTarget_container">
|
||||
<div className="mx_RoomDropTarget">
|
||||
<div className="mx_RoomDropTarget_label">
|
||||
{ this.props.label }
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -19,16 +19,19 @@ limitations under the License.
|
||||
var React = require('react');
|
||||
var ReactDOM = require('react-dom');
|
||||
var dis = require('matrix-react-sdk/lib/dispatcher');
|
||||
import classNames from 'classnames';
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'RoomTooltip',
|
||||
|
||||
propTypes: {
|
||||
// Alllow the tooltip to be styled by the parent element
|
||||
// Class applied to the element used to position the tooltip
|
||||
className: React.PropTypes.string.isRequired,
|
||||
// Class applied to the tooltip itself
|
||||
tooltipClassName: React.PropTypes.string,
|
||||
// The tooltip is derived from either the room name or a label
|
||||
room: React.PropTypes.object,
|
||||
label: React.PropTypes.string,
|
||||
label: React.PropTypes.node,
|
||||
},
|
||||
|
||||
// Create a wrapper for the tooltip outside the parent and attach it to the body element
|
||||
@@ -69,8 +72,12 @@ module.exports = React.createClass({
|
||||
style.left = 6 + parent.getBoundingClientRect().right + window.pageXOffset;
|
||||
style.display = "block";
|
||||
|
||||
const tooltipClasses = classNames(
|
||||
"mx_RoomTooltip", this.props.tooltipClassName,
|
||||
);
|
||||
|
||||
var tooltip = (
|
||||
<div className="mx_RoomTooltip" style={style} >
|
||||
<div className={tooltipClasses} style={style} >
|
||||
<div className="mx_RoomTooltip_chevron"></div>
|
||||
{ label }
|
||||
</div>
|
||||
|
||||
@@ -14,16 +14,20 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
var React = require('react');
|
||||
import { _t, _tJsx } from 'matrix-react-sdk/lib/languageHandler';
|
||||
var q = require("q");
|
||||
var sdk = require('matrix-react-sdk');
|
||||
var MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg');
|
||||
var UserSettingsStore = require('matrix-react-sdk/lib/UserSettingsStore');
|
||||
var Modal = require('matrix-react-sdk/lib/Modal');
|
||||
|
||||
var notifications = require('../../../notifications');
|
||||
import React from 'react';
|
||||
import Promise from 'bluebird';
|
||||
import sdk from 'matrix-react-sdk';
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
import MatrixClientPeg from 'matrix-react-sdk/lib/MatrixClientPeg';
|
||||
import UserSettingsStore from 'matrix-react-sdk/lib/UserSettingsStore';
|
||||
import SettingsStore, {SettingLevel} from "matrix-react-sdk/lib/settings/SettingsStore";
|
||||
import Modal from 'matrix-react-sdk/lib/Modal';
|
||||
import {
|
||||
NotificationUtils,
|
||||
VectorPushRulesDefinitions,
|
||||
PushRuleVectorState,
|
||||
ContentRules
|
||||
} from '../../../notifications';
|
||||
|
||||
// TODO: this "view" component still has far too much application logic in it,
|
||||
// which should be factored out to other files.
|
||||
@@ -31,17 +35,13 @@ var notifications = require('../../../notifications');
|
||||
// TODO: this component also does a lot of direct poking into this.state, which
|
||||
// is VERY NAUGHTY.
|
||||
|
||||
var NotificationUtils = notifications.NotificationUtils;
|
||||
var VectorPushRulesDefinitions = notifications.VectorPushRulesDefinitions;
|
||||
var PushRuleVectorState = notifications.PushRuleVectorState;
|
||||
var ContentRules = notifications.ContentRules;
|
||||
|
||||
/**
|
||||
* Rules that Vector used to set in order to override the actions of default rules.
|
||||
* These are used to port peoples existing overrides to match the current API.
|
||||
* These can be removed and forgotten once everyone has moved to the new client.
|
||||
*/
|
||||
var LEGACY_RULES = {
|
||||
const LEGACY_RULES = {
|
||||
"im.vector.rule.contains_display_name": ".m.rule.contains_display_name",
|
||||
"im.vector.rule.room_one_to_one": ".m.rule.room_one_to_one",
|
||||
"im.vector.rule.room_message": ".m.rule.message",
|
||||
@@ -51,7 +51,7 @@ var LEGACY_RULES = {
|
||||
};
|
||||
|
||||
function portLegacyActions(actions) {
|
||||
var decoded = NotificationUtils.decodeActions(actions);
|
||||
const decoded = NotificationUtils.decodeActions(actions);
|
||||
if (decoded !== null) {
|
||||
return NotificationUtils.encodeActions(decoded);
|
||||
} else {
|
||||
@@ -62,7 +62,7 @@ function portLegacyActions(actions) {
|
||||
}
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'Notififications',
|
||||
displayName: 'Notifications',
|
||||
|
||||
phases: {
|
||||
LOADING: "LOADING", // The component is loading or sending data to the hs
|
||||
@@ -102,7 +102,7 @@ module.exports = React.createClass({
|
||||
},
|
||||
|
||||
onEnableNotificationsChange: function(event) {
|
||||
var self = this;
|
||||
const self = this;
|
||||
this.setState({
|
||||
phase: this.phases.LOADING
|
||||
});
|
||||
@@ -113,25 +113,51 @@ module.exports = React.createClass({
|
||||
},
|
||||
|
||||
onEnableDesktopNotificationsChange: function(event) {
|
||||
UserSettingsStore.setEnableNotifications(event.target.checked);
|
||||
SettingsStore.setValue(
|
||||
"notificationsEnabled", null,
|
||||
SettingLevel.DEVICE,
|
||||
event.target.checked,
|
||||
).finally(() => {
|
||||
this.forceUpdate();
|
||||
});
|
||||
},
|
||||
|
||||
onEnableDesktopNotificationBodyChange: function(event) {
|
||||
SettingsStore.setValue(
|
||||
"notificationBodyEnabled", null,
|
||||
SettingLevel.DEVICE,
|
||||
event.target.checked,
|
||||
).finally(() => {
|
||||
this.forceUpdate();
|
||||
});
|
||||
},
|
||||
|
||||
onEnableAudioNotificationsChange: function(event) {
|
||||
SettingsStore.setValue(
|
||||
"audioNotificationsEnabled", null,
|
||||
SettingLevel.DEVICE,
|
||||
event.target.checked,
|
||||
).finally(() => {
|
||||
this.forceUpdate();
|
||||
});
|
||||
},
|
||||
|
||||
onEnableEmailNotificationsChange: function(address, event) {
|
||||
var emailPusherPromise;
|
||||
let emailPusherPromise;
|
||||
if (event.target.checked) {
|
||||
var data = {}
|
||||
const data = {}
|
||||
data['brand'] = this.props.brand || 'Riot';
|
||||
emailPusherPromise = UserSettingsStore.addEmailPusher(address, data);
|
||||
} else {
|
||||
var emailPusher = UserSettingsStore.getEmailPusher(this.state.pushers, address);
|
||||
const emailPusher = UserSettingsStore.getEmailPusher(this.state.pushers, address);
|
||||
emailPusher.kind = null;
|
||||
emailPusherPromise = MatrixClientPeg.get().setPusher(emailPusher);
|
||||
}
|
||||
emailPusherPromise.done(() => {
|
||||
this._refreshFromServer();
|
||||
}, (error) => {
|
||||
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
Modal.createTrackedDialog('Error saving email notification preferences', '', ErrorDialog, {
|
||||
title: _t('Error saving email notification preferences'),
|
||||
description: _t('An error occurred whilst saving your email notification preferences.'),
|
||||
});
|
||||
@@ -140,14 +166,14 @@ module.exports = React.createClass({
|
||||
|
||||
onNotifStateButtonClicked: function(event) {
|
||||
// FIXME: use .bind() rather than className metadata here surely
|
||||
var vectorRuleId = event.target.className.split("-")[0];
|
||||
var newPushRuleVectorState = event.target.className.split("-")[1];
|
||||
const vectorRuleId = event.target.className.split("-")[0];
|
||||
const newPushRuleVectorState = event.target.className.split("-")[1];
|
||||
|
||||
if ("_keywords" === vectorRuleId) {
|
||||
this._setKeywordsPushRuleVectorState(newPushRuleVectorState)
|
||||
}
|
||||
else {
|
||||
var rule = this.getRule(vectorRuleId);
|
||||
const rule = this.getRule(vectorRuleId);
|
||||
if (rule) {
|
||||
this._setPushRuleVectorState(rule, newPushRuleVectorState);
|
||||
}
|
||||
@@ -155,12 +181,12 @@ module.exports = React.createClass({
|
||||
},
|
||||
|
||||
onKeywordsClicked: function(event) {
|
||||
var self = this;
|
||||
const self = this;
|
||||
|
||||
// Compute the keywords list to display
|
||||
var keywords = [];
|
||||
for (var i in this.state.vectorContentRules.rules) {
|
||||
var rule = this.state.vectorContentRules.rules[i];
|
||||
let keywords = [];
|
||||
for (let i in this.state.vectorContentRules.rules) {
|
||||
const rule = this.state.vectorContentRules.rules[i];
|
||||
keywords.push(rule.pattern);
|
||||
}
|
||||
if (keywords.length) {
|
||||
@@ -174,8 +200,8 @@ module.exports = React.createClass({
|
||||
keywords = "";
|
||||
}
|
||||
|
||||
var TextInputDialog = sdk.getComponent("dialogs.TextInputDialog");
|
||||
Modal.createDialog(TextInputDialog, {
|
||||
const TextInputDialog = sdk.getComponent("dialogs.TextInputDialog");
|
||||
Modal.createTrackedDialog('Keywords Dialog', '', TextInputDialog, {
|
||||
title: _t('Keywords'),
|
||||
description: _t('Enter keywords separated by a comma:'),
|
||||
button: _t('OK'),
|
||||
@@ -183,8 +209,8 @@ module.exports = React.createClass({
|
||||
onFinished: function onFinished(should_leave, newValue) {
|
||||
|
||||
if (should_leave && newValue !== keywords) {
|
||||
var newKeywords = newValue.split(',');
|
||||
for (var i in newKeywords) {
|
||||
let newKeywords = newValue.split(',');
|
||||
for (let i in newKeywords) {
|
||||
newKeywords[i] = newKeywords[i].trim();
|
||||
}
|
||||
|
||||
@@ -203,8 +229,8 @@ module.exports = React.createClass({
|
||||
},
|
||||
|
||||
getRule: function(vectorRuleId) {
|
||||
for (var i in this.state.vectorPushRules) {
|
||||
var rule = this.state.vectorPushRules[i];
|
||||
for (let i in this.state.vectorPushRules) {
|
||||
const rule = this.state.vectorPushRules[i];
|
||||
if (rule.vectorRuleId === vectorRuleId) {
|
||||
return rule;
|
||||
}
|
||||
@@ -218,13 +244,13 @@ module.exports = React.createClass({
|
||||
phase: this.phases.LOADING
|
||||
});
|
||||
|
||||
var self = this;
|
||||
var cli = MatrixClientPeg.get();
|
||||
var deferreds = [];
|
||||
var ruleDefinition = VectorPushRulesDefinitions[rule.vectorRuleId];
|
||||
const self = this;
|
||||
const cli = MatrixClientPeg.get();
|
||||
const deferreds = [];
|
||||
const ruleDefinition = VectorPushRulesDefinitions[rule.vectorRuleId];
|
||||
|
||||
if (rule.rule) {
|
||||
var actions = ruleDefinition.vectorStateToActions[newPushRuleVectorState];
|
||||
const actions = ruleDefinition.vectorStateToActions[newPushRuleVectorState];
|
||||
|
||||
if (!actions) {
|
||||
// The new state corresponds to disabling the rule.
|
||||
@@ -236,12 +262,12 @@ module.exports = React.createClass({
|
||||
}
|
||||
}
|
||||
|
||||
q.all(deferreds).done(function() {
|
||||
Promise.all(deferreds).done(function() {
|
||||
self._refreshFromServer();
|
||||
}, function(error) {
|
||||
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
console.error("Failed to change settings: " + error);
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
Modal.createTrackedDialog('Failed to change settings', '', ErrorDialog, {
|
||||
title: _t('Failed to change settings'),
|
||||
description: ((error && error.message) ? error.message : _t('Operation failed')),
|
||||
onFinished: self._refreshFromServer
|
||||
@@ -257,19 +283,19 @@ module.exports = React.createClass({
|
||||
return;
|
||||
}
|
||||
|
||||
var self = this;
|
||||
var cli = MatrixClientPeg.get();
|
||||
const self = this;
|
||||
const cli = MatrixClientPeg.get();
|
||||
|
||||
this.setState({
|
||||
phase: this.phases.LOADING
|
||||
});
|
||||
|
||||
// Update all rules in self.state.vectorContentRules
|
||||
var deferreds = [];
|
||||
for (var i in this.state.vectorContentRules.rules) {
|
||||
var rule = this.state.vectorContentRules.rules[i];
|
||||
const deferreds = [];
|
||||
for (let i in this.state.vectorContentRules.rules) {
|
||||
const rule = this.state.vectorContentRules.rules[i];
|
||||
|
||||
var enabled, actions;
|
||||
let enabled, actions;
|
||||
switch (newPushRuleVectorState) {
|
||||
case PushRuleVectorState.ON:
|
||||
if (rule.actions.length !== 1) {
|
||||
@@ -306,12 +332,12 @@ module.exports = React.createClass({
|
||||
}
|
||||
}
|
||||
|
||||
q.all(deferreds).done(function(resps) {
|
||||
Promise.all(deferreds).done(function(resps) {
|
||||
self._refreshFromServer();
|
||||
}, function(error) {
|
||||
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
console.error("Can't update user notification settings: " + error);
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
Modal.createTrackedDialog('Can\'t update user notifcation settings', '', ErrorDialog, {
|
||||
title: _t('Can\'t update user notification settings'),
|
||||
description: ((error && error.message) ? error.message : _t('Operation failed')),
|
||||
onFinished: self._refreshFromServer
|
||||
@@ -324,14 +350,14 @@ module.exports = React.createClass({
|
||||
phase: this.phases.LOADING
|
||||
});
|
||||
|
||||
var self = this;
|
||||
var cli = MatrixClientPeg.get();
|
||||
var removeDeferreds = [];
|
||||
const self = this;
|
||||
const cli = MatrixClientPeg.get();
|
||||
const removeDeferreds = [];
|
||||
|
||||
// Remove per-word push rules of keywords that are no more in the list
|
||||
var vectorContentRulesPatterns = [];
|
||||
for (var i in self.state.vectorContentRules.rules) {
|
||||
var rule = self.state.vectorContentRules.rules[i];
|
||||
const vectorContentRulesPatterns = [];
|
||||
for (let i in self.state.vectorContentRules.rules) {
|
||||
const rule = self.state.vectorContentRules.rules[i];
|
||||
|
||||
vectorContentRulesPatterns.push(rule.pattern);
|
||||
|
||||
@@ -342,18 +368,18 @@ module.exports = React.createClass({
|
||||
|
||||
// If the keyword is part of `externalContentRules`, remove the rule
|
||||
// before recreating it in the right Vector path
|
||||
for (var i in self.state.externalContentRules) {
|
||||
var rule = self.state.externalContentRules[i];
|
||||
for (let i in self.state.externalContentRules) {
|
||||
const rule = self.state.externalContentRules[i];
|
||||
|
||||
if (newKeywords.indexOf(rule.pattern) >= 0) {
|
||||
removeDeferreds.push(cli.deletePushRule('global', rule.kind, rule.rule_id));
|
||||
}
|
||||
}
|
||||
|
||||
var onError = function(error) {
|
||||
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
const onError = function(error) {
|
||||
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
console.error("Failed to update keywords: " + error);
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
Modal.createTrackedDialog('Failed to update keywords', '', ErrorDialog, {
|
||||
title: _t('Failed to update keywords'),
|
||||
description: ((error && error.message) ? error.message : _t('Operation failed')),
|
||||
onFinished: self._refreshFromServer
|
||||
@@ -361,10 +387,10 @@ module.exports = React.createClass({
|
||||
}
|
||||
|
||||
// Then, add the new ones
|
||||
q.all(removeDeferreds).done(function(resps) {
|
||||
var deferreds = [];
|
||||
Promise.all(removeDeferreds).done(function(resps) {
|
||||
const deferreds = [];
|
||||
|
||||
var pushRuleVectorStateKind = self.state.vectorContentRules.vectorState;
|
||||
let pushRuleVectorStateKind = self.state.vectorContentRules.vectorState;
|
||||
if (pushRuleVectorStateKind === PushRuleVectorState.OFF) {
|
||||
// When the current global keywords rule is OFF, we need to look at
|
||||
// the flavor of rules in 'vectorContentRules' to apply the same actions
|
||||
@@ -379,8 +405,8 @@ module.exports = React.createClass({
|
||||
}
|
||||
}
|
||||
|
||||
for (var i in newKeywords) {
|
||||
var keyword = newKeywords[i];
|
||||
for (let i in newKeywords) {
|
||||
const keyword = newKeywords[i];
|
||||
|
||||
if (vectorContentRulesPatterns.indexOf(keyword) < 0) {
|
||||
if (self.state.vectorContentRules.vectorState !== PushRuleVectorState.OFF) {
|
||||
@@ -399,7 +425,7 @@ module.exports = React.createClass({
|
||||
}
|
||||
}
|
||||
|
||||
q.all(deferreds).done(function(resps) {
|
||||
Promise.all(deferreds).done(function(resps) {
|
||||
self._refreshFromServer();
|
||||
}, onError);
|
||||
}, onError);
|
||||
@@ -407,31 +433,33 @@ module.exports = React.createClass({
|
||||
|
||||
// Create a push rule but disabled
|
||||
_addDisabledPushRule: function(scope, kind, ruleId, body) {
|
||||
var cli = MatrixClientPeg.get();
|
||||
return cli.addPushRule(scope, kind, ruleId, body).then(function() {
|
||||
return cli.setPushRuleEnabled(scope, kind, ruleId, false);
|
||||
});
|
||||
const cli = MatrixClientPeg.get();
|
||||
return cli.addPushRule(scope, kind, ruleId, body).then(() =>
|
||||
cli.setPushRuleEnabled(scope, kind, ruleId, false)
|
||||
);
|
||||
},
|
||||
|
||||
// Check if any legacy im.vector rules need to be ported to the new API
|
||||
// for overriding the actions of default rules.
|
||||
_portRulesToNewAPI: function(rulesets) {
|
||||
var self = this;
|
||||
var needsUpdate = [];
|
||||
var cli = MatrixClientPeg.get();
|
||||
const self = this;
|
||||
const needsUpdate = [];
|
||||
const cli = MatrixClientPeg.get();
|
||||
|
||||
for (var kind in rulesets.global) {
|
||||
var ruleset = rulesets.global[kind];
|
||||
for (var i = 0; i < ruleset.length; ++i) {
|
||||
var rule = ruleset[i];
|
||||
for (let kind in rulesets.global) {
|
||||
const ruleset = rulesets.global[kind];
|
||||
for (let i = 0; i < ruleset.length; ++i) {
|
||||
const rule = ruleset[i];
|
||||
if (rule.rule_id in LEGACY_RULES) {
|
||||
console.log("Porting legacy rule", rule);
|
||||
needsUpdate.push( function(kind, rule) {
|
||||
return cli.setPushRuleActions(
|
||||
'global', kind, LEGACY_RULES[rule.rule_id], portLegacyActions(rule.actions)
|
||||
).then( function() {
|
||||
return cli.deletePushRule('global', kind, rule.rule_id);
|
||||
})
|
||||
).then(() =>
|
||||
cli.deletePushRule('global', kind, rule.rule_id)
|
||||
).catch( (e) => {
|
||||
console.warn(`Error when porting legacy rule: ${e}`);
|
||||
});
|
||||
}(kind, rule));
|
||||
}
|
||||
}
|
||||
@@ -440,9 +468,9 @@ module.exports = React.createClass({
|
||||
if (needsUpdate.length > 0) {
|
||||
// If some of the rules need to be ported then wait for the porting
|
||||
// to happen and then fetch the rules again.
|
||||
return q.allSettled(needsUpdate).then( function() {
|
||||
return cli.getPushRules();
|
||||
});
|
||||
return Promise.all(needsUpdate).then(() =>
|
||||
cli.getPushRules()
|
||||
);
|
||||
} else {
|
||||
// Otherwise return the rules that we already have.
|
||||
return rulesets;
|
||||
@@ -450,15 +478,14 @@ module.exports = React.createClass({
|
||||
},
|
||||
|
||||
_refreshFromServer: function() {
|
||||
var self = this;
|
||||
var pushRulesPromise = MatrixClientPeg.get().getPushRules().then(self._portRulesToNewAPI).then(function(rulesets) {
|
||||
//console.log("resolving pushRulesPromise");
|
||||
const self = this;
|
||||
const pushRulesPromise = MatrixClientPeg.get().getPushRules().then(self._portRulesToNewAPI).then(function(rulesets) {
|
||||
|
||||
/// XXX seriously? wtf is this?
|
||||
MatrixClientPeg.get().pushRules = rulesets;
|
||||
|
||||
// Get homeserver default rules and triage them by categories
|
||||
var rule_categories = {
|
||||
const rule_categories = {
|
||||
// The master rule (all notifications disabling)
|
||||
'.m.rule.master': 'master',
|
||||
|
||||
@@ -476,12 +503,12 @@ module.exports = React.createClass({
|
||||
};
|
||||
|
||||
// HS default rules
|
||||
var defaultRules = {master: [], vector: {}, others: []};
|
||||
const defaultRules = {master: [], vector: {}, others: []};
|
||||
|
||||
for (var kind in rulesets.global) {
|
||||
for (var i = 0; i < Object.keys(rulesets.global[kind]).length; ++i) {
|
||||
var r = rulesets.global[kind][i];
|
||||
var cat = rule_categories[r.rule_id];
|
||||
for (let kind in rulesets.global) {
|
||||
for (let i = 0; i < Object.keys(rulesets.global[kind]).length; ++i) {
|
||||
const r = rulesets.global[kind][i];
|
||||
const cat = rule_categories[r.rule_id];
|
||||
r.kind = kind;
|
||||
|
||||
if (r.rule_id[0] === '.') {
|
||||
@@ -504,7 +531,7 @@ module.exports = React.createClass({
|
||||
}
|
||||
|
||||
// parse the keyword rules into our state
|
||||
var contentRules = ContentRules.parseContentRules(rulesets);
|
||||
const contentRules = ContentRules.parseContentRules(rulesets);
|
||||
self.state.vectorContentRules = {
|
||||
vectorState: contentRules.vectorState,
|
||||
rules: contentRules.rules,
|
||||
@@ -515,7 +542,7 @@ module.exports = React.createClass({
|
||||
self.state.vectorPushRules = [];
|
||||
self.state.externalPushRules = [];
|
||||
|
||||
var vectorRuleIds = [
|
||||
const vectorRuleIds = [
|
||||
'.m.rule.contains_display_name',
|
||||
'.m.rule.contains_user_name',
|
||||
'_keywords',
|
||||
@@ -526,8 +553,8 @@ module.exports = React.createClass({
|
||||
'.m.rule.call',
|
||||
'.m.rule.suppress_notices'
|
||||
];
|
||||
for (var i in vectorRuleIds) {
|
||||
var vectorRuleId = vectorRuleIds[i];
|
||||
for (let i in vectorRuleIds) {
|
||||
const vectorRuleId = vectorRuleIds[i];
|
||||
|
||||
if (vectorRuleId === '_keywords') {
|
||||
// keywords needs a special handling
|
||||
@@ -537,11 +564,11 @@ module.exports = React.createClass({
|
||||
"vectorRuleId": "_keywords",
|
||||
"description" : (
|
||||
<span>
|
||||
{ _tJsx('Messages containing <span>keywords</span>',
|
||||
/<span>(.*?)<\/span>/,
|
||||
(sub) => {
|
||||
return <span className="mx_UserNotifSettings_keywords" onClick={ self.onKeywordsClicked }>{sub}</span>;
|
||||
}
|
||||
{ _t('Messages containing <span>keywords</span>',
|
||||
{},
|
||||
{ 'span': (sub) =>
|
||||
<span className="mx_UserNotifSettings_keywords" onClick={ self.onKeywordsClicked }>{sub}</span>
|
||||
},
|
||||
)}
|
||||
</span>
|
||||
),
|
||||
@@ -549,10 +576,10 @@ module.exports = React.createClass({
|
||||
});
|
||||
}
|
||||
else {
|
||||
var ruleDefinition = VectorPushRulesDefinitions[vectorRuleId];
|
||||
var rule = defaultRules.vector[vectorRuleId];
|
||||
const ruleDefinition = VectorPushRulesDefinitions[vectorRuleId];
|
||||
const rule = defaultRules.vector[vectorRuleId];
|
||||
|
||||
var vectorState = ruleDefinition.ruleToVectorState(rule);
|
||||
const vectorState = ruleDefinition.ruleToVectorState(rule);
|
||||
|
||||
//console.log("Refreshing vectorPushRules for " + vectorRuleId +", "+ ruleDefinition.description +", " + rule +", " + vectorState);
|
||||
|
||||
@@ -572,14 +599,14 @@ module.exports = React.createClass({
|
||||
}
|
||||
|
||||
// Build the rules not managed by Vector UI
|
||||
var otherRulesDescriptions = {
|
||||
const otherRulesDescriptions = {
|
||||
'.m.rule.message': _t('Notify for all other messages/rooms'),
|
||||
'.m.rule.fallback': _t('Notify me for anything else'),
|
||||
};
|
||||
|
||||
for (var i in defaultRules.others) {
|
||||
var rule = defaultRules.others[i];
|
||||
var ruleDescription = otherRulesDescriptions[rule.rule_id];
|
||||
for (let i in defaultRules.others) {
|
||||
const rule = defaultRules.others[i];
|
||||
const ruleDescription = otherRulesDescriptions[rule.rule_id];
|
||||
|
||||
// Show enabled default rules that was modified by the user
|
||||
if (ruleDescription && rule.enabled && !rule.default) {
|
||||
@@ -589,12 +616,11 @@ module.exports = React.createClass({
|
||||
}
|
||||
});
|
||||
|
||||
var pushersPromise = MatrixClientPeg.get().getPushers().then(function(resp) {
|
||||
//console.log("resolving pushersPromise");
|
||||
const pushersPromise = MatrixClientPeg.get().getPushers().then(function(resp) {
|
||||
self.setState({pushers: resp.pushers});
|
||||
});
|
||||
|
||||
q.all([pushRulesPromise, pushersPromise]).then(function() {
|
||||
Promise.all([pushRulesPromise, pushersPromise]).then(function() {
|
||||
self.setState({
|
||||
phase: self.phases.DISPLAY
|
||||
});
|
||||
@@ -616,7 +642,7 @@ module.exports = React.createClass({
|
||||
},
|
||||
|
||||
_updatePushRuleActions: function(rule, actions, enabled) {
|
||||
var cli = MatrixClientPeg.get();
|
||||
const cli = MatrixClientPeg.get();
|
||||
|
||||
return cli.setPushRuleActions(
|
||||
'global', rule.kind, rule.rule_id, actions
|
||||
@@ -662,9 +688,9 @@ module.exports = React.createClass({
|
||||
},
|
||||
|
||||
renderNotifRulesTableRows: function() {
|
||||
var rows = [];
|
||||
for (var i in this.state.vectorPushRules) {
|
||||
var rule = this.state.vectorPushRules[i];
|
||||
const rows = [];
|
||||
for (let i in this.state.vectorPushRules) {
|
||||
const rule = this.state.vectorPushRules[i];
|
||||
//console.log("rendering: " + rule.description + ", " + rule.vectorRuleId + ", " + rule.vectorState);
|
||||
rows.push(this.renderNotifRulesTableRow(rule.description, rule.vectorRuleId, rule.vectorState));
|
||||
}
|
||||
@@ -690,30 +716,32 @@ module.exports = React.createClass({
|
||||
},
|
||||
|
||||
render: function() {
|
||||
var self = this;
|
||||
const self = this;
|
||||
|
||||
var spinner;
|
||||
let spinner;
|
||||
if (this.state.phase === this.phases.LOADING) {
|
||||
var Loader = sdk.getComponent("elements.Spinner");
|
||||
const Loader = sdk.getComponent("elements.Spinner");
|
||||
spinner = <Loader />;
|
||||
}
|
||||
|
||||
let masterPushRuleDiv;
|
||||
if (this.state.masterPushRule) {
|
||||
var masterPushRuleDiv = (
|
||||
masterPushRuleDiv = (
|
||||
<div className="mx_UserNotifSettings_tableRow">
|
||||
<div className="mx_UserNotifSettings_inputCell">
|
||||
<input id="enableNotifications"
|
||||
ref="enableNotifications"
|
||||
type="checkbox"
|
||||
checked={ !this.state.masterPushRule.enabled }
|
||||
onChange={ this.onEnableNotificationsChange } />
|
||||
</div>
|
||||
<div className="mx_UserNotifSettings_labelCell">
|
||||
<label htmlFor="enableNotifications">
|
||||
{ _t('Enable notifications for this account') }
|
||||
</label>
|
||||
</div>
|
||||
<div className="mx_UserNotifSettings_inputCell">
|
||||
<input id="enableNotifications"
|
||||
ref="enableNotifications"
|
||||
type="checkbox"
|
||||
checked={ !this.state.masterPushRule.enabled }
|
||||
onChange={ this.onEnableNotificationsChange }
|
||||
/>
|
||||
</div>
|
||||
<div className="mx_UserNotifSettings_labelCell">
|
||||
<label htmlFor="enableNotifications">
|
||||
{ _t('Enable notifications for this account') }
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -741,29 +769,29 @@ module.exports = React.createClass({
|
||||
// This only supports the first email address in your profile for now
|
||||
emailNotificationsRow = this.emailNotificationsRow(
|
||||
emailThreepids[0].address,
|
||||
_t('Enable email notifications') + ' (' + emailThreepids[0].address + ')'
|
||||
`${_t('Enable email notifications')} (${emailThreepids[0].address})`
|
||||
);
|
||||
}
|
||||
|
||||
// Build external push rules
|
||||
var externalRules = [];
|
||||
for (var i in this.state.externalPushRules) {
|
||||
var rule = this.state.externalPushRules[i];
|
||||
const externalRules = [];
|
||||
for (let i in this.state.externalPushRules) {
|
||||
const rule = this.state.externalPushRules[i];
|
||||
externalRules.push(<li>{ _t(rule.description) }</li>);
|
||||
}
|
||||
|
||||
// Show keywords not displayed by the vector UI as a single external push rule
|
||||
var externalKeyWords = [];
|
||||
for (var i in this.state.externalContentRules) {
|
||||
var rule = this.state.externalContentRules[i];
|
||||
externalKeyWords.push(rule.pattern);
|
||||
let externalKeywords = [];
|
||||
for (let i in this.state.externalContentRules) {
|
||||
const rule = this.state.externalContentRules[i];
|
||||
externalKeywords.push(rule.pattern);
|
||||
}
|
||||
if (externalKeyWords.length) {
|
||||
externalKeyWords = externalKeyWords.join(", ");
|
||||
externalRules.push(<li>{ _t('Notifications on the following keywords follow rules which can’t be displayed here:') } { externalKeyWords }</li>);
|
||||
if (externalKeywords.length) {
|
||||
externalKeywords = externalKeywords.join(", ");
|
||||
externalRules.push(<li>{ _t('Notifications on the following keywords follow rules which can’t be displayed here:') } { externalKeywords }</li>);
|
||||
}
|
||||
|
||||
var devicesSection;
|
||||
let devicesSection;
|
||||
if (this.state.pushers === undefined) {
|
||||
devicesSection = <div className="error">{ _t('Unable to fetch notification target list') }</div>
|
||||
} else if (this.state.pushers.length == 0) {
|
||||
@@ -771,8 +799,8 @@ module.exports = React.createClass({
|
||||
} else {
|
||||
// TODO: It would be great to be able to delete pushers from here too,
|
||||
// and this wouldn't be hard to add.
|
||||
var rows = [];
|
||||
for (var i = 0; i < this.state.pushers.length; ++i) {
|
||||
const rows = [];
|
||||
for (let i = 0; i < this.state.pushers.length; ++i) {
|
||||
rows.push(<tr key={ i }>
|
||||
<td>{this.state.pushers[i].app_display_name}</td>
|
||||
<td>{this.state.pushers[i].device_display_name}</td>
|
||||
@@ -791,7 +819,7 @@ module.exports = React.createClass({
|
||||
</div>);
|
||||
}
|
||||
|
||||
var advancedSettings;
|
||||
let advancedSettings;
|
||||
if (externalRules.length) {
|
||||
advancedSettings = (
|
||||
<div>
|
||||
@@ -819,7 +847,7 @@ module.exports = React.createClass({
|
||||
<input id="enableDesktopNotifications"
|
||||
ref="enableDesktopNotifications"
|
||||
type="checkbox"
|
||||
checked={ UserSettingsStore.getEnableNotifications() }
|
||||
checked={ SettingsStore.getValue("notificationsEnabled") }
|
||||
onChange={ this.onEnableDesktopNotificationsChange } />
|
||||
</div>
|
||||
<div className="mx_UserNotifSettings_labelCell">
|
||||
@@ -829,16 +857,28 @@ module.exports = React.createClass({
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="mx_UserNotifSettings_tableRow">
|
||||
<div className="mx_UserNotifSettings_inputCell">
|
||||
<input id="enableDesktopNotificationBody"
|
||||
ref="enableDesktopNotificationBody"
|
||||
type="checkbox"
|
||||
checked={ SettingsStore.getValue("notificationBodyEnabled") }
|
||||
onChange={ this.onEnableDesktopNotificationBodyChange } />
|
||||
</div>
|
||||
<div className="mx_UserNotifSettings_labelCell">
|
||||
<label htmlFor="enableDesktopNotificationBody">
|
||||
{ _t('Show message in desktop notification') }
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="mx_UserNotifSettings_tableRow">
|
||||
<div className="mx_UserNotifSettings_inputCell">
|
||||
<input id="enableDesktopAudioNotifications"
|
||||
ref="enableDesktopAudioNotifications"
|
||||
type="checkbox"
|
||||
checked={ UserSettingsStore.getEnableAudioNotifications() }
|
||||
onChange={ (e) => {
|
||||
UserSettingsStore.setEnableAudioNotifications(e.target.checked);
|
||||
this.forceUpdate();
|
||||
}} />
|
||||
checked={ SettingsStore.getValue("audioNotificationsEnabled") }
|
||||
onChange={ this.onEnableAudioNotificationsChange } />
|
||||
</div>
|
||||
<div className="mx_UserNotifSettings_labelCell">
|
||||
<label htmlFor="enableDesktopAudioNotifications">
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright 2015, 2016 OpenMarket Ltd
|
||||
Copyright 2017 New Vector Ltd
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -2,5 +2,31 @@
|
||||
"All messages": "كل الرسائل",
|
||||
"Continue": "استمر",
|
||||
"Please set a password!": "يرجى تعيين كلمة مرور!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "سيسمح لك هذا بالعودة إلى حسابك بعد الخروج، وتسجيل الدخول على الأجهزة الأخرى."
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "سيسمح لك هذا بالعودة إلى حسابك بعد الخروج، وتسجيل الدخول على الأجهزة الأخرى.",
|
||||
"Advanced notification settings": "إعدادات متقدمة للرسائل",
|
||||
"A new version of Riot is available.": "نسخة جديدة من رايوت متوفرة.",
|
||||
"All Rooms": "كل الغُرف",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">متصفح سافاري</a> و <a href=\"http://opera.com\">متصفح أوبرا</a> يعملان أيضاً.",
|
||||
"Add an email address above to configure email notifications": "أضف بريداً إلكترونياً أعلاه من أجل تعديل إعدادت تنبيهات البريد الإلكتروني",
|
||||
"All messages (noisy)": "كل الرسائل (صوت مرتفع)",
|
||||
"All notifications are currently disabled for all targets.": "كل التنبيهات غير مفعلة حالياً للجميع.",
|
||||
"An error occurred whilst saving your email notification preferences.": "حدث خطأ ما خلال حفظ إعدادات التنبيهات للبريد الإلكتروني.",
|
||||
"Call invitation": "دعوة لمحادثة",
|
||||
"Cancel": "إلغاء",
|
||||
"Cancel Sending": "إلغاء الإرسال",
|
||||
"Can't update user notification settings": "لا يمكن تحديث إعدادات التنبيهات للمستخدم",
|
||||
"Changelog": "سِجل التغييرات",
|
||||
"Close": "إغلاق",
|
||||
"Collapse panel": "طي الجدول",
|
||||
"Collecting app version information": "إستعادة معلومات النسخة للتطبيق",
|
||||
"Collecting logs": "إستعادة السجلات",
|
||||
"Couldn't find a matching Matrix room": "لا يمكن إيجاد غرفة مايتركس متطابقة",
|
||||
"Custom Server Options": "إعدادات السيرفر خاصة",
|
||||
"delete the alias.": "إلغاء المُعرف.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "إلغاء مُعرف الغرفة %(alias)s وحذف %(name)s من الدليل؟",
|
||||
"Describe your problem here.": "صِف مشكلتك هنا.",
|
||||
"Direct Chat": "دردشة مباشرة",
|
||||
"Directory": "دليل",
|
||||
"Dismiss": "صرف النظر",
|
||||
"Download this file": "تحميل هذا الملف"
|
||||
}
|
||||
|
||||
32
src/i18n/strings/az.json
Normal file
32
src/i18n/strings/az.json
Normal file
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot mobil qurğular üçün veb-saytın versiyasını dəstəkləmir. Proqramı qurmaq?",
|
||||
"Collecting app version information": "Proqramın versiyası haqqında məlumatın yığılması",
|
||||
"Collecting logs": "Jurnalların bir yığım",
|
||||
"Uploading report": "Hesabatın göndərilməsi",
|
||||
"Waiting for response from server": "Serverdən cavabın gözlənməsi",
|
||||
"Riot Desktop on %(platformName)s": "%(platformName)s-da Riot Desktop",
|
||||
"Unknown device": "Naməlum qurğu",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "İş stolunun birgə istifadəsi üçün HTTPS-dan istifadə tələb olunur.",
|
||||
"Messages containing my display name": "Mənim adımı özündə saxlayan mesajlar",
|
||||
"Messages containing my user name": "Mənim istifadəçinin adımı özündə saxlayan mesaj",
|
||||
"Messages in one-to-one chats": "Fərdi çatlarda mesajlar",
|
||||
"Messages in group chats": "Qrup çatlarında mesajlar",
|
||||
"When I'm invited to a room": "Nə vaxt ki, məni otağa dəvət edirlər",
|
||||
"Call invitation": "Dəvət zəngi",
|
||||
"Messages sent by bot": "Botla göndərilmiş mesajlar",
|
||||
"Error saving email notification preferences": "Email üzrə xəbərdarlıqların qurmalarının saxlanılması səhv",
|
||||
"An error occurred whilst saving your email notification preferences.": "Email üzrə bildirişin qurmalarının saxlanılması səhv yarandı.",
|
||||
"Keywords": "Açar sözlər",
|
||||
"Enter keywords separated by a comma:": "Vergül bölünmüş açar sözləri daxil edin:",
|
||||
"OK": "OK",
|
||||
"Failed to change settings": "Qurmaları dəyişdirməyi bacarmadı",
|
||||
"Operation failed": "Əməliyyatın nasazlığı",
|
||||
"Can't update user notification settings": "Bildirişin istifadəçi qurmalarını yeniləməyə müvəffəq olmur",
|
||||
"Failed to update keywords": "Açar sözləri yeniləməyi bacarmadı",
|
||||
"Messages containing <span>keywords</span>": "Müəyyən <span>açar sözləri</span> özündə saxlayan mesajlar",
|
||||
"Notify for all other messages/rooms": "Bütün başqa mesajdan/otaqlardan xəbər vermək",
|
||||
"Notify me for anything else": "Bütün qalan hadisələrdə xəbər vermək",
|
||||
"Enable notifications for this account": "Bu hesab üçün xəbərdarlıqları qoşmaq",
|
||||
"All notifications are currently disabled for all targets.": "Bütün qurğular üçün bütün bildirişlər kəsilmişdir.",
|
||||
"Add an email address above to configure email notifications": "Email-i bildirişlər üçün ünvanı əlavə edin"
|
||||
}
|
||||
@@ -1,13 +1,12 @@
|
||||
{
|
||||
"Add an email address above to configure email notifications": "Дадайце адрас электроннай пошты вышэй, каб наладзіць апавяшчэнні",
|
||||
"All messages": "Усе паведамленні",
|
||||
"All messages (loud)": "Усе паведамленні (гучна)",
|
||||
"All messages (noisy)": "Усе паведамленні (гучна)",
|
||||
"All notifications are currently disabled for all targets.": "Усе апавяшчэнні ў цяперашні час адключаныя для ўсіх мэтаў.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Адбылася памылка падчас захавання налады апавяшчэнняў па электроннай пошце.",
|
||||
"Cancel Sending": "Адмяніць адпраўку",
|
||||
"Can't update user notification settings": "Немагчыма абнавіць налады апавяшчэнняў карыстальніка",
|
||||
"Close": "Зачыніць",
|
||||
"Create new room": "Стварыць новы пакой",
|
||||
"Couldn't find a matching Matrix room": "Не атрымалася знайсці адпаведны пакой Matrix",
|
||||
"Custom Server Options": "Карыстальніцкія параметры сервера",
|
||||
"delete the alias.": "выдаліць псеўданім.",
|
||||
@@ -16,7 +15,6 @@
|
||||
"Directory": "Каталог",
|
||||
"Dismiss": "Aдхіліць",
|
||||
"Download this file": "Спампаваць гэты файл",
|
||||
"Drop here %(toAction)s": "Перацягнуць сюды %(toAction)s",
|
||||
"Enable audible notifications in web client": "Ўключыць гукавыя апавяшчэнні ў вэб-кліенце",
|
||||
"Enable desktop notifications": "Ўключыць апавяшчэнні на працоўным стале",
|
||||
"Enable email notifications": "Ўключыць паведамлення па электроннай пошце",
|
||||
@@ -26,14 +24,12 @@
|
||||
"Error": "Памылка",
|
||||
"Error saving email notification preferences": "Памылка захавання налад апавяшчэнняў па электроннай пошце",
|
||||
"#example": "#прыклад",
|
||||
"Failed to": "Не атрымалася",
|
||||
"Failed to add tag %(tagName)s to room": "Не атрымалася дадаць %(tagName)s ў пакоі",
|
||||
"Failed to change settings": "Не атрымалася змяніць налады",
|
||||
"Failed to forget room %(errCode)s": "Не атрымалася забыць пакой %(errCode)s",
|
||||
"Failed to update keywords": "Не атрымалася абнавіць ключавыя словы",
|
||||
"Failed to get protocol list from Home Server": "Не ўдалося атрымаць спіс пратаколаў ад хатняга сервера",
|
||||
"Failed to get public room list": "Не ўдалося атрымаць спіс агульных пакояў",
|
||||
"Failed to join the room": "Не ўдалося далучыцца да пакоя",
|
||||
"Failed to remove tag %(tagName)s from room": "Не ўдалося выдаліць %(tagName)s з пакоя",
|
||||
"Failed to set direct chat tag": "Не ўдалося ўсталяваць тэг прамога чата",
|
||||
"Failed to set Direct Message status of room": "Не ўдалося ўсталяваць статут прамога паведамлення пакою",
|
||||
@@ -42,9 +38,7 @@
|
||||
"Files": "Файлы",
|
||||
"Filter room names": "Фільтр iмёнаў пакояў",
|
||||
"Forget": "Забыць",
|
||||
" from room": " з пакоя",
|
||||
"Guests can join": "Госці могуць далучыцца",
|
||||
"Guest users can't invite users. Please register to invite.": "Госцi не могуць запрашаць карыстальнікаў. Калі ласка, зарэгіструйцеся, каб запрасiць.",
|
||||
"Invite to this room": "Запрасіць у гэты пакой",
|
||||
"Keywords": "Ключавыя словы",
|
||||
"Leave": "Пакінуць",
|
||||
@@ -56,17 +50,15 @@
|
||||
"Noisy": "Шумна",
|
||||
"Notification targets": "Мэты апавяшчэння",
|
||||
"Notifications": "Апавяшчэнні",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Апавяшчэнні па наступных ключавых словах прытрымліваюцца правілаў, якія не могуць быць адлюстраваны тут",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Апавяшчэнні па наступных ключавых словах прытрымліваюцца правілаў, якія не могуць быць адлюстраваны тут:",
|
||||
"Notify for all other messages/rooms": "Апавяшчаць для ўсіх іншых паведамленняў/пакояў",
|
||||
"Notify me for anything else": "Паведаміць мне што-небудзь яшчэ",
|
||||
"Off": "Выключыць",
|
||||
"On": "Уключыць",
|
||||
"Operation failed": "Не атрымалася выканаць аперацыю",
|
||||
"Permalink": "Пастаянная спасылка",
|
||||
"Please Register": "Калі ласка, зарэгіструйцеся",
|
||||
"powered by Matrix": "працуе на Matrix",
|
||||
"Quote": "Цытата",
|
||||
"Redact": "Адрэдагаваць",
|
||||
"Reject": "Адхіліць",
|
||||
"Remove %(name)s from the directory?": "Выдаліць %(name)s з каталога?",
|
||||
"Remove": "Выдалiць",
|
||||
@@ -74,15 +66,10 @@
|
||||
"Remove from Directory": "Выдалiць з каталога",
|
||||
"Resend": "Паўторна",
|
||||
"Riot does not know how to join a room on this network": "Riot не ведае, як увайсці ў пакой у гэтай сетке",
|
||||
"Room directory": "Каталог пакояў",
|
||||
"Room not found": "Пакой не знойдзены",
|
||||
"Search for a room": "Пошук па пакоі",
|
||||
"Settings": "Налады",
|
||||
"Source URL": "URL-адрас крыніцы",
|
||||
"Start chat": "Пачаць чат",
|
||||
"The Home Server may be too old to support third party networks": "Хатні сервер можа быць занадта стары для падтрымкі іншых сетак",
|
||||
"There are advanced notifications which are not shown here": "Ёсць пашыраныя апавяшчэння, якія не паказаныя тут",
|
||||
"The server may be unavailable or overloaded": "Сервер можа быць недаступны ці перагружаны",
|
||||
"This room is inaccessible to guests. You may be able to join if you register.": "Гэты пакой недаступны для гасцей. Вы можаце далучыцца, калі вы зарэгіструецеся.",
|
||||
" to room": " ў пакоі"
|
||||
"The server may be unavailable or overloaded": "Сервер можа быць недаступны ці перагружаны"
|
||||
}
|
||||
|
||||
225
src/i18n/strings/bg.json
Normal file
225
src/i18n/strings/bg.json
Normal file
@@ -0,0 +1,225 @@
|
||||
{
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot не поддържа мобилен уеб браузър. Инсталиране на приложението?",
|
||||
"Collecting app version information": "Събиране на информация за версията на приложението",
|
||||
"Collecting logs": "Събиране на логове",
|
||||
"Uploading report": "Качване на доклада",
|
||||
"Waiting for response from server": "Изчакване на отговор от сървъра",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop под %(platformName)s",
|
||||
"Unknown device": "Непознато устройство",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s в %(browserName)s под %(osName)s",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Трябва да използвате HTTPS, за да споделите екрана си.",
|
||||
"Messages containing my display name": "Съобщения, съдържащи моя псевдоним",
|
||||
"Messages containing my user name": "Съобщения, съдържащи моето потребителско име",
|
||||
"Messages in one-to-one chats": "Съобщения в индивидуални чатове",
|
||||
"Messages in group chats": "Съобщения в групови чатове",
|
||||
"When I'm invited to a room": "Когато ме поканят в стая",
|
||||
"Call invitation": "Покана за разговор",
|
||||
"Messages sent by bot": "Съобщения изпратени от бот",
|
||||
"Error saving email notification preferences": "Грешка при запазване на настройките за имейл известяване",
|
||||
"An error occurred whilst saving your email notification preferences.": "Възникна грешка при запазване на настройките за имейл известяване.",
|
||||
"Keywords": "Ключови думи",
|
||||
"Enter keywords separated by a comma:": "Ключови думи разделени чрез запетая:",
|
||||
"OK": "ОК",
|
||||
"Failed to change settings": "Неуспешна промяна на настройки",
|
||||
"Operation failed": "Операцията е неуспешна",
|
||||
"Can't update user notification settings": "Неуспешно обновяване на потребителски настройки за известяване",
|
||||
"Failed to update keywords": "Грешка при обновяване на ключови думи",
|
||||
"Messages containing <span>keywords</span>": "Съобщения, съдържащи <span>ключови думи</span>",
|
||||
"Notify for all other messages/rooms": "Извести ме за всички други съобщения/стаи",
|
||||
"Notify me for anything else": "Извести ме за всичко останало",
|
||||
"Enable notifications for this account": "Включване на известия за този профил",
|
||||
"All notifications are currently disabled for all targets.": "В момента известията са изключени за всички цели.",
|
||||
"Add an email address above to configure email notifications": "За конфигурация на имейл известия добавете имейл адрес по-горе.",
|
||||
"Enable email notifications": "Активиране на имейл известия",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Известия за следните ключови думи изпълняват правила, които не могат да бъдат показани тук:",
|
||||
"Unable to fetch notification target list": "Неуспешно извличане на списък с устройства получаващи известия",
|
||||
"Notification targets": "Устройства, получаващи известия",
|
||||
"Advanced notification settings": "Разширени настройки за известяване",
|
||||
"There are advanced notifications which are not shown here": "Съществуват разширени настройки за известия, които не са показани тук",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Възможна конфигурация на настройките за известия в клиент, различен от Riot. Не могат да бъдат променени в Riot, но важат въпреки това",
|
||||
"Enable desktop notifications": "Включване на известия на работния плот",
|
||||
"Show message in desktop notification": "Показване на съдържание в известията на работния плот",
|
||||
"Enable audible notifications in web client": "Включване на звукови известия в уеб клиент",
|
||||
"Off": "Изключено",
|
||||
"On": "Включено",
|
||||
"Noisy": "Шумно",
|
||||
"Search…": "Търсене…",
|
||||
"Search": "Търсене",
|
||||
"This Room": "В тази стая",
|
||||
"All Rooms": "Във всички стаи",
|
||||
"Sunday": "Неделя",
|
||||
"Monday": "Понеделник",
|
||||
"Tuesday": "Вторник",
|
||||
"Wednesday": "Сряда",
|
||||
"Thursday": "Четвъртък",
|
||||
"Friday": "Петък",
|
||||
"Saturday": "Събота",
|
||||
"Today": "Днес",
|
||||
"Yesterday": "Вчера",
|
||||
"Custom Server Options": "Потребителски опции за сървър",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Може да използвате опциите за друг сървър, за да влезете в други Matrix сървъри като посочите различен Home сървър.<br/>Това Ви позволява да използвате Riot със съществуващ Matrix профил на различен Home сървър.<br/><br/> Възможно е и да зададете друг сървър за самоличност. В този случай обаче няма да бъде възможно да поканите други потребители по имейл адрес, както и самите Вие няма да можете да бъдете поканени по имейл адрес.",
|
||||
"Dismiss": "Затвори",
|
||||
"powered by Matrix": "базирано на Matrix",
|
||||
"You are not receiving desktop notifications": "Не получавате известия на работния плот",
|
||||
"Enable them now": "Включете ги сега",
|
||||
"What's New": "Какво ново",
|
||||
"Update": "Актуализиране",
|
||||
"What's new?": "Какво ново?",
|
||||
"A new version of Riot is available.": "Налична е нова версия на Riot.",
|
||||
"To return to your account in future you need to <u>set a password</u>": "За да се върнете в профила си в бъдеще, трябва да <u>зададете парола</u>",
|
||||
"Set Password": "Задаване на парола",
|
||||
"Error encountered (%(errorDetail)s).": "Възникна грешка (%(errorDetail)s).",
|
||||
"Checking for an update...": "Проверяване за нова версия...",
|
||||
"No update available.": "Няма нова версия.",
|
||||
"Downloading update...": "Сваляне на нова версия...",
|
||||
"Warning": "Предупреждение",
|
||||
"Error": "Грешка",
|
||||
"You cannot delete this image. (%(code)s)": "Не можете да изтриете тази снимка. (%(code)s)",
|
||||
"Uploaded on %(date)s by %(user)s": "Качено на %(date)s от %(user)s",
|
||||
"Remove": "Премахни",
|
||||
"Close": "Затвори",
|
||||
"Download this file": "Изтегли този файл",
|
||||
"Please describe the bug and/or send logs.": "Моля, опишете проблема и/или изпратете логове.",
|
||||
"Loading bug report module": "Зареждане на модул за докладване на проблем",
|
||||
"Bug report sent": "Докладът за грешки е изпратен",
|
||||
"Thank you!": "Благодарим!",
|
||||
"Failed to send report: ": "Неуспешно изпращане на доклада: ",
|
||||
"Cancel": "Отказ",
|
||||
"Report a bug": "Докладвай за грешка",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Моля, опишете грешката. Какво направихте? Какво очаквахте да стане? Какво стана всъщност?",
|
||||
"Describe your problem here.": "Опишете своя проблем тук.",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "За да се диагностицират проблемите, логовете от този клиент ще бъдат изпратени с този доклад за грешки. Ако предпочитате да изпратите само текста по-горе, моля, премахнете отметката:",
|
||||
"Send logs": "Изпращане на логове",
|
||||
"Send": "Изпрати",
|
||||
"Unavailable": "Не е наличен",
|
||||
"Changelog": "Списък на промените",
|
||||
"Back": "Назад",
|
||||
"Send Custom Event": "Изпрати потребителско събитие",
|
||||
"You must specify an event type!": "Трябва да укажате тип на събитието",
|
||||
"Event sent!": "Събитието е изпратено!",
|
||||
"Failed to send custom event.": "Неуспешно изпращане на потребителско събитие.",
|
||||
"Event Type": "Вид на събитие",
|
||||
"Send Account Data": "Изпращане на Account Data",
|
||||
"Filter results": "Филтриране на резултати",
|
||||
"Edit": "Редактирай",
|
||||
"Toolbox": "Инструменти",
|
||||
"You have successfully set a password!": "Вие успешно зададохте парола!",
|
||||
"You have successfully set a password and an email address!": "Вие успешно зададохте парола и имейл адрес!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Вече можете да се върнете в профила си след излизане от него и да влезете от други устройства.",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Ако си промените мнението, винаги може да зададете имейл адрес в настройки на потребителя.",
|
||||
"Continue": "Продължи",
|
||||
"Failed to change password. Is your password correct?": "Неуспешна промяна. Правилно ли сте въвели Вашата парола?",
|
||||
"(HTTP status %(httpStatus)s)": "(HTTP статус %(httpStatus)s)",
|
||||
"Please set a password!": "Моля, въведете парола!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Това ще Ви позволи да се върнете в профила си след излизане от него, и да влезете от други устройства.",
|
||||
"You cannot delete this message. (%(code)s)": "Това съобщение не може да бъде изтрито. (%(code)s)",
|
||||
"Resend": "Изпрати отново",
|
||||
"Cancel Sending": "Откажи изпращането",
|
||||
"Forward Message": "Препрати съобщението",
|
||||
"Reply": "Отговори",
|
||||
"Unpin Message": "Откачи съобщението",
|
||||
"Pin Message": "Закачи съобщението",
|
||||
"View Source": "Прегледай източника",
|
||||
"View Decrypted Source": "Прегледай разшифрования източник",
|
||||
"Unhide Preview": "Покажи отново прегледа",
|
||||
"Permalink": "Permalink",
|
||||
"Quote": "Цитирай",
|
||||
"Source URL": "URL на източника",
|
||||
"Online": "Онлайн",
|
||||
"Away": "Отсъстващ",
|
||||
"Appear Offline": "Показване като офлайн",
|
||||
"Failed to remove tag %(tagName)s from room": "Неуспешно премахване на %(tagName)s етикет от стаята",
|
||||
"Failed to set Direct Message status of room": "Неуспешно настройване на стаята като Директен чат",
|
||||
"unknown error code": "неизвестен код за грешка",
|
||||
"Failed to forget room %(errCode)s": "Неуспешно забравяне на стаята %(errCode)s",
|
||||
"All messages (noisy)": "Всички съобщения (шумно)",
|
||||
"All messages": "Всички съобщения",
|
||||
"Mentions only": "Само при споменаване",
|
||||
"Mute": "Заглуши",
|
||||
"Leave": "Напусни",
|
||||
"Forget": "Забрави",
|
||||
"Reject": "Отхвърли",
|
||||
"Favourite": "Любим",
|
||||
"Low Priority": "Нисък приоритет",
|
||||
"Direct Chat": "Директен чат",
|
||||
"View Community": "Прегледай общността",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "За жалост, Вашият браузър <b>не</b> може да пусне Riot.",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot използва много разширени браузър харектеристики, някои от които не са налични или са все още експериментални в настоящия Ви браузър.",
|
||||
"Please install <chromeLink>Chrome</chromeLink> or <firefoxLink>Firefox</firefoxLink> for the best experience.": "Моля, инсталирайте <chromeLink>Chrome</chromeLink> или <firefoxLink>Firefox</firefoxLink> за най-добро преживяване.",
|
||||
"<safariLink>Safari</safariLink> and <operaLink>Opera</operaLink> work too.": "<safariLink>Safari</safariLink> и <operaLink>Opera</operaLink> са други алтернативи.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "С текущия Ви браузър, изглеждането и усещането на приложението може да бъде неточно, и някои или всички от функциите може да не функционират,работят......... Ако искате може да продължите така или иначе, но сте сами по отношение на евентуалните проблеми, които може да срещнете!",
|
||||
"I understand the risks and wish to continue": "Разбирам рисковете и желая да продължа",
|
||||
"Couldn't load home page": "Неуспешно зареждане на началната страница",
|
||||
"Login": "Вход",
|
||||
"Register": "Регистрация",
|
||||
"Members": "Членове",
|
||||
"%(count)s Members|other": "%(count)s Членове",
|
||||
"%(count)s Members|one": "%(count)s Член",
|
||||
"Invite to this room": "Покани в тази стая",
|
||||
"Files": "Файлове",
|
||||
"Notifications": "Известия",
|
||||
"Rooms": "Стаи",
|
||||
"Hide panel": "Скриване на панела",
|
||||
"Invite to this community": "Покани в тази общност",
|
||||
"Add rooms to this community": "Добави стаи в тази общност",
|
||||
"Failed to get protocol list from Home Server": "Неуспешно получаване на списък с протоколи от Home сървър",
|
||||
"The Home Server may be too old to support third party networks": "Home сървърът може да е твърде стар, за да поддържа работа с други мрежи",
|
||||
"Failed to get public room list": "Неуспешно получаване на списък с публични стаи",
|
||||
"State Key": "State ключ",
|
||||
"Event Content": "Съдържание на събитието",
|
||||
"Explore Room State": "Преглед на състоянието на стаята",
|
||||
"Explore Account Data": "Преглед на данните от профила",
|
||||
"Developer Tools": "Инструменти за разработчика",
|
||||
"The server may be unavailable or overloaded": "Сървърът не е наличен или е претоварен",
|
||||
"Unnamed room": "Стая без име",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Изтриване на псевдонима %(alias)s на стаята и премахване на %(name)s от директорията?",
|
||||
"Remove %(name)s from the directory?": "Премахване на %(name)s от директорията?",
|
||||
"Remove from Directory": "Премахни от директорията",
|
||||
"remove %(name)s from the directory.": "премахване %(name)s от директорията.",
|
||||
"delete the alias.": "изтрий псевдонима.",
|
||||
"Unable to join network": "Неуспешно присъединяване към мрежата",
|
||||
"Riot does not know how to join a room on this network": "Riot не знае как да се присъедини към стая от тази мрежа",
|
||||
"Room not found": "Стаята не е намерена",
|
||||
"Couldn't find a matching Matrix room": "Не успяхме да намерим съответната Matrix стая",
|
||||
"Fetching third party location failed": "Неуспешно извличане на адреса на стаята от друга мрежа",
|
||||
"Unable to look up room ID from server": "Стая с такъв идентификатор не е намерена на сървъра",
|
||||
"World readable": "Четимо за всички",
|
||||
"Guests can join": "Гости могат да се присъединят",
|
||||
"Directory": "Директория",
|
||||
"No rooms to show": "Няма стаи, които да бъдат показани",
|
||||
"Search for a room": "Търсене на стая",
|
||||
"#example": "#пример",
|
||||
"more": "още",
|
||||
"Failed to add tag %(tagName)s to room": "Неуспешно добавяне на %(tagName)s етикет в стаята",
|
||||
"Expand panel": "Разшири панела",
|
||||
"Collapse panel": "Свий панела",
|
||||
"Filter room names": "Филтрирай стаи по име",
|
||||
"Welcome to Riot.im": "Добре дошли в Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Децентрализиран, шифрован чат и колаборация базирани на [matrix]",
|
||||
"Search the room directory": "Търсене в директорията със стаи",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "В Matrix съществуват много стаи, свързани към вече съществуващи мрежи (Slack, IRC, Gitter и т.н.) или независими такива. Разгледайте директорията!",
|
||||
"Chat with Riot Bot": "Чат с Riot Bot",
|
||||
"Get started with some tips from Riot Bot!": "Започнете с някои съвети от Riot Bot!",
|
||||
"General discussion about Matrix and Riot": "Обща дискусия относно Matrix и Riot",
|
||||
"Discussion of all things Matrix!": "Дискусия за всичко свързано с Matrix!",
|
||||
"Riot/Web & Desktop chat": "Riot/Web & Desktop чат",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk чат",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk чат",
|
||||
"Matrix technical discussions": "Технически дискусии в Matrix",
|
||||
"Running Matrix services": "Хостинг на Matrix услуги",
|
||||
"Community-run support for Synapse": "Поддръжка за Synapse от общността",
|
||||
"Admin support for Dendrite": "Административна поддръжка за Dendrite",
|
||||
"Announcements about Synapse releases": "Обявления за нови версии на Synapse",
|
||||
"Support for those using and running matrix-appservice-irc": "Поддръжка за използващите и работещите с matrix-appservice-irc",
|
||||
"Building services on Matrix": "Разработка на услуги в Matrix",
|
||||
"Support for those using the Matrix spec": "Поддръжка за използващите Matrix спецификацията",
|
||||
"Design and implementation of E2E in Matrix": "Разработване и внедряване на E2E шифроване в Matrix",
|
||||
"Implementing VR services with Matrix": "Внедряване на VR услуги с Matrix",
|
||||
"Implementing VoIP services with Matrix": "Внедряване на VoIP услуги с Matrix",
|
||||
"Discussion of the Identity Service API": "Дискусия върху API услугата за самоличност",
|
||||
"Support for those using, running and writing other bridges": "Поддръжка за тези, които използват, работят и пишат Matrix мостове",
|
||||
"Contributing code to Matrix and Riot": "Допринасяне с код към Matrix и Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Чат за разработващия екип на Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "Чат за разработващия екип на Dendrite",
|
||||
"Co-ordination for Riot/Web translators": "Координация за преводачи на Riot/Web"
|
||||
}
|
||||
@@ -1 +1 @@
|
||||
{}
|
||||
{}
|
||||
|
||||
1
src/i18n/strings/bs.json
Normal file
1
src/i18n/strings/bs.json
Normal file
@@ -0,0 +1 @@
|
||||
{}
|
||||
227
src/i18n/strings/ca.json
Normal file
227
src/i18n/strings/ca.json
Normal file
@@ -0,0 +1,227 @@
|
||||
{
|
||||
"A new version of Riot is available.": "Hi ha una nova versió del Riot disponible.",
|
||||
"All messages": "Tots els missatges",
|
||||
"Cancel": "Cancel·la",
|
||||
"Close": "Tanca",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s per a %(osName)s",
|
||||
"Failed to change password. Is your password correct?": "Hi ha hagut un error al canviar la vostra contrasenya. És correcte la vostra contrasenya?",
|
||||
"Continue": "Continua",
|
||||
"All Rooms": "Totes les sales",
|
||||
"Couldn't find a matching Matrix room": "No s'ha pogut trobar una sala de Matrix que coincideixi",
|
||||
"Failed to add tag %(tagName)s to room": "No s'ha pogut afegir l'etiqueta %(tagName)s a la sala",
|
||||
"Failed to forget room %(errCode)s": "No s'ha pogut oblidar la sala %(errCode)s",
|
||||
"Failed to get public room list": "No s'ha pogut obtenir el llistat de sales públiques",
|
||||
"Failed to remove tag %(tagName)s from room": "No s'ha pogut esborrar l'etiqueta %(tagName)s de la sala",
|
||||
"Filter room names": "Filtra els noms de les sales",
|
||||
"Couldn't load home page": "No s'ha pogut carregar la pàgina d'inici",
|
||||
"All messages (noisy)": "Tots els missatges (sorollós)",
|
||||
"Mentions only": "Només mencions",
|
||||
"Mute": "Silencia",
|
||||
"Direct Chat": "Xat directe",
|
||||
"Directory": "Directori",
|
||||
"Failed to set direct chat tag": "No s'ha pogut establir l'etiqueta del xat directe",
|
||||
"Invite to this room": "Convida a aquesta sala",
|
||||
"No rooms to show": "No hi ha cap sala per a mostrar",
|
||||
"Riot does not know how to join a room on this network": "El Riot no sap com unir-se a una sala en aquesta xarxa",
|
||||
"Room not found": "No s'ha trobat la sala",
|
||||
"Unnamed room": "Sala sense nom",
|
||||
"#example": "#exemple",
|
||||
"Failed to change settings": "No s'han pogut modificar els paràmetres",
|
||||
"Enable audible notifications in web client": "Habilita les notificacions d'àudio al client web",
|
||||
"Enable desktop notifications": "Habilita les notificacions d'escriptori",
|
||||
"Enable email notifications": "Habilita les notificacions per correu electrònic",
|
||||
"Enable notifications for this account": "Habilita les notificacions per aquest compte",
|
||||
"Low Priority": "Baixa prioritat",
|
||||
"Members": "Membres",
|
||||
"Changelog": "Registre de canvis",
|
||||
"Describe your problem here.": "Descriu aquí el teu problema.",
|
||||
"Download this file": "Descarrega aquest fitxer",
|
||||
"Enable them now": "Habilita-ho ara",
|
||||
"Error": "Error",
|
||||
"Favourite": "Favorit",
|
||||
"Files": "Fitxers",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "També funcionen el <a href=\"http://apple.com/safari\">Safari</a> i l'<a href=\"http://opera.com\">Opera</a>.",
|
||||
"Add an email address above to configure email notifications": "Afegiu més amunt un correu electrònic per a configurar les notificacions",
|
||||
"Advanced notification settings": "Paràmetres avançats de notificacions",
|
||||
"All notifications are currently disabled for all targets.": "Actualment totes les notificacions estan inhabilitades per a tots els objectius.",
|
||||
"An error occurred whilst saving your email notification preferences.": "S'ha produït un error en desar les vostres preferències de notificació per correu electrònic.",
|
||||
"Bug report sent": "S'ha enviat l'informe d'error",
|
||||
"Call invitation": "Invitació de trucada",
|
||||
"Can't update user notification settings": "No es poden actualitzar els paràmetres de les notificacions de l'usuari",
|
||||
"Collecting app version information": "S'està recollint la informació de la versió de l'aplicació",
|
||||
"Collecting logs": "S'estan recopilant els registres",
|
||||
"Custom Server Options": "Opcions de servidor personalitzat",
|
||||
"Dismiss": "Omet",
|
||||
"Enter keywords separated by a comma:": "Introduïu les paraules clau separades per una coma:",
|
||||
"Login": "Inicia sessió",
|
||||
"Leave": "Surt",
|
||||
"Messages containing <span>keywords</span>": "Missatges que contenen <span>keywords</span>",
|
||||
"Messages containing my user name": "Missatges que contenen el meu nom d'usuari",
|
||||
"Messages in group chats": "Missatges en xats de grup",
|
||||
"Messages containing my display name": "Missatges que contenen el meu nom visible",
|
||||
"Messages in one-to-one chats": "Missatges en xats un a un",
|
||||
"Messages sent by bot": "Missatges enviats pel bot",
|
||||
"more": "més",
|
||||
"Noisy": "Sorollós",
|
||||
"Notification targets": "Objectius de les notificacions",
|
||||
"Notifications": "Notificacions",
|
||||
"Notify me for anything else": "Notifica'm per a qualsevol altra cosa",
|
||||
"Notify for all other messages/rooms": "Notifica per a tots els altres missatges o sales",
|
||||
"Off": "Apagat",
|
||||
"On": "Engegat",
|
||||
"Permalink": "Enllaç permanent",
|
||||
"Remove": "Elimina",
|
||||
"remove %(name)s from the directory.": "elimina %(name)s del directori.",
|
||||
"Remove from Directory": "Elimina del directori",
|
||||
"Report a bug": "Informa d'una errada",
|
||||
"Resend": "Reenvia",
|
||||
"Search…": "Cerca…",
|
||||
"Send": "Envia",
|
||||
"Source URL": "URL origen",
|
||||
"The server may be unavailable or overloaded": "El servidor pot no estar disponible o sobrecarregat",
|
||||
"This Room": "Aquesta sala",
|
||||
"Unavailable": "No disponible",
|
||||
"Unknown device": "Dispositiu desconegut",
|
||||
"unknown error code": "codi d'error desconegut",
|
||||
"What's New": "Novetats",
|
||||
"What's new?": "Què hi ha de nou?",
|
||||
"Waiting for response from server": "S'està esperant una resposta del servidor",
|
||||
"You cannot delete this image. (%(code)s)": "No podeu eliminar aquesta imatge. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "No podeu eliminar aquest missatge. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "No esteu rebent notificacions d'escriptori",
|
||||
"Thank you!": "Gràcies!",
|
||||
"Sunday": "Diumenge",
|
||||
"Monday": "Dilluns",
|
||||
"Tuesday": "Dimarts",
|
||||
"Wednesday": "Dimecres",
|
||||
"Thursday": "Dijous",
|
||||
"Friday": "Divendres",
|
||||
"Saturday": "Dissabte",
|
||||
"Today": "Avui",
|
||||
"Yesterday": "Ahir",
|
||||
"OK": "D'acord",
|
||||
"Warning": "Avís",
|
||||
"Checking for an update...": "Comprovant si hi ha actualitzacions...",
|
||||
"No update available.": "No hi ha cap actualització disponible.",
|
||||
"Downloading update...": "Descarregant l'actualització...",
|
||||
"Welcome to Riot.im": "Benvingut a Riot.im",
|
||||
"Chat with Riot Bot": "Conversa amb el Bot de Riot",
|
||||
"Back": "Enrere",
|
||||
"Cancel Sending": "Cancel·la l'enviament",
|
||||
"Collapse panel": "Col·lapsa el tauler",
|
||||
"Developer Tools": "Eines de desenvolupador",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot no és compatible amb la web per a mòbils. Voleu instal·lar l'aplicació per a mòbils?",
|
||||
"Uploading report": "S'està enviant l'informe",
|
||||
"Riot Desktop on %(platformName)s": "Riot d'escriptori per a %(platformName)s",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Heu d'utilitzar HTTPS per poder fer una trucada amb pantalla compartida.",
|
||||
"When I'm invited to a room": "Quan sóc convidat a una sala",
|
||||
"Error saving email notification preferences": "No s'han pogut desar les preferències de les notificacions a causa d'un error",
|
||||
"Keywords": "Paraules clau",
|
||||
"Operation failed": "No s'ha pogut realitzar l'operació",
|
||||
"Failed to update keywords": "No s'han pogut actualitzar les paraules clau",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Les notificacions sobre les següents paraules clau segueixen regles que no es poden mostrar aquí:",
|
||||
"Unable to fetch notification target list": "No s'ha pogut obtenir la llista d'objectius de les notificacions",
|
||||
"There are advanced notifications which are not shown here": "Hi ha notificacions avançades que no es mostren aquí",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "És possible que els hàgiu configurat en un client diferent de Riot. No podeu modificar-los amb Riot, però encara s'apliquen",
|
||||
"Show message in desktop notification": "Mostra els missatges amb notificacions d'escriptori",
|
||||
"Search": "Cerca",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Podeu utilitzar opcions de servidor personalitzades per iniciar sessió en altres servidors Matrix especificant una URL diferent a la del servidor principal. <br/> Això us permet utilitzar Riot amb un compte de Matrix existent en un servidor d'origen diferent. <br/> <br/> També podeu establir un servidor d'identitat personalitzat, però no podreu convidar o ser convidat per correu electrònic.",
|
||||
"powered by Matrix": "amb tecnologia de Matrix",
|
||||
"Update": "Actualització",
|
||||
"Appear Offline": "Apareix sense connexió",
|
||||
"Away": "Absent",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Per poder tornar al vostre compte en un futur, heu de <u>set a password</u>",
|
||||
"Set Password": "Establiu una contrasenya",
|
||||
"Error encountered (%(errorDetail)s).": "S'ha trobat un error (%(errorDetail)s).",
|
||||
"Uploaded on %(date)s by %(user)s": "Pujat el %(date)s per l'usuari %(user)s",
|
||||
"Please describe the bug and/or send logs.": "Si us plau, descriviu l'error i/o envia els registres.",
|
||||
"Loading bug report module": "S'està carregant l'informe del modul",
|
||||
"Failed to send report: ": "No s'ha pogut enviar l'informe ",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Si us plau, descriviu l'error. Què heu fet, què esperàveu que passes i què sembla haver passat?",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Amb aquest informe d'error, alguns registres d'aquesta aplicació s'enviaran també per tal de fer un diagnostic del problema. Si preferiu enviar només el text anterior, desseleccioneu:",
|
||||
"Send logs": "Envia els registres",
|
||||
"Send Custom Event": "Envia els esdeveniments personalitzats",
|
||||
"You must specify an event type!": "Heu d'especificar un tipus d'esdeveniment",
|
||||
"Event sent!": "S'ha enviat l'esdeveniment",
|
||||
"Failed to send custom event.": "No s'ha pogut enviar l'esdeveniment personalitzat.",
|
||||
"Event Type": "Tipus d'esdeveniment",
|
||||
"State Key": "Clau d'estat",
|
||||
"Event Content": "Contingut de l'esdeveniment",
|
||||
"Send Account Data": "Envia les dades del compte",
|
||||
"Filter results": "Resultats del filtre",
|
||||
"Explore Room State": "Esbrina els estats de les sales",
|
||||
"Edit": "Edita",
|
||||
"Explore Account Data": "Explora les dades del compte",
|
||||
"Toolbox": "Caixa d'eines",
|
||||
"You have successfully set a password!": "Heu establert correctament la contrasenya",
|
||||
"You have successfully set a password and an email address!": "Heu establert correctament la vostra contrasenya i l'adreça de correu electrònic",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Ara podreu tornar a entrar al vostre compte des de altres dispositius.",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Recordeu-ho, si canvieu d'idea, sempre podreu establir una adreça de correu electrònic a las vostra configuració d'usuari.",
|
||||
"(HTTP status %(httpStatus)s)": "(Estat de l´HTTP %(httpStatus)s)",
|
||||
"Please set a password!": "Si us plau, establiu una contrasenya",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Això farà possible que pugueu tronar al vostre compte des de qualsevol dispositiu.",
|
||||
"Forward Message": "Reenvia el missatge",
|
||||
"Unpin Message": "Desenganxa el missatge",
|
||||
"Pin Message": "Enganxa el missatge",
|
||||
"View Source": "Mostra el codi",
|
||||
"View Decrypted Source": "Mostra el codi desencriptat",
|
||||
"Unhide Preview": "Mostra la previsualització",
|
||||
"Quote": "Cita",
|
||||
"Failed to set Direct Message status of room": "No s'ha pogut establir l'estat del missatge directe de la sala",
|
||||
"Forget": "Oblida",
|
||||
"Reject": "Rebutja",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Disculpeu, el seu navegador <b>not</b> pot executar Riot.",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot utilitza moltes funcions avançades del navegador, algunes de les quals no estan disponibles o són experimentals al vostre navegador actual.",
|
||||
"Please install <chromeLink>Chrome</chromeLink> or <firefoxLink>Firefox</firefoxLink> for the best experience.": "Si us plau, instal·leu <chromeLink>Chrome</chromeLink> or <firefoxLink>Firefox</firefoxLink> per gaudir d'una millor experiència.",
|
||||
"<safariLink>Safari</safariLink> and <operaLink>Opera</operaLink> work too.": "<safariLink>Safari</safariLink> i <operaLink>Opera</operaLink> també fan la feina.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Amb el vostre navegador actual, l'aparença de l'aplicació pot ser completament incorrecta i algunes o totes les funcions poden no funcionar correctament. Si voleu provar-ho de totes maneres, podeu continuar, però esteu sols pel que fa als problemes que pugueu trobar!",
|
||||
"I understand the risks and wish to continue": "Entenc el riscos i desitjo continuar",
|
||||
"Register": "Registre",
|
||||
"Rooms": "Sales",
|
||||
"Hide panel": "Amaga el panel",
|
||||
"Invite to this community": "Convida a aquesta comunitat",
|
||||
"Add rooms to this community": "Afegeix sales a aquesta comunitat",
|
||||
"Failed to get protocol list from Home Server": "No s'ha pogut obtenir la llista de protocols del servidor local",
|
||||
"The Home Server may be too old to support third party networks": "El servidor local pot ser massa antic per a ser compatible amb xarxes de tercers",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Voleu esborrar de la sala l'alies %(alias)s i retirar %(name)s del directori?",
|
||||
"Remove %(name)s from the directory?": "Voleu retirar %(name)s del directori?",
|
||||
"delete the alias.": "esborra l'alies.",
|
||||
"Unable to join network": "No s'ha pogut unir-se a la xarxa",
|
||||
"Fetching third party location failed": "S'ha produït un error en obtenir la ubicació de tercers",
|
||||
"Unable to look up room ID from server": "No s'ha pogut cercar l'ID de la sala en el servidor",
|
||||
"World readable": "Llegible al món",
|
||||
"Guests can join": "Els usuaris d'altres xarxes s'hi poden unir",
|
||||
"Search for a room": "Busca una sala",
|
||||
"Expand panel": "Expandeix el panel",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Xat descentralitzat, encriptat & col·laboració amb tecnologia de [matrix]",
|
||||
"Search the room directory": "Cerqueu el directori de sales",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Ja existeixen moltes sales a Matrix vinculades a xarxes existents (Slack, IRC, Gitter, etc.) o independents. Feu un cop d'ull al directori!",
|
||||
"Get started with some tips from Riot Bot!": "Comenceu amb alguns consells de Riot Bot!",
|
||||
"General discussion about Matrix and Riot": "Debat general sobre Matrix i Riot",
|
||||
"Discussion of all things Matrix!": "Debats sobre qualsevol cosa de Matrix!",
|
||||
"Riot/Web & Desktop chat": "Riot/Web & Xat d'escriptori",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & Xat de matrix-ios-sdk",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android & Xat matrix-android-sdk",
|
||||
"Matrix technical discussions": "Debats tècnics sobre Matrix",
|
||||
"Reply": "Respon",
|
||||
"Running Matrix services": "Serveis de Matrix en marxa",
|
||||
"Community-run support for Synapse": "Suport de la comunitat per a Synapse",
|
||||
"Admin support for Dendrite": "Suport dels administrador per a Dendrite",
|
||||
"Announcements about Synapse releases": "Anuncis sobre llançaments de Synapse",
|
||||
"Support for those using and running matrix-appservice-irc": "Suport per a aquells que utilitzen i executen matrix-appservice-irc",
|
||||
"Building services on Matrix": "Construir serveis a Matrix",
|
||||
"Support for those using the Matrix spec": "Suport per a aquells que utilitzen l'especificació Matrix",
|
||||
"Design and implementation of E2E in Matrix": "Disseny i implementació de l'E2E a Matrix",
|
||||
"Implementing VR services with Matrix": "Implementació de serveis VR amb Matrix",
|
||||
"Implementing VoIP services with Matrix": "Implementació de serveis VoIP amb Matrix",
|
||||
"Discussion of the Identity Service API": "Debat sobre l'API Identity Service",
|
||||
"Support for those using, running and writing other bridges": "Suport per a aquells que utilitzen, executen i escriuen altres ponts",
|
||||
"Contributing code to Matrix and Riot": "Contribuir amb codi a Matrix i Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Xat de l'equip de desenvolupadors Riot/Web per a desenvolupadors",
|
||||
"Dev chat for the Dendrite dev team": "Xat de l'equip Dendrite per a desenvolupadors",
|
||||
"Co-ordination for Riot/Web translators": "Coordinació per a traductors de Riot/Web",
|
||||
"%(count)s Members|other": "%(count)s membres",
|
||||
"%(count)s Members|one": "%(count)s membre",
|
||||
"Online": "Conectat",
|
||||
"View Community": "Mira la communitat"
|
||||
}
|
||||
230
src/i18n/strings/cs.json
Normal file
230
src/i18n/strings/cs.json
Normal file
@@ -0,0 +1,230 @@
|
||||
{
|
||||
"Close": "Zavřít",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> a <a href=\"http://opera.com\">Opera</a> fungují také.",
|
||||
"A new version of Riot is available.": "Je dostupná nová verze Riotu.",
|
||||
"Notifications": "Upozornění",
|
||||
"Search": "Hledání",
|
||||
"All Rooms": "Všechny místnosti",
|
||||
"Files": "Soubory",
|
||||
"Filter room names": "Filtrovat místnosti dle názvu",
|
||||
"Forward Message": "Přeposlat zprávu",
|
||||
"Invite to this room": "Pozvat do této místnosti",
|
||||
"Members": "Členové",
|
||||
"Permalink": "Trvalý odkaz",
|
||||
"Search…": "Vyhledat…",
|
||||
"This Room": "Tato místnost",
|
||||
"View Source": "Zobrazit zdroj",
|
||||
"Login": "Přihlásit",
|
||||
"Advanced notification settings": "Pokročilé nastavení upozornění",
|
||||
"All messages": "Všechny zprávy",
|
||||
"Cancel": "Storno",
|
||||
"Changelog": "Seznam změn",
|
||||
"Describe your problem here.": "Popište zde svůj problém.",
|
||||
"Direct Chat": "Přímý chat",
|
||||
"Directory": "Adresář",
|
||||
"Download this file": "Stáhnout tento soubor",
|
||||
"Error": "Chyba",
|
||||
"Failed to change settings": "Nepodařilo se změnit nastavení",
|
||||
"Failed to get public room list": "Nepodařilo se získat seznam veřejných místností",
|
||||
"Favourite": "V oblíbených",
|
||||
"Guests can join": "Hosté mohou vstoupit",
|
||||
"Hide panel": "Skrýt panel",
|
||||
"I understand the risks and wish to continue": "Rozumím rizikům a přeji si pokračovat",
|
||||
"Keywords": "Klíčová slova",
|
||||
"Leave": "Odejít",
|
||||
"Loading bug report module": "Nahrává se modul nahlašování chyb",
|
||||
"Low Priority": "Nízká priorita",
|
||||
"Mentions only": "Pouze zmínky",
|
||||
"Messages containing my display name": "Zprávy obsahující mé zobrazované jméno",
|
||||
"Messages containing <span>keywords</span>": "Zprávy obsahující <span>klíčová slova</span>",
|
||||
"Messages containing my user name": "Zprávy obsahující mé uživatelské jméno",
|
||||
"Messages in group chats": "Zprávy ve skupinových chatech",
|
||||
"Messages sent by bot": "Zprávy poslané robotem",
|
||||
"more": "více",
|
||||
"Mute": "Ztlumit",
|
||||
"All messages (noisy)": "Všechny zprávy (hlasitě)",
|
||||
"Couldn't load home page": "Nepodařilo se nahrát úvodní stránku",
|
||||
"All notifications are currently disabled for all targets.": "Veškeré notifikace jsou aktuálně pro všechny cíle vypnuty.",
|
||||
"Cancel Sending": "Zrušit odesílání",
|
||||
"Can't update user notification settings": "Nelze aktualizovat uživatelské nastavení upozornění",
|
||||
"delete the alias.": "smazat alias.",
|
||||
"Set Password": "Nastavit heslo",
|
||||
"You have successfully set a password and an email address!": "Úspěšně jste si nastavili heslo a e-mailovou adresu!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Vězte, že kdybyste si to rozmysleli, e-mailovou adresu můžete kdykoliv doplnit v uživatelském nastavení.",
|
||||
"Continue": "Pokračovat",
|
||||
"Please set a password!": "Prosím nastavte si heslo!",
|
||||
"You have successfully set a password!": "Úspěšně jste si nastavili heslo!",
|
||||
"Failed to change password. Is your password correct?": "Nepodařilo se změnit heslo. Zadáváte své heslo správně?",
|
||||
"No update available.": "Není dostupná žádná aktualizace.",
|
||||
"Downloading update...": "Stahování aktualizace...",
|
||||
"Welcome to Riot.im": "Vítá vás Riot.im",
|
||||
"Enable desktop notifications": "Zapnout upozornění na ploše",
|
||||
"Enable email notifications": "Zapnout upozornění přes e-mail",
|
||||
"Enable notifications for this account": "Zapnout upozornění na tomto účtu",
|
||||
"#example": "#příklad",
|
||||
"Off": "Vypnout",
|
||||
"On": "Zapnout",
|
||||
"Operation failed": "Operace se nezdařila",
|
||||
"Remove %(name)s from the directory?": "Odebrat %(name)s z adresáře?",
|
||||
"Remove": "Odebrat",
|
||||
"remove %(name)s from the directory.": "odebrat %(name)s z adresáře.",
|
||||
"Remove from Directory": "Odebrat z adresáře",
|
||||
"Report a bug": "Nahlásit chybu",
|
||||
"Resend": "Poslat znovu",
|
||||
"Room not found": "Místnost nenalezena",
|
||||
"Search for a room": "Hledat místnost",
|
||||
"Send": "Odeslat",
|
||||
"Send logs": "Odeslat záznamy",
|
||||
"Source URL": "Zdrojová URL",
|
||||
"The server may be unavailable or overloaded": "Server může být nedostupný nebo přetížený",
|
||||
"Unable to join network": "Nelze se připojit k síti",
|
||||
"Unable to look up room ID from server": "Nelze získat ID místnosti ze serveru",
|
||||
"Unavailable": "Nedostupné",
|
||||
"Unknown device": "Neznámé zařízení",
|
||||
"unknown error code": "neznámý kód chyby",
|
||||
"Unnamed room": "Nepojmenovaná místnost",
|
||||
"Update": "Aktualizace",
|
||||
"What's New": "Co je nového",
|
||||
"What's new?": "Co je nového?",
|
||||
"Waiting for response from server": "Čekám na odezvu ze serveru",
|
||||
"You cannot delete this image. (%(code)s)": "Tento obrázek nemůžete smazat. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "Tuto zprávu nemůžete smazat. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "Nedostáváte upozornění na desktopu",
|
||||
"Sunday": "Neděle",
|
||||
"Monday": "Pondělí",
|
||||
"Tuesday": "Úterý",
|
||||
"Wednesday": "Středa",
|
||||
"Thursday": "Čtvrtek",
|
||||
"Friday": "Pátek",
|
||||
"Saturday": "Sobota",
|
||||
"Today": "Dnes",
|
||||
"Yesterday": "Včera",
|
||||
"OK": "OK",
|
||||
"Warning": "Upozornění",
|
||||
"Checking for an update...": "Kontrola aktualizací...",
|
||||
"An error occurred whilst saving your email notification preferences.": "Při ukládání nastavení e-mailových upozornění nastala chyba.",
|
||||
"Collecting app version information": "Sbírání informací o verzi aplikace",
|
||||
"Collecting logs": "Sbírání logů",
|
||||
"Couldn't find a matching Matrix room": "Odpovídající Matrix místost nenalezena",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Smazat alias místnosti %(alias)s a odstranit %(name)s z adresáře?",
|
||||
"Enable audible notifications in web client": "Povolit zvuková upozornění ve webové aplikaci",
|
||||
"Enable them now": "Povolit nyní",
|
||||
"Enter keywords separated by a comma:": "Vložte klíčová slova oddělená čárkou:",
|
||||
"Error saving email notification preferences": "Chyba při ukládání nastavení e-mailových upozornění",
|
||||
"Failed to add tag %(tagName)s to room": "Nepodařilo se přidat štítek %(tagName)s k místnosti",
|
||||
"Failed to forget room %(errCode)s": "Nepodařilo se zapomenout místnost %(errCode)s",
|
||||
"Failed to update keywords": "Nepodařilo se aktualizovat klíčová slova",
|
||||
"Failed to get protocol list from Home Server": "Z domovského serveru se nepodařilo získat seznam protokolů",
|
||||
"Failed to remove tag %(tagName)s from room": "Nepodařilo se odstranit štítek %(tagName)s z místnosti",
|
||||
"Failed to send report: ": "Nepodařilo se odeslat hlášení: ",
|
||||
"Forget": "Zapomenout",
|
||||
"(HTTP status %(httpStatus)s)": "(HTTP status %(httpStatus)s)",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Kvůli diagnostice budou spolu s tímto hlášením o chybě odeslány i záznamy z klienta. Chcete-li odeslat pouze text výše, prosím odškrtněte:",
|
||||
"No rooms to show": "Žádné místnosti k zobrazení",
|
||||
"Notify for all other messages/rooms": "Upozorni na všechny ostatní zprávy/místnosti",
|
||||
"Notify me for anything else": "Upozorni mě na cokoliv jiného",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Prosím popište chybu. Co jste dělal/a? Co jste čekal/a, že se stane? Co se stalo?",
|
||||
"Please describe the bug and/or send logs.": "Prosím popište chybu a/nebo pošlete záznamy.",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Prosím nainstalujte si <a href=\"https://www.google.com/chrome\">Chrome</a> nebo <a href=\"https://getfirefox.com\">Firefox</a> pro nejlepší zážitek.",
|
||||
"Quote": "Citace",
|
||||
"Reject": "Odmítnout",
|
||||
"Riot does not know how to join a room on this network": "Riot neví, jak vstoupit do místosti na této síti",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot není podporovaný na mobilním webu. Nainstalovat aplikaci?",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot používá mnoho pokročilých funkcí, z nichž některé jsou ve vašem současném prohlížeči nedostupné nebo experimentální.",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Omlouváme se, váš prohlížeč <b>není</b> schopný spustit Riot.",
|
||||
"There are advanced notifications which are not shown here": "Jsou k dispozici pokročilá upozornění, která zde nejsou zobrazena",
|
||||
"Unhide Preview": "Zobrazit náhled",
|
||||
"Uploaded on %(date)s by %(user)s": "Nahráno %(date)s uživatelem %(user)s",
|
||||
"Uploading report": "Nahrávám hlášení",
|
||||
"View Decrypted Source": "Zobrazit dešifrovaný zdroj",
|
||||
"When I'm invited to a room": "Pokud jsem pozván do místnosti",
|
||||
"World readable": "Světu čitelné",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Snad jste je nastavili v jiném klientu než Riot. V Riotu je nemůžete upravit, ale přesto platí",
|
||||
"Error encountered (%(errorDetail)s).": "Nastala chyba (%(errorDetail)s).",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Pro uskutečnění hovoru se sdílením obrazovky musíte používat HTTPS.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Vzhled a chování aplikace může být ve vašem aktuální prohlížeči nesprávné a některé nebo všechny funkce mohou být chybné. Chcete-li i přes to pokračovat, nebudeme vám bránit, ale se všemi problémy, na které narazíte, si musíte poradit sami!",
|
||||
"Search the room directory": "Prohledat adresář místností",
|
||||
"Chat with Riot Bot": "Chatujte s Riot Botem",
|
||||
"Get started with some tips from Riot Bot!": "Začněte s radami od Riot Bota!",
|
||||
"General discussion about Matrix and Riot": "Obecná diskuse o Matrixu a Riotu",
|
||||
"Discussion of all things Matrix!": "Diskuse o všem okolo Matrixu!",
|
||||
"Matrix technical discussions": "Technické diskuse o Matrixu",
|
||||
"Running Matrix services": "Provozování Matrix služeb",
|
||||
"Community-run support for Synapse": "Komunitou řízená podpora pro Synapse",
|
||||
"Announcements about Synapse releases": "Oznámení o vydáních Synapse",
|
||||
"Support for those using and running matrix-appservice-irc": "Podpora pro používání matrix-appservice-irc",
|
||||
"Building services on Matrix": "Stavění služeb na Matrixu",
|
||||
"Add an email address above to configure email notifications": "Abyste mohli nastavovat e-mailová upozornění, musíte uvést svoji e-mailovou adresu v kolonce výše",
|
||||
"Call invitation": "Pozvánka k hovoru",
|
||||
"Collapse panel": "Sbalit panel",
|
||||
"Dismiss": "Zahodit",
|
||||
"Expand panel": "Rozbalit panel",
|
||||
"Failed to set direct chat tag": "Nepodařilo se nastavit štítek přímého chatu",
|
||||
"Failed to set Direct Message status of room": "Nepodařilo se přiřadit místnosti status Přímé zprávy",
|
||||
"powered by Matrix": "poháněno Matrixem",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop na %(platformName)s",
|
||||
"The Home Server may be too old to support third party networks": "Tento domovský server může být příliš zastaralý na to, aby podporoval sítě třetích stran",
|
||||
"Admin support for Dendrite": "Správcovská podpora pro Dendrite",
|
||||
"Support for those using the Matrix spec": "Podpora pro uživatele Matrix specifikace",
|
||||
"Design and implementation of E2E in Matrix": "Návrh a implementace E2E v Matrixu",
|
||||
"Implementing VR services with Matrix": "Implementace VR služeb v Matrixu",
|
||||
"Implementing VoIP services with Matrix": "Implementace VoIP služeb v Matrixu",
|
||||
"Support for those using, running and writing other bridges": "Podpora pro ty, kteří používají, provozují nebo vyvíjejí ostatní můstky",
|
||||
"Contributing code to Matrix and Riot": "Přispívaní kódem do Matrixu a Riotu",
|
||||
"Dev chat for the Riot/Web dev team": "Chat vývojového týmu Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "Chat vývojového týmu Dendrite",
|
||||
"Co-ordination for Riot/Web translators": "Součinnost překladatelů Riot/Web",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "V Matrixu je spousta samostatných, nebo s jinými sítěmi (Slack, IRC, Gitter aj.) propojených místností. Prohlédněte si jejich adresář!",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s přes %(browserName)s na %(osName)s",
|
||||
"customServer_text": "Ve vlastních serverových volbách se můžete přihlásit na ostatní Matrix servery, a to tak, že určíte URL jiného domovského serveru.<br/>To znamená, že můžete používat Riot s již existujícím Matrix účtem na jiném domovském serveru.<br/><br/>Taky můžete nastavit vlastní server identity, pak ale nebudete moci zvát ostatní nebo naopak být ostatními zván prostřednictvím e-mailové adresy.",
|
||||
"Custom Server Options": "Vlastní serverové volby",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizovaný, šifrovaný chat a spolupráce na platformě [matrix]",
|
||||
"Riot/Web & Desktop chat": "Riot/Web a Desktop chat",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS a matrix-ios-sdk chat",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android a matrix-android-sdk chat",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Abyste se mohli ke svému účtu v budoucnu vrátit, musíte si <u>nastavit heslo</u>",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Toto vám umožní vrátit se po odhlášení ke svému účtu a používat jej na ostatních zařízeních.",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Nyní se můžete ke svému účtu vrátit i po odhlášení a používat jej na ostatních zařízeních.",
|
||||
"Fetching third party location failed": "Nepodařilo se zjistit umístění třetí strany",
|
||||
"Messages in one-to-one chats": "Zprávy v individuálních chatech",
|
||||
"Notification targets": "Cíle upozornění",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Upozornění na následující klíčová slova se řídí pravidly, která zde nelze zobrazit:",
|
||||
"Unable to fetch notification target list": "Nepodařilo se získat seznam cílů upozornění",
|
||||
"Discussion of the Identity Service API": "Diskuze o API služby identity",
|
||||
"Noisy": "Hlučný",
|
||||
"Bug report sent": "Hlášení o chybě bylo odesláno",
|
||||
"Thank you!": "Děkujeme vám!",
|
||||
"Back": "Zpět",
|
||||
"Event Type": "Typ události",
|
||||
"Event Content": "Obsah události",
|
||||
"Developer Tools": "Nástroje pro vývojáře",
|
||||
"Filter results": "Filtrovat výsledky",
|
||||
"You must specify an event type!": "Musíte určit typ události!",
|
||||
"Event sent!": "Událost odeslána!",
|
||||
"Failed to send custom event.": "Nepodařilo se odeslat vlastní událost.",
|
||||
"Send Custom Event": "Odeslat vlastní událost",
|
||||
"Show message in desktop notification": "Zobrazovat zprávu v upozornění na ploše",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Přes vlastní serverové volby se můžete přihlásit k dalším Matrix serverům tak, že zadáte jinou adresu domovského serveru.<br/>Díky tomu můžete v Riotu používat Matrix účet z jiného domovského serveru.<br/><br/>Můžete nastavit i vlastní server identity, ale pak už nebudete moci zvát ani být zván/a skrze e-mailovou adresu.",
|
||||
"Edit": "Upravit",
|
||||
"Pin Message": "Připíchnout zprávu",
|
||||
"Register": "Zaregistrovat",
|
||||
"Rooms": "Místnosti",
|
||||
"Invite to this community": "Pozvat do této komunity",
|
||||
"Add rooms to this community": "Přidat místnosti do této skupiny",
|
||||
"State Key": "Stavový klíč",
|
||||
"Send Custom State Event": "Poslat vlastní stavovou událost",
|
||||
"Explore Room State": "Prohlížet stav místnosti",
|
||||
"Unpin Message": "Odepnout zprávu",
|
||||
"Toolbox": "Sada nástrojů",
|
||||
"Send Account Data": "Poslat data o účtu",
|
||||
"Explore Account Data": "Prozkoumat data o účtu",
|
||||
"Appear Offline": "Jevit se offline",
|
||||
"Away": "Pryč",
|
||||
"Please install <chromeLink>Chrome</chromeLink> or <firefoxLink>Firefox</firefoxLink> for the best experience.": "Pro nejlepší zážitek si prosím nainstalujte <chromeLink>Chrome</chromeLink> nebo <firefoxLink>Firefox</firefoxLink>.",
|
||||
"<safariLink>Safari</safariLink> and <operaLink>Opera</operaLink> work too.": "<safariLink>Safari</safariLink> a <operaLink>Opera</operaLink> fungují taky.",
|
||||
"Reply": "Odpovědět",
|
||||
"Online": "Online",
|
||||
"View Community": "Zobrazit Komunitu",
|
||||
"%(count)s Members|other": "%(count)s Členů",
|
||||
"%(count)s Members|one": "%(count)s Člen"
|
||||
}
|
||||
@@ -2,17 +2,13 @@
|
||||
"Add an email address above to configure email notifications": "Tilføj en emailadresse ovenfor for at konfigurere e-mail-underretninger",
|
||||
"All notifications are currently disabled for all targets.": "Alle meddelelser er for øjeblikket deaktiveret for alle mål.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Der opstod en fejl under opbevaring af dine e-mail-underretningsindstillinger.",
|
||||
"and remove": "Og fjern",
|
||||
"Can't update user notification settings": "Kan ikke opdatere brugermeddelelsesindstillinger",
|
||||
"Create new room": "Opret nyt rum",
|
||||
"Couldn't find a matching Matrix room": "Kunne ikke finde et matchende Matrix-rum",
|
||||
"Custom Server Options": "Brugerdefinerede serverindstillinger",
|
||||
"delete the alias.": "Slet aliaset.",
|
||||
"Delete the room alias": "Slet room alias",
|
||||
"Direct Chat": "Personligt Chat",
|
||||
"Directory": "Rum fortegnelse",
|
||||
"Direct Chat": "Personlig Chat",
|
||||
"Directory": "Rum katalog",
|
||||
"Dismiss": "Afskedige",
|
||||
"Drop here to": "Drop her til",
|
||||
"Enable audible notifications in web client": "Aktivér hørbare underretninger i webklienten",
|
||||
"Enable desktop notifications": "Aktivér desktop meddelelser",
|
||||
"Enable email notifications": "Aktivér e-mail-underretninger",
|
||||
@@ -22,63 +18,204 @@
|
||||
"Error": "Fejl",
|
||||
"Error saving email notification preferences": "Fejl ved at gemme e-mail-underretningsindstillinger",
|
||||
"#example": "#eksempel",
|
||||
"Failed to": "Var ikke i stand til at",
|
||||
"Failed to add tag ": "Kunne ikke tilføje tag ",
|
||||
"Failed to change settings": "Kunne ikke ændre indstillinger",
|
||||
"Failed to update keywords": "Kunne ikke opdatere søgeord",
|
||||
"Failed to get protocol list from Home Server": "Kunne ikke få protokolliste fra Home Server",
|
||||
"Failed to get public room list": "Kunne ikke få offentlig rumliste",
|
||||
"Failed to join the room": "Kunne ikke komme ind i rumet",
|
||||
"Failed to remove tag ": "Kunne ikke fjerne tag ",
|
||||
"Failed to set Direct Message status of room": "Kunne ikke indstille direkte beskedstatus for rumet",
|
||||
"Failed to set Direct Message status of room": "Kunne ikke indstille Direkte Beskedstatus for rummet",
|
||||
"Favourite": "Favorit",
|
||||
"Fetching third party location failed": "Hentning af tredjeparts placering mislykkedes",
|
||||
"Files": "Filer",
|
||||
"Filter room names": "Filtrer rumnavne",
|
||||
"Filter room names": "Filtrér rumnavne",
|
||||
"Forget": "Glem",
|
||||
"from the directory": "fra fortegnelsen",
|
||||
" from room": " fra rum",
|
||||
"Guests can join": "Gæster kan deltage",
|
||||
"Guest users can't invite users. Please register to invite.": "Gæstebrugere kan ikke invitere brugere. Tilmeld dig venligst for at invitere.",
|
||||
"Invite to this room": "Inviter til dette rum",
|
||||
"Keywords": "Søgeord",
|
||||
"Leave": "Forlade",
|
||||
"Leave": "Forlad",
|
||||
"Low Priority": "Lav prioritet",
|
||||
"Members": "Medlemmer",
|
||||
"No rooms to show": "Ingen rum at vise",
|
||||
"Noisy": "Støjende",
|
||||
"Notification targets": "Meddelelsesmål",
|
||||
"Notifications": "Meddelser",
|
||||
"Notifications": "Notifikationer",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Meddelelser om følgende søgeord følger regler, der ikke kan vises her:",
|
||||
"Notify for all other messages/rooms": "Underret om alle andre meddelelser / rum",
|
||||
"Notify me for anything else": "Underret mig om noget andet",
|
||||
"Off": "Slukket",
|
||||
"On": "Tændt",
|
||||
"Operation failed": "Operation mislykkedes",
|
||||
"Please Register": "Vær venlig at registrere",
|
||||
"powered by Matrix": "Drevet af Matrix",
|
||||
"Reject": "Afvise",
|
||||
"Remove": "Fjerne",
|
||||
"remove": "fjerner",
|
||||
"Remove from Directory": "Fjern fra fortegnelse",
|
||||
"Reject": "Afvis",
|
||||
"Remove": "Fjern",
|
||||
"Remove from Directory": "Fjern fra Katalog",
|
||||
"Riot does not know how to join a room on this network": "Riot ved ikke, hvordan man kan deltage i et rum på dette netværk",
|
||||
"Room directory": "Rum fortegnelse",
|
||||
"Room not found": "Rumet ikke fundet",
|
||||
"Room not found": "Rummet ikke fundet",
|
||||
"Search for a room": "Søg efter et rum",
|
||||
"Settings": "Indstillinger",
|
||||
"Start chat": "Begyndt chat",
|
||||
"The Home Server may be too old to support third party networks": "Hjemmeserveren kan være for gammel til at understøtte tredjepartsnetværk",
|
||||
"There are advanced notifications which are not shown here": "Der er avancerede meddelelser, som ikke vises her",
|
||||
"The server may be unavailable or overloaded": "Serveren kan være utilgængelig eller overbelastet",
|
||||
"This room is inaccessible to guests. You may be able to join if you register.": "Dette rum er utilgængeligt for gæster. Du kan være i stand til at deltage, hvis du registrerer dig.",
|
||||
" to room": " til rum",
|
||||
"Unable to fetch notification target list": "Kan ikke hente meddelelsesmålliste",
|
||||
"Unable to join network": "Kan ikke deltage i netværket",
|
||||
"Unable to look up room ID from server": "Kunne ikke slå op på rum-id fra server",
|
||||
"Unable to join network": "Kan ikke forbinde til netværket",
|
||||
"Unable to look up room ID from server": "Kunne ikke slå rum-id op på server",
|
||||
"unknown error code": "Ukendt fejlkode",
|
||||
"Unnamed room": "Unnamed rum",
|
||||
"World readable": "Læselig til alle",
|
||||
"You are not receiving desktop notifications": "Du modtager ikke desktop meddelelser",
|
||||
"Unnamed room": "Unavngivet rum",
|
||||
"World readable": "Læselig af alle",
|
||||
"You are not receiving desktop notifications": "Du modtager ikke skrivebordsmeddelelser",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Du har muligvis konfigureret dem i en anden klient end Riot. Du kan ikke tune dem i Riot, men de gælder stadig",
|
||||
"Close": "Luk"
|
||||
"Close": "Luk",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot understøtter ikke mobilhjemmesider. Vil du installere app'en?",
|
||||
"Collecting app version information": "Indsamler app versionsoplysninger",
|
||||
"Collecting logs": "Indsamler logfiler",
|
||||
"Uploading report": "Uploader rapport",
|
||||
"Waiting for response from server": "Venter på svar fra server",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop på %(platformName)s",
|
||||
"Unknown device": "Ukendt enhed",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s på %(osName)s",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Du skal bruge HTTPS for at lave skærm-delings-opkald.",
|
||||
"Messages containing my display name": "Beskeder der indeholder mit viste navn",
|
||||
"Messages containing my user name": "Beskeder der indeholder mit brugernavn",
|
||||
"Messages in one-to-one chats": "Beskeder i en-til-en chats",
|
||||
"Messages in group chats": "Beskeder i gruppechats",
|
||||
"When I'm invited to a room": "Når jeg bliver inviteret til et rum",
|
||||
"Call invitation": "Opkalds invitation",
|
||||
"Messages sent by bot": "Beskeder sendt af en bot",
|
||||
"OK": "OK",
|
||||
"Messages containing <span>keywords</span>": "Beskeder der indeholder <span>keywords</span>",
|
||||
"Advanced notification settings": "Avancerede notifikationsindstillinger",
|
||||
"Show message in desktop notification": "Vis besked i skrivebordsnotifikation",
|
||||
"Failed to set direct chat tag": "Kunne ikke markere rummet som direkte chat",
|
||||
"Failed to remove tag %(tagName)s from room": "Kunne ikke fjerne tag(s): %(tagName)s fra rummet",
|
||||
"Failed to add tag %(tagName)s to room": "Kunne ikke tilføje tag(s): %(tagName)s til rummet",
|
||||
"Search…": "Søg…",
|
||||
"Search": "Søg",
|
||||
"This Room": "Dette rum",
|
||||
"All Rooms": "Alle rum",
|
||||
"Sunday": "Søndag",
|
||||
"Monday": "Mandag",
|
||||
"Tuesday": "Tirsdag",
|
||||
"Wednesday": "Onsdag",
|
||||
"Thursday": "Torsdag",
|
||||
"Friday": "Fredag",
|
||||
"Saturday": "Lørdag",
|
||||
"Today": "I dag",
|
||||
"Yesterday": "I går",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Du kan bruge de brugerdefinerede server indstillinger til at logge ind på andre Matrix servere ved at skrive en anden Home Server adresse.<br/>Dette tillader dig at bruge Riot med en eksisterende Matrix konto på en anden home server.<br/><br/>Du kan også indstille en brugerdefineret identity server men så vil du ikke kunne invitere brugere ved hjælp af deres emailadresse eller selv blive inviteret med emailadresse.",
|
||||
"What's New": "Hvad er nyt",
|
||||
"Update": "Opdater",
|
||||
"What's new?": "Hvad er nyt?",
|
||||
"Appear Offline": "Fremstå Offline",
|
||||
"Away": "Ikke til stede",
|
||||
"A new version of Riot is available.": "En ny version a Riot er tilgængelig.",
|
||||
"To return to your account in future you need to <u>set a password</u>": "For at komme ind på din konto i fremtiden skal du <u>indstille et password</u>",
|
||||
"Set Password": "Indstil Password",
|
||||
"Error encountered (%(errorDetail)s).": "En fejl er opstået (%(errorDetail)s).",
|
||||
"Checking for an update...": "Checker om der er en opdatering...",
|
||||
"No update available.": "Ingen opdatering tilgængelig.",
|
||||
"Downloading update...": "Downloader opdatering...",
|
||||
"Warning": "Advarsel",
|
||||
"You cannot delete this image. (%(code)s)": "Du kan ikke slette dette billede. (%(code)s)",
|
||||
"Uploaded on %(date)s by %(user)s": "Uploadet den %(date)s af %(user)s",
|
||||
"Download this file": "Download denne fil",
|
||||
"Please describe the bug and/or send logs.": "Beskriv venligst fejlen og/eller send logs.",
|
||||
"Loading bug report module": "Indlæser fejlrepporterings modul",
|
||||
"Bug report sent": "Fejl rapporteret",
|
||||
"Thank you!": "Tak!",
|
||||
"Failed to send report: ": "Kunne ikke sende rapport: ",
|
||||
"Cancel": "Afbryd",
|
||||
"Report a bug": "Rapportér en fejl",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Beskriv venlist fejlen. Hvad gjorde du? Hvad forventede du ville ske? Hvad skete rent faktisk?",
|
||||
"Describe your problem here.": "Beskriv dit problem her.",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "For at diagnosticere problemer vil logs fra denne klient blive sendt sammen med fejlrapporten. Hvis du vil foretrække kun at sende teksten foroven, bedes du fjerne fluebenet:",
|
||||
"Send logs": "Send logs",
|
||||
"Send": "Send",
|
||||
"Unavailable": "Utilgængelig",
|
||||
"Changelog": "Ændringslog",
|
||||
"Back": "Tilbage",
|
||||
"Send Custom Event": "Send Brugerdefineret Begivenhed",
|
||||
"You must specify an event type!": "Du skal angive en begivenhedstype!",
|
||||
"Event sent!": "Begivenhed sendt!",
|
||||
"Failed to send custom event.": "Kunne ikke sende brugerdefinerede begivenhed.",
|
||||
"Event Type": "Begivenhedstype",
|
||||
"State Key": "Tilstandsnøgle",
|
||||
"Event Content": "Begivenhedsindhold",
|
||||
"Send Account Data": "Send Konto Data",
|
||||
"Filter results": "Filtrér resultater",
|
||||
"Explore Room State": "Udforsk Rum Tilstand",
|
||||
"Edit": "Rediger",
|
||||
"Explore Account Data": "Udforsk Konto Data",
|
||||
"Toolbox": "Værktøjer",
|
||||
"Developer Tools": "Udviklingsværktøjer",
|
||||
"You have successfully set a password!": "Du har succesfuldt indstillet et password!",
|
||||
"You have successfully set a password and an email address!": "Du har succesfuldt indstillet et password og en emailadresse!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Du kan nu vende tilbage til din konto efter at have logget ud og logge ind på andre enheder.",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Husk, du kan altid indstille en emailadresse i dine bruger indstillinger hvis du ombestemmer dig.",
|
||||
"Continue": "Fortsæt",
|
||||
"Failed to change password. Is your password correct?": "Kunne ikke ændre password. Er dit password korrekt?",
|
||||
"(HTTP status %(httpStatus)s)": "(HTTP tilstand %(httpStatus)s)",
|
||||
"Please set a password!": "Indstil venligst et password!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Dette vil tillade dig at vende tilbage til din konto efter at have logget ud og at logge ind på andre enheder.",
|
||||
"You cannot delete this message. (%(code)s)": "Du kan ikke slette denne besked. (%(code)s)",
|
||||
"Resend": "Send igen",
|
||||
"Cancel Sending": "Stop Forsendelse",
|
||||
"Forward Message": "Videresend Besked",
|
||||
"Unpin Message": "Fasthold ikke længere Besked",
|
||||
"Pin Message": "Fasthold Besked",
|
||||
"View Source": "Se Kilde",
|
||||
"View Decrypted Source": "Se Dekrypteret Kilde",
|
||||
"Unhide Preview": "Vis Forhåndsvisning",
|
||||
"Permalink": "Permanent link",
|
||||
"Quote": "Citat",
|
||||
"Source URL": "Kilde URL",
|
||||
"Failed to forget room %(errCode)s": "Kunne ikke glemme rummet %(errCode)s",
|
||||
"All messages (loud)": "Alle beskeder (høj)",
|
||||
"All messages": "Alle beskeder",
|
||||
"Mentions only": "Kun nævninger",
|
||||
"Mute": "Sæt på lydløs",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Beklager, din browser kan <b>ikke</b> køre Riot.",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot bruger mange avancerede browser funktioner, hvoraf nogle af dem ikke er tilgængelige eller er eksperimentelle i din browser.",
|
||||
"Please install <chromeLink>Chrome</chromeLink> or <firefoxLink>Firefox</firefoxLink> for the best experience.": "Installer venligst <chromeLink>Chrome</chromeLink> eller <firefoxLink>Firefox</firefoxLink> for den bedste oplevelse.",
|
||||
"<safariLink>Safari</safariLink> and <operaLink>Opera</operaLink> work too.": "<safariLink>Safari</safariLink> og <operaLink>Opera</operaLink> virker også.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Med din nuværnde broser kan udseendet og fornemmelsen af programmet være helt forkert og nogle funktioner virker måske ikke. Hvis du alligevel vil prøve så kan du fortsætte, men det er på egen risiko!",
|
||||
"I understand the risks and wish to continue": "Jeg forstår risikoen og ønsker at fortsætte",
|
||||
"Couldn't load home page": "Kunne ikke indlæse startsiden",
|
||||
"Login": "Log ind",
|
||||
"Register": "Registrér",
|
||||
"Rooms": "Rum",
|
||||
"Hide panel": "Gem panel",
|
||||
"Invite to this community": "Inviter til dette fællesskab",
|
||||
"Add rooms to this community": "Tilføj rum til dette fællesskab",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Slet rumaliaset %(alias)s og fjern %(name)s fra kataloget?",
|
||||
"Remove %(name)s from the directory?": "Fjern %(name)s fra kataloget?",
|
||||
"remove %(name)s from the directory.": "fjern %(name)s fra kataloget.",
|
||||
"more": "mere",
|
||||
"Expand panel": "Udvid panel",
|
||||
"Collapse panel": "Slå panel sammen",
|
||||
"Welcome to Riot.im": "Velkommen til Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentraliseret, krypteret chat & samarbejde baseret på [matrix]",
|
||||
"Search the room directory": "Søg i rumkataloget",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Masser af rum ekistere allerede i Matrix, forbundet til eksisterende netværk (Slack, IRC, Gitter osv.) eller selvstændige. Tjek kataloget ud!",
|
||||
"Chat with Riot Bot": "Chat med Riot Bot",
|
||||
"Get started with some tips from Riot Bot!": "Kom godt i gang med nogle tips fra Riot Bot!",
|
||||
"General discussion about Matrix and Riot": "Generel diskussion om Matrix og Riot",
|
||||
"Discussion of all things Matrix!": "Diskussion om alt der har med Matrix at gøre!",
|
||||
"Riot/Web & Desktop chat": "Riot/Web- & Desktopchat",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk chat",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk chat",
|
||||
"Matrix technical discussions": "Matrix tekniske diskussioner",
|
||||
"Running Matrix services": "Drift af Matrix tjenester",
|
||||
"Community-run support for Synapse": "Fællesskabsstyret hjælp til Synapse",
|
||||
"Admin support for Dendrite": "Adminstrationshjælp til Dendrite",
|
||||
"Announcements about Synapse releases": "Announceringer om Synapse udgivelser",
|
||||
"Support for those using and running matrix-appservice-irc": "Hjælp til dem der bruger og kører matrix-appservice-irc",
|
||||
"Building services on Matrix": "Bygning af tjenester på Matrix",
|
||||
"Support for those using the Matrix spec": "Hjælp til dem der anvender Matrix speciffikationen",
|
||||
"Design and implementation of E2E in Matrix": "Design og implementering af E2E i Matrix",
|
||||
"Implementing VR services with Matrix": "Implementering af VR tjenester med Matrix",
|
||||
"Implementing VoIP services with Matrix": "Implementering af VoIP tjenester med Matrix",
|
||||
"Discussion of the Identity Service API": "Diskussion af Identity Service API'en",
|
||||
"Support for those using, running and writing other bridges": "Hjælp til dem der bruger, driver og skriver andre bridges",
|
||||
"Contributing code to Matrix and Riot": "Biddrag med kode til Matrix og Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Udviklerchat til Riot/Web udviklerholdet",
|
||||
"Dev chat for the Dendrite dev team": "Udviklerchat til Dendrite udviklerholdet",
|
||||
"Co-ordination for Riot/Web translators": "Co-ordination af Riot/Web oversættere"
|
||||
}
|
||||
|
||||
@@ -1,59 +1,43 @@
|
||||
{
|
||||
"Please Register": "Bitte registrieren",
|
||||
"Guest users can't invite users. Please register to invite.": "Gäste können keine Nutzer einladen. Bitte registriere dich, um Nutzer einzuladen.",
|
||||
"Members": "Mitglieder",
|
||||
"Files": "Dateien",
|
||||
"Notifications": "Benachrichtigungen",
|
||||
"Invite to this room": "In diesen Raum einladen",
|
||||
"Filter room names": "Raum-Namen filtern",
|
||||
"Start chat": "Chat starten",
|
||||
"Room directory": "Raum-Verzeichnis",
|
||||
"Create new room": "Neuen Raum erstellen",
|
||||
"Settings": "Einstellungen",
|
||||
"powered by Matrix": "betrieben mit Matrix",
|
||||
"Custom Server Options": "Erweiterte Server-Optionen",
|
||||
"Custom Server Options": "Benutzerdefinierte Server-Optionen",
|
||||
"Dismiss": "Ablehnen",
|
||||
"Failed to get protocol list from Home Server": "Fehler beim Abrufen der Protokoll-Liste vom Home-Server",
|
||||
"The Home Server may be too old to support third party networks": "Der Home-Server ist eventuell zu alt, um Drittanbieter-Netzwerke zu unterstützen",
|
||||
"Directory": "Raum-Verzeichnis",
|
||||
"#example:": "#beispiel:",
|
||||
"Search for a room": "Nach einem Raum suchen",
|
||||
"No rooms to show": "Keine Räume zum anzeigen",
|
||||
"World readable": "Alle können mitlesen",
|
||||
"No rooms to show": "Keine anzeigbaren Räume",
|
||||
"World readable": "Lesbar für alle",
|
||||
"Guests can join": "Gäste können beitreten",
|
||||
"You are not receiving desktop notifications": "Du erhältst keine Desktop-Benachrichtigungen",
|
||||
"Enable them now": "Aktiviere diese jetzt",
|
||||
"Add an email address above to configure email notifications": "Füge oben eine E-Mail-Adresse hinzu, um die E-Mail-Benachrichtigungseinstellungen zu konfigurieren",
|
||||
"All notifications are currently disabled for all targets.": "Im Moment sind alle Benachrichtigungen für alle Ziele deaktiviert.",
|
||||
"All notifications are currently disabled for all targets.": "Aktuell sind alle Benachrichtigungen für alle Ziele deaktiviert.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Beim Speichern deiner E-Mail-Benachrichtigungseinstellungen ist ein Fehler aufgetreten.",
|
||||
"and remove": "und entfernen",
|
||||
"Can't update user notification settings": "Benachrichtigungs-Einstellungen des Nutzers konnten nicht aktualisiert werden",
|
||||
"Can't update user notification settings": "Benachrichtigungs-Einstellungen des Benutzers konnten nicht aktualisiert werden",
|
||||
"Couldn't find a matching Matrix room": "Konnte keinen entsprechenden Matrix-Raum finden",
|
||||
"delete the alias.": "Lösche den Alias.",
|
||||
"Delete the room alias": "Lösche den Raum Alias",
|
||||
"Direct Chat": "Privater Chat",
|
||||
"Drop here to": "Hier ablegen",
|
||||
"Direct Chat": "Direkt-Chat",
|
||||
"Enable audible notifications in web client": "Audio-Benachrichtigungen im Web-Client aktivieren",
|
||||
"Enable desktop notifications": "Desktop-Benachrichtigungen aktivieren",
|
||||
"Enable email notifications": "E-Mail-Benachrichtigungen aktivieren",
|
||||
"Enable notifications for this account": "Benachrichtigungen für dieses Konto aktivieren",
|
||||
"Enable notifications for this account": "Benachrichtigungen für dieses Benutzerkonto aktivieren",
|
||||
"Enter keywords separated by a comma:": "Schlüsselwörter kommagetrennt eingeben:",
|
||||
"Error": "Fehler",
|
||||
"Error saving email notification preferences": "Fehler beim Speichern der E-Mail-Benachrichtigungseinstellungen",
|
||||
"#example": "#Beispiel",
|
||||
"Failed to": "Konnte nicht",
|
||||
"Failed to add tag ": "Konnte Tag nicht hinzufügen ",
|
||||
"Failed to change settings": "Einstellungen konnten nicht geändert werden",
|
||||
"Failed to update keywords": "Schlüsselwörter konnten nicht aktualisiert werden",
|
||||
"Failed to get public room list": "Die Liste der öffentlichen Räume konnte nicht geladen werden",
|
||||
"Failed to join the room": "Fehler beim Betreten des Raumes",
|
||||
"Failed to remove tag ": "Konnte Tag nicht entfernen ",
|
||||
"Failed to set Direct Message status of room": "Konnte den direkten Benachrichtigungsstatus nicht setzen",
|
||||
"Favourite": "Favorit",
|
||||
"Fetching third party location failed": "Das Abrufen des Drittanbieterstandorts ist fehlgeschlagen",
|
||||
"Forget": "Entfernen",
|
||||
"from the directory": "aus dem Verzeichnis",
|
||||
" from room": " aus dem Raum",
|
||||
"Keywords": "Schlüsselwörter",
|
||||
"Leave": "Verlassen",
|
||||
"Low Priority": "Niedrige Priorität",
|
||||
@@ -62,15 +46,13 @@
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Die Benachrichtigungen zu den folgenden Schlüsselwörtern folgen Regeln, die hier nicht angezeigt werden können:",
|
||||
"Notify for all other messages/rooms": "Benachrichtigungen für alle anderen Mitteilungen/Räume aktivieren",
|
||||
"Operation failed": "Aktion fehlgeschlagen",
|
||||
"Reject": "ablehnen",
|
||||
"Reject": "Ablehnen",
|
||||
"Remove": "Entfernen",
|
||||
"remove": "Entferner",
|
||||
"Remove from Directory": "Aus dem Raum-Verzeichnis entfernen",
|
||||
"Riot does not know how to join a room on this network": "Riot weiß nicht, wie es einem Raum auf diesem Netzwerk beitreten soll",
|
||||
"Room not found": "Raum nicht gefunden",
|
||||
"There are advanced notifications which are not shown here": "Es existieren erweiterte Benachrichtigungen, welche hier nicht angezeigt werden",
|
||||
"The server may be unavailable or overloaded": "Der Server ist vermutlich nicht erreichbar oder überlastet",
|
||||
"This room is inaccessible to guests. You may be able to join if you register.": "Dieser Raum ist nicht verfügbar für Gäste. Vermutlich klappt es wenn du dich anmeldest.",
|
||||
"Unable to fetch notification target list": "Liste der Benachrichtigungsempfänger konnte nicht abgerufen werden",
|
||||
"Unable to join network": "Es ist nicht möglich, dem Netzwerk beizutreten",
|
||||
"unknown error code": "Unbekannter Fehlercode",
|
||||
@@ -78,31 +60,28 @@
|
||||
"Notify me for anything else": "Über alles andere benachrichtigen",
|
||||
"Off": "Aus",
|
||||
"On": "An",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Du hast sie eventuell auf einem anderen Client als Riot konfiguriert. Sie können in Riot nicht verändert werden, gelten aber trotzdem",
|
||||
" to room": " an Raum",
|
||||
"Drop here %(toAction)s": "Hierher ziehen: %(toAction)s",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Du hast sie eventuell auf einem anderen Matrix-Client und nicht in Riot konfiguriert. Sie können in Riot nicht verändert werden, gelten aber trotzdem",
|
||||
"All messages": "Alle Nachrichten",
|
||||
"All messages (loud)": "Alle Nachrichten (laut)",
|
||||
"All messages (noisy)": "Alle Nachrichten (laut)",
|
||||
"Cancel Sending": "Senden abbrechen",
|
||||
"Close": "Schließen",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Soll der Raum-Alias %(alias)s gelöscht und der %(name)s aus dem Verzeichnis entfernt werden?",
|
||||
"Download this file": "Diese Datei herunterladen",
|
||||
"Failed to add tag %(tagName)s to room": "Das Hinzufügen des Tags %(tagName)s für den Raum ist fehlgeschlagen",
|
||||
"Download this file": "Datei herunterladen",
|
||||
"Failed to add tag %(tagName)s to room": "Fehler beim Hinzufügen des \"%(tagName)s\"-Tags an dem Raum",
|
||||
"Failed to forget room %(errCode)s": "Das Entfernen des Raums ist fehlgeschlagen %(errCode)s",
|
||||
"Failed to remove tag %(tagName)s from room": "Das Entfernen des Tags %(tagName)s für den Raum ist fehlgeschlagen",
|
||||
"Failed to set direct chat tag": "Fehler beim Setzen der \"Direkter Chat\"-Kennzeichnung",
|
||||
"Failed to remove tag %(tagName)s from room": "Fehler beim Entfernen des \"%(tagName)s\"-Tags von dem Raum",
|
||||
"Failed to set direct chat tag": "Fehler beim Setzen der Direkt-Chat-Markierung",
|
||||
"Mentions only": "Nur, wenn du erwähnt wirst",
|
||||
"Mute": "Stummschalten",
|
||||
"Permalink": "Permanenter Link",
|
||||
"Quote": "Zitat",
|
||||
"Redact": "Redaktionell entfernen",
|
||||
"Remove %(name)s from the directory?": "Soll der Raum %(name)s aus dem Verzeichnis entfernt werden?",
|
||||
"remove %(name)s from the directory.": "entferne %(name)s aus dem Verzeichnis.",
|
||||
"Resend": "Erneut senden",
|
||||
"Source URL": "Quell-URL",
|
||||
"Unable to look up room ID from server": "Es ist nicht möglich, die Raum-ID auf dem Server nachzuschlagen",
|
||||
"Unhide Preview": "Vorschau wieder anzeigen",
|
||||
"Uploaded on %(date)s by %(user)s": "Hochgeladen am %(date)s durch %(user)s",
|
||||
"Uploaded on %(date)s by %(user)s": "Hochgeladen: %(date)s von %(user)s",
|
||||
"View Decrypted Source": "Entschlüsselten Quellcode ansehen",
|
||||
"View Source": "Quellcode ansehen",
|
||||
"You cannot delete this image. (%(code)s)": "Das Bild kann nicht gelöscht werden. (%(code)s)",
|
||||
@@ -116,7 +95,6 @@
|
||||
"Sunday": "Sonntag",
|
||||
"Monday": "Montag",
|
||||
"Yesterday": "Gestern",
|
||||
"Welcome page": "Willkommensseite",
|
||||
"Advanced notification settings": "Erweiterte Benachrichtigungs-Einstellungen",
|
||||
"Call invitation": "Anruf-Einladung",
|
||||
"Messages containing my display name": "Nachrichten, die meinen Anzeigenamen enthalten",
|
||||
@@ -129,83 +107,124 @@
|
||||
"customServer_text": "Du kannst die erweiterten Server-Optionen nutzen, um dich auf anderen Matrix-Servern anzumelden, indem du eine andere Heimserver-URL eingibst. <br/>Dies ermöglicht es dir, Riot mit einem bereits existierenden Matrix-Konto auf einem anderen Heimserver zu nutzen.<br/><br/>Du kannst auch einen benutzerdefinierten Identitäts-Server eingeben, allerdings wirst du dann nicht in der Lage sein, andere Benutzer per E-Mail-Adresse einzuladen oder selbst Einladungen per E-Mail-Adresse zu erhalten.",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> und <a href=\"http://opera.com\">Opera</a> funktionieren ebenfalls.",
|
||||
"I understand the risks and wish to continue": "Ich verstehe das Risiko und möchte fortfahren",
|
||||
"Messages containing <span>keywords</span>": "Nachrichten, die definierte <span>Schlüsselwörter</span> enthalten",
|
||||
"Messages containing <span>keywords</span>": "Nachrichten, die <span>Schlüsselwörter</span> enthalten",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Bitte installiere <a href=\"https://www.google.com/chrome\">Chrome</a> oder <a href=\"https://getfirefox.com\">Firefox</a> für die beste Erfahrung.",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot nutzt zahlreiche fortgeschrittene Browser-Funktionen, die teilweise in deinem aktuell verwendeten Browser noch nicht verfügbar sind oder sich noch im experimentellen Status befinden.",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Es tut uns leid, aber dein Browser kann Riot <b>nicht</b> ausführen.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "In deinem aktuellen Browser kann das Aussehen und Gefühl der Anwendung komplett inkorrekt sein und einige oder alle Funktionen funktionieren evtl. nicht. Du kannst es trotzdem versuchen und fortfahren, aber du bist alleine mit allen Problemen auf die du stößt!",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "In deinem aktuell verwendeten Browser können Aussehen und Handhabung der Anwendung unter Umständen noch komplett fehlerhaft sein, so dass einige bzw. im Extremfall alle Funktionen nicht zur Verfügung stehen. Du kannst es trotzdem versuchen und fortfahren, bist dabei aber bezüglich aller auftretenden Probleme auf dich allein gestellt!",
|
||||
"Expand panel": "Panel ausklappen",
|
||||
"Collapse panel": "Panel einklappen",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s auf %(osName)s",
|
||||
"A new version of Riot is available.": "Eine neue Version von Riot ist verfügbar.",
|
||||
"All Rooms": "Alle Räume",
|
||||
"All Rooms": "In allen Räumen",
|
||||
"Cancel": "Abbrechen",
|
||||
"Changelog": "Änderungshistorie",
|
||||
"Changelog": "Änderungsprotokoll",
|
||||
"Collecting app version information": "App-Versionsinformationen werden abgerufen",
|
||||
"Collecting logs": "Protokolle werden abgerufen",
|
||||
"Describe your problem here.": "Beschreibe dein Problem hier.",
|
||||
"Failed to send report: ": "Senden des Reports fehlgeschlagen: ",
|
||||
"Forward Message": "Nachricht weiterleiten",
|
||||
"Hide panel": "Verberge Feld",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Um Probleme zu diagnostizieren werden mit diesem Fehlerbericht Protokolle von diesem Client gesendet. Wenn du nur obigen text senden willst, deselektiere folgendes:",
|
||||
"Hide panel": "Panel verbergen",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Zur Diagnose von Softwareproblemen werden mit diesem Fehlerbericht auch Log-Dateien übermittelt. Wenn nur der oben eingegebene Text übermittelt werden soll, bitte die nachfolgende Auswahl entsprechend abwählen:",
|
||||
"Loading bug report module": "Lade Fehlerbericht-Modul",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Bitte beschreibe (vorzugsweise auf Englisch) den Fehler. Was tatst du? Was wolltest du, dass es passiert? Was ist passiert?",
|
||||
"Please describe the bug and/or send logs.": "Bitte beschreibe den Fehler und/oder sende Protokolle.",
|
||||
"Report a bug": "Einen Fehler melden",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Bitte den Softwarefehler (vorzugsweise auf Englisch) beschreiben. Was hast du gemacht? Was sollte passieren? Was ist tatsächlich passiert?",
|
||||
"Please describe the bug and/or send logs.": "Bitte den Fehler beschreiben und/oder Log-Dateien übermitteln.",
|
||||
"Report a bug": "Einen Softwarefehler melden",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop auf %(platformName)s",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot wird im mobilen Web nicht unterstützt. App installieren?",
|
||||
"Search": "Suchen",
|
||||
"Search…": "Suchen…",
|
||||
"Send": "Sende",
|
||||
"Send logs": "Sende Protokolle",
|
||||
"This Room": "Dieser Raum",
|
||||
"Send": "Senden",
|
||||
"Send logs": "Logdateien übermitteln",
|
||||
"This Room": "In diesem Raum",
|
||||
"Unavailable": "Nicht verfügbar",
|
||||
"Unknown device": "Unbekanntes Gerät",
|
||||
"Update": "Aktualisiere",
|
||||
"Update": "Aktualisieren",
|
||||
"Uploading report": "Lade Bericht hoch",
|
||||
"What's New": "Was ist neu",
|
||||
"What's new?": "Was ist neu?",
|
||||
"Waiting for response from server": "Auf Antwort vom Server warten",
|
||||
"You are Rioting as a guest. <a>Register</a> or <a>sign in</a> to access more rooms and features!": "Du verwendest Riot als Gast. <a>Registriere</a> oder <a>melde dich an</a> um Zugang zu mehr Räumen und Funktionen zu bekommen!",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Du musst HTTPS nutzen um einen Anruf mit Bildschirmfreigabe durchzuführen.",
|
||||
"OK": "OK",
|
||||
"Login": "Anmeldung",
|
||||
"Welcome to Riot.im": "Willkommen bei Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Dezentralisierter, verschlüsselter Chat & Zusammenarbeit unterstützt von [matrix]",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Dezentrale, verschlüsselte Chat- & Kollaborationslösung unterstützt von [matrix]",
|
||||
"Search the room directory": "Raum-Verzeichnis durchsuchen",
|
||||
"Chat with Riot Bot": "Chatte mit dem Riot-Bot",
|
||||
"Get started with some tips from Riot Bot!": "Beginne mit einigen Tipps vom Riot-Bot!",
|
||||
"General discussion about Matrix": "Allgemeine Diskussion über Matrix",
|
||||
"Chat with Riot Bot": "Mit dem Riot-Bot chatten",
|
||||
"Get started with some tips from Riot Bot!": "Lass Dir vom Riot-Bot eine Einführung geben!",
|
||||
"Discussion of all things Matrix!": "\"Diskussion über alle Dinge\"-Matrix!",
|
||||
"Riot/Web & Desktop chat": "Riot-Web & Desktop-Chat",
|
||||
"Riot/Web & Desktop chat": "Riot/Web & Desktop-Chat",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot-iOS & \"matrix-ios-sdk\"-Chat",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot-Android & matrix-android-sdk-Chat",
|
||||
"Matrix technical discussions": "Technische Diskussion über Matrix",
|
||||
"Running Matrix services": "Matrix-Dienste betreiben",
|
||||
"Community-run support for Synapse": "Synapse-Support von der Community",
|
||||
"Community-run support for Synapse": "Support für Synapse von der Community",
|
||||
"Admin support for Dendrite": "Admin-Unterstützung für Dendrite",
|
||||
"Announcements about Synapse releases": "Ankündigungen über Synapse-Versionen",
|
||||
"Support for those using and running matrix-appservice-irc": "Unterstützung für die, die \"matrix-appservice-irc\" betreiben und nutzen",
|
||||
"Building services on Matrix": "Dienste bauen für Matrix",
|
||||
"Building services on Matrix": "Dienste für Matrix entwickeln",
|
||||
"Support for those using the Matrix spec": "Unterstützung für die Nutzer der Matrix-Spezification",
|
||||
"Design and implementation of E2E in Matrix": "Design und Implementierung von Ende-zu-Ende-Verschlüsselung in Matrix",
|
||||
"Implementing VR services with Matrix": "Implementierung von VR-Diensten mit Matrix",
|
||||
"Implementing VoIP services with Matrix": "Implementierung von VoIP-Diensten mit Matrix",
|
||||
"Discussion of the Identity Service API": "Diskussion der Identitätsdienst-API",
|
||||
"Support for those using, running and writing other bridges": "Unterstützung für die, die andere Brücken nutzen, betreiben oder schreiben",
|
||||
"Support for those using, running and writing other bridges": "Unterstützung für die, die andere Matrix-Bridges nutzen, betreiben oder entwickeln",
|
||||
"Contributing code to Matrix and Riot": "Code zu Matrix und Riot beitragen",
|
||||
"Dev chat for the Riot/Web dev team": "Entwickler-Chat für das Riot-Web-Entwickler-Team",
|
||||
"Dev chat for the Riot/Web dev team": "Entwickler-Chat für das Riot/Web-Entwickler-Team",
|
||||
"Co-ordination for Riot/Web translators": "Koordination für Riot/Web-Übersetzer",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Im Matrix-Netzwerk gibt es bereits jetzt zahlreiche Räume, die entweder mit bekannten Netzwerken wie Slack, IRC, Gitter, usw. verknüpft sind oder auch komplett eigenständig betrieben werden. Einen genauen Überblick erhältst du im Raum-Verzeichnis!",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Im Matrix-Netzwerk existieren bereits jetzt zahlreiche Räume, die entweder mit bekannten Netzwerken wie Slack, IRC, Gitter, usw. verknüpft sind oder auch komplett eigenständig betrieben werden. Einen genauen Überblick erhältst du im Raum-Verzeichnis!",
|
||||
"Failed to change password. Is your password correct?": "Passwortänderung fehlgeschlagen. Ist dein Passwort richtig?",
|
||||
"You have successfully set a password!": "Du hast erfolgreich ein Passwort gesetzt!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Du kannst nun zu deinem Konto zurückkehren nach dem du dich an anderen Geräten ab- und angemeldet hast.",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Du kannst nun zu deinem Benutzerkonto zurückkehren, nachdem du dich abgemeldet hast. Anschließend kannst du dich an anderen Geräten anmelden.",
|
||||
"Continue": "Fortfahren",
|
||||
"Please set a password!": "Bitte ein Passwort einrichten!",
|
||||
"Please set a password!": "Bitte setze ein Passwort!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Dies erlaubt dir, dich wieder an deinem Konto anzumelden, nachdem du dich abgemeldet hast.",
|
||||
"Dev chat for the Dendrite dev team": "Entwickler-Chat für das Dendrite-Entwickler-Team",
|
||||
"General discussion about Matrix and Riot": "Allgemeine Diskussion über Matrix und Riot",
|
||||
"(HTTP status %(httpStatus)s)": "(HTTP-Status %(httpStatus)s)",
|
||||
"You have successfully set a password and an email address!": "Du hast erfolgreich ein Passwort und eine E-Mail-Adresse gesetzt!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Denk daran, dass du in den Benutzereinstellungen jederzeit eine E-Mail-Adresse setzen kannst."
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Vergiss nicht, dass du in den Benutzereinstellungen jederzeit eine E-Mail-Adresse setzen kannst, wenn du deine Meinung änderst.",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Um in Zukunft auf dein Benutzerkonto zugreifen zu können, musst du <u>ein Passwort setzen</u>",
|
||||
"Set Password": "Passwort einrichten",
|
||||
"Warning": "Warnung",
|
||||
"Checking for an update...": "Nach Updates suchen...",
|
||||
"Error encountered (%(errorDetail)s).": "Es ist ein Fehler aufgetreten (%(errorDetail)s).",
|
||||
"No update available.": "Kein Update verfügbar.",
|
||||
"Downloading update...": "Update wird heruntergeladen...",
|
||||
"Couldn't load home page": "Startseite konnte nicht geladen werden",
|
||||
"Bug report sent": "Fehlerbericht wurde gesendet",
|
||||
"Thank you!": "Danke!",
|
||||
"Back": "Zurück",
|
||||
"Developer Tools": "Entwicklerwerkzeuge",
|
||||
"Failed to send custom event.": "Senden des benutzerdefinierten Events fehlgeschlagen.",
|
||||
"Send Custom Event": "Benutzerdefiniertes Event senden",
|
||||
"Send Custom State Event": "Benutzerdefiniertes Status-Event senden",
|
||||
"Explore Room State": "Raum-Status erkunden",
|
||||
"Event sent!": "Event gesendet!",
|
||||
"Event Type": "Event-Typ",
|
||||
"Event Content": "Event-Inhalt",
|
||||
"State Key": "Status-Schlüssel",
|
||||
"Filter results": "Ergebnisse filtern",
|
||||
"You must specify an event type!": "Du musst einen Event-Typ spezifizieren!",
|
||||
"Show message in desktop notification": "Nachricht in der Desktop-Benachrichtigung anzeigen",
|
||||
"Pin Message": "Nachricht anheften",
|
||||
"Unpin Message": "Nachricht nicht mehr anheften",
|
||||
"Add rooms to this community": "Räume zu dieser Community hinzufügen",
|
||||
"Edit": "Editieren",
|
||||
"Register": "Registrieren",
|
||||
"Rooms": "Räume",
|
||||
"Invite to this community": "In diese Community einladen",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Die benutzerdefinierten Server-Einstellungen kannst du verwenden, um dich auf anderen Matrix-Servern anzumelden, indem du eine abweichende Heimserver-URL eingibst.<br/>Somit ist es möglich, Riot mit einem bereits bestehendem Matrix-Benutzerkonto auf einem anderen Heimserver zu verwenden.<br/><br/>Außerdem kannst du einen benutzerdefinierten Identitätsserver eingeben. Allerdings kannst du in diesem Fall Benutzer nicht mehr per E-Mail-Adresse einladen und auch selbst nicht mehr per E-Mail-Adresse eingeladen werden.",
|
||||
"Toolbox": "Werkzeugkasten",
|
||||
"Explore Account Data": "Benutzerkonto-Daten analysieren",
|
||||
"Send Account Data": "Benutzerkonto-Daten senden",
|
||||
"Away": "Abwesend",
|
||||
"Appear Offline": "Als offline anzeigen",
|
||||
"<safariLink>Safari</safariLink> and <operaLink>Opera</operaLink> work too.": "<safariLink>Safari</safariLink> und <operaLink>Opera</operaLink> sind weitere Alternativen.",
|
||||
"Please install <chromeLink>Chrome</chromeLink> or <firefoxLink>Firefox</firefoxLink> for the best experience.": "Bitte installiere <chromeLink>Chrome</chromeLink> oder <firefoxLink>Firefox</firefoxLink> für ein optimales Anwendungsergebnis.",
|
||||
"Reply": "Antworten",
|
||||
"%(count)s Members|other": "%(count)s Mitglieder",
|
||||
"%(count)s Members|one": "%(count)s Mitglied",
|
||||
"Online": "Online",
|
||||
"View Community": "Community ansehen"
|
||||
}
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
"Changelog": "Αλλαγές",
|
||||
"Close": "Κλείσιμο",
|
||||
"Collapse panel": "Ελαχιστοποίηση καρτέλας",
|
||||
"Create new room": "Δημιουργία νέου δωματίου",
|
||||
"Custom Server Options": "Προσαρμοσμένες ρυθμίσεις διακομιστή",
|
||||
"Describe your problem here.": "Περιγράψτε το πρόβλημα σας εδώ.",
|
||||
"Direct Chat": "Απευθείας συνομιλία",
|
||||
@@ -30,20 +29,17 @@
|
||||
"Collecting app version information": "Συγκέντρωση πληροφοριών σχετικά με την έκδοση της εφαρμογής",
|
||||
"customServer_text": "Μπορείτε να χρησιμοποιήσετε τις προσαρμοσμένες ρυθμίσεις για να εισέλθετε σε άλλους διακομιστές Matrix επιλέγοντας μια διαφορετική διεύθυνση για το διακομιστή.<br/> Αυτό σας επιτρέπει να χρησιμοποιήσετε την εφαρμογή Riot με έναν υπάρχοντα λογαριασμό σε διαφορετικό διακομιστή.<br/><br/>Επίσης μπορείτε να επιλέξετε ένα διαφορετικό διακομιστή ταυτότητας αλλά δεν θα έχετε τη δυνατότητα να προσκαλέσετε άλλους χρήστες ή να σας προσκαλέσουν μέσω μηνυμάτων ηλεκτρονικής αλληλογραφίας.",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s μέσω %(browserName)s σε %(osName)s",
|
||||
"All messages (loud)": "Όλα τα μηνύματα (δυνατά)",
|
||||
"All messages (noisy)": "Όλα τα μηνύματα (δυνατά)",
|
||||
"delete the alias.": "διέγραψε το ψευδώνυμο.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Διαγραφή του ψευδώνυμου %(alias)s και αφαίρεση του %(name)s από το ευρετήριο;",
|
||||
"Dismiss": "Απόρριψη",
|
||||
"Failed to add tag %(tagName)s to room": "Δεν ήταν δυνατή η προσθήκη της ετικέτας %(tagName)s στο δωμάτιο",
|
||||
"Failed to change settings": "Δεν ήταν δυνατή η αλλαγή των ρυθμίσεων",
|
||||
"Failed to join the room": "Δεν ήταν δυνατή η σύνδεση στο δωμάτιο",
|
||||
"Favourite": "Αγαπημένο",
|
||||
"Files": "Αρχεία",
|
||||
"Filter room names": "Φιλτράρισμα δωματίων",
|
||||
"Forward Message": "Προώθηση",
|
||||
" from room": " από το δωμάτιο",
|
||||
"Guests can join": "Επισκέπτες μπορούν να συνδεθούν",
|
||||
"Guest users can't invite users. Please register to invite.": "Οι επισκέπτες δεν έχουν τη δυνατότητα να προσκαλέσουν άλλους χρήστες. Παρακαλούμε εγγραφείτε πρώτα.",
|
||||
"Hide panel": "Απόκρυψη καρτέλας",
|
||||
"I understand the risks and wish to continue": "Κατανοώ του κινδύνους και επιθυμώ να συνεχίσω",
|
||||
"Invite to this room": "Πρόσκληση σε αυτό το δωμάτιο",
|
||||
@@ -66,20 +62,15 @@
|
||||
"Notify me for anything else": "Ειδοποίηση για οτιδήποτε άλλο",
|
||||
"Operation failed": "Η λειτουργία απέτυχε",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Παρακαλούμε περιγράψτε το σφάλμα. Τι κάνατε; Τι περιμένατε να συμβεί; Τι έγινε τελικά;",
|
||||
"Please Register": "Παρακαλούμε εγγραφείτε",
|
||||
"Redact": "Ανάκληση",
|
||||
"Reject": "Απόρριψη",
|
||||
"Remove": "Αφαίρεση",
|
||||
"Remove from Directory": "Αφαίρεση από το ευρετήριο",
|
||||
"Resend": "Αποστολή ξανά",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop σε %(platformName)s",
|
||||
"Room directory": "Ευρετήριο",
|
||||
"Room not found": "Το δωμάτιο δεν βρέθηκε",
|
||||
"Search": "Αναζήτηση",
|
||||
"Search…": "Αναζήτηση…",
|
||||
"Send": "Αποστολή",
|
||||
"Settings": "Ρυθμίσεις",
|
||||
"Start chat": "Έναρξη συνομιλίας",
|
||||
"This Room": "Στο δωμάτιο",
|
||||
"Unavailable": "Μη διαθέσιμο",
|
||||
"Unknown device": "Άγνωστη συσκευή",
|
||||
@@ -99,7 +90,6 @@
|
||||
"Search for a room": "Αναζήτηση δωματίου",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Λυπούμαστε, αλλά ο περιηγητές σας <b>δεν</b> υποστηρίζεται από το Riot.",
|
||||
"There are advanced notifications which are not shown here": "Υπάρχουν προχωρημένες ειδοποιήσεις οι οποίες δεν εμφανίζονται εδώ",
|
||||
"This room is inaccessible to guests. You may be able to join if you register.": "Το δωμάτιο δεν είναι προσβάσιμο σε επισκέπτες. Πιθανόν να μπορέσετε να συνδεθείτε εάν εγγραφείτε.",
|
||||
"Unable to join network": "Δεν είναι δυνατή η σύνδεση στο δίκτυο",
|
||||
"unknown error code": "άγνωστος κωδικός σφάλματος",
|
||||
"Unnamed room": "Ανώνυμο δωμάτιο",
|
||||
@@ -123,12 +113,10 @@
|
||||
"Yesterday": "Χθές",
|
||||
"OK": "Εντάξει",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Απαιτείται η χρήση HTTPS για το διαμοιρασμό της επιφάνειας εργασίας μέσω κλήσης.",
|
||||
"Welcome page": "Αρχική σελίδα",
|
||||
"Forget": "Παράλειψη",
|
||||
"Riot is not supported on mobile web. Install the app?": "Το Riot δεν υποστηρίζεται από περιηγητές κινητών. Θέλετε να εγκαταστήσετε την εφαρμογή;",
|
||||
"Unhide Preview": "Προεπισκόπηση",
|
||||
"Waiting for response from server": "Αναμονή απάντησης από τον διακομιστή",
|
||||
"You are Rioting as a guest. <a>Register</a> or <a>sign in</a> to access more rooms and features!": "Χρησιμοποιείτε το Riot ως επισκέπτης. <a>Εγγραφείτε</a> ή <a>συνδεθείτε</a> για να αποκτήσετε πρόσβαση σε περισσότερα δωμάτια και χαρακτηριστικά!",
|
||||
"Collecting logs": "Συγκέντρωση πληροφοριών",
|
||||
"Enable them now": "Ενεργοποίηση",
|
||||
"Failed to forget room %(errCode)s": "Δεν ήταν δυνατή η διαγραφή του δωματίου (%(errCode)s)",
|
||||
@@ -142,15 +130,12 @@
|
||||
"Send logs": "Αποστολή πληροφοριών",
|
||||
"Source URL": "Πηγαίο URL",
|
||||
"The server may be unavailable or overloaded": "Ο διακομιστής είναι μη διαθέσιμος ή υπερφορτωμένος",
|
||||
" to room": " στο δωμάτιο",
|
||||
"Unable to fetch notification target list": "Δεν ήταν δυνατή η εύρεση στόχων για τις ειδοποιήσεις",
|
||||
"Unable to look up room ID from server": "Δεν είναι δυνατή η εύρεση του ID για το δωμάτιο",
|
||||
"View Decrypted Source": "Προβολή του αποκρυπτογραφημένου κώδικα",
|
||||
"View Source": "Προβολή κώδικα",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Ισως να έχετε κάνει τις ρυθμίσεις σε άλλη εφαρμογή εκτός του Riot. Δεν μπορείτε να τις αλλάξετε μέσω του Riot αλλά ισχύουν κανονικά",
|
||||
"Couldn't find a matching Matrix room": "Δεν βρέθηκε κάποιο δωμάτιο",
|
||||
"Drop here %(toAction)s": "Αποθέστε εδώ %(toAction)s",
|
||||
"Failed to": "Απέτυχε να",
|
||||
"Failed to get public room list": "Δεν ήταν δυνατή η λήψη της λίστας με τα δημόσια δωμάτια",
|
||||
"Failed to set direct chat tag": "Δεν ήταν δυνατός ο χαρακτηρισμός της συνομιλίας ως 1-προς-1",
|
||||
"powered by Matrix": "βασισμένο στο πρωτόκολλο Matrix",
|
||||
@@ -198,5 +183,12 @@
|
||||
"Failed to set Direct Message status of room": "Δεν ήταν δυνατός ο ορισμός της κατάστασης Direct Message του δωματίου",
|
||||
"Support for those using, running and writing other bridges": "Υποστήριξη για τους χρήστες που χρησιμοποιούν ή αναπτύσσουν εφαρμογές ενσωμάτωσης για το Matrix",
|
||||
"You have successfully set a password and an email address!": "Ο κωδικός πρόσβασης και η διεύθυνση ηλεκτρονικής αλληλογραφίας ορίστηκαν επιτυχώς!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Να θυμάστε ότι μπορείτε πάντα να ορίσετε μια διεύθυνση ηλεκτρονικής αλληλογραφίας στις ρυθμίσεις χρήστη αν αλλάξετε γνώμη."
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Να θυμάστε ότι μπορείτε πάντα να ορίσετε μια διεύθυνση ηλεκτρονικής αλληλογραφίας στις ρυθμίσεις χρήστη αν αλλάξετε γνώμη.",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Για να επιστρέψετε στον λογαριασμό σας μελλοντικα πρέπει να ορίσετε έναν <u>κωδικό πρόσβασης</u>",
|
||||
"Set Password": "Ορισμός κωδικού πρόσβασης",
|
||||
"Warning": "Προειδοποίηση",
|
||||
"Checking for an update...": "Γίνεται έλεγχος για ενημέρωση...",
|
||||
"Error encountered (%(errorDetail)s).": "Παρουσιάστηκε σφάλμα (%(errorDetail)s).",
|
||||
"No update available.": "Δεν υπάρχει διαθέσιμη ενημέρωση.",
|
||||
"Downloading update...": "Γίνεται λήψη της ενημέρωσης..."
|
||||
}
|
||||
|
||||
@@ -1,202 +1,223 @@
|
||||
{
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s on %(osName)s",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.",
|
||||
"A new version of Riot is available.": "A new version of Riot is available.",
|
||||
"Add an email address above to configure email notifications": "Add an email address above to configure email notifications",
|
||||
"Advanced notification settings": "Advanced notification settings",
|
||||
"All messages": "All messages",
|
||||
"All messages (loud)": "All messages (loud)",
|
||||
"All Rooms": "All Rooms",
|
||||
"All notifications are currently disabled for all targets.": "All notifications are currently disabled for all targets.",
|
||||
"An error occurred whilst saving your email notification preferences.": "An error occurred whilst saving your email notification preferences.",
|
||||
"Call invitation": "Call invitation",
|
||||
"Cancel": "Cancel",
|
||||
"Cancel Sending": "Cancel Sending",
|
||||
"Can't update user notification settings": "Can't update user notification settings",
|
||||
"Changelog": "Changelog",
|
||||
"Close": "Close",
|
||||
"Collapse panel": "Collapse panel",
|
||||
"Collecting app version information": "Collecting app version information",
|
||||
"Collecting logs": "Collecting logs",
|
||||
"Create new room": "Create new room",
|
||||
"Couldn't find a matching Matrix room": "Couldn't find a matching Matrix room",
|
||||
"Custom Server Options": "Custom Server Options",
|
||||
"customServer_text": "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.",
|
||||
"delete the alias.": "delete the alias.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Delete the room alias %(alias)s and remove %(name)s from the directory?",
|
||||
"Describe your problem here.": "Describe your problem here.",
|
||||
"Direct Chat": "Direct Chat",
|
||||
"Directory": "Directory",
|
||||
"Dismiss": "Dismiss",
|
||||
"Download this file": "Download this file",
|
||||
"Drop here %(toAction)s": "Drop here %(toAction)s",
|
||||
"Enable audible notifications in web client": "Enable audible notifications in web client",
|
||||
"Enable desktop notifications": "Enable desktop notifications",
|
||||
"Enable email notifications": "Enable email notifications",
|
||||
"Enable notifications for this account": "Enable notifications for this account",
|
||||
"Enable them now": "Enable them now",
|
||||
"Enter keywords separated by a comma:": "Enter keywords separated by a comma:",
|
||||
"Error": "Error",
|
||||
"Error saving email notification preferences": "Error saving email notification preferences",
|
||||
"#example": "#example",
|
||||
"Expand panel": "Expand panel",
|
||||
"Failed to": "Failed to",
|
||||
"Failed to add tag %(tagName)s to room": "Failed to add tag %(tagName)s to room",
|
||||
"Failed to change settings": "Failed to change settings",
|
||||
"Failed to forget room %(errCode)s": "Failed to forget room %(errCode)s",
|
||||
"Failed to update keywords": "Failed to update keywords",
|
||||
"Failed to get protocol list from Home Server": "Failed to get protocol list from Home Server",
|
||||
"Failed to get public room list": "Failed to get public room list",
|
||||
"Failed to join the room": "Failed to join the room",
|
||||
"Failed to remove tag %(tagName)s from room": "Failed to remove tag %(tagName)s from room",
|
||||
"Failed to send report: ": "Failed to send report: ",
|
||||
"Failed to set direct chat tag": "Failed to set direct chat tag",
|
||||
"Failed to set Direct Message status of room": "Failed to set Direct Message status of room",
|
||||
"Favourite": "Favourite",
|
||||
"Fetching third party location failed": "Fetching third party location failed",
|
||||
"Files": "Files",
|
||||
"Filter room names": "Filter room names",
|
||||
"Forget": "Forget",
|
||||
"Forward Message": "Forward Message",
|
||||
" from room": " from room",
|
||||
"Guests can join": "Guests can join",
|
||||
"Guest users can't invite users. Please register to invite.": "Guest users can't invite users. Please register to invite.",
|
||||
"Hide panel": "Hide panel",
|
||||
"(HTTP status %(httpStatus)s)": "(HTTP status %(httpStatus)s)",
|
||||
"I understand the risks and wish to continue": "I understand the risks and wish to continue",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:",
|
||||
"Invite to this room": "Invite to this room",
|
||||
"Keywords": "Keywords",
|
||||
"Leave": "Leave",
|
||||
"Login": "Login",
|
||||
"Loading bug report module": "Loading bug report module",
|
||||
"Low Priority": "Low Priority",
|
||||
"Members": "Members",
|
||||
"Mentions only": "Mentions only",
|
||||
"Messages containing my display name": "Messages containing my display name",
|
||||
"Messages containing <span>keywords</span>": "Messages containing <span>keywords</span>",
|
||||
"Messages containing my user name": "Messages containing my user name",
|
||||
"Messages in group chats": "Messages in group chats",
|
||||
"Messages in one-to-one chats": "Messages in one-to-one chats",
|
||||
"Messages sent by bot": "Messages sent by bot",
|
||||
"more": "more",
|
||||
"Mute": "Mute",
|
||||
"No rooms to show": "No rooms to show",
|
||||
"Noisy": "Noisy",
|
||||
"Notification targets": "Notification targets",
|
||||
"Notifications": "Notifications",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Notifications on the following keywords follow rules which can’t be displayed here:",
|
||||
"Notify for all other messages/rooms": "Notify for all other messages/rooms",
|
||||
"Notify me for anything else": "Notify me for anything else",
|
||||
"Off": "Off",
|
||||
"On": "On",
|
||||
"Operation failed": "Operation failed",
|
||||
"Permalink": "Permalink",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Please describe the bug. What did you do? What did you expect to happen? What actually happened?",
|
||||
"Please describe the bug and/or send logs.": "Please describe the bug and/or send logs.",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.",
|
||||
"Please Register": "Please Register",
|
||||
"powered by Matrix": "powered by Matrix",
|
||||
"Quote": "Quote",
|
||||
"Redact": "Redact",
|
||||
"Reject": "Reject",
|
||||
"Remove %(name)s from the directory?": "Remove %(name)s from the directory?",
|
||||
"Remove": "Remove",
|
||||
"remove %(name)s from the directory.": "remove %(name)s from the directory.",
|
||||
"Remove from Directory": "Remove from Directory",
|
||||
"Report a bug": "Report a bug",
|
||||
"Resend": "Resend",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop on %(platformName)s",
|
||||
"Riot does not know how to join a room on this network": "Riot does not know how to join a room on this network",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot is not supported on mobile web. Install the app?",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.",
|
||||
"Room directory": "Room directory",
|
||||
"Room not found": "Room not found",
|
||||
"Search": "Search",
|
||||
"Search…": "Search…",
|
||||
"Search for a room": "Search for a room",
|
||||
"Send": "Send",
|
||||
"Send logs": "Send logs",
|
||||
"Settings": "Settings",
|
||||
"Source URL": "Source URL",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Sorry, your browser is <b>not</b> able to run Riot.",
|
||||
"Start chat": "Start chat",
|
||||
"The Home Server may be too old to support third party networks": "The Home Server may be too old to support third party networks",
|
||||
"There are advanced notifications which are not shown here": "There are advanced notifications which are not shown here",
|
||||
"The server may be unavailable or overloaded": "The server may be unavailable or overloaded",
|
||||
"This Room": "This Room",
|
||||
"This room is inaccessible to guests. You may be able to join if you register.": "This room is inaccessible to guests. You may be able to join if you register.",
|
||||
" to room": " to room",
|
||||
"Unable to fetch notification target list": "Unable to fetch notification target list",
|
||||
"Unable to join network": "Unable to join network",
|
||||
"Unable to look up room ID from server": "Unable to look up room ID from server",
|
||||
"Unavailable": "Unavailable",
|
||||
"Unhide Preview": "Unhide Preview",
|
||||
"Unknown device": "Unknown device",
|
||||
"unknown error code": "unknown error code",
|
||||
"Unnamed room": "Unnamed room",
|
||||
"Update": "Update",
|
||||
"Uploaded on %(date)s by %(user)s": "Uploaded on %(date)s by %(user)s",
|
||||
"Uploading report": "Uploading report",
|
||||
"View Decrypted Source": "View Decrypted Source",
|
||||
"View Source": "View Source",
|
||||
"What's New": "What's New",
|
||||
"What's new?": "What's new?",
|
||||
"Waiting for response from server": "Waiting for response from server",
|
||||
"When I'm invited to a room": "When I'm invited to a room",
|
||||
"World readable": "World readable",
|
||||
"You cannot delete this image. (%(code)s)": "You cannot delete this image. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "You cannot delete this message. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "You are not receiving desktop notifications",
|
||||
"You are Rioting as a guest. <a>Register</a> or <a>sign in</a> to access more rooms and features!": "You are Rioting as a guest. <a>Register</a> or <a>sign in</a> to access more rooms and features!",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply",
|
||||
"Sunday": "Sunday",
|
||||
"Monday": "Monday",
|
||||
"Tuesday": "Tuesday",
|
||||
"Wednesday": "Wednesday",
|
||||
"Thursday": "Thursday",
|
||||
"Friday": "Friday",
|
||||
"Saturday": "Saturday",
|
||||
"Today": "Today",
|
||||
"Yesterday": "Yesterday",
|
||||
"OK": "OK",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "You need to be using HTTPS to place a screen-sharing call.",
|
||||
"Welcome page": "Welcome page",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!",
|
||||
"Welcome to Riot.im": "Welcome to Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralised, encrypted chat & collaboration powered by [matrix]",
|
||||
"Search the room directory": "Search the room directory",
|
||||
"Chat with Riot Bot": "Chat with Riot Bot",
|
||||
"Get started with some tips from Riot Bot!": "Get started with some tips from Riot Bot!",
|
||||
"General discussion about Matrix and Riot": "General discussion about Matrix and Riot",
|
||||
"Discussion of all things Matrix!": "Discussion of all things Matrix!",
|
||||
"Riot/Web & Desktop chat": "Riot/Web & Desktop chat",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk chat",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk chat",
|
||||
"Matrix technical discussions": "Matrix technical discussions",
|
||||
"Running Matrix services": "Running Matrix services",
|
||||
"Community-run support for Synapse": "Community-run support for Synapse",
|
||||
"Admin support for Dendrite": "Admin support for Dendrite",
|
||||
"Announcements about Synapse releases": "Announcements about Synapse releases",
|
||||
"Support for those using and running matrix-appservice-irc": "Support for those using and running matrix-appservice-irc",
|
||||
"Building services on Matrix": "Building services on Matrix",
|
||||
"Support for those using the Matrix spec": "Support for those using the Matrix spec",
|
||||
"Design and implementation of E2E in Matrix": "Design and implementation of E2E in Matrix",
|
||||
"Implementing VR services with Matrix": "Implementing VR services with Matrix",
|
||||
"Implementing VoIP services with Matrix": "Implementing VoIP services with Matrix",
|
||||
"Discussion of the Identity Service API": "Discussion of the Identity Service API",
|
||||
"Support for those using, running and writing other bridges": "Support for those using, running and writing other bridges",
|
||||
"Contributing code to Matrix and Riot": "Contributing code to Matrix and Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Dev chat for the Riot/Web dev team",
|
||||
"Dev chat for the Dendrite dev team": "Dev chat for the Dendrite dev team",
|
||||
"Co-ordination for Riot/Web translators": "Co-ordination for Riot/Web translators",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!",
|
||||
"Failed to change password. Is your password correct?": "Failed to change password. Is your password correct?",
|
||||
"You have successfully set a password!": "You have successfully set a password!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "You can now return to your account after signing out, and sign in on other devices.",
|
||||
"Continue": "Continue",
|
||||
"Please set a password!": "Please set a password!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "This will allow you to return to your account after signing out, and sign in on other devices.",
|
||||
"You have successfully set a password and an email address!": "You have successfully set a password and an email address!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Remember, you can always set an email address in user settings if you change your mind."
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot is not supported on mobile web. Install the app?",
|
||||
"Collecting app version information": "Collecting app version information",
|
||||
"Collecting logs": "Collecting logs",
|
||||
"Uploading report": "Uploading report",
|
||||
"Waiting for response from server": "Waiting for response from server",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop on %(platformName)s",
|
||||
"Unknown device": "Unknown device",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s on %(osName)s",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "You need to be using HTTPS to place a screen-sharing call.",
|
||||
"Messages containing my display name": "Messages containing my display name",
|
||||
"Messages containing my user name": "Messages containing my user name",
|
||||
"Messages in one-to-one chats": "Messages in one-to-one chats",
|
||||
"Messages in group chats": "Messages in group chats",
|
||||
"When I'm invited to a room": "When I'm invited to a room",
|
||||
"Call invitation": "Call invitation",
|
||||
"Messages sent by bot": "Messages sent by bot",
|
||||
"Error saving email notification preferences": "Error saving email notification preferences",
|
||||
"An error occurred whilst saving your email notification preferences.": "An error occurred whilst saving your email notification preferences.",
|
||||
"Keywords": "Keywords",
|
||||
"Enter keywords separated by a comma:": "Enter keywords separated by a comma:",
|
||||
"OK": "OK",
|
||||
"Failed to change settings": "Failed to change settings",
|
||||
"Operation failed": "Operation failed",
|
||||
"Can't update user notification settings": "Can't update user notification settings",
|
||||
"Failed to update keywords": "Failed to update keywords",
|
||||
"Messages containing <span>keywords</span>": "Messages containing <span>keywords</span>",
|
||||
"Notify for all other messages/rooms": "Notify for all other messages/rooms",
|
||||
"Notify me for anything else": "Notify me for anything else",
|
||||
"Enable notifications for this account": "Enable notifications for this account",
|
||||
"All notifications are currently disabled for all targets.": "All notifications are currently disabled for all targets.",
|
||||
"Add an email address above to configure email notifications": "Add an email address above to configure email notifications",
|
||||
"Enable email notifications": "Enable email notifications",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Notifications on the following keywords follow rules which can’t be displayed here:",
|
||||
"Unable to fetch notification target list": "Unable to fetch notification target list",
|
||||
"Notification targets": "Notification targets",
|
||||
"Advanced notification settings": "Advanced notification settings",
|
||||
"There are advanced notifications which are not shown here": "There are advanced notifications which are not shown here",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply",
|
||||
"Enable desktop notifications": "Enable desktop notifications",
|
||||
"Show message in desktop notification": "Show message in desktop notification",
|
||||
"Enable audible notifications in web client": "Enable audible notifications in web client",
|
||||
"Off": "Off",
|
||||
"On": "On",
|
||||
"Noisy": "Noisy",
|
||||
"Search…": "Search…",
|
||||
"Search": "Search",
|
||||
"This Room": "This Room",
|
||||
"All Rooms": "All Rooms",
|
||||
"Sunday": "Sunday",
|
||||
"Monday": "Monday",
|
||||
"Tuesday": "Tuesday",
|
||||
"Wednesday": "Wednesday",
|
||||
"Thursday": "Thursday",
|
||||
"Friday": "Friday",
|
||||
"Saturday": "Saturday",
|
||||
"Today": "Today",
|
||||
"Yesterday": "Yesterday",
|
||||
"Custom Server Options": "Custom Server Options",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.",
|
||||
"Dismiss": "Dismiss",
|
||||
"powered by Matrix": "powered by Matrix",
|
||||
"You are not receiving desktop notifications": "You are not receiving desktop notifications",
|
||||
"Enable them now": "Enable them now",
|
||||
"What's New": "What's New",
|
||||
"Update": "Update",
|
||||
"What's new?": "What's new?",
|
||||
"A new version of Riot is available.": "A new version of Riot is available.",
|
||||
"To return to your account in future you need to <u>set a password</u>": "To return to your account in future you need to <u>set a password</u>",
|
||||
"Set Password": "Set Password",
|
||||
"Error encountered (%(errorDetail)s).": "Error encountered (%(errorDetail)s).",
|
||||
"Checking for an update...": "Checking for an update...",
|
||||
"No update available.": "No update available.",
|
||||
"Downloading update...": "Downloading update...",
|
||||
"Warning": "Warning",
|
||||
"Error": "Error",
|
||||
"You cannot delete this image. (%(code)s)": "You cannot delete this image. (%(code)s)",
|
||||
"Uploaded on %(date)s by %(user)s": "Uploaded on %(date)s by %(user)s",
|
||||
"Remove": "Remove",
|
||||
"Close": "Close",
|
||||
"Download this file": "Download this file",
|
||||
"Please describe the bug and/or send logs.": "Please describe the bug and/or send logs.",
|
||||
"Loading bug report module": "Loading bug report module",
|
||||
"Bug report sent": "Bug report sent",
|
||||
"Thank you!": "Thank you!",
|
||||
"Failed to send report: ": "Failed to send report: ",
|
||||
"Cancel": "Cancel",
|
||||
"Report a bug": "Report a bug",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Please describe the bug. What did you do? What did you expect to happen? What actually happened?",
|
||||
"Describe your problem here.": "Describe your problem here.",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:",
|
||||
"Send logs": "Send logs",
|
||||
"Send": "Send",
|
||||
"Unavailable": "Unavailable",
|
||||
"Changelog": "Changelog",
|
||||
"Back": "Back",
|
||||
"Send Custom Event": "Send Custom Event",
|
||||
"You must specify an event type!": "You must specify an event type!",
|
||||
"Event sent!": "Event sent!",
|
||||
"Failed to send custom event.": "Failed to send custom event.",
|
||||
"Event Type": "Event Type",
|
||||
"State Key": "State Key",
|
||||
"Event Content": "Event Content",
|
||||
"Send Account Data": "Send Account Data",
|
||||
"Filter results": "Filter results",
|
||||
"Explore Room State": "Explore Room State",
|
||||
"Edit": "Edit",
|
||||
"Explore Account Data": "Explore Account Data",
|
||||
"Toolbox": "Toolbox",
|
||||
"Developer Tools": "Developer Tools",
|
||||
"You have successfully set a password!": "You have successfully set a password!",
|
||||
"You have successfully set a password and an email address!": "You have successfully set a password and an email address!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "You can now return to your account after signing out, and sign in on other devices.",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Remember, you can always set an email address in user settings if you change your mind.",
|
||||
"Continue": "Continue",
|
||||
"Failed to change password. Is your password correct?": "Failed to change password. Is your password correct?",
|
||||
"(HTTP status %(httpStatus)s)": "(HTTP status %(httpStatus)s)",
|
||||
"Please set a password!": "Please set a password!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "This will allow you to return to your account after signing out, and sign in on other devices.",
|
||||
"You cannot delete this message. (%(code)s)": "You cannot delete this message. (%(code)s)",
|
||||
"Resend": "Resend",
|
||||
"Cancel Sending": "Cancel Sending",
|
||||
"Forward Message": "Forward Message",
|
||||
"Reply": "Reply",
|
||||
"Unpin Message": "Unpin Message",
|
||||
"Pin Message": "Pin Message",
|
||||
"View Source": "View Source",
|
||||
"View Decrypted Source": "View Decrypted Source",
|
||||
"Unhide Preview": "Unhide Preview",
|
||||
"Permalink": "Permalink",
|
||||
"Quote": "Quote",
|
||||
"Source URL": "Source URL",
|
||||
"Online": "Online",
|
||||
"Away": "Away",
|
||||
"Appear Offline": "Appear Offline",
|
||||
"Failed to set Direct Message status of room": "Failed to set Direct Message status of room",
|
||||
"unknown error code": "unknown error code",
|
||||
"Failed to forget room %(errCode)s": "Failed to forget room %(errCode)s",
|
||||
"All messages (noisy)": "All messages (noisy)",
|
||||
"All messages": "All messages",
|
||||
"Mentions only": "Mentions only",
|
||||
"Mute": "Mute",
|
||||
"Leave": "Leave",
|
||||
"Forget": "Forget",
|
||||
"Reject": "Reject",
|
||||
"Favourite": "Favourite",
|
||||
"Low Priority": "Low Priority",
|
||||
"Direct Chat": "Direct Chat",
|
||||
"View Community": "View Community",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Sorry, your browser is <b>not</b> able to run Riot.",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.",
|
||||
"Please install <chromeLink>Chrome</chromeLink> or <firefoxLink>Firefox</firefoxLink> for the best experience.": "Please install <chromeLink>Chrome</chromeLink> or <firefoxLink>Firefox</firefoxLink> for the best experience.",
|
||||
"<safariLink>Safari</safariLink> and <operaLink>Opera</operaLink> work too.": "<safariLink>Safari</safariLink> and <operaLink>Opera</operaLink> work too.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!",
|
||||
"I understand the risks and wish to continue": "I understand the risks and wish to continue",
|
||||
"Couldn't load home page": "Couldn't load home page",
|
||||
"Login": "Login",
|
||||
"Register": "Register",
|
||||
"Members": "Members",
|
||||
"%(count)s Members|other": "%(count)s Members",
|
||||
"%(count)s Members|one": "%(count)s Member",
|
||||
"Invite to this room": "Invite to this room",
|
||||
"Files": "Files",
|
||||
"Notifications": "Notifications",
|
||||
"Rooms": "Rooms",
|
||||
"Hide panel": "Hide panel",
|
||||
"Invite to this community": "Invite to this community",
|
||||
"Add rooms to this community": "Add rooms to this community",
|
||||
"Failed to get protocol list from Home Server": "Failed to get protocol list from Home Server",
|
||||
"The Home Server may be too old to support third party networks": "The Home Server may be too old to support third party networks",
|
||||
"Failed to get public room list": "Failed to get public room list",
|
||||
"The server may be unavailable or overloaded": "The server may be unavailable or overloaded",
|
||||
"Unnamed room": "Unnamed room",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Delete the room alias %(alias)s and remove %(name)s from the directory?",
|
||||
"Remove %(name)s from the directory?": "Remove %(name)s from the directory?",
|
||||
"Remove from Directory": "Remove from Directory",
|
||||
"remove %(name)s from the directory.": "remove %(name)s from the directory.",
|
||||
"delete the alias.": "delete the alias.",
|
||||
"Unable to join network": "Unable to join network",
|
||||
"Riot does not know how to join a room on this network": "Riot does not know how to join a room on this network",
|
||||
"Room not found": "Room not found",
|
||||
"Couldn't find a matching Matrix room": "Couldn't find a matching Matrix room",
|
||||
"Fetching third party location failed": "Fetching third party location failed",
|
||||
"Unable to look up room ID from server": "Unable to look up room ID from server",
|
||||
"World readable": "World readable",
|
||||
"Guests can join": "Guests can join",
|
||||
"Directory": "Directory",
|
||||
"No rooms to show": "No rooms to show",
|
||||
"Search for a room": "Search for a room",
|
||||
"#example": "#example",
|
||||
"more": "more",
|
||||
"Expand panel": "Expand panel",
|
||||
"Collapse panel": "Collapse panel",
|
||||
"Filter room names": "Filter room names",
|
||||
"Welcome to Riot.im": "Welcome to Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralised, encrypted chat & collaboration powered by [matrix]",
|
||||
"Search the room directory": "Search the room directory",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!",
|
||||
"Chat with Riot Bot": "Chat with Riot Bot",
|
||||
"Get started with some tips from Riot Bot!": "Get started with some tips from Riot Bot!",
|
||||
"General discussion about Matrix and Riot": "General discussion about Matrix and Riot",
|
||||
"Discussion of all things Matrix!": "Discussion of all things Matrix!",
|
||||
"Riot/Web & Desktop chat": "Riot/Web & Desktop chat",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk chat",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk chat",
|
||||
"Matrix technical discussions": "Matrix technical discussions",
|
||||
"Running Matrix services": "Running Matrix services",
|
||||
"Community-run support for Synapse": "Community-run support for Synapse",
|
||||
"Admin support for Dendrite": "Admin support for Dendrite",
|
||||
"Announcements about Synapse releases": "Announcements about Synapse releases",
|
||||
"Support for those using and running matrix-appservice-irc": "Support for those using and running matrix-appservice-irc",
|
||||
"Building services on Matrix": "Building services on Matrix",
|
||||
"Support for those using the Matrix spec": "Support for those using the Matrix spec",
|
||||
"Design and implementation of E2E in Matrix": "Design and implementation of E2E in Matrix",
|
||||
"Implementing VR services with Matrix": "Implementing VR services with Matrix",
|
||||
"Implementing VoIP services with Matrix": "Implementing VoIP services with Matrix",
|
||||
"Discussion of the Identity Service API": "Discussion of the Identity Service API",
|
||||
"Support for those using, running and writing other bridges": "Support for those using, running and writing other bridges",
|
||||
"Contributing code to Matrix and Riot": "Contributing code to Matrix and Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Dev chat for the Riot/Web dev team",
|
||||
"Dev chat for the Dendrite dev team": "Dev chat for the Dendrite dev team",
|
||||
"Co-ordination for Riot/Web translators": "Co-ordination for Riot/Web translators"
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"Add an email address above to configure email notifications": "Add an email address above to configure email notifications",
|
||||
"Advanced notification settings": "Advanced notification settings",
|
||||
"All messages": "All messages",
|
||||
"All messages (loud)": "All messages (loud)",
|
||||
"All messages (noisy)": "All messages (noisy)",
|
||||
"All Rooms": "All Rooms",
|
||||
"All notifications are currently disabled for all targets.": "All notifications are currently disabled for all targets.",
|
||||
"An error occurred whilst saving your email notification preferences.": "An error occurred while saving your email notification preferences.",
|
||||
@@ -18,7 +18,6 @@
|
||||
"Collapse panel": "Collapse panel",
|
||||
"Collecting app version information": "Collecting app version information",
|
||||
"Collecting logs": "Collecting logs",
|
||||
"Create new room": "Create new room",
|
||||
"Couldn't find a matching Matrix room": "Couldn't find a matching Matrix room",
|
||||
"Custom Server Options": "Custom Server Options",
|
||||
"customServer_text": "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.",
|
||||
@@ -29,7 +28,6 @@
|
||||
"Directory": "Directory",
|
||||
"Dismiss": "Dismiss",
|
||||
"Download this file": "Download this file",
|
||||
"Drop here %(toAction)s": "Drop here %(toAction)s",
|
||||
"Enable audible notifications in web client": "Enable audible notifications in web client",
|
||||
"Enable desktop notifications": "Enable desktop notifications",
|
||||
"Enable email notifications": "Enable email notifications",
|
||||
@@ -40,14 +38,12 @@
|
||||
"Error saving email notification preferences": "Error saving email notification preferences",
|
||||
"#example": "#example",
|
||||
"Expand panel": "Expand panel",
|
||||
"Failed to": "Failed to",
|
||||
"Failed to add tag %(tagName)s to room": "Failed to add tag %(tagName)s to room",
|
||||
"Failed to change settings": "Failed to change settings",
|
||||
"Failed to forget room %(errCode)s": "Failed to forget room %(errCode)s",
|
||||
"Failed to update keywords": "Failed to update keywords",
|
||||
"Failed to get protocol list from Home Server": "Failed to get protocol list from Home Server",
|
||||
"Failed to get public room list": "Failed to get public room list",
|
||||
"Failed to join the room": "Failed to join the room",
|
||||
"Failed to remove tag %(tagName)s from room": "Failed to remove tag %(tagName)s from room",
|
||||
"Failed to send report: ": "Failed to send report: ",
|
||||
"Failed to set direct chat tag": "Failed to set direct chat tag",
|
||||
@@ -58,9 +54,7 @@
|
||||
"Filter room names": "Filter room names",
|
||||
"Forget": "Forget",
|
||||
"Forward Message": "Forward Message",
|
||||
" from room": " from room",
|
||||
"Guests can join": "Guests can join",
|
||||
"Guest users can't invite users. Please register to invite.": "Guest users can't invite users. Please register to invite.",
|
||||
"Hide panel": "Hide panel",
|
||||
"I understand the risks and wish to continue": "I understand the risks and wish to continue",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please uncheck:",
|
||||
@@ -93,10 +87,8 @@
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Please describe the bug. What did you do? What did you expect to happen? What actually happened?",
|
||||
"Please describe the bug and/or send logs.": "Please describe the bug and/or send logs.",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.",
|
||||
"Please Register": "Please Register",
|
||||
"powered by Matrix": "powered by Matrix",
|
||||
"Quote": "Quote",
|
||||
"Redact": "Redact",
|
||||
"Reject": "Reject",
|
||||
"Remove %(name)s from the directory?": "Remove %(name)s from the directory?",
|
||||
"Remove": "Remove",
|
||||
@@ -108,23 +100,18 @@
|
||||
"Riot does not know how to join a room on this network": "Riot does not know how to join a room on this network",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot is not supported on mobile web. Install the app?",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.",
|
||||
"Room directory": "Room directory",
|
||||
"Room not found": "Room not found",
|
||||
"Search": "Search",
|
||||
"Search…": "Search…",
|
||||
"Search for a room": "Search for a room",
|
||||
"Send": "Send",
|
||||
"Send logs": "Send logs",
|
||||
"Settings": "Settings",
|
||||
"Source URL": "Source URL",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Sorry, your browser is <b>not</b> able to run Riot.",
|
||||
"Start chat": "Start chat",
|
||||
"The Home Server may be too old to support third party networks": "The Home Server may be too old to support third party networks",
|
||||
"There are advanced notifications which are not shown here": "There are advanced notifications which are not shown here",
|
||||
"The server may be unavailable or overloaded": "The server may be unavailable or overloaded",
|
||||
"This Room": "This Room",
|
||||
"This room is inaccessible to guests. You may be able to join if you register.": "This room is inaccessible to guests. You may be able to join if you register.",
|
||||
" to room": " to room",
|
||||
"Unable to fetch notification target list": "Unable to fetch notification target list",
|
||||
"Unable to join network": "Unable to join network",
|
||||
"Unable to look up room ID from server": "Unable to look up room ID from server",
|
||||
@@ -146,7 +133,6 @@
|
||||
"You cannot delete this image. (%(code)s)": "You cannot delete this image. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "You cannot delete this message. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "You are not receiving desktop notifications",
|
||||
"You are Rioting as a guest. <a>Register</a> or <a>sign in</a> to access more rooms and features!": "You are Rioting as a guest. <a>Register</a> or <a>sign in</a> to access more rooms and features!",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply",
|
||||
"Sunday": "Sunday",
|
||||
"Monday": "Monday",
|
||||
@@ -159,7 +145,6 @@
|
||||
"Yesterday": "Yesterday",
|
||||
"OK": "OK",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "You need to be using HTTPS to place a screen-sharing call.",
|
||||
"Welcome page": "Welcome page",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!",
|
||||
"Login": "Login",
|
||||
"Continue": "Continue",
|
||||
@@ -198,5 +183,15 @@
|
||||
"Riot/Web & Desktop chat": "Riot/Web & Desktop chat",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk chat",
|
||||
"You have successfully set a password and an email address!": "You have successfully set a password and an email address!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Remember, you can always set an email address in user settings if you change your mind."
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Remember, you can always set an email address in user settings if you change your mind.",
|
||||
"Warning": "Warning",
|
||||
"Pin Message": "Pin Message",
|
||||
"Unpin Message": "Unpin Message",
|
||||
"Checking for an update...": "Checking for an update...",
|
||||
"Error encountered (%(errorDetail)s).": "Error encountered (%(errorDetail)s).",
|
||||
"No update available.": "No update available.",
|
||||
"Downloading update...": "Downloading update...",
|
||||
"To return to your account in future you need to <u>set a password</u>": "To return to your account in future you need to <u>set a password</u>",
|
||||
"Set Password": "Set Password",
|
||||
"Couldn't load home page": "Couldn't load home page"
|
||||
}
|
||||
|
||||
@@ -1,149 +1,136 @@
|
||||
{
|
||||
"A new version of Riot is available.": "Nova versio de \"Riot\" haveblas.",
|
||||
"A new version of Riot is available.": "Nova versio de Riot haveblas.",
|
||||
"All messages": "Ĉiuj mesaĝoj",
|
||||
"All messages (loud)": "Ĉiuj mesaĝoj (lauta)",
|
||||
"All messages (noisy)": "Ĉiuj mesaĝoj (lauta)",
|
||||
"All Rooms": "Ĉiuj babilejoj",
|
||||
"Cancel": "Nuligi",
|
||||
"Create new room": "Krei novan babilejon",
|
||||
"delete the alias.": "Forviŝi la kromnomon.",
|
||||
"Describe your problem here.": "Priskribi vian problemon ĉi tie.",
|
||||
"Direct Chat": "Rekta babilejo",
|
||||
"delete the alias.": "forigi la kromnomon.",
|
||||
"Describe your problem here.": "Priskribu vian problemon ĉi tie.",
|
||||
"Direct Chat": "Rekta babilo",
|
||||
"Directory": "Dosierujo",
|
||||
"Dismiss": "Eksigu",
|
||||
"Download this file": "Elŝutu ĉi-tiun dosieron",
|
||||
"Dismiss": "Rezigni",
|
||||
"Download this file": "Elŝuti ĉi tiun dosieron",
|
||||
"#example": "#ekzemplo",
|
||||
"Files": "Dosieroj",
|
||||
"Forget": "Forgesi",
|
||||
" from room": " el babilejo",
|
||||
"Guests can join": "Gastoj povas aliĝi",
|
||||
"Guest users can't invite users. Please register to invite.": "Gasta uzantoj ne povas inviti uzantojn. Bonvolu registri por inviti.",
|
||||
"I understand the risks and wish to continue": "Mi komprenas la riskonj kaj volas daŭrigi",
|
||||
"Invite to this room": "Inviti en ĉi tiun babilejon",
|
||||
"I understand the risks and wish to continue": "Mi komprenas la riskojn kaj volas daŭrigi",
|
||||
"Invite to this room": "Inviti al ĉi tiu ĉambro",
|
||||
"Keywords": "Ŝlosilvortoj",
|
||||
"Leave": "Foriri",
|
||||
"Low Priority": "Malalta prioritato",
|
||||
"Messages containing my display name": "Mesaĝoj enhavantaj mian vidigan nomon",
|
||||
"Messages containing <span>keywords</span>": "Mesaĝoj enhavantaj <span>ŝlosilovortojn</span>",
|
||||
"Messages containing my user name": "Mesaĝoj enhavantaj mian uzantnomon",
|
||||
"Messages in group chats": "Mesaĝoj en grupaj babilejoj",
|
||||
"Messages containing my user name": "Mesaĝoj enhavantaj mian salutnomon",
|
||||
"Messages in group chats": "Mesaĝoj en grupaj babiloj",
|
||||
"Mute": "Silentigi",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Bonvolu priskribi la cimon. Kion vi faris? Kion vi atendis okazi? Kion fakte okazis?",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Bonvolu priskribi la cimon. Kion vi faris? Kion vi atendis? Kio fakte okazis?",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Bonvolu instali <a href=\"https://www.google.com/chrome\">\"Chrome\"</a> aŭ <a href=\"https://getfirefox.com\">\"Firefox\"</a> por la plej bona sperto.",
|
||||
"Please Register": "Bonvolu registri",
|
||||
"powered by Matrix": "funkciigata de \"Matrix\"",
|
||||
"Quote": "Citu",
|
||||
"Reject": "Malakcepti",
|
||||
"powered by Matrix": "funkciigata de Matrix",
|
||||
"Quote": "Citi",
|
||||
"Reject": "Rifuzi",
|
||||
"Resend": "Resendi",
|
||||
"Room directory": "Babileja dosierujo",
|
||||
"Room not found": "Babilejo ne trovita",
|
||||
"Room not found": "Ĉambro ne troviĝis",
|
||||
"Search": "Serĉi",
|
||||
"Search…": "Serĉi…",
|
||||
"Search for a room": "Serĉi babilejon",
|
||||
"Search for a room": "Serĉi ĉambron",
|
||||
"Send": "Sendi",
|
||||
"Start chat": "Komenci babiladon",
|
||||
"This Room": "Ĉi tiu Babilejo",
|
||||
"This Room": "Ĉi tiu ĉambro",
|
||||
"Add an email address above to configure email notifications": "Aldonu retadreson supre por agordi retpoŝtajn sciigojn",
|
||||
"Advanced notification settings": "Agordoj de sciigoj specialaj",
|
||||
"Advanced notification settings": "Specialaj agordoj de sciigoj",
|
||||
"Call invitation": "Invito al voko",
|
||||
"All notifications are currently disabled for all targets.": "Ĉiuj sciigoj estas malvalidigitaj por ĉiu aparato.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Eraro okazis dum konservado de agordoj por retpoŝtaj sciigoj.",
|
||||
"Cancel Sending": "Nuligi sendadon",
|
||||
"Can't update user notification settings": "Ne eblas ĝisdatigi la agordojn de sciigoj al uzanto",
|
||||
"All notifications are currently disabled for all targets.": "Ĉiuj sciigoj nun estas malŝaltitaj por ĉiuj aparatoj.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Eraro okazis dum konservado de agordoj pri retpoŝtaj sciigoj.",
|
||||
"Cancel Sending": "Nuligi sendon",
|
||||
"Can't update user notification settings": "Agordoj de sciigoj al uzanto ne ĝisdatigeblas",
|
||||
"Changelog": "Protokolo de ŝanĝoj",
|
||||
"Close": "Fermi",
|
||||
"Collapse panel": "Kaŝi panelon",
|
||||
"Collecting app version information": "Kolektante informon pri versio de la aplikaĵo",
|
||||
"Collapse panel": "Maletendi panelon",
|
||||
"Collecting app version information": "Kolektanta informon pri versio de la aplikaĵo",
|
||||
"Collecting logs": "Kolektante protokolon",
|
||||
"Couldn't find a matching Matrix room": "Ne eblis trovi kongruantan ejon Matrix",
|
||||
"Custom Server Options": "Opcioj pri personigo de servilo",
|
||||
"Couldn't find a matching Matrix room": "Malsukcesis trovi kongruan ĉambron en Matrix",
|
||||
"Custom Server Options": "Propraj servilaj elektoj",
|
||||
"customServer_text": "Vi povas uzi opciojn personigitajn de la servilo por ensaluti en aliajn servilojn Matrix specifante alian adreson URL-an de alia servilo Home.<br/>Tio permesas al vi uzi Riot per ekzistanta konto en alia Home servilo.<br/><br/>Vi povas ankaŭ agordi servilon identecan personigita, sed ne eblos inviti uzantojn pere de retpoŝtadreso, aŭ esti invitita pere de retpoŝtadreso vi mem.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Forviŝi la kromnomon de la ejo %(alias)s and forigi %(name)s el la dosierujo?",
|
||||
"Enable audible notifications in web client": "Ebligi aŭdeblajn sciigojn en la retkliento",
|
||||
"Enable desktop notifications": "Ebligi labortablajn sciigojn",
|
||||
"Enable email notifications": "Ebligi retpoŝtajn sciigojn",
|
||||
"Enable notifications for this account": "Ebligi sciigojn por tiu ĉi konto",
|
||||
"Enable them now": "Ebligi ilin nun",
|
||||
"Enter keywords separated by a comma:": "Entajpi ŝlosilvortojn apartigitaj per komoj:",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Ĉu forigi la ĉambran kromnomon %(alias)s kaj forigi %(name)s de la ujo?",
|
||||
"Enable audible notifications in web client": "Ŝalti aŭdeblajn sciigojn en la retkliento",
|
||||
"Enable desktop notifications": "Ŝalti labortablajn sciigojn",
|
||||
"Enable email notifications": "Ŝalti retpoŝtajn sciigojn",
|
||||
"Enable notifications for this account": "Ŝalti sciigojn por tiu ĉi konto",
|
||||
"Enable them now": "Ŝalti ilin nun",
|
||||
"Enter keywords separated by a comma:": "Entajpu ŝlosilvortojn apartigitajn per komoj:",
|
||||
"Error": "Eraro",
|
||||
"Error saving email notification preferences": "Eraro konservante agordojn pri retpoŝtaj sciigoj",
|
||||
"Expand panel": "Pli grandigi panelon",
|
||||
"Failed to": "Malsukcesis",
|
||||
"Failed to add tag %(tagName)s to room": "Malsukcesis aldoni etikedon %(tagName)s al la ejo",
|
||||
"Expand panel": "Etendi panelon",
|
||||
"Failed to add tag %(tagName)s to room": "Malsukcesis aldoni etikedon %(tagName)s al la ĉambro",
|
||||
"Failed to change settings": "Malsukcesis ŝanĝi la agordojn",
|
||||
"Failed to forget room %(errCode)s": "Malsukcesis forgesi la ejon %(errCode)s",
|
||||
"Failed to forget room %(errCode)s": "Malsukcesis forgesi ĉambron %(errCode)s",
|
||||
"Failed to update keywords": "Malsukcesis ĝisdatigi la ŝlosilvortojn",
|
||||
"Failed to get protocol list from Home Server": "Malsukcesis obteni la liston de protokoloj por la servilo Home",
|
||||
"Failed to get public room list": "Malsukcesis obteni la liston de publikaj ejoj",
|
||||
"Failed to join the room": "Malsukcesis aliĝi al la ejo",
|
||||
"Failed to remove tag %(tagName)s from room": "Malsukcesis forigi la etikedon %(tagName)s el la ejo",
|
||||
"Failed to get protocol list from Home Server": "Malsukcesis akiri liston de protokoloj el la hejmservilo",
|
||||
"Failed to get public room list": "Malsukcesis akiri liston de publikaj ĉambroj",
|
||||
"Failed to remove tag %(tagName)s from room": "Malsukcesis forigi etikedon %(tagName)s el la ĉambro",
|
||||
"Failed to send report: ": "Malsukcesis sendi raporton: ",
|
||||
"Failed to set direct chat tag": "Malsukcesis agordi la etikedon de rekta babilejo",
|
||||
"Failed to set Direct Message status of room": "Malsukcesis agordi la staton de Rekta Mesaĝo de la ejo",
|
||||
"Failed to set direct chat tag": "Malsukcesis agordi la etikedon de rekta babilo",
|
||||
"Failed to set Direct Message status of room": "Malsukcesis agordi staton de rekta mesaĝo al la ĉambro",
|
||||
"Forward Message": "Plusendi mesaĝon",
|
||||
"Hide panel": "Kaŝi panelon",
|
||||
"(HTTP status %(httpStatus)s)": "(stato HTTP %(httpStatus)s)",
|
||||
"(HTTP status %(httpStatus)s)": "(stato de HTTP %(httpStatus)s)",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Por diagnozi problemojn, protokoloj el tiu ĉi kliento sendiĝos kune kun tiu ĉi raporto de eraro. Se vi preferas sendi nur la supran tekston, bonvolu malŝalti:",
|
||||
"Login": "Ensaluti",
|
||||
"Loading bug report module": "Ŝarĝante modulon pri eraroraporto",
|
||||
"Members": "Membroj",
|
||||
"Login": "Saluti",
|
||||
"Loading bug report module": "Enleganta cimraportan modulon",
|
||||
"Members": "Anoj",
|
||||
"Mentions only": "Nur mencioj",
|
||||
"Messages in one-to-one chats": "Mesaĝoj en unu-je-unu babilejoj",
|
||||
"Messages sent by bot": "Mesaĝoj sendita per roboto",
|
||||
"Messages in one-to-one chats": "Mesaĝoj en duopaj babiloj",
|
||||
"Messages sent by bot": "Mesaĝoj senditaj per roboto",
|
||||
"more": "pli",
|
||||
"No rooms to show": "Neniu ejo por montri",
|
||||
"No rooms to show": "Neniuj ĉambroj montreblas",
|
||||
"Noisy": "Brua",
|
||||
"Notification targets": "Celo de sciigoj",
|
||||
"Notification targets": "Celoj de sciigoj",
|
||||
"Notifications": "Sciigoj",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "La sciigoj de la sekvaj ŝlosilvortoj sekvas regulojn kiuj ne povas esti montrataj ĉi tie:",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "La sciigoj de la jenaj ŝlosilvortoj sekvas regulojn kiuj ne povas esti montrataj ĉi tie:",
|
||||
"Notify for all other messages/rooms": "Sciigu min por ĉiu alia babilejo",
|
||||
"Notify me for anything else": "Sciigu min por ĉio alia",
|
||||
"Off": "Malŝaltita",
|
||||
"On": "Ŝaltita",
|
||||
"Operation failed": "La operacio malsukcesis",
|
||||
"Notify me for anything else": "Sciigu min pri ĉio alia",
|
||||
"Off": "For",
|
||||
"On": "Ek",
|
||||
"Operation failed": "Ago malsukcesis",
|
||||
"Permalink": "Konstanta ligilo",
|
||||
"Please describe the bug and/or send logs.": "Bonvolu priskribi la cimon kaj/aŭ sendi protokolojn.",
|
||||
"Redact": "Redakti",
|
||||
"Remove %(name)s from the directory?": "Forigi %(name)s el la dosierujo?",
|
||||
"Remove %(name)s from the directory?": "Ĉu forigi %(name)s de la ujo?",
|
||||
"Remove": "Forigi",
|
||||
"remove %(name)s from the directory.": "forigi %(name)s el la dosierujo.",
|
||||
"Remove from Directory": "Forigi el Dosierujo",
|
||||
"remove %(name)s from the directory.": "forigi %(name)s de la ujo.",
|
||||
"Remove from Directory": "Forigi de ujo",
|
||||
"Report a bug": "Raporti cimon",
|
||||
"Riot Desktop on %(platformName)s": "Riot Labortablo sur %(platformName)s",
|
||||
"Riot does not know how to join a room on this network": "Riot ne scias kiel aliĝi al ejo en tiu ĉi reto",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot ne estas subtenita je mobile web. Instali la aplikaĵon?",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot uzas multajn specialajn trajtojn, kelkaj ne estas disponeblaj aŭ estas eksperimentaj en via nuna retumilo.",
|
||||
"Riot does not know how to join a room on this network": "Riot ne scias aliĝi al ĉambroj en tiu ĉi reto",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot ne estas subtenata sur poŝkomputila reto. Ĉu instali la aplikaĵon?",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot uzas multajn specialajn funkciojn, el kiuj kelkaj ne disponeblas aŭ estas eksperimentaj en via nuna foliumilo.",
|
||||
"Send logs": "Sendi protokolojn",
|
||||
"Settings": "Agordoj",
|
||||
"Source URL": "Fonta URL",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Pardonu, via retumilo <b>ne kapablas</b> funkciigi Riot.",
|
||||
"The Home Server may be too old to support third party networks": "La servilo Home povas esti tro malnova por subteni retoj de ekstera liveranto",
|
||||
"There are advanced notifications which are not shown here": "Estas specialaj sciigoj kiuj ne estas montritaj ĉi tie",
|
||||
"The server may be unavailable or overloaded": "La servilo povas esti maldisponebla aŭ tro ŝarĝita",
|
||||
"This room is inaccessible to guests. You may be able to join if you register.": "Ci tiu ejo estas neenirebla por gastoj. Vi povus aliĝi se vi registriĝas.",
|
||||
" to room": " al ejo",
|
||||
"Unable to fetch notification target list": "Ne eblis obteni la liston de celoj por sciigoj",
|
||||
"Unable to join network": "Ne eblis kuniĝi kun la reto",
|
||||
"Unable to look up room ID from server": "Ne eblis trovi la identigon el la servilo",
|
||||
"Unavailable": "Maldisponebla",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Pardonu, via foliumilo <b>ne kapablas</b> funkciigi klienton Riot.",
|
||||
"The Home Server may be too old to support third party networks": "La hejmservilo povas esti tro malnova por subteni retojn de eksteraj liverantoj",
|
||||
"There are advanced notifications which are not shown here": "Ekzistas specialaj sciigoj, kiuj ne montriĝas ĉi tie",
|
||||
"The server may be unavailable or overloaded": "La servilo povas esti nedisponebla aŭ troŝarĝita",
|
||||
"Unable to fetch notification target list": "Malsukcesis akiri la liston de celoj por sciigoj",
|
||||
"Unable to join network": "Malsukcesis konektiĝi al la reto",
|
||||
"Unable to look up room ID from server": "Ĉambra identigaĵo ne akireblas de la servilo",
|
||||
"Unavailable": "Nedisponebla",
|
||||
"Unhide Preview": "Malkaŝi antaŭrigardon",
|
||||
"Unknown device": "Nekonata aparato",
|
||||
"unknown error code": "kodo de nekonata eraro",
|
||||
"Unnamed room": "Nekonata ejo",
|
||||
"unknown error code": "nekonata kodo de eraro",
|
||||
"Unnamed room": "Sennoma ĉambro",
|
||||
"Update": "Ĝisdatigi",
|
||||
"Uploaded on %(date)s by %(user)s": "Alŝutita je %(date)s per %(user)s",
|
||||
"Uploaded on %(date)s by %(user)s": "Alŝutita je %(date)s de %(user)s",
|
||||
"Uploading report": "Alŝutante raporton",
|
||||
"View Decrypted Source": "Vidi malĉifritan fonton",
|
||||
"View Source": "Vidi fonton",
|
||||
"What's New": "Kio novas",
|
||||
"What's new?": "Kio novas?",
|
||||
"Waiting for response from server": "Atendante respondon el la servilo",
|
||||
"When I'm invited to a room": "Kiam mi estas invitita en ejon",
|
||||
"World readable": "Legebla tutmonde",
|
||||
"You cannot delete this image. (%(code)s)": "Vi ne povas forviŝi tiun ĉi bildon. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "Vi ne povas forviŝi tiun ĉi mesaĝon. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "Vi ne estas ricevante sciigojn labortablan",
|
||||
"You are Rioting as a guest. <a>Register</a> or <a>sign in</a> to access more rooms and features!": "Vi uzas Riot kiel gasto. <a>Registriĝu</a> aŭ <a>ensalutu</a> por atingi pli da ejoj kaj funkcioj!",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Vi eble agordis ilin en kliento kiu ne estis Riot. Vi ne povas agordi ilin en Riot sed ili ankoraŭ validas",
|
||||
"When I'm invited to a room": "Kiam mi estas invitita al ĉambro",
|
||||
"World readable": "Legebla de ĉiuj",
|
||||
"You cannot delete this image. (%(code)s)": "Vi ne povas forigi tiun ĉi bildon. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "Vi ne povas forigi tiun ĉi mesaĝon. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "Vi ne ricevadas sciigojn labortablajn",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Vi eble agordis ilin en alia kliento. Vi ne povas agordi ilin en Riot, sed ili ankoraŭ validas",
|
||||
"Sunday": "Dimanĉo",
|
||||
"Monday": "Lundo",
|
||||
"Tuesday": "Mardo",
|
||||
@@ -154,49 +141,89 @@
|
||||
"Today": "Hodiaŭ",
|
||||
"Yesterday": "Hieraŭ",
|
||||
"OK": "Bone",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Vi devas uzi HTTPS por starigi ekranan vokon.",
|
||||
"Welcome page": "Paĝo de bonveno",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Kun via nuna retumilo, la aspekto kaj funkciado de la aplikaĵo povas esti tute malĝusta, kaj kelkaj aŭ ĉiu funkcioj eble ne funkcios. Se vi volas provi ĉiuokaze vi rajtas daŭrigi, sed ne estos subteno se vi trafas problemojn!",
|
||||
"Welcome to Riot.im": "Bonvenon al Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Malcentra, ĉifrita babilejo & kunlaboro povigita de [matrix]",
|
||||
"Search the room directory": "Serĉi la ejan dosierujon",
|
||||
"Chat with Riot Bot": "Babili kun la roboto Riot Bot",
|
||||
"Get started with some tips from Riot Bot!": "Eki per sugesto de la roboto Riot Bot!",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Vi devas uzi HTTPS por ekranvidadi.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Kun via nuna foliumilo, la aspekto kaj funkciado de la aplikaĵo povas esti tute malĝusta, kaj kelkaj aŭ ĉiu funkcioj eble ne tute funkcios. Se vi tamen volas provi, vi povas daŭrigi, sed vi ricevos nenian subtenon se vi renkontos problemojn!",
|
||||
"Welcome to Riot.im": "Bonvenu al Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Malcentra, ĉifrita babilado & kunlaboro povigita de [matrix]",
|
||||
"Search the room directory": "Serĉi en la ĉambrujo",
|
||||
"Chat with Riot Bot": "Babilu kun la roboto Riot Bot",
|
||||
"Get started with some tips from Riot Bot!": "Komencu kun kelkaj sugestoj de la roboto Riot Bot!",
|
||||
"General discussion about Matrix and Riot": "Ĝenerala diskutado pri Matrix kaj Riot",
|
||||
"Discussion of all things Matrix!": "Diskutado pri ĉio rilate al Matrix!",
|
||||
"Riot/Web & Desktop chat": "Diskudato labortabla pri Riot/Web",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Diskutado pri Riot/iOS & matrix-ios-sdk",
|
||||
"Riot/Android & matrix-android-sdk chat": "Diskutado pri Riot/Android & matrix-android-sdk",
|
||||
"Matrix technical discussions": "Teknikaj diskutoj pri Matrix",
|
||||
"Running Matrix services": "Funkciigado de servoj Matrix",
|
||||
"Discussion of all things Matrix!": "Diskutado pri ĉio rilata al Matrix!",
|
||||
"Riot/Web & Desktop chat": "Babilado pri Riot ĉe reto kaj labortablo",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Babilado pri Riot ĉe iOS kaj matrix-ios-sdk",
|
||||
"Riot/Android & matrix-android-sdk chat": "Babilado pri Riot ĉe Android kaj matrix-android-sdk",
|
||||
"Matrix technical discussions": "Teĥnikaj diskutoj pri Matrix",
|
||||
"Running Matrix services": "Funkciigado de servoj de Matrix",
|
||||
"Community-run support for Synapse": "Komunuma subtenado de Synapse",
|
||||
"Admin support for Dendrite": "Administra subtenado por Dendrite",
|
||||
"Announcements about Synapse releases": "Anoncoj pri eldonoj Synapse",
|
||||
"Announcements about Synapse releases": "Anoncoj pri eldonoj de Synapse",
|
||||
"Support for those using and running matrix-appservice-irc": "Subteno por tiuj, kiuj uzas kaj funkciigas matrix-appservice-irc",
|
||||
"Building services on Matrix": "Konstruante servojn per Matrix",
|
||||
"Support for those using the Matrix spec": "Subteno por tiuj, kiuj uzas la specifon Matrix",
|
||||
"Design and implementation of E2E in Matrix": "Dizajno kaj realigo de E2E en Matrix",
|
||||
"Implementing VR services with Matrix": "Realigi VR-servojn per Matrix",
|
||||
"Implementing VoIP services with Matrix": "Realigi VoIP-servojn per Matrix",
|
||||
"Discussion of the Identity Service API": "Diskutado pri la API de Identiga Servo",
|
||||
"Support for those using, running and writing other bridges": "Subteno por tiuj, kiuj uzas, funkciigas kaj skribas aliajn pontojn",
|
||||
"Contributing code to Matrix and Riot": "Kontribui kodon al Matrix kaj Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Programista babilado por la programteamo de Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "Programista babilado por la programteamo de Dendrite",
|
||||
"Co-ordination for Riot/Web translators": "Kunordigado por tradukistoj de Riot/Web",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Multaj ejoj jam ekzistas en Matrix, ligitaj al ekzistantaj retoj (Slock, IRC, Gitter, ktp) aŭ sendependaj. Kontrolu la dosierujon!",
|
||||
"Failed to change password. Is your password correct?": "Malsukcesis ŝanĝi la pasvorton. Ĉu via pasvorto pravas?",
|
||||
"Building services on Matrix": "Konstruado de servoj sur Matrix",
|
||||
"Support for those using the Matrix spec": "Subteno por tiuj, kiuj uzas la specifaĵon de Matrix",
|
||||
"Design and implementation of E2E in Matrix": "Fasonado kaj realigado de ĝiscela ĉifrado en Matrix",
|
||||
"Implementing VR services with Matrix": "Realigado de VR-servoj en Matrix",
|
||||
"Implementing VoIP services with Matrix": "Realigado de VoIP-servoj en Matrix",
|
||||
"Discussion of the Identity Service API": "Diskutado pri API de la identiga servo",
|
||||
"Support for those using, running and writing other bridges": "Subteno por tiuj, kiuj uzas, funkciigas, aŭ evoluigas aliajn pontojn",
|
||||
"Contributing code to Matrix and Riot": "Kontribuado de kodo al Matrix kaj Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Babilado por la programista skipo de Riot ĉe reto",
|
||||
"Dev chat for the Dendrite dev team": "Babilado por la programista skipo de Dendrite",
|
||||
"Co-ordination for Riot/Web translators": "Kunordigado por tradukistoj de Riot ĉe reto",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Multaj ĉambroj jam ekzistas en Matrix; kaj sendependaj, kaj ligitaj kun jamaj retoj (Slock, IRC, Gitter, ktp.). Rigardu la ĉambrujon!",
|
||||
"Failed to change password. Is your password correct?": "Malsukcesis ŝanĝi la pasvorton. Ĉu via pasvorto estas ĝusta?",
|
||||
"You have successfully set a password!": "Vi sukcese agordis pasvorton!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Vi nun rajtas reiri al via konto post elsaluto, kaj ensaluti per aliaj aparatoj.",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Vi nun rajtas reveni al via konto post adiaŭo, kaj saluti per ĝi kun aliaj aparatoj.",
|
||||
"Continue": "Daŭrigi",
|
||||
"Please set a password!": "Bonvolu agordi pasvorton!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Tio ĉi permesos vin reiri al via konto post elsaluto, kaj ensaluti per alia aparato.",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Tio ĉi permesos al vi reveni al via konto post adiaŭo, kaj saluti kun alia aparato.",
|
||||
"You have successfully set a password and an email address!": "Vi sukcese agordis pasvorton kaj retpoŝtadreson!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Memoru, vi ĉiam povas agordi retpoŝtadreson en via uzanta agordo se vi decidas ŝanĝi ĝin poste.",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Memoru: vi ĉiam povas agordi retpoŝtadreson en viaj agordoj por uzantoj.",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s per %(browserName)s je %(osName)s",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> kaj <a href=\"http://opera.com\">Opera</a> ankaŭ funkcias.",
|
||||
"Drop here %(toAction)s": "Forlasi ĉi tie %(toAction)s",
|
||||
"Favourite": "Plej ŝatata",
|
||||
"Fetching third party location failed": "Venigado de ekstere liverita loko malsukcesis",
|
||||
"Filter room names": "Filtri nomojn de ejoj"
|
||||
"Favourite": "Ŝatata",
|
||||
"Fetching third party location failed": "Malsukcesis trovi lokon de ekstera liveranto",
|
||||
"Filter room names": "Filtri nomojn de ĉambroj",
|
||||
"Warning": "Averto",
|
||||
"Checking for an update...": "Serĉanta ĝisdatigojn…",
|
||||
"No update available.": "Neniuj ĝisdatigoj haveblas.",
|
||||
"Unpin Message": "Malfiksi mesaĝon",
|
||||
"Rooms": "Ĉambroj",
|
||||
"Show message in desktop notification": "Montradi mesaĝojn en labortablaj sciigoj",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Vi povas uzi proprajn servilajn elektojn por saluti aliajn servilojn de Matrix, per specifo de alia hejmservila URL.<br/>Tio permesas al vi uzi klienton Riot kun jama konto de Matrix en alia hejmservilo.<br/><br/>Vi ankaŭ povas agordi propran identigan servilon, sed vi ne povos inviti uzantojn per retpoŝtadreso, aŭ esti invitata per retpoŝtadreso mem.",
|
||||
"Appear Offline": "Montriĝi kiel eksterreta",
|
||||
"Away": "Foresta",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Por reveni al via konto estonte, vi devas <u>agordi pasvorton</u>",
|
||||
"Set Password": "Agordi pasvorton",
|
||||
"Error encountered (%(errorDetail)s).": "Eraro okazis (%(errorDetail)s).",
|
||||
"Downloading update...": "Elŝutanta ĝisdatigon…",
|
||||
"Bug report sent": "Cimraporto sendiĝis",
|
||||
"Thank you!": "Dankon!",
|
||||
"Back": "Reen",
|
||||
"Send Custom Event": "Sendi propran okazon",
|
||||
"You must specify an event type!": "Vi devas specifi tipon de okazo!",
|
||||
"Event sent!": "Okazo sendiĝis!",
|
||||
"Failed to send custom event.": "Malsukcesis sendi propran okazon.",
|
||||
"Event Type": "Tipo de okazo",
|
||||
"State Key": "Stata ŝlosilo",
|
||||
"Event Content": "Enhavo de okazo",
|
||||
"Send Account Data": "Sendi kontajn informojn",
|
||||
"Filter results": "Filtri rezultojn",
|
||||
"Explore Room State": "Esplori staton de ĉambro",
|
||||
"Edit": "Redakti",
|
||||
"Explore Account Data": "Esplori kontajn datumojn",
|
||||
"Toolbox": "Ilaro",
|
||||
"Developer Tools": "Evoluigiloj",
|
||||
"Pin Message": "Fiksi mesaĝon",
|
||||
"Please install <chromeLink>Chrome</chromeLink> or <firefoxLink>Firefox</firefoxLink> for the best experience.": "Bonvolu instali <chromeLink>Ĥromon</chromeLink> aŭ <firefoxLink>Fajrovulpon</firefoxLink> por plej bona sperto.",
|
||||
"<safariLink>Safari</safariLink> and <operaLink>Opera</operaLink> work too.": "Ankaŭ <safariLink>Safario</safariLink> kaj <operaLink>Opero</operaLink> funkcias.",
|
||||
"Couldn't load home page": "Malsukcesis enlegi hejmpaĝon",
|
||||
"Register": "Registriĝi",
|
||||
"Invite to this community": "Inviti al tiu ĉi komunumo",
|
||||
"Add rooms to this community": "Aldoni ĉambrojn al ĉi tiu komunumo",
|
||||
"Online": "Enreta",
|
||||
"Reply": "Respondi",
|
||||
"%(count)s Members|other": "%(count)s Membroj",
|
||||
"%(count)s Members|one": "%(count)s Membro",
|
||||
"View Community": "Vidi Komunumon"
|
||||
}
|
||||
|
||||
@@ -1,22 +1,20 @@
|
||||
{
|
||||
"Add an email address above to configure email notifications": "Añade una dirección de email arriba para configurar las notificaciones por email",
|
||||
"Advanced notification settings": "Configuración de notificaciones avanzada",
|
||||
"Add an email address above to configure email notifications": "Añade una dirección de correo arriba para configurar las notificaciones por correo",
|
||||
"Advanced notification settings": "Configuración avanzada de notificaciones",
|
||||
"All messages": "Todos los mensajes",
|
||||
"An error occurred whilst saving your email notification preferences.": "Se ha producido un error al guardar las preferencias de notificación por email.",
|
||||
"Call invitation": "Invitación a la llamada",
|
||||
"Cancel Sending": "Cancelar envío",
|
||||
"Can't update user notification settings": "No se puede actualizar la configuración de notificación de usuario",
|
||||
"Can't update user notification settings": "No se puede actualizar la configuración de notificaciones del usuario",
|
||||
"Close": "Cerrar",
|
||||
"Create new room": "Crear nueva sala",
|
||||
"Couldn't find a matching Matrix room": "No se encontró una sala Matrix que coincidiera",
|
||||
"Couldn't find a matching Matrix room": "No se encontró una sala Matrix que coincida",
|
||||
"Custom Server Options": "Opciones de Servidor Personalizado",
|
||||
"customServer_text": "Puedes utilizar las opciones de servidor personalizadas para iniciar sesión en otros servidores Matrix especificando una URL de Home server distinta.<br/>Esto te permite usar Riot con una cuenta Matrix existente en un Home server distinto.<br/><br/>También puedes configurar un servidor de identidad personalizado, pero no podrás invitar usuarios por dirección de email, ni ser invitado por email por ti mismo.",
|
||||
"customServer_text": "Puedes utilizar las opciones de servidor personalizadas para iniciar sesión en otros servidores Matrix especificando una URL de Home server distinta.<br/>Esto te permite usar Riot con una cuenta Matrix existente en un Home server distinto.<br/><br/>También puedes configurar un servidor de identidad personalizado, pero no podrás ni invitar usuarios ni ser invitado a través de tu dirección de correo electrónico.",
|
||||
"delete the alias.": "borrar el alias.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "¿Borrar la sala alias %(alias)s y retirar %(name)s del directorio?",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "¿Borrar el alias de la sala %(alias)s y eliminar %(name)s del directorio?",
|
||||
"Direct Chat": "Conversación directa",
|
||||
"Directory": "Directorio",
|
||||
"Download this file": "Descargar este archivo",
|
||||
"Drop here %(toAction)s": "Suelta aquí %(toAction)s",
|
||||
"Enable audible notifications in web client": "Habilitar notificaciones audibles en el cliente web",
|
||||
"Enable desktop notifications": "Habilitar notificaciones de escritorio",
|
||||
"Enable email notifications": "Habilitar notificaciones por email",
|
||||
@@ -30,9 +28,8 @@
|
||||
"Failed to change settings": "Error al cambiar la configuración",
|
||||
"Failed to forget room %(errCode)s": "Falló al olvidar la sala %(errCode)s",
|
||||
"Failed to update keywords": "Error al actualizar las palabras clave",
|
||||
"Failed to get protocol list from Home Server": "Error al obtener la lista de protocolos de Home Server",
|
||||
"Failed to get protocol list from Home Server": "Error al obtener la lista de protocolos desde el Home Server",
|
||||
"Failed to get public room list": "No se pudo obtener la lista de salas públicas",
|
||||
"Failed to join the room": "Falló al unirse a la sala",
|
||||
"Failed to remove tag %(tagName)s from room": "Error al eliminar la etiqueta %(tagName)s de la sala",
|
||||
"Failed to set direct chat tag": "Error al establecer la etiqueta de chat directo",
|
||||
"Failed to set Direct Message status of room": "No se pudo establecer el estado de Mensaje Directo de la sala",
|
||||
@@ -41,16 +38,14 @@
|
||||
"Files": "Archivos",
|
||||
"Filter room names": "Filtrar los nombres de las salas",
|
||||
"Forget": "Olvidar",
|
||||
" from room": " de la sala",
|
||||
"Guests can join": "Los invitados se pueden unir",
|
||||
"Guest users can't invite users. Please register to invite.": "Los usuarios invitados no pueden invitar usuarios. Por favor, regístrate para poder invitar.",
|
||||
"Invite to this room": "Invitar a esta sala",
|
||||
"Keywords": "Palabras clave",
|
||||
"Leave": "Salir",
|
||||
"Low Priority": "Baja Prioridad",
|
||||
"Members": "Miembros",
|
||||
"Mentions only": "Sólo menciones",
|
||||
"Messages containing my display name": "Mensajes que contienen mi nombre para mostrar",
|
||||
"Messages containing my display name": "Mensajes que contienen mi nombre",
|
||||
"Messages containing my user name": "Mensajes que contienen mi nombre de usuario",
|
||||
"Messages in group chats": "Mensajes en chats de grupo",
|
||||
"Messages in one-to-one chats": "Mensajes en chats uno a uno",
|
||||
@@ -67,9 +62,7 @@
|
||||
"On": "Encendido",
|
||||
"Operation failed": "Falló la operación",
|
||||
"Permalink": "Enlace permanente",
|
||||
"Please Register": "Por favor, regístrese",
|
||||
"Quote": "Citar",
|
||||
"Redact": "Redactar",
|
||||
"Reject": "Rechazar",
|
||||
"Remove %(name)s from the directory?": "¿Retirar %(name)s del directorio?",
|
||||
"Remove": "Eliminar",
|
||||
@@ -77,17 +70,12 @@
|
||||
"Remove from Directory": "Retirar del Directorio",
|
||||
"Resend": "Reenviar",
|
||||
"Riot does not know how to join a room on this network": "Riot no sabe cómo unirse a una sala en esta red",
|
||||
"Room directory": "Directorio de salas",
|
||||
"Room not found": "Sala no encontrada",
|
||||
"Search for a room": "Buscar sala",
|
||||
"Settings": "Configuración",
|
||||
"Source URL": "URL de origen",
|
||||
"Start chat": "Comenzar chat",
|
||||
"Source URL": "URL de Origen",
|
||||
"The Home Server may be too old to support third party networks": "El Home Server puede ser demasiado antiguo para soportar redes de terceros",
|
||||
"There are advanced notifications which are not shown here": "Hay notificaciones avanzadas que no se muestran aquí",
|
||||
"The server may be unavailable or overloaded": "El servidor puede estar no disponible o sobrecargado",
|
||||
"This room is inaccessible to guests. You may be able to join if you register.": "Esta sala es inaccesible para los invitados. Puedes unirse si te registras.",
|
||||
" to room": " a la sala",
|
||||
"Unable to fetch notification target list": "No se puede obtener la lista de objetivos de notificación",
|
||||
"Unable to join network": "No se puede unir a la red",
|
||||
"Unable to look up room ID from server": "No se puede buscar el ID de la sala desde el servidor",
|
||||
@@ -112,67 +100,64 @@
|
||||
"Saturday": "Sábado",
|
||||
"Today": "Hoy",
|
||||
"Yesterday": "Ayer",
|
||||
"Welcome page": "Página de bienvenida",
|
||||
"Continue": "Continuar",
|
||||
"Search": "Búsqueda",
|
||||
"OK": "Correcto",
|
||||
"Failed to change password. Is your password correct?": "Falló al cambiar la clave, ¿Está correcta tu clave?",
|
||||
"Failed to change password. Is your password correct?": "No se pudo cambiar la contraseña. ¿Está usando la correcta?",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> y <a href=\"http://opera.com\">Opera</a> también funcionan.",
|
||||
"A new version of Riot is available.": "Una nueva versión de Riot está disponible.",
|
||||
"Cancel": "Cancelar",
|
||||
"Describe your problem here.": "Describa su problema aquí.",
|
||||
"Describe your problem here.": "Describe el problema aquí.",
|
||||
"Forward Message": "Reenviar mensaje",
|
||||
"Hide panel": "Ocultar panel",
|
||||
"(HTTP status %(httpStatus)s)": "(estado HTTP %(httpStatus)s)",
|
||||
"I understand the risks and wish to continue": "Entiendo los riesgos y deseo continuar",
|
||||
"Changelog": "Bitácora de cambios",
|
||||
"Changelog": "Registro de cambios",
|
||||
"Collapse panel": "Colapsar panel",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Recuerde que, si es necesario, puede establecer una dirección de email en las preferencias de usuario.",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Recuerda que si es necesario puedes establecer una dirección de email en las preferencias de usuario.",
|
||||
"All Rooms": "Todas las salas",
|
||||
"Expand panel": "Expandir panel",
|
||||
"Failed to": "Falló",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Para diagnosticar los problemas, las trazas de este cliente serán enviadas adjuntas a este informe de defecto. Si quisiera enviar el texto anterior solamente, entonces desmarque:",
|
||||
"Login": "Abrir sesión",
|
||||
"Report a bug": "Informe un defecto",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Para diagnosticar los problemas, los registros de este cliente serán enviados adjuntos a este informe de fallo. Si quisieras enviar el texto anterior solamente, entonces desmarca:",
|
||||
"Login": "Iniciar sesión",
|
||||
"Report a bug": "Informar de un fallo",
|
||||
"Search…": "Buscar…",
|
||||
"Send": "Enviar",
|
||||
"Send logs": "Enviar trazas",
|
||||
"Send logs": "Enviar registros",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "¡Lo sentimos! Su navegador <b>no puede</b> ejecutar Riot.",
|
||||
"This Room": "Esta sala",
|
||||
"Unavailable": "No disponible",
|
||||
"Unknown device": "Dispositivo desconocido",
|
||||
"Update": "Actualizar",
|
||||
"Uploading report": "Enviando informe",
|
||||
"What's New": "Lo que hay de nuevo",
|
||||
"What's New": "Novedades",
|
||||
"What's new?": "¿Qué hay de nuevo?",
|
||||
"Waiting for response from server": "Esperando una respuesta del servidor",
|
||||
"You have successfully set a password and an email address!": "¡Ha establecido exitosamente la contraseña y la dirección de email!",
|
||||
"You have successfully set a password!": "¡Ha establecido exitosamente una contraseña!",
|
||||
"You have successfully set a password and an email address!": "¡Has establecido una nueva contraseña y dirección de correo electrónico!",
|
||||
"You have successfully set a password!": "¡Has establecido una nueva contraseña!",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s en %(osName)s",
|
||||
"All messages (loud)": "Todos los mensajes (ruidoso)",
|
||||
"All notifications are currently disabled for all targets.": "Las notificaciones estan desactivadas en todos los objetivos.",
|
||||
"All messages (noisy)": "Todos los mensajes (ruidoso)",
|
||||
"All notifications are currently disabled for all targets.": "Las notificaciones estan desactivadas para todos los objetivos.",
|
||||
"Collecting app version information": "Recolectando información de la versión de la aplicación",
|
||||
"Collecting logs": "Recolectando registros",
|
||||
"Dismiss": "Omitir",
|
||||
"Failed to send report: ": "Error al enviar reporte: ",
|
||||
"Failed to send report: ": "Error al enviar informe: ",
|
||||
"Loading bug report module": "Cargando módulo de reporte de errores",
|
||||
"Messages containing <span>keywords</span>": "Mensajes que contienen <span>palabras clave</span>",
|
||||
"Notify for all other messages/rooms": "Notificar para todos los demás mensajes/salas",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Por favor describa el error. Qué acción ejecutó? Cuál era el resultado que esperaba? Que pasó realmente?",
|
||||
"Please describe the bug and/or send logs.": "Por favor describa el error y/o envíe los registros.",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Por favor describa el error. ¿Qué acción ejecutó? ¿Cuál era el resultado que esperaba? ¿Que pasó realmente?",
|
||||
"Please describe the bug and/or send logs.": "Por favor describe el error y/o envía los registros.",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Por favor instale <a href=\"https://www.google.com/chrome\">Google Chrome</a> o <a href=\"https://getfirefox.com\">Mozilla Firefox</a> para una mejor experiencia.",
|
||||
"powered by Matrix": "con el poder de Matrix",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop en %(platformName)s",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot no está soportado en navegadores Web móviles. Quieres instalar la aplicación?",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot no está soportado en navegadores Web móviles. ¿Quieres instalar la aplicación?",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot usa muchas características avanzadas del navegador, algunas de las cuales no están disponibles en su navegador actual.",
|
||||
"You are Rioting as a guest. <a>Register</a> or <a>sign in</a> to access more rooms and features!": "Está usando Riot como invitado. ¡<a>Regístrese</a> o <a>inicie sesión</a> para acceder más salas y características!",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Debes usar HTTPS para hacer una llamada con pantalla compartida.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "En su navegador actual, la apariencia de la aplicación puede ser completamente incorrecta, y algunas de las características podrían no funcionar. Si aún desea probarlo puede continuar, pero ¡no podremos ofrecer soporte por cualquier problema que pudiese tener!",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "En su navegador actual, la apariencia y comportamiento de la aplicación puede ser completamente incorrecta, y algunas de las características podrían no funcionar. Si aún desea probarlo puede continuar, pero ¡no podremos ofrecer soporte por cualquier problema que pudiese tener!",
|
||||
"Welcome to Riot.im": "Bienvenido a Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Conversaciones & colaboración cifradas y descentralizadas con el poder de [matrix]",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Conversaciones cifradas y descentralizadas & colaboración con el poder de [matrix]",
|
||||
"Search the room directory": "Buscar en el directorio de salas",
|
||||
"Chat with Riot Bot": "Conversar con el Bot de Riot",
|
||||
"Get started with some tips from Riot Bot!": "¡Comenzar con algunos tips de Riot Bot!",
|
||||
"Get started with some tips from Riot Bot!": "¡Comenzar con algunos consejos de Riot Bot!",
|
||||
"General discussion about Matrix and Riot": "Discusión general sobre Matrix y Riot",
|
||||
"Discussion of all things Matrix!": "¡Discusión sobre todas las cosas de Matrix!",
|
||||
"Riot/Web & Desktop chat": "Conversaciones de Riot/Web & Desktop",
|
||||
@@ -198,5 +183,47 @@
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Muchas salas ya están disponibles en Matrix, enlazadas a redes existentes (Slack, IRC, Gitter, etc) o independientes. ¡Revisa el directorio!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Ahora puedes regresar a tu cuenta después de cerrar tu sesión, e iniciar sesión en otros dispositivos.",
|
||||
"Please set a password!": "¡Por favor establece una contraseña!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Esto le permitirá regresar a su cuenta después de cerrar sesión, así como iniciar sesión en otros dispositivos."
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Esto te permitirá regresar a tu cuenta después de cerrar sesión, así como iniciar sesión en otros dispositivos.",
|
||||
"Warning": "Advertencia",
|
||||
"Checking for an update...": "Comprobando actualizaciones...",
|
||||
"No update available.": "No hay actualizaciones disponibles.",
|
||||
"Downloading update...": "Descargando actualizaciones...",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Para regresar a tu cuenta en el futuro debes <u>establecer una contraseña</u>",
|
||||
"Set Password": "Establecer contraseña",
|
||||
"Error encountered (%(errorDetail)s).": "Error encontrado (%(errorDetail)s).",
|
||||
"Couldn't load home page": "No se puede cargar la página principal",
|
||||
"Bug report sent": "Informe de fallo enviado",
|
||||
"Thank you!": "¡Gracias!",
|
||||
"Show message in desktop notification": "Mostrar mensaje en la notificación del escritorio",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Puedes usar las opciones del servidor personalizado para acceder a otros servidores Matrix especificando su URL. <br/> Esto te permite usar Riot con una cuenta Matrix existente en un servidor doméstico distinto. <br/><br/>También puedes establecer un servidor de identidad personalizado pero no podrás invitar a otros usuarios usando su dirección de correo electrónico, y tampoco ser invitado por el tuyo.",
|
||||
"Appear Offline": "Mostrarse Desconectado",
|
||||
"Away": "Ausente",
|
||||
"Back": "Atrás",
|
||||
"Send Custom Event": "Enviar Evento Personalizado",
|
||||
"You must specify an event type!": "Debes especificar un tipo de evento!",
|
||||
"Event sent!": "Evento enviado!",
|
||||
"Failed to send custom event.": "Ha fallado el envio del evento personalizado.",
|
||||
"Event Type": "Tipo de Evento",
|
||||
"State Key": "Clave de estado",
|
||||
"Event Content": "Contenido del Evento",
|
||||
"Send Account Data": "Enviar Datos de la Cuenta",
|
||||
"Filter results": "Filtrar resultados",
|
||||
"Explore Room State": "Explorar Estado de la Sala",
|
||||
"Edit": "Editar",
|
||||
"Explore Account Data": "Explorar Datos de la Cuenta",
|
||||
"Toolbox": "Caja de Herramientas",
|
||||
"Developer Tools": "Herramientas de Desarrollo",
|
||||
"Please install <chromeLink>Chrome</chromeLink> or <firefoxLink>Firefox</firefoxLink> for the best experience.": "Por favor instala <chromeLink>Chrome</chromeLink> o <firefoxLink>Firefox</firefoxLink> para una experiencia óptima.",
|
||||
"<safariLink>Safari</safariLink> and <operaLink>Opera</operaLink> work too.": "<safariLink>Safari</safariLink> y <operaLink>Opera</operaLink> también funcionan.",
|
||||
"Register": "Registro",
|
||||
"Rooms": "Salas",
|
||||
"Invite to this community": "Invitar a esta comunidad",
|
||||
"Add rooms to this community": "Agregar salas a esta comunidad",
|
||||
"Unpin Message": "Desmarcar Mensaje",
|
||||
"Pin Message": "Marcar Mensaje",
|
||||
"Reply": "Responder",
|
||||
"%(count)s Members|other": "%(count)s miembros",
|
||||
"%(count)s Members|one": "%(count)s miembro",
|
||||
"Online": "Conectado",
|
||||
"View Community": "Ver la comunidad"
|
||||
}
|
||||
|
||||
229
src/i18n/strings/eu.json
Normal file
229
src/i18n/strings/eu.json
Normal file
@@ -0,0 +1,229 @@
|
||||
{
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s %(browserName)s bidez %(osName)s ostalarian",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> eta <a href=\"http://opera.com\">Opera</a> badabiltza ere.",
|
||||
"A new version of Riot is available.": "Riot bertsio berri bat dago eskuragarri.",
|
||||
"Add an email address above to configure email notifications": "Gehitu e-mail helbide bat goian e-mail bidezko jakinarazpenak konfiguratzeko",
|
||||
"Advanced notification settings": "Jakinarazpen aurreratuen ezarpenak",
|
||||
"All messages": "Mezu guztiak",
|
||||
"All messages (noisy)": "Mezu guztiak (ozen)",
|
||||
"All Rooms": "Gela guztiak",
|
||||
"All notifications are currently disabled for all targets.": "Une honetan jakinarazpen guztiak helburu guztietarako desgaituta daude.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Errore bat gertatu da zure e-mail bidezko jakinarazpenen hobespenak gordetzean.",
|
||||
"Call invitation": "Dei gonbidapena",
|
||||
"Cancel": "Utzi",
|
||||
"Cancel Sending": "Utzi bidaltzeari",
|
||||
"Can't update user notification settings": "Ezin dira erabiltzailearen jakinarazpenen ezarpenak eguneratu",
|
||||
"Changelog": "Aldaketa-egunkaria",
|
||||
"Close": "Itxi",
|
||||
"Collapse panel": "Tolestu panela",
|
||||
"Collecting app version information": "Aplikazioaren bertsio-informazioa biltzen",
|
||||
"Collecting logs": "Egunkariak biltzen",
|
||||
"Couldn't find a matching Matrix room": "Ezin izan da bat datorren Matrix gela bat aurkitu",
|
||||
"Custom Server Options": "Zerbitzari pertsonalizatuaren aukerak",
|
||||
"customServer_text": "Zerbitzari pertsonalizatuaren aukerak erabili ditzakezu beste hasiera zerbitzari baten URLa jarrita beste Matrix zerbitzarietan saioa hasteko.<br/>Honek oraingo Matrix kontuarekin Riot beste hasiera zerbitzari batean erabiltzea ahalbidetzen dizu.<br/><br/>Identitate zerbitzari pertsonalizatu bat jar dezakezu ere baina ezin izango dituzu erabiltzaileak bere e-mail helbidea erabilita gonbidatu, edo besteek zu gonbidatu zure e-mail helbidea erabilita.",
|
||||
"delete the alias.": "ezabatu ezizena.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Ezabatu gelaren %(alias)s ezizena eta kendu %(name)s direktoriotik?",
|
||||
"Describe your problem here.": "Azaldu zure arazoa hemen.",
|
||||
"Direct Chat": "Txat zuzena",
|
||||
"Directory": "Direktorioa",
|
||||
"Dismiss": "Baztertu",
|
||||
"Download this file": "Deskargatu fitxategi hau",
|
||||
"Enable audible notifications in web client": "Gaitu jakinarazpen entzungarriak web bezeroan",
|
||||
"Enable desktop notifications": "Gaitu mahaigaineko jakinarazpenak",
|
||||
"Enable email notifications": "Gaitu e-mail bidezko jakinarazpenak",
|
||||
"Enable notifications for this account": "Gaitu jakinarazpenak kontu honetarako",
|
||||
"Enable them now": "Gaitu orain",
|
||||
"Enter keywords separated by a comma:": "Idatzi hitz gakoak koma bidez banatuta:",
|
||||
"Error": "Errorea",
|
||||
"Error saving email notification preferences": "Errorea e-mail jakinarazpenen hobespenak gordetzean",
|
||||
"#example": "#adibidea",
|
||||
"Expand panel": "Hedatu panela",
|
||||
"Failed to add tag %(tagName)s to room": "Huts egin du %(tagName)s etiketa gelara gehitzean",
|
||||
"Failed to change settings": "Huts egin du ezarpenak aldatzean",
|
||||
"Failed to forget room %(errCode)s": "Huts egin du %(errCode)s gela ahaztean",
|
||||
"Failed to update keywords": "Huts egin du hitz gakoak eguneratzean",
|
||||
"Failed to get protocol list from Home Server": "Huts egin du protokoloen zerrenda hasiera zerbitzaritik jasotzean",
|
||||
"Failed to get public room list": "Huts egin du gela publikoen zerrenda jasotzean",
|
||||
"Failed to remove tag %(tagName)s from room": "Huts egin du %(tagName)s etiketa gelatik kentzean",
|
||||
"Failed to send report: ": "Huts egin du txostena bidaltzean: ",
|
||||
"Failed to set direct chat tag": "Huts egin du txat zuzenarenaren etiketa jartzean",
|
||||
"Failed to set Direct Message status of room": "Huts egin du Mezu Zuzena egoera gelan ezartzean",
|
||||
"Favourite": "Gogokoa",
|
||||
"Fetching third party location failed": "Huts egin du hirugarrengoen kokalekua eskuratzean",
|
||||
"Files": "Fitxategiak",
|
||||
"Filter room names": "Iragazi gelen izenak",
|
||||
"Forget": "Ahaztu",
|
||||
"Forward Message": "Birbidali mezua",
|
||||
"Guests can join": "Bisitariak elkartu daitezke",
|
||||
"Hide panel": "Ezkutatu panela",
|
||||
"(HTTP status %(httpStatus)s)": "(HTTP egoera %(httpStatus)s)",
|
||||
"I understand the risks and wish to continue": "Arriskua ulertzen dut eta jarraitu nahi dut",
|
||||
"Invite to this room": "Gonbidatu gela honetara",
|
||||
"Keywords": "Hitz gakoak",
|
||||
"Leave": "Atera",
|
||||
"Login": "Hasi saioa",
|
||||
"Loading bug report module": "Arazte-txosten modulua kargatzen",
|
||||
"Low Priority": "Lehentasun baxua",
|
||||
"Members": "Kideak",
|
||||
"Mentions only": "Aipamenak besterik ez",
|
||||
"Messages containing my display name": "Nire pantaila-izena duten mezuak",
|
||||
"Messages containing <span>keywords</span>": "<span>Hitz gakoak</span> dituzten mezuak",
|
||||
"Messages containing my user name": "Nire erabiltzaile-izena duten mezuak",
|
||||
"Messages in group chats": "Talde txatetako mezuak",
|
||||
"Messages in one-to-one chats": "Biren arteko txatetako mezuak",
|
||||
"Messages sent by bot": "Botak bidalitako mezuak",
|
||||
"more": "gehiago",
|
||||
"Mute": "Mututu",
|
||||
"No rooms to show": "Ez dago gelarik erakusteko",
|
||||
"Noisy": "Zaratatsua",
|
||||
"Notification targets": "Jakinarazpenen helburuak",
|
||||
"Notifications": "Jakinarazpenak",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Hitz gako hauen jakinarazpenak hemen bistaratu ezin daitezkeen arauak jarraitzen dituzte:",
|
||||
"Notify for all other messages/rooms": "Jakinarazi beste mezu/gela guztiak",
|
||||
"Notify me for anything else": "Jakinarazi beste edozer",
|
||||
"Off": "Ez",
|
||||
"On": "Bai",
|
||||
"Operation failed": "Eragiketak huts egin du",
|
||||
"Permalink": "Esteka iraunkorra",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Deskribatu akatsa. Zer egin duzu? Zer gertatuko zela uste zenuen? Zer gertatu da?",
|
||||
"Please describe the bug and/or send logs.": "Deskribatu akatsa eta/edo bidali egunkariak.",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Instalatu <a href=\"https://www.google.com/chrome\">Chrome</a> edo <a href=\"https://getfirefox.com\">Firefox</a> esperientzia on baterako.",
|
||||
"powered by Matrix": "Matrix mamian",
|
||||
"Quote": "Aipua",
|
||||
"Reject": "Baztertu",
|
||||
"Remove %(name)s from the directory?": "Kendu %(name)s direktoriotik?",
|
||||
"Remove": "Kendu",
|
||||
"remove %(name)s from the directory.": "kendu %(name)s direktoriotik.",
|
||||
"Remove from Directory": "Kendu direktoriotik",
|
||||
"Report a bug": "Eman akats baten berri",
|
||||
"Resend": "Birbidali",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop %(platformName)s plataforman",
|
||||
"Riot does not know how to join a room on this network": "Riotek ez daki nola elkartu gela batetara sare honetan",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riotek ez du euskarririk mugikorrentzako webean. Instalatu aplikazioa?",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riotek nabigatzaileen ezaugarri aurreratu ugari erabiltzen ditu, hauetako batzuk ez daude erabilgarri edo esperimentalak dira zure oraingo nabigatzailean.",
|
||||
"Room not found": "Ez da gela aurkitu",
|
||||
"Search": "Bilatu",
|
||||
"Search…": "Bilatu…",
|
||||
"Search for a room": "Bilatu gela bat",
|
||||
"Send": "Bidali",
|
||||
"Send logs": "Bidali egunkariak",
|
||||
"Source URL": "Iturriaren URLa",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Zure nabigatzaileak <b>ez</b> du Riot erabiltzeko gaitasunik.",
|
||||
"The Home Server may be too old to support third party networks": "Hasiera zerbitzaria zaharregia izan daiteke hirugarrengoen sarean onartzeko",
|
||||
"There are advanced notifications which are not shown here": "Hemen erakusten ez diren jakinarazpen aurreratuak daude",
|
||||
"The server may be unavailable or overloaded": "Zerbitzaria eskuraezin edo gainezka egon daiteke",
|
||||
"This Room": "Gela hau",
|
||||
"Unable to fetch notification target list": "Ezin izan da jakinarazpen helburuen zerrenda eskuratu",
|
||||
"Unable to join network": "Ezin izan da sarera elkartu",
|
||||
"Unable to look up room ID from server": "Ezin izan da gelaren IDa zerbitzarian bilatu",
|
||||
"Unavailable": "Eskuraezina",
|
||||
"Unhide Preview": "Ez ezkutatu aurrebista",
|
||||
"Unknown device": "Gailu ezezaguna",
|
||||
"unknown error code": "errore kode ezezaguna",
|
||||
"Unnamed room": "Izen gabeko gela",
|
||||
"Update": "Eguneratu",
|
||||
"Uploaded on %(date)s by %(user)s": "%(user)s erabiltzaileak %(date)s (e)an igota",
|
||||
"Uploading report": "Igoera txostena",
|
||||
"View Decrypted Source": "Ikusi deszifratutako iturria",
|
||||
"View Source": "Ikusi iturria",
|
||||
"What's New": "Zer dago berri",
|
||||
"What's new?": "Zer dago berri?",
|
||||
"Waiting for response from server": "Zerbitzariaren erantzunaren zain",
|
||||
"When I'm invited to a room": "Gela batetara gonbidatzen nautenean",
|
||||
"World readable": "Munduak irakurgarria",
|
||||
"You cannot delete this image. (%(code)s)": "Ezin duzu irudi hau ezabatu. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "Ezin duzu mezu hau ezabatu. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "Ez dituzu mahaigaineko jakinarazpenak jasotzen",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Agian Riot ez beste bezero batean konfiguratu dituzu. Ezin dituzu Riot bidez doitu, baina aplikagarriak dira",
|
||||
"Sunday": "Igandea",
|
||||
"Monday": "Astelehena",
|
||||
"Tuesday": "Asteartea",
|
||||
"Wednesday": "Asteazkena",
|
||||
"Thursday": "Osteguna",
|
||||
"Friday": "Ostirala",
|
||||
"Saturday": "Larunbata",
|
||||
"Today": "Gaur",
|
||||
"Yesterday": "Atzo",
|
||||
"OK": "Ados",
|
||||
"Warning": "Abisua",
|
||||
"Checking for an update...": "Eguneraketarik dagoen egiaztatzen...",
|
||||
"Error encountered (%(errorDetail)s).": "Errorea aurkitu da (%(errorDetail)s).",
|
||||
"No update available.": "Ez dago eguneraketarik eskuragarri.",
|
||||
"Downloading update...": "Eguneraketa deskargatzen...",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "HTTPS erabili behar duzu sekretuak partekatzeko dei bat ezartzeko.",
|
||||
"Welcome to Riot.im": "Ongi etorri Riot.im mezularitzara",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Deszentralizatutako eta zifratutako txat eta elkarlana [matrix] sareari esker",
|
||||
"Search the room directory": "Bilatu gelen direktorioa",
|
||||
"Chat with Riot Bot": "Txateatu Riot botarekin",
|
||||
"Get started with some tips from Riot Bot!": "Hasi Riot botaren aholku batzuekin!",
|
||||
"General discussion about Matrix and Riot": "Matrix eta Riot-i buruzko eztabaida orokorra",
|
||||
"Discussion of all things Matrix!": "Matrix-ekin zerikusia duen guztiari buruzko eztabaida!",
|
||||
"Riot/Web & Desktop chat": "Riot/Web eta mahaigaineko txata",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS eta matrix-ios-sdk txata",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android eta matrix-android-sdk txata",
|
||||
"Matrix technical discussions": "Matrix buruzko eztabaida teknikoak",
|
||||
"Running Matrix services": "Matrix zerbitzuak exekutatzea",
|
||||
"Community-run support for Synapse": "Synapse-rako laguntza komunitatea",
|
||||
"Admin support for Dendrite": "Dendrite kudeatzaileentzako laguntza",
|
||||
"Announcements about Synapse releases": "Synapse bertsio berrien iragarkiak",
|
||||
"Support for those using and running matrix-appservice-irc": "matrix-appservice-irc exekutatu edo erabiltzen dutenentzako laguntza",
|
||||
"Building services on Matrix": "Matrix-en gaineko zerbitzuak eraikitzea",
|
||||
"Support for those using the Matrix spec": "Matrix espezifikazioa darabilenentzako laguntza",
|
||||
"Design and implementation of E2E in Matrix": "Matrix-en E2E diseinu eta inplementazioa",
|
||||
"Implementing VR services with Matrix": "VR zerbitzuak inplementatzea Matrix erabilita",
|
||||
"Implementing VoIP services with Matrix": "VoIP zerbitzuak inplementatzea Matrix erabilita",
|
||||
"Discussion of the Identity Service API": "Identitate zerbitzuaren APIari buruzko eztabaida",
|
||||
"Support for those using, running and writing other bridges": "Bestelako zubiak erabili, exekutatu eta idazten dituztenentzako laguntza",
|
||||
"Contributing code to Matrix and Riot": "Kodearekin lagundu Matrix eta Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Riot/web garapen taldearen txata",
|
||||
"Dev chat for the Dendrite dev team": "Dendrite garapen taldearen txata",
|
||||
"Co-ordination for Riot/Web translators": "Riot/Web itzultzaileen arteko koordinazioa",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Badauden sareetara lotutako gela ugari daude Matrixen (Slack, IRC, Gitter eta abar), baita independienteak. Begiratu direktorioa!",
|
||||
"Failed to change password. Is your password correct?": "Pasahitza aldatzean huts egin du. Zuzena da pasahitza?",
|
||||
"You have successfully set a password!": "Ongi ezarri duzu pasahitza!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Zure kontura itzuli zaitezke beste gailuetan saioa amaitu eta berriro hastean.",
|
||||
"Continue": "Jarraitu",
|
||||
"Please set a password!": "Ezarri pasahitza mesedez!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Honek zure kontura itzultzea ahalbidetuko dizu, beste gailuetan saioa amaitu eta berriro hasi eta gero.",
|
||||
"You have successfully set a password and an email address!": "Ondo ezarri dituzu pasahitza eta e-mail helbidea!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Gogoratu, e-mail helbide bat ezarri dezakezu erabiltzaile-ezarpenetan iritzia aldatzen baduzu.",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Etorkizunean kontura itzuli ahal izateko <u>pasahitz bat ezarri</u> behar duzu",
|
||||
"Set Password": "Ezarri pasahitza",
|
||||
"Couldn't load home page": "Ezin izan da hasiera orria kargatu",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Arazoak diagnostikatzeko, bezero honen egunkariak bidaliko dira arazte-txosten honekin. Testua besterik ez baduzu bidali nahi, desmarkatu:",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Zure oraingo nabigatzailearekin aplikazioaren itxura eta portaera guztiz okerra izan daiteke, eta funtzio batzuk ez dira ibiliko. Hala ere aurrera jarraitu dezakezu saiatu nahi baduzu, baina zure erantzukizunaren menpe geratzen dira aurkitu ditzakezun arazoak!",
|
||||
"Bug report sent": "Arazte-txostena bidali da",
|
||||
"Thank you!": "Eskerrik asko!",
|
||||
"Show message in desktop notification": "Erakutsi mezua mahaigaineko jakinarazpenean",
|
||||
"Appear Offline": "Agertu deskonektatuta",
|
||||
"Away": "Teklatutik at",
|
||||
"Back": "Atzera",
|
||||
"Send Custom Event": "Bidali gertaera pertsonalizatua",
|
||||
"You must specify an event type!": "Gertaera mota bat zehaztu behar duzu!",
|
||||
"Event sent!": "Gertaera bidalita!",
|
||||
"Failed to send custom event.": "Huts egin du gertaera pertsonalizatua bidaltzean.",
|
||||
"Event Type": "Gertaera mota",
|
||||
"State Key": "Egoera gakoa",
|
||||
"Event Content": "Gertaeraren edukia",
|
||||
"Send Account Data": "Bidali kontuaren datuak",
|
||||
"Filter results": "Iragazi emaitzak",
|
||||
"Explore Room State": "Miatu gelaren egoera",
|
||||
"Edit": "Editatu",
|
||||
"Explore Account Data": "Miatu kantuaren datuak",
|
||||
"Toolbox": "Tresna-kutxa",
|
||||
"Developer Tools": "Garatzaile-tresnak",
|
||||
"Unpin Message": "Desfinkatu mezua",
|
||||
"Pin Message": "Finkatu mezua",
|
||||
"Please install <chromeLink>Chrome</chromeLink> or <firefoxLink>Firefox</firefoxLink> for the best experience.": "Instalatu <chromeLink>Chrome</chromeLink> edo <firefoxLink>Firefox</firefoxLink> esperientzia onena izateko.",
|
||||
"<safariLink>Safari</safariLink> and <operaLink>Opera</operaLink> work too.": "<safariLink>Safari</safariLink> eta <operaLink>Opera</operaLink> badabiltza ere.",
|
||||
"Register": "Eman izena",
|
||||
"Rooms": "Gelak",
|
||||
"Invite to this community": "Gonbidatu komunitate honetara",
|
||||
"Add rooms to this community": "Gehitu gelak komunitate honetara",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Zerbitzari pertsonalizatuaren aukerak erabili ditzakezu beste Matrix zerbitzarietan saioa hasteko, han beste hasiera-zerbitzari baten URLa sartuz.<br/>Horrela Riot aurretik duzun kontu batekin erabili dezakezu beste hasiera-zerbitzari batean.<br/><br/>Identitate-zerbitzari pertsonalizatu bat ezarri dezakezu ere, baina orduan ezin izango dituzu erabiltzaileak e-mail helbidea erabiliz gonbidatu, edo ezin izan izango zaituzte zu e-mail helbidea erabiliz gonbidatu.",
|
||||
"Reply": "Erantzun",
|
||||
"%(count)s Members|other": "%(count)s kide",
|
||||
"%(count)s Members|one": "Kide %(count)s",
|
||||
"Online": "Konektatuta",
|
||||
"View Community": "Ikusi komunitatea"
|
||||
}
|
||||
190
src/i18n/strings/fa.json
Normal file
190
src/i18n/strings/fa.json
Normal file
@@ -0,0 +1,190 @@
|
||||
{
|
||||
"A new version of Riot is available.": "نسخهی جدید از رایوت موجود است.",
|
||||
"All messages": "همهی پیامها",
|
||||
"All messages (noisy)": "همهی پیامها(بلند)",
|
||||
"All Rooms": "همهی گپها",
|
||||
"Cancel Sending": "فرستادن را لغو کن",
|
||||
"Changelog": "تغییراتِ بهوجودآمده",
|
||||
"Close": "بستن",
|
||||
"Collecting app version information": "درحال جمعآوری اطلاعات نسخهی برنامه",
|
||||
"Couldn't find a matching Matrix room": "گپگاه مورد نظر در ماتریکس یافت نشد",
|
||||
"Direct Chat": "چت مستقیم",
|
||||
"Directory": "فهرست گپگاهها",
|
||||
"Download this file": "بارگیری کن",
|
||||
"Enable audible notifications in web client": "آگاهسازی صدادار را در کارگزار وب فعال کن",
|
||||
"Enable email notifications": "آگاهسازی با رایانامه را فعال کن",
|
||||
"Enable notifications for this account": "آگاه سازی با رایانامه را برای این اکانت فعال کن",
|
||||
"Enable them now": "همین حالا فعالشان کن",
|
||||
"Enter keywords separated by a comma:": "کلیدواژهها را وارد کنید؛ از کاما(,) برای جدا کردن آنها از یکدیگر استفاده کنید:",
|
||||
"Error": "خطا",
|
||||
"Error saving email notification preferences": "خطا در ذخیرهسازی ترجیحات آگاهسازی با ایمیل",
|
||||
"#example": "#نمونه",
|
||||
"Expand panel": "پنل را بگشا",
|
||||
"Failed to add tag %(tagName)s to room": "در افزودن تگ %(tagName)s موفقیتآمیز نبود",
|
||||
"Failed to change settings": "تغییر تنظیمات موفقیتآمیز نبود",
|
||||
"Failed to forget room %(errCode)s": "فراموش کردن گپگاه %(errCode)s موفقیتآمیز نبود",
|
||||
"Failed to update keywords": "بهروزرسانی کلیدواژهها موفقیتآمیز نبود",
|
||||
"Failed to get protocol list from Home Server": "دریافت لیست پروتکلها از کارگزار مبدا موفقیتآمیز نبود",
|
||||
"Failed to get public room list": "گرفتن لیست گپگاههای عمومی موفقیتآمیز نبود",
|
||||
"Failed to remove tag %(tagName)s from room": "خطا در حذف کلیدواژهی %(tagName)s از گپ",
|
||||
"Failed to send report: ": "فرستادن گزارش موفقیتآمیز نبود: ",
|
||||
"Favourite": "علاقهمندیها",
|
||||
"Files": "فایلها",
|
||||
"Forget": "فراموش کن",
|
||||
"Forward Message": "هدایت پیام",
|
||||
"Guests can join": "میهمانها میتوانند بپیوندند",
|
||||
"Hide panel": "پنل را پنهان کن",
|
||||
"I understand the risks and wish to continue": "از خطرات این کار آگاهم و مایلم که ادامه بدهم",
|
||||
"Invite to this room": "دعوت به این گپ",
|
||||
"Keywords": "کلیدواژهها",
|
||||
"Leave": "خروج",
|
||||
"Login": "ورود",
|
||||
"Loading bug report module": "درحال بارگذاری و اجرای ماژولِ گزارش باگ",
|
||||
"Low Priority": "کم اهمیت",
|
||||
"Members": "اعضا",
|
||||
"Mentions only": "فقط نامبردنها",
|
||||
"Please set a password!": "لطفا یک پسورد اختیار کنید!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "این به شما اجازه خواهد داد که پس از خروج به اکانت خود بازگردید و از سایر دستگاهها وارد شوید.",
|
||||
"You have successfully set a password and an email address!": "تخصیص ایمیل و پسوردتان با موفقیت انجام شد!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "به خاطر داشته باشید که اگر نظرتان عوض شد میتوانید از بخش تنظیمات یک ایمیل را به اکانتتان متصل کنید.",
|
||||
"To return to your account in future you need to <u>set a password</u>": "برای بازگشتِ دوباره به اکانتان در آینده نیاز به <u> ثبت یک پسورد </u> دارید",
|
||||
"Set Password": "پسوردتان را انتخاب کنید",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">سافاری</a> و <a href=\"http://opera.com\">اپرا</a> نیز کار میکنند.",
|
||||
"Add an email address above to configure email notifications": "آدرس ایمیلتان را به بالا بیفزایید تا بتوانید آگاهسازی با ایمیل را مدیریت کنید",
|
||||
"Advanced notification settings": "تنظیمات پیشرفته برای آگاهسازیها",
|
||||
"Continue": "ادامه",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "بسیاری از گپگاههای موجود در فهرستِ گپها به شبکههای موجود(اسلک، آیآرسی، گلیتر و...) متصل و یا مستقلاند؛ به آنها نگاهی بیندازید!",
|
||||
"Failed to change password. Is your password correct?": "خطا در تغییر گذرواژه. آیا از درستی گذرواژهتان اطمینان دارید؟",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "اکنون میتوانید پس از خروج به اکانتتان بازگردید و با دستگاههای دیگری وارد شوید.",
|
||||
"Co-ordination for Riot/Web translators": "هماهنگی برای مترجمان رایوت/وب",
|
||||
"Contributing code to Matrix and Riot": "کمک به برنامهنویسی در ماتریکس و رایوت",
|
||||
"(HTTP status %(httpStatus)s)": "(HTTP وضعیت %(httpStatus)s)",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "برای بهبود و رفع مشکلات، گزارشهایی از این کارخواه به عنوان مستنداتی از یک باگ ارسال خوهند شد. اگر ترجیح میدهید که فقط متن بالا ارسال شود لطفا تیک را بردارید",
|
||||
"Messages containing <span>keywords</span>": "پیامهای دارای <span> این کلیدواژهها </span>",
|
||||
"Messages containing my user name": "پیامهای شامل نامِ کاربری من",
|
||||
"Messages in group chats": "پیامهای درون چتهای گروهی",
|
||||
"Messages in one-to-one chats": "پیامهای درون چتهای یکبهیک",
|
||||
"Messages sent by bot": "پیامهای ارسال شده توسط ربات",
|
||||
"more": "بیشتر",
|
||||
"Mute": "سکوت",
|
||||
"No rooms to show": "هیچ گپی برای نشان دادن موجود نیست",
|
||||
"Noisy": "پرسروصدا",
|
||||
"Notification targets": "هدفهای آگاهسازی",
|
||||
"Notifications": "آگاهسازیها",
|
||||
"Notify me for anything else": "مرا برای هرچیز دیگری باخبر کن",
|
||||
"Off": "خاموش",
|
||||
"On": "روشن",
|
||||
"Operation failed": "عملیات شکست خورد",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "لطفا برای بهترین تجربهی کاربری از<a href=\"https://www.google.com/chrome\">کروم</a> یا <a href=\"https://getfirefox.com\">فایرفاکس</a> استفاده کنید",
|
||||
"powered by Matrix": "قدرتیافته از ماتریکس",
|
||||
"Quote": "گفتآورد",
|
||||
"Reject": "پس زدن",
|
||||
"Remove": "حذف کن",
|
||||
"Remove %(name)s from the directory?": "آیا مطمئنید میخواهید %(name)s را از فهرست گپها حذف کنید؟",
|
||||
"remove %(name)s from the directory.": "%(name)s را از فهرست گپها حذف کن",
|
||||
"Remove from Directory": "از فهرستِ گپها حذف کن",
|
||||
"Report a bug": "باگها را گزارش کنید",
|
||||
"Resend": "بازفرست",
|
||||
"Riot Desktop on %(platformName)s": "رایوت دسکتاپ بر %(platformName)s",
|
||||
"Riot does not know how to join a room on this network": "رایوت از چگونگی ورود به یک گپ در این شبکه اطلاعی ندارد",
|
||||
"Riot is not supported on mobile web. Install the app?": "رایوت در موبایلها پشتیبانی نمیشود؛ تمایلی دارید که اپ را نصب کنید؟",
|
||||
"Room not found": "گپ یافت نشد",
|
||||
"Search": "جستجو",
|
||||
"Search…": "جستجو…",
|
||||
"Search for a room": "جستجوی برای یک گپ",
|
||||
"Send": "ارسال",
|
||||
"Send logs": "ارسال گزارشها",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "متاسفانه مرورگر شما <b>نمیتواند</b> رایوت را اجرا کند.",
|
||||
"There are advanced notifications which are not shown here": "آگاهسازیهای پیشرفتهای هستند که در اینجا نشان داده نشدهاند",
|
||||
"The server may be unavailable or overloaded": "این سرور ممکن است ناموجود یا بسیار شلوغ باشد",
|
||||
"This Room": "این گپ",
|
||||
"Unable to join network": "خطا در ورود به شبکه",
|
||||
"Unavailable": "غیرقابلدسترسی",
|
||||
"Unknown device": "دستگاه ناشناخته",
|
||||
"unknown error code": "کد خطای ناشناخته",
|
||||
"Unnamed room": "گپ نامگذاری نشده",
|
||||
"Update": "بهروزرسانی",
|
||||
"Uploading report": "در حال بارگذاری گزارش",
|
||||
"Downloading update...": "در حال بارگیریِ بهروزرسانی...",
|
||||
"Cancel": "لغو",
|
||||
"Call invitation": "دعوت به تماس",
|
||||
"An error occurred whilst saving your email notification preferences.": "خطایی در حین ذخیرهی ترجیجات شما دربارهی رایانامه رخ داد.",
|
||||
"Describe your problem here.": "مشکلتان را در اینجا توضیح دهید.",
|
||||
"Enable desktop notifications": "آگاهسازی دسکتاپ را فعال کن",
|
||||
"Permalink": "پایاپیوند",
|
||||
"Please describe the bug and/or send logs.": "لطفا باگ را توصیف کنید و یا گزارشها را بفرستید",
|
||||
"Unhide Preview": "پیشنمایش را نمایان کن",
|
||||
"View Source": "دیدن منبع",
|
||||
"What's New": "تازهها",
|
||||
"World readable": "خواندن جهانی",
|
||||
"You cannot delete this image. (%(code)s)": "شما نمیتوانید این تصویر را پاک کنید. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "شما نمیتوانید این پیام را پاک کنید. (%(code)s)",
|
||||
"Sunday": "یکشنبه",
|
||||
"Monday": "دوشنبه",
|
||||
"Tuesday": "سهشنبه",
|
||||
"Wednesday": "چهارشنبه",
|
||||
"Thursday": "پنجشنبه",
|
||||
"Friday": "آدینه",
|
||||
"Saturday": "شنبه",
|
||||
"Today": "امروز",
|
||||
"Yesterday": "دیروز",
|
||||
"OK": "باشه",
|
||||
"Warning": "هشدار",
|
||||
"No update available.": "هیچ به روزرسانی جدیدی موجود نیست.",
|
||||
"Welcome to Riot.im": "به Riot.im خوشآمدید",
|
||||
"Chat with Riot Bot": "با رایوتبات چت کنید",
|
||||
"Get started with some tips from Riot Bot!": "با کمی راهنمایی از رایوتبات شروع کنید!",
|
||||
"General discussion about Matrix and Riot": "بحثهای کلی درمورد ماتریکس و رایوت",
|
||||
"Dev chat for the Dendrite dev team": "چت توسعهدهندگان برای تیم Dendrite",
|
||||
"Dev chat for the Riot/Web dev team": "چت توسعهدهندگان برای تیم رایوت/وب",
|
||||
"Support for those using, running and writing other bridges": "پشتیبانی برای آنان که یک پل را استفاده اجرا کرده و یا مینویسند",
|
||||
"Admin support for Dendrite": "پشتیبانی ادمین برای Dendrite",
|
||||
"Community-run support for Synapse": "پشتیبانی سیناپس ادارهشده توسط جامعهی کاربری",
|
||||
"Matrix technical discussions": "بحثهای فنی دربارهی ماتریکس",
|
||||
"Search the room directory": "در فهرست گپها جستجو کنید",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "چت مرکزگریز و رمزنگاریشده & ارائهای از ماتریکس",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s از طریق %(browserName)s بر %(osName)s",
|
||||
"All notifications are currently disabled for all targets.": "همهی آگاهسازیها برای تمام هدفها غیرفعالاند.",
|
||||
"Can't update user notification settings": "امکان بهروزرسانی تنظیمات آگاهسازی کاربر وجود ندارد",
|
||||
"Collecting logs": "درحال جمعآوری گزارشها",
|
||||
"Custom Server Options": "تنظیمات سفارشی برای سرور",
|
||||
"delete the alias.": "نام مستعار را پاک کن.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "آیا مطمئنید که میخواهید نام مستعار گپ %(alias)s را پاک و %(name)s را از فهرست حذف کنید؟",
|
||||
"Dismiss": "نادیده بگیر",
|
||||
"Failed to set direct chat tag": "تنظیم تگ برای چت مستقیم موفقیتآمیز نبود",
|
||||
"Filter room names": "جستجو در گپها",
|
||||
"Notify for all other messages/rooms": "برای همهی پیامها/گپهای دیگر آگاهسازی کن",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "لطفا باگ را دقیقا تشریح کنید. چه کار کردید؟ انتظار داشتید چه اتفاقی بیفتد؟ دقیقا چه اتفاقی افتاد؟",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "رایوت از بسیاری از ویژگیهای پیشرفته در مروگرها استفاده میکند، برخی از این ویژگیها در مرورگر کنونی شما موجود نیستند و یا در حالت آزمایشی قرار دارند.",
|
||||
"Source URL": "آدرس مبدا",
|
||||
"Unable to fetch notification target list": "ناتوانی در تطبیق لیست آگاهسازیهای هدف",
|
||||
"Uploaded on %(date)s by %(user)s": "آپلود شده در تاریخ %(date)s توسط %(user)s",
|
||||
"View Decrypted Source": "دیدن منبع رمزگشایی شده",
|
||||
"Waiting for response from server": "در انتظار پاسخی از سمت سرور",
|
||||
"When I'm invited to a room": "وقتی من به گپی دعوت میشوم",
|
||||
"You are not receiving desktop notifications": "شما آگاهسازیهای دسکتاپ را دریافت نمیکنید",
|
||||
"Checking for an update...": "درحال بررسی بهروزرسانیها...",
|
||||
"Error encountered (%(errorDetail)s).": "خطای رخ داده (%(errorDetail)s).",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "شما باید از ارتباط امن HTTPS برای بهراهاندازی یک چتِ شامل به اشتراکگذاری صفحهی کامیپوتر استفاده کنید.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "با مرورگر کنونی شما، ظاهر و حس استفاده از برنامه ممکن است کاملا اشتباه باشد و برخی یا همهی ویژگیها ممکن است کار نکنند. میتوانید به استفاده ادامه دهید اما مسئولیت هر مشکلی که به آن بربخورید بر عهدهی خودتان است!",
|
||||
"Discussion of all things Matrix!": "بحث درمورد تمام چیزهای مربوط به ماتریکس!",
|
||||
"Riot/Web & Desktop chat": "رایوت/وب & چت دسکتاپ",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "رایوت/آیاواس & چت در مورد matrix-ios-sdk",
|
||||
"Riot/Android & matrix-android-sdk chat": "رایوت/اندروید & چت در مورد matrix-android-sdk",
|
||||
"Running Matrix services": "اجرای سرویسهای ماتریکسی",
|
||||
"Announcements about Synapse releases": "اطلاعیهها دربارهی نسخهها و انتشار سیناپس",
|
||||
"Support for those using and running matrix-appservice-irc": "پشتیبانی برای کسانی که matrix-appservice-irc را اجرا و استفاده میکنند",
|
||||
"Design and implementation of E2E in Matrix": "طراحی و پیادهسازی رمزگذاری E2E در ماتریکس",
|
||||
"Implementing VR services with Matrix": "پیادهسازی سرویسهای VR با ماتریکس",
|
||||
"Implementing VoIP services with Matrix": "پیادهسازی سرویسهای VoIP با ماتریکس",
|
||||
"Discussion of the Identity Service API": "بحث درمورد API سرویس هویت",
|
||||
"You have successfully set a password!": "شما با موفقیت رمزتان را انتخاب کردید!",
|
||||
"Collapse panel": "پنل را ببند",
|
||||
"Failed to set Direct Message status of room": "تنظیم حالت پیام مستقیم برای گپ موفقیتآمیز نبود",
|
||||
"Fetching third party location failed": "تطبیق اطلاعات از منابع دسته سوم با شکست مواجه شد",
|
||||
"Messages containing my display name": "پیامهای حاوی نماینامِ من",
|
||||
"What's new?": "تازهها",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "ممکن است شما این تنظیمات را در کارخواهی به جز رایوت اعمال کرده باشید. شما نمیتوانید انها را تغییر دهید اما آنها همچنان تاثیر خود را دارند",
|
||||
"Building services on Matrix": "ساخت سرویس بر روی ماتریکس",
|
||||
"Support for those using the Matrix spec": "پشتیبانی برای آنان که از مستندات ماتریکس استفاده میکنند"
|
||||
}
|
||||
@@ -1,3 +1,229 @@
|
||||
{
|
||||
"Sunday": "Sunnuntai"
|
||||
"Sunday": "Sunnuntai",
|
||||
"A new version of Riot is available.": "Uusi Riot-versio on saatavilla.",
|
||||
"Add an email address above to configure email notifications": "Lisää sähköpostiosoite yllä saadaksesi ilmoituksia sähköpostiisi",
|
||||
"Advanced notification settings": "Lisäasetukset ilmoituksille",
|
||||
"All messages": "Kaikki viestit",
|
||||
"All messages (noisy)": "Kaikki viestit (äänekkäästi)",
|
||||
"All Rooms": "Kaikki huoneet",
|
||||
"All notifications are currently disabled for all targets.": "Kaikki ilmoitukset on kytketty pois kaikilta kohteilta.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Sähköposti-ilmoitusasetuksia tallettaessa tapahtui virhe.",
|
||||
"Call invitation": "Puhelukutsu",
|
||||
"Cancel": "Peruuta",
|
||||
"Cancel Sending": "Peruuta lähetys",
|
||||
"Can't update user notification settings": "Käyttäjän ilmoitusasetusten päivittäminen epäonnistui",
|
||||
"Changelog": "Muutosloki",
|
||||
"Close": "Sulje",
|
||||
"Couldn't find a matching Matrix room": "Vastaavaa Matrix-huonetta ei löytynyt",
|
||||
"delete the alias.": "poista alias.",
|
||||
"Describe your problem here.": "Kuvaa ongelmasi tähän.",
|
||||
"Direct Chat": "Suora viestittely",
|
||||
"Directory": "Hakemisto",
|
||||
"Dismiss": "Hylkää",
|
||||
"Download this file": "Lataa tiedosto",
|
||||
"Error": "Virhe",
|
||||
"#example": "#esimerkki",
|
||||
"Favourite": "Suosikki",
|
||||
"Files": "Tiedostot",
|
||||
"Forget": "Unohda",
|
||||
"I understand the risks and wish to continue": "Ymmärrän riskit ja haluan jatkaa",
|
||||
"Invite to this room": "Kutsu käyttäjiä",
|
||||
"Keywords": "Avainsanat",
|
||||
"Leave": "Poistu",
|
||||
"Login": "Kirjaudu sisään",
|
||||
"Low Priority": "Matala prioriteetti",
|
||||
"Members": "Jäsenet",
|
||||
"Mentions only": "Vain maininnat",
|
||||
"more": "lisää",
|
||||
"Mute": "Vaimenna",
|
||||
"No rooms to show": "Ei huoneita näytettäväksi",
|
||||
"Noisy": "Äänekäs",
|
||||
"Notifications": "Ilmoitukset",
|
||||
"Off": "Pois päältä",
|
||||
"On": "Päällä",
|
||||
"Operation failed": "Toiminto epäonnistui",
|
||||
"Permalink": "Pysyvä linkki",
|
||||
"Quote": "Lainaa",
|
||||
"Reject": "Hylkää",
|
||||
"Remove": "Poista",
|
||||
"Report a bug": "Ilmoita ongelmasta",
|
||||
"Resend": "Lähetä uudelleen",
|
||||
"Room not found": "Huonetta ei löytynyt",
|
||||
"Search": "Haku",
|
||||
"Search…": "Haku…",
|
||||
"Search for a room": "Hae huonetta",
|
||||
"Send": "Lähetä",
|
||||
"Send logs": "Lähetä lokit",
|
||||
"Source URL": "Lähde URL",
|
||||
"This Room": "Tämä huone",
|
||||
"Unable to join network": "Verkkoon liittyminen epäonnistui",
|
||||
"Unavailable": "Ei saatavilla",
|
||||
"Unknown device": "Tuntematon laite",
|
||||
"unknown error code": "tuntematon virhekoodi",
|
||||
"Unnamed room": "Nimeämätön huone",
|
||||
"Update": "Päivitä",
|
||||
"View Source": "Näytä lähde",
|
||||
"Waiting for response from server": "Odotetaan vastausta palvelimelta",
|
||||
"Monday": "Maanantai",
|
||||
"Tuesday": "Tiistai",
|
||||
"Wednesday": "Keskiviikko",
|
||||
"Thursday": "Torstai",
|
||||
"Friday": "Perjantai",
|
||||
"Saturday": "Lauantai",
|
||||
"Today": "Tänään",
|
||||
"Yesterday": "Eilen",
|
||||
"OK": "OK",
|
||||
"Warning": "Varoitus",
|
||||
"Checking for an update...": "Tarkistetaan päivityksen saatavuutta...",
|
||||
"No update available.": "Ei päivityksiä saatavilla.",
|
||||
"Downloading update...": "Ladataan päivitystä...",
|
||||
"Welcome to Riot.im": "Tervetuloa Riot.im -palveluun",
|
||||
"Search the room directory": "Hae hakemistosta",
|
||||
"Continue": "Jatka",
|
||||
"Set Password": "Aseta salasana",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> ja <a href=\"http://opera.com\">Opera</a> toimivat myös.",
|
||||
"Collapse panel": "Piilota paneeli",
|
||||
"Collecting app version information": "Haetaan versiotietoja",
|
||||
"Collecting logs": "Haetaan lokitietoja",
|
||||
"Custom Server Options": "Palvelinasetukset",
|
||||
"customServer_text": "Voit käyttää palvelinasetuksia muille Matrix-palvelimille kirjautumiseen asettamalla oman kotipalvelinosoitteen.<br/>Näin voit käyttää Riotia toisella kotipalvelimella sijaitsevan Matrix-käyttäjän kanssa. <br/><br/>Voit myös asettaa oman tunnistautumispalvelimen, mutta sinua ei voi kutsua etkä voi kutsua muita sähköpostiosoitteella.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Poista huonetunnus %(alias)s ja poista %(name)s hakemistosta?",
|
||||
"Enable them now": "Ota käyttöön nyt",
|
||||
"Enter keywords separated by a comma:": "Anna avainsanat eroteltuna pilkuin:",
|
||||
"Expand panel": "Avaa paneeli",
|
||||
"Error saving email notification preferences": "Virhe tallennettaessa sähköposti-ilmoitusasetuksia",
|
||||
"Failed to change settings": "Asetusten muuttaminen epäonnistui",
|
||||
"Failed to forget room %(errCode)s": "Huoneen unohtaminen epäonnistui %(errCode)s",
|
||||
"Failed to update keywords": "Avainsanojen päivittäminen epäonnistui",
|
||||
"Enable audible notifications in web client": "Ota käyttöön äänelliset ilmoitukset",
|
||||
"Enable desktop notifications": "Ota käyttöön työpöytäilmoitukset",
|
||||
"Enable email notifications": "Ota käyttöön sähköposti-ilmoitukset",
|
||||
"Enable notifications for this account": "Ota käyttöön ilmoitukset tälle tilille",
|
||||
"Failed to add tag %(tagName)s to room": "Tagin %(tagName)s lisäämineen huoneelle ei onnistunut",
|
||||
"Failed to get protocol list from Home Server": "Protokollalistan hakeminen Kotipalvelimelta ei onnistunut",
|
||||
"Failed to get public room list": "Julkisten huoneiden listan hakeminen epäonnistui",
|
||||
"Failed to remove tag %(tagName)s from room": "Tagin %(tagName)s poistaminen huoneelta epäonnistui",
|
||||
"Failed to send report: ": "Raportin lähettäminen epäonnistui: ",
|
||||
"Failed to set direct chat tag": "Suoran viestittelyn tagin asettaminen epäonnistui",
|
||||
"Fetching third party location failed": "Kolmannen osapuolen paikan haku epäonnistui",
|
||||
"Filter room names": "Suodata",
|
||||
"Forward Message": "Edelleenlähetä viesti",
|
||||
"Guests can join": "Vieraat voivat liittyä",
|
||||
"Hide panel": "Piilota paneeli",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Diagnoosin helpottamiseksi lokitietoja tältä laitteelta lähetetään tämän bugiraportin mukana. Poista ruksi jos haluat lätettää vain ylläolevan tekstin:",
|
||||
"Loading bug report module": "Ladataan bugiraportointimoduuli",
|
||||
"Messages containing my display name": "Viestit joissa mainitaan nimimerkkini",
|
||||
"Messages containing <span>keywords</span>": "<span>Avainsanoja</span> sisältävät viestit",
|
||||
"Messages containing my user name": "Viestit joissa mainitaan käyttäjänimeni",
|
||||
"Messages in group chats": "Viestit ryhmäkeskusteluissa",
|
||||
"Messages in one-to-one chats": "Viestit henkilökohtaisissa keskusteluissa",
|
||||
"Messages sent by bot": "Bottien lähettämät viestit",
|
||||
"Notification targets": "Ilmoituksen kohteet",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Seuraaviin avainsanoihin liittyvät ilmoitukset seuraavat sääntöjä joita ei voida näyttää tässä:",
|
||||
"Notify me for anything else": "Ilmoita minulle kaikesta muusta",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Ole hyvä ja kuvaile virhe. Mitä teit? Mitä oletit tapahtuvan? Mitä itse asiassa tapahtui?",
|
||||
"Please describe the bug and/or send logs.": "Ole hyvä ja kuvaile virhe sekä/tai lähetä lokitiedot.",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Ole hyvä ja asenna <a href=\"https://www.google.com/chrome\">Chrome</a> tai <a href=\"https://getfirefox.com\">Firefox</a> parhaan kokemuksen saavuttamiseksi.",
|
||||
"Remove %(name)s from the directory?": "Poista %(name)s hakemistosta?",
|
||||
"remove %(name)s from the directory.": "poista %(name)s hakemistosta.",
|
||||
"Remove from Directory": "Poista hakemistosta",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop %(platformName)s",
|
||||
"Riot does not know how to join a room on this network": "Riot ei tiedä miten liittya huoneeseen tässä verkossa",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot käyttää monia selainominaisuuksia, joista osa selaimesi ei tue tai ne ovat kokeellisia.",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Valitettavasti Riot <b>ei</b> toimi selaimessasi.",
|
||||
"The Home Server may be too old to support third party networks": "Kotipalvelin saattaa olla liian vanha tukeakseen kolmannen osapuolen verkkoja",
|
||||
"The server may be unavailable or overloaded": "Palvelin saattaa olla saavuttamaton tai ylikuormitettu",
|
||||
"Unable to fetch notification target list": "Ilmoituskohdelistan haku epäonnistui",
|
||||
"Unable to look up room ID from server": "Huone-ID:n haku palvelimelta epäonnistui",
|
||||
"Unhide Preview": "Näytä ennakkokatselu",
|
||||
"Uploaded on %(date)s by %(user)s": "Ladattu %(date)s käyttäjän %(user)s toimesta",
|
||||
"Uploading report": "Ladataan raporttia",
|
||||
"View Decrypted Source": "Näytä purettu lähdekoodi",
|
||||
"What's New": "Mikä on uutta",
|
||||
"What's new?": "Mikä on uutta?",
|
||||
"When I'm invited to a room": "Kun minut kutsutaan huoneeseen",
|
||||
"World readable": "Kaikkien luettavissa",
|
||||
"You cannot delete this image. (%(code)s)": "Et voi poistaa tätä kuvaa. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "Et voi poistaa tätä viestiä. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "Et vastaanota työpöytäilmoituksia",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Olet saattanut muuttaa niitä toisessa asiakasohjelmassa kuin Riot. Et voi muuttaa niitä Riotissa mutta ne pätevät kuitenkin",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Sinun täytyy käyttää HTTPS -yhteyttä, jotta voit jakaa ruudun.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Nykyisellä selaimellasi ohjelman ulkonäkö voi olla aivan virheellinen, ja jotkut ominaisuudet eivät saata toimia. Voit jatkaa jos haluat kokeilla mutta et voi odottaa saavasi apua mahdollisesti ilmeneviin ongelmiin!",
|
||||
"Chat with Riot Bot": "Keskustele Riot Botin kanssa",
|
||||
"Get started with some tips from Riot Bot!": "Aloita Riot Botin vinkkien avulla!",
|
||||
"General discussion about Matrix and Riot": "Matrix- ja Riot keskustelut",
|
||||
"Discussion of all things Matrix!": "Keskustelu kaikesta Matrixiin liittyvästä!",
|
||||
"Riot/Web & Desktop chat": "Riot/Web & Työpöytä-keskustelu",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk -keskustelu",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk -keskustelu",
|
||||
"Matrix technical discussions": "Tekniset keskustelut",
|
||||
"Running Matrix services": "Matrix-palvelujen ylläpito",
|
||||
"Community-run support for Synapse": "Yhteisön tarjoama Synapse-tuki",
|
||||
"Admin support for Dendrite": "Dendrite ylläpitotuki",
|
||||
"Announcements about Synapse releases": "Ilmoitukset uusista Synapse-julkaisuista",
|
||||
"Error encountered (%(errorDetail)s).": "Virhe: %(errorDetail)s.",
|
||||
"Support for those using and running matrix-appservice-irc": "Tuki niille jotka käyttävät ja ajavat matrix-appservice-irc",
|
||||
"Building services on Matrix": "Palveluiden rakentaminen Matrixin avulla",
|
||||
"Support for those using the Matrix spec": "Tuki Matrix-spesifikaation käyttäjille",
|
||||
"Implementing VR services with Matrix": "VR-palvelujen implementointi Matrixin avulla",
|
||||
"Implementing VoIP services with Matrix": "VoIP-palvelujen implementointi Matrixin avulla",
|
||||
"Discussion of the Identity Service API": "Keskustelu Identity Service rajapinnasta",
|
||||
"Support for those using, running and writing other bridges": "Tuki niille jotka käyttävät, ajavat ja ohjelmoivat muita siltoja",
|
||||
"Dev chat for the Riot/Web dev team": "Kehittäjäkeskustelu Riot/Web kehitystiimille",
|
||||
"Dev chat for the Dendrite dev team": "Kehittäjäkeskustelu Dendrite kehitystiimille",
|
||||
"Co-ordination for Riot/Web translators": "Riot/Web kääntäjien koordinointi",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Matrixissa on olemassa monia huoneita, jotka on linkitetty olemassa oleviin verkkoihin (Slack, IRC, Gitter yms.). Tutustu hakemistoon!",
|
||||
"Failed to change password. Is your password correct?": "Salasanan muuttaminen epäonnistui. Onko salasanasi oikein?",
|
||||
"You have successfully set a password!": "Olet onnistuneesti asettanut salasanan!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Voit nyt palata tilillesi kirjauduttua ulos, sekä kirjautua muilla laitteilla.",
|
||||
"Please set a password!": "Ole hyvä ja aseta salasana!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Tämä mahdollistaa sinut palamaan tilillesi uloskirjautumisen jälkeen sekä kirjautumaan muilla laitteilla.",
|
||||
"You have successfully set a password and an email address!": "Olet onnistuneesti asettanut salasanan ja sähköpostiosoitteen!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Muista että voit aina asettaa sähköpostiosoitteen käyttäjäasetuksista jos muutat mielesi.",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Voidaksesi tulevaisuudessa palata tilillesi sinut pitää <u>asettaa salasana</u>",
|
||||
"Couldn't load home page": "Kotisivun lataus epäonnistui",
|
||||
"Bug report sent": "Virheraportti lähetetty",
|
||||
"Failed to set Direct Message status of room": "Huoneen suoran viestittelyn tilan asettaminen epäonnistui",
|
||||
"(HTTP status %(httpStatus)s)": "(HTTP tila %(httpStatus)s)",
|
||||
"Notify for all other messages/rooms": "Ilmoita kaikista muista viesteistä/huoneista",
|
||||
"powered by Matrix": "Matrix",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot ei tue laitettasi. Asenna mobiilisovellus?",
|
||||
"Thank you!": "Kiitos!",
|
||||
"Design and implementation of E2E in Matrix": "Matrix päästä-päähän salauksen suunnittelu ja implementointi",
|
||||
"Contributing code to Matrix and Riot": "Osallistu kehitystyöhön",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s %(browserName)s %(osName)s",
|
||||
"There are advanced notifications which are not shown here": "On kehittyneitä ilmoituksia joita ei näytetä tässä",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Salattua ja vikasietoista viestintää Matrix -teknologialla",
|
||||
"Back": "Takaisin",
|
||||
"Developer Tools": "Kehitystila",
|
||||
"Failed to send custom event.": "Kustomoidun tapahtuman lähettäminen epäonnistui.",
|
||||
"Filter results": "Suodata",
|
||||
"Send Custom Event": "Lähetä kustomoitu tapahtuma",
|
||||
"Send Custom State Event": "Lähetä kustomoitu tilatapahtuma",
|
||||
"Explore Room State": "Huoneen tila",
|
||||
"You must specify an event type!": "Sinun on määritettävä tapahtuman tyyppi!",
|
||||
"Event sent!": "Tapahtuma lähetetty!",
|
||||
"Event Type": "Tapahtuman tyyppi",
|
||||
"Event Content": "Tapahtuman sisältö",
|
||||
"State Key": "Tila-avain",
|
||||
"Show message in desktop notification": "Näytä viestit ilmoituskeskuksessa",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Voit käyttää edistyksellisiä asetuksia kirjautuaksesi muille Matrix palvelimille, määrittelemällä kotipalvelimen URL-osoitteen.<br/>Tämän avulla voit käyttää Riot:ia olemassa olevalla toisen Matrix palvelimen käyttäjätilillä.<br/><br/>Voit myös asettaa valinnaisen identiteettipalvelimen, mutta et voi kutsua käyttäjiä sähköpostiosoitteella tai tulla kutsutuksi.",
|
||||
"Appear Offline": "Offline-tila",
|
||||
"Away": "Poissa",
|
||||
"Send Account Data": "Lähetä tilin tiedot",
|
||||
"Edit": "Muokkaa",
|
||||
"Explore Account Data": "Tilitiedot",
|
||||
"Toolbox": "Työkalut",
|
||||
"Unpin Message": "Poista viestin kiinnitys",
|
||||
"Pin Message": "Kiinnitä viesti",
|
||||
"Please install <chromeLink>Chrome</chromeLink> or <firefoxLink>Firefox</firefoxLink> for the best experience.": "Asenna <chromeLink>Chrome</chromeLink> tai <firefoxLink>Firefox</firefoxLink> parhaan käyttökokemuksen saavuttamiseksi.",
|
||||
"<safariLink>Safari</safariLink> and <operaLink>Opera</operaLink> work too.": "<safariLink>Safari</safariLink> ja <operaLink>Opera</operaLink> ovat myös tuettuja.",
|
||||
"Register": "Rekisteröidy",
|
||||
"Rooms": "Huoneet",
|
||||
"Invite to this community": "Kutsu käyttäjiä",
|
||||
"Add rooms to this community": "Lisää huoneita yhteisöön",
|
||||
"Reply": "Vastaa",
|
||||
"View Community": "Näytä yhteisö",
|
||||
"%(count)s Members|other": "%(count)s jäsentä",
|
||||
"%(count)s Members|one": "%(count)s jäsen"
|
||||
}
|
||||
|
||||
@@ -1,53 +1,45 @@
|
||||
{
|
||||
"Add an email address above to configure email notifications": "Ajouter une adresse email pour la configuration des notifications par email",
|
||||
"Add an email address above to configure email notifications": "Ajouter une adresse e-mail pour la configuration des notifications par e-mail",
|
||||
"All messages": "Tous les messages",
|
||||
"All messages (loud)": "Tous les messages (fort)",
|
||||
"All messages (noisy)": "Tous les messages (fort)",
|
||||
"All notifications are currently disabled for all targets.": "Toutes les notifications sont désactivées pour tous les appareils.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Une erreur est survenue lors de la sauvegarde de vos préférences de notifications par e-mail.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Une erreur est survenue lors de la sauvegarde de vos préférences de notification par e-mail.",
|
||||
"Cancel Sending": "Annuler l'envoi",
|
||||
"Can't update user notification settings": "Impossible de mettre à jour les notifications utilisateur",
|
||||
"Can't update user notification settings": "Impossible de mettre à jour les paramètres de notification de l'utilisateur",
|
||||
"Close": "Fermer",
|
||||
"Create new room": "Créer un nouveau salon",
|
||||
"Couldn't find a matching Matrix room": "Impossible de trouver un salon Matrix",
|
||||
"Couldn't find a matching Matrix room": "Impossible de trouver un salon Matrix correspondant",
|
||||
"Custom Server Options": "Options de serveur personnalisées",
|
||||
"delete the alias.": "supprimer l'alias.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Supprimer l'alias %(alias)s du salon et supprimer %(name)s du répertoire ?",
|
||||
"Direct Chat": "Conversation Directe",
|
||||
"Direct Chat": "Discussion directe",
|
||||
"Directory": "Répertoire",
|
||||
"Dismiss": "Ignorer",
|
||||
"Download this file": "Télécharger ce fichier",
|
||||
"Drop here %(toAction)s": "Déposer ici %(toAction)s",
|
||||
"Enable audible notifications in web client": "Activer les notifications sonores pour le client web",
|
||||
"Enable desktop notifications": "Activer les notifications de bureau",
|
||||
"Enable email notifications": "Activer les notifications par e-mail",
|
||||
"Enable notifications for this account": "Activer les notifications pour ce compte",
|
||||
"Enable them now": "Les activer maintenant",
|
||||
"Enter keywords separated by a comma:": "Entrez les mots clés séparés par une virgule :",
|
||||
"Enter keywords separated by a comma:": "Entrez les mots-clés séparés par une virgule :",
|
||||
"Error": "Erreur",
|
||||
"Error saving email notification preferences": "Erreur lors de la sauvegarde des notifications par email",
|
||||
"Error saving email notification preferences": "Erreur lors de la sauvegarde des préférences de notification par e-mail",
|
||||
"#example": "#exemple",
|
||||
"Failed to": "Échec pour",
|
||||
"Failed to add tag %(tagName)s to room": "Échec lors de l'ajout de l’étiquette %(tagName)s au salon",
|
||||
"Failed to add tag %(tagName)s to room": "Échec de l'ajout de l'étiquette %(tagName)s au salon",
|
||||
"Failed to change settings": "Échec de la mise à jour des paramètres",
|
||||
"Failed to forget room %(errCode)s": "Échec lors de l'oubli du salon %(errCode)s",
|
||||
"Failed to update keywords": "Échec dans la mise à jour des mots-clés",
|
||||
"Failed to get protocol list from Home Server": "Échec lors de la récupération de la liste sur le serveur",
|
||||
"Failed to get public room list": "Échec lors de la récupération de la liste des salons publics",
|
||||
"Failed to join the room": "Échec de l'adhésion au salon",
|
||||
"Failed to remove tag %(tagName)s from room": "Échec dans la suppression de l’étiquette %(tagName)s du salon",
|
||||
"Failed to set direct chat tag": "Échec dans l'attribution d'une étiquette dans le chat direct",
|
||||
"Failed to remove tag %(tagName)s from room": "Échec de la suppression de l'étiquette %(tagName)s du salon",
|
||||
"Failed to set direct chat tag": "Échec de l'ajout de l'étiquette discussion directe",
|
||||
"Favourite": "Favoris",
|
||||
"Operation failed": "L'opération a échoué",
|
||||
"Please Register": "Veuillez vous enregistrer",
|
||||
"powered by Matrix": "propulsé par Matrix",
|
||||
"Quote": "Citer",
|
||||
"Redact": "Rédiger",
|
||||
"Reject": "Rejeter",
|
||||
"Remove %(name)s from the directory?": "Supprimer %(name)s du répertoire ?",
|
||||
"Remove": "Supprimer",
|
||||
"Resend": "Renvoyer",
|
||||
"Settings": "Paramètres",
|
||||
"Start chat": "Démarrer une discussion",
|
||||
"unknown error code": "Code erreur inconnu",
|
||||
"View Source": "Voir la source",
|
||||
"You cannot delete this image. (%(code)s)": "Vous ne pouvez pas supprimer cette image. (%(code)s)",
|
||||
@@ -62,33 +54,29 @@
|
||||
"Saturday": "Samedi",
|
||||
"Today": "Aujourd'hui",
|
||||
"Yesterday": "Hier",
|
||||
"Welcome page": "Page d'accueil",
|
||||
"Call invitation": "Appel entrant",
|
||||
"Failed to set Direct Message status of room": "Échec de la configuration de l'état de Message Direct du salon",
|
||||
"Failed to set Direct Message status of room": "Échec du réglage de l'état du salon en Discussion directe",
|
||||
"Fetching third party location failed": "Échec de la récupération de la localisation tierce",
|
||||
"Files": "Fichiers",
|
||||
"Filter room names": "Filtrer les salons par nom",
|
||||
"Forget": "Oublier",
|
||||
" from room": " du salon",
|
||||
"Guest users can't invite users. Please register to invite.": "Les visiteurs ne peuvent démarrer une discussion. Merci de vous enregistrer pour pouvoir démarrer une discussion.",
|
||||
"Invite to this room": "Inviter dans ce salon",
|
||||
"Keywords": "Mots-clés",
|
||||
"Leave": "Quitter",
|
||||
"Low Priority": "Priorité Basse",
|
||||
"Low Priority": "Priorité basse",
|
||||
"Members": "Membres",
|
||||
"Mentions only": "Seulement les mentions",
|
||||
"Messages containing my display name": "Messages contenant mon nom",
|
||||
"Messages containing my display name": "Messages contenant mon nom affiché",
|
||||
"Messages containing my user name": "Message contenant mon nom d'utilisateur",
|
||||
"Messages in group chats": "Messages dans les conversations de groupe",
|
||||
"Messages in one-to-one chats": "Messages dans les conversations directes",
|
||||
"Messages in group chats": "Messages dans les discussions de groupe",
|
||||
"Messages in one-to-one chats": "Messages dans les discussions directes",
|
||||
"Messages sent by bot": "Messages envoyés par des robots",
|
||||
"more": "plus",
|
||||
"Mute": "Couper le son",
|
||||
"Mute": "Mettre en sourdine",
|
||||
"No rooms to show": "Aucun salon à afficher",
|
||||
"Noisy": "Activer le son",
|
||||
"Noisy": "Bruyant",
|
||||
"Notification targets": "Appareils recevant les notifications",
|
||||
"Notifications": "Notifications",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here": "Les mots-clés suivants suivent des règles de notification qui ne peuvent être affichées ici",
|
||||
"Notify for all other messages/rooms": "Me notifier pour tous les autres messages/salons",
|
||||
"Notify me for anything else": "Me notifier pour tout le reste",
|
||||
"Off": "Désactivé",
|
||||
@@ -97,35 +85,32 @@
|
||||
"remove %(name)s from the directory.": "supprimer %(name)s du répertoire.",
|
||||
"Remove from Directory": "Supprimer du répertoire",
|
||||
"Riot does not know how to join a room on this network": "Riot ne peut pas joindre un salon sur ce réseau",
|
||||
"Room directory": "Répertoire des salons",
|
||||
"Room not found": "Salon non trouvé",
|
||||
"Search for a room": "Chercher un salon",
|
||||
"Source URL": "URL source",
|
||||
"The Home Server may be too old to support third party networks": "Le Home Server semble trop ancien pour supporter des réseaux tiers",
|
||||
"Search for a room": "Rechercher un salon",
|
||||
"Source URL": "URL de la source",
|
||||
"The Home Server may be too old to support third party networks": "Le serveur d'accueil semble trop ancien pour supporter des réseaux tiers",
|
||||
"There are advanced notifications which are not shown here": "Il existe une configuration avancée des notifications qui ne peut être affichée ici",
|
||||
"The server may be unavailable or overloaded": "Le serveur est indisponible ou surchargé",
|
||||
"This room is inaccessible to guests. You may be able to join if you register.": "Ce salon n'est pas ouvert aux visiteurs. Vous pourrez peut-être le rejoindre si vous vous enregistrez.",
|
||||
"Unable to fetch notification target list": "Impossible de récupérer la liste des appareils recevant les notifications",
|
||||
"Unable to join network": "Impossible de rejoindre le réseau",
|
||||
"Unable to look up room ID from server": "Impossible de récupérer l'ID du salon sur le serveur",
|
||||
"Unhide Preview": "Dévoiler l'aperçu",
|
||||
"Unnamed room": "Salon anonyme",
|
||||
"Unnamed room": "Salon sans nom",
|
||||
"Uploaded on %(date)s by %(user)s": "Téléchargé le %(date)s par %(user)s",
|
||||
"View Decrypted Source": "Voir la source décryptée",
|
||||
"View Decrypted Source": "Voir la source déchiffrée",
|
||||
"When I'm invited to a room": "Quand je suis invité dans un salon",
|
||||
"World readable": "Visible par tout le monde",
|
||||
"World readable": "Lisible publiquement",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Vous les avez probablement configurées dans un autre client que Riot. Vous ne pouvez pas les configurer dans Riot mais elles s'appliquent quand même",
|
||||
"Guests can join": "Ouvert aux visiteurs",
|
||||
" to room": " au salon",
|
||||
"Guests can join": "Les invités peuvent rejoindre le salon",
|
||||
"Advanced notification settings": "Paramètres de notification avancés",
|
||||
"customServer_text": "Vous pouvez utiliser l'option de serveur personnalisé pour vous connectez à d'autres serveurs Matrix, en spécifiant une adresse de homerserver différente.<br/>Cela permet d'utiliser Riot avec un compte existant sur un homeserver différent.<br/><br/>Vous pouvez aussi indiquer un serveur d'identité personnel mais vous ne pourrez plus inviter des utilisateurs par email, ou être invité par email.",
|
||||
"customServer_text": "Vous pouvez utiliser les options de serveur personnalisées pour vous connecter à d'autres serveurs Matrix, en spécifiant une adresse de serveur d'accueil différente.<br/>Cela permet d'utiliser Riot avec un compte Matrix existant sur un serveur d'accueil différent.<br/><br/>Vous pouvez aussi indiquer un serveur d'identité personnalisé mais vous ne pourrez pas inviter d'utilisateurs par e-mail ou être invité par e-mail.",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Les notifications pour les mots-clés suivant répondent à des critères qui ne peuvent pas être affichés ici :",
|
||||
"Collapse panel": "Cacher le panneau",
|
||||
"Expand panel": "Dévoiler le panneau",
|
||||
"I understand the risks and wish to continue": "Je comprends les risques et souhaite continuer",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot utilise de nombreuses fonctionnalités avancées du navigateur, certaines ne sont pas disponibles ou expérimentales dans votre navigateur actuel.",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Désolé, Riot n'est <b>pas</b> supporté par votre navigateur.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Depuis votre navigateur actuel, le visuel et le ressenti de l'application pourraient être complètement incorrects, et certaines fonctionnalités pourraient ne pas être supportées. Vous pouvez continuer malgré tout, mais vous n'aurez pas de support si vous rencontrez des problèmes !",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Désolé, Riot <b>n'</b>est <b>pas</b> supporté par votre navigateur.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Depuis votre navigateur actuel, le visuel et le ressenti de l'application pourraient être complètement erronés, et certaines fonctionnalités pourraient ne pas être supportées. Vous pouvez continuer malgré tout, mais vous n'aurez aucune aide si vous rencontrez des problèmes !",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Veuillez installer <a href=\"https://www.google.com/chrome\">Chrome</a> ou <a href=\"https://getfirefox.com\">Firefox</a> pour une expérience optimale.",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> et <a href=\"http://opera.com\">Opera</a> fonctionnent aussi.",
|
||||
"Messages containing <span>keywords</span>": "Messages contenant des <span>mots-clés</span>",
|
||||
@@ -133,71 +118,113 @@
|
||||
"A new version of Riot is available.": "Une nouvelle version de Riot est disponible.",
|
||||
"All Rooms": "Tous les salons",
|
||||
"Cancel": "Annuler",
|
||||
"Changelog": "Journal des modif",
|
||||
"Collecting app version information": "Récupération des info de version de l’application",
|
||||
"Collecting logs": "Récupération des traces",
|
||||
"Changelog": "Journal des modifications",
|
||||
"Collecting app version information": "Récupération des informations de version de l’application",
|
||||
"Collecting logs": "Récupération des journaux",
|
||||
"Describe your problem here.": "Décrivez votre problème ici.",
|
||||
"Failed to send report: ": "Échec de l’envoi du rapport : ",
|
||||
"Forward Message": "Transférer le message",
|
||||
"Hide panel": "Cacher le panneau",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Afin de diagnostiquer le problème, les traces de ce client vont être envoyées avec ce rapport d’erreur. Si vous préférez seulement envoyer le texte ci-dessus, décochez la case :",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Afin de diagnostiquer les problèmes, les journaux de ce client vont être envoyés avec ce rapport d’erreur. Si vous préférez n'envoyer que le texte ci-dessus, décochez la case :",
|
||||
"Loading bug report module": "Chargement du module de rapport d’erreur",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Veuillez décrire le problème. Qu’avez-vous fait ? Quel comportement vous attendiez vous à voir ? Que s’est-il effectivement passé ?",
|
||||
"Please describe the bug and/or send logs.": "Veuillez décrire le problème et/ou envoyer les traces.",
|
||||
"Report a bug": "Reporter un problème",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Veuillez décrire l'erreur. Qu'avez-vous fait ? Quel était le comportement attendu ? Que s'est-il réellement passé ?",
|
||||
"Please describe the bug and/or send logs.": "Veuillez décrire le problème et/ou envoyer les journaux.",
|
||||
"Report a bug": "Signaler un problème",
|
||||
"Riot Desktop on %(platformName)s": "Version bureau de Riot sur %(platformName)s",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot Web n’est pas supporté sur mobile. Installer l’application ?",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot n’est pas supporté sur les appareils mobiles. Installer l’application ?",
|
||||
"Search": "Rechercher",
|
||||
"Search…": "Rechercher…",
|
||||
"Send": "Envoyer",
|
||||
"Send logs": "Envoyer les traces",
|
||||
"Send logs": "Envoyer les journaux",
|
||||
"This Room": "Ce salon",
|
||||
"Unavailable": "Indisponible",
|
||||
"Unknown device": "Appareil inconnu",
|
||||
"Update": "Mettre à jour",
|
||||
"Uploading report": "Téléchargement du rapport",
|
||||
"Uploading report": "Envoi du rapport",
|
||||
"What's New": "Nouveautés",
|
||||
"What's new?": "Nouveautés ?",
|
||||
"Waiting for response from server": "En attente d’une réponse du serveur",
|
||||
"You are Rioting as a guest. <a>Register</a> or <a>sign in</a> to access more rooms and features!": "Vous utilisez Riot en tant que visiteur. <a>Enregistrez-vous</a> ou <a>identifiez-vous</a> pour accéder à plus de salons et de fonctionnalités !",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Vous devez utiliser HTTPS pour effectuer un appel en partage d’écran.",
|
||||
"OK": "OK",
|
||||
"Failed to change password. Is your password correct?": "Échec du changement de mot de passe. Votre mot de passe est-il correct ?",
|
||||
"You have successfully set a password!": "Vous avez paramétré un mot de passe avec succès !",
|
||||
"You have successfully set a password!": "Vous avez défini un mot de passe avec succès !",
|
||||
"Continue": "Continuer",
|
||||
"Please set a password!": "Veuillez définir un mot de passe !",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Vous pouvez maintenant revenir sur votre compte après vous être déconnecté, et vous identifier sur d'autres appareils.",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Cela vous permettra de retourner sur votre compte après vous être déconnecté, et de vous identifier sur d'autres appareils.",
|
||||
"Welcome to Riot.im": "Bienvenue sur Riot.im",
|
||||
"(HTTP status %(httpStatus)s)": "(statut HTTP %(httpStatus)s)",
|
||||
"Login": "S'identifier",
|
||||
"(HTTP status %(httpStatus)s)": "(état HTTP %(httpStatus)s)",
|
||||
"Login": "Connexion",
|
||||
"Chat with Riot Bot": "Discussion avec Riot Bot",
|
||||
"Search the room directory": "Rechercher dans le répertoire de salon",
|
||||
"Search the room directory": "Rechercher dans le répertoire de salons",
|
||||
"Get started with some tips from Riot Bot!": "Démarrer avec quelques astuces de Riot Bot !",
|
||||
"Riot/Android & matrix-android-sdk chat": "Discussions Riot/Android & matrix-android-sd",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Discussions Riot/iOS & matrix-ios-sdk",
|
||||
"Riot/Android & matrix-android-sdk chat": "Discussions sur Riot/Android & matrix-android-sdk",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Discussions sur Riot/iOS & matrix-ios-sdk",
|
||||
"General discussion about Matrix and Riot": "Discussion générale sur Matrix et Riot",
|
||||
"Riot/Web & Desktop chat": "Discussions Riot/Web & Desktop",
|
||||
"Running Matrix services": "Execution de services Matrix",
|
||||
"Riot/Web & Desktop chat": "Discussions sur Riot/Web & Bureau",
|
||||
"Running Matrix services": "Exécution de services Matrix",
|
||||
"Admin support for Dendrite": "Support admin pour Dendrite",
|
||||
"Announcements about Synapse releases": "Communiqués sur les nouvelles versions de Synapse",
|
||||
"Matrix technical discussions": "Discussions techniques sur Matrix",
|
||||
"Community-run support for Synapse": "Support communautaire sur Synape",
|
||||
"Community-run support for Synapse": "Support communautaire sur Synapse",
|
||||
"Support for those using and running matrix-appservice-irc": "Support pour ceux qui utilisent et exécutent matrix-appservice-irc",
|
||||
"Building services on Matrix": "Développement de services sur Matrix",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Discussion & collaboration décentralisées et encryptées propulsé par [matrix]",
|
||||
"Discussion of all things Matrix!": "Discussion de tous les sujets Matrix !",
|
||||
"Support for those using the Matrix spec": "Support pour les utilisateurs de la spec Matrix",
|
||||
"Design and implementation of E2E in Matrix": "Définition et implémentation de la crypto dans Matrix",
|
||||
"Implementing VR services with Matrix": "Implémentation de de services de réalité virtuelle avec Matrix",
|
||||
"Implementing VoIP services with Matrix": "Implémentation de de services de voix sur IP avec Matrix",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Discussion & collaboration décentralisées et chiffrées, propulsées par [matrix]",
|
||||
"Discussion of all things Matrix!": "Discussion sur tout ce qui concerne Matrix !",
|
||||
"Support for those using the Matrix spec": "Support pour les utilisateurs de la spécification de Matrix",
|
||||
"Design and implementation of E2E in Matrix": "Définition et implémentation du chiffrement de bout en bout dans Matrix",
|
||||
"Implementing VR services with Matrix": "Implémentation de services de réalité virtuelle avec Matrix",
|
||||
"Implementing VoIP services with Matrix": "Implémentation de services de voix sur IP avec Matrix",
|
||||
"Discussion of the Identity Service API": "Discussion sur l’API du Service Identité",
|
||||
"Support for those using, running and writing other bridges": "Support pour les utilisateurs, administrateurs et développeurs de passerelles",
|
||||
"Contributing code to Matrix and Riot": "Contribuer à Matrix et Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Forum pour les discussions sur les développements de Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "Forum pour les discussion sur les développements de Dendrite",
|
||||
"Support for those using, running and writing other bridges": "Support pour les utilisateurs, administrateurs et développeurs d'autres passerelles",
|
||||
"Contributing code to Matrix and Riot": "Contribuer du code à Matrix et Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Discussions de l'équipe de développeurs de Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "Discussion pour l'équipe de développeurs de Dendrite",
|
||||
"Co-ordination for Riot/Web translators": "Coordination des traducteurs de Riot/Web",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Beaucoup de salons existent déjà dans Matrix, liés à des réseaux existants (Slsck, IRC, Gitter etc) ou indépendants. Jetez un oeil au répertoire !",
|
||||
"You have successfully set a password and an email address!": "Vous avez configuré un mot de passe et une adresse e-mail avec succès !",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Souvenez-vous que vous pourrez toujours définir une adresse e-mail dans la configuration utilisateur si vous changez d’avis."
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "De nombreux salons existent déjà dans Matrix, liés à des réseaux existants (Slack, IRC, Gitter etc) ou indépendants. Jetez un œil au répertoire !",
|
||||
"You have successfully set a password and an email address!": "Vous avez défini un mot de passe et une adresse e-mail avec succès !",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Souvenez-vous que vous pourrez toujours définir une adresse e-mail dans les paramètres de l'utilisateur si vous changez d’avis.",
|
||||
"Warning": "Attention",
|
||||
"Checking for an update...": "Recherche de mise à jour...",
|
||||
"Error encountered (%(errorDetail)s).": "Erreur rencontrée (%(errorDetail)s).",
|
||||
"No update available.": "Aucune mise à jour disponible.",
|
||||
"Downloading update...": "Mise à jour en cours de téléchargement...",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Pour pouvoir retrouver votre compte dans le futur, vous devez <u>définir un mot de passe</u>",
|
||||
"Set Password": "Définir un mot de passe",
|
||||
"Couldn't load home page": "Impossible de charger la page d'accueil",
|
||||
"Bug report sent": "Rapport d'erreur envoyé",
|
||||
"Thank you!": "Merci !",
|
||||
"Back": "Retour",
|
||||
"Developer Tools": "Outils de développement",
|
||||
"Filter results": "Filtrer les résultats",
|
||||
"You must specify an event type!": "Vous devez spécifier un type d'événement !",
|
||||
"Event sent!": "Événement envoyé !",
|
||||
"Event Type": "Type d'événement",
|
||||
"Event Content": "Contenu de l'événement",
|
||||
"Failed to send custom event.": "Échec de l'envoi de l'événement personnalisé.",
|
||||
"Send Custom Event": "Envoyer l'événement personnalisé",
|
||||
"Send Custom State Event": "Envoyer l'événement d'état personnalisé",
|
||||
"Explore Room State": "Parcourir l'état du salon",
|
||||
"State Key": "Clé d'état",
|
||||
"Unpin Message": "Dépingler le message",
|
||||
"Add rooms to this community": "Ajouter des salons à cette communauté",
|
||||
"Show message in desktop notification": "Afficher le message dans les notifications de bureau",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Vous pouvez utiliser les options de serveur personnalisé pour vous connecter à d'autres serveurs Matrix en précisant un serveur d'accueil différent.<br/>Cela vous permet d'utiliser Riot avec un compte Matrix existant sur un autre serveur d'accueil.<br/><br/>Vous pouvez aussi renseigner un serveur d'identité personnalisé mais vous ne pourrez pas inviter d'utilisateurs avec leur adresse e-mail, ou être invité avec votre adresse e-mail.",
|
||||
"Edit": "Modifier",
|
||||
"Pin Message": "Épingler le message",
|
||||
"Register": "S'inscrire",
|
||||
"Rooms": "Salons",
|
||||
"Invite to this community": "Inviter à cette communauté",
|
||||
"Toolbox": "Boîte à outils",
|
||||
"Send Account Data": "Envoyer les données du compte",
|
||||
"Explore Account Data": "Explorer les données du compte",
|
||||
"Appear Offline": "Apparaître Hors ligne",
|
||||
"Away": "Absent",
|
||||
"Please install <chromeLink>Chrome</chromeLink> or <firefoxLink>Firefox</firefoxLink> for the best experience.": "Veuillez installer <chromeLink>Chrome</chromeLink> ou <firefoxLink>Firefox</firefoxLink> pour une expérience optimale.",
|
||||
"<safariLink>Safari</safariLink> and <operaLink>Opera</operaLink> work too.": "<safariLink>Safari</safariLink> et <operaLink>Opera</operaLink> fonctionnent également.",
|
||||
"Reply": "Répondre",
|
||||
"%(count)s Members|other": "%(count)s membres",
|
||||
"%(count)s Members|one": "%(count)s membre",
|
||||
"Online": "En ligne",
|
||||
"View Community": "Voir la communauté"
|
||||
}
|
||||
|
||||
230
src/i18n/strings/gl.json
Normal file
230
src/i18n/strings/gl.json
Normal file
@@ -0,0 +1,230 @@
|
||||
{
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s vía %(browserName)s en %(osName)s",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> e <a href=\"http://opera.com\">Opera</a> tamén serven.",
|
||||
"A new version of Riot is available.": "Está dispoñible unha nova versión de Riot.",
|
||||
"Add an email address above to configure email notifications": "Engada un enderezo de correo electrónico para configurar as notificacións",
|
||||
"Advanced notification settings": "Axustes avanzados de notificación",
|
||||
"All messages": "Todas as mensaxes",
|
||||
"All messages (noisy)": "Todas as mensaxes (alto)",
|
||||
"All Rooms": "Todas as Salas",
|
||||
"All notifications are currently disabled for all targets.": "Todas as notificacións están deshabilitadas para todos os destinos.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Algo fallou mentras se gardaban as súas preferencias de notificaicón.",
|
||||
"Back": "Atrás",
|
||||
"Bug report sent": "Enviado o informe de fallo",
|
||||
"Call invitation": "Convite de chamada",
|
||||
"Cancel": "Cancelar",
|
||||
"Cancel Sending": "Cancelar o envío",
|
||||
"Can't update user notification settings": "Non se poden actualizar os axutes de notificación",
|
||||
"Changelog": "Rexistro de cambios",
|
||||
"Close": "Pechar",
|
||||
"Collapse panel": "Agochar panel",
|
||||
"Collecting app version information": "Obtendo información sobre a versión da app",
|
||||
"Collecting logs": "Obtendo rexistros",
|
||||
"Couldn't find a matching Matrix room": "Non coincide con ningunha sala de Matrix",
|
||||
"Custom Server Options": "Opcións personalizadas do servidor",
|
||||
"customServer_text": "Pode utilizar os axustes do servidor personalizado para conectarse a outros servidores Matrix indicando un URL de Inicio do servidor.<br/>Esto permítelle utilizar Riot con unha conta existente de Matrix nun servidor diferente.<br/><br/>Tamén pode establecer un servidor personalizado de identidade mais non poderá invitar a usuarias a través de enderezos de correo ou ser vostede invitada do mesmo xeito.",
|
||||
"delete the alias.": "borrar alcume.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Eliminar o alcume da sala %(alias)s e borrar %(name)s do directorio?",
|
||||
"Describe your problem here.": "Describa aquí o seu problema.",
|
||||
"Developer Tools": "Ferramentas para desenvolver",
|
||||
"Direct Chat": "Chat directo",
|
||||
"Directory": "Directorio",
|
||||
"Dismiss": "Rexeitar",
|
||||
"Download this file": "Descargue este ficheiro",
|
||||
"Enable audible notifications in web client": "Habilitar notificacións audibles no cliente web",
|
||||
"Enable desktop notifications": "Habilitar notificacións de escritorio",
|
||||
"Enable email notifications": "Habilitar notificacións de correo",
|
||||
"Enable notifications for this account": "Habilitar notificacións para esta conta",
|
||||
"Enable them now": "Habilitalas agora",
|
||||
"Enter keywords separated by a comma:": "Introduza palabras chave separadas por vírgulas:",
|
||||
"Error": "Fallo",
|
||||
"Error saving email notification preferences": "Fallo ao cargar os axustes de notificacións",
|
||||
"#example": "#exemplo",
|
||||
"Expand panel": "Expandir panel",
|
||||
"Failed to add tag %(tagName)s to room": "Fallo ao engadir a etiqueta %(tagName)s a sala",
|
||||
"Failed to change settings": "Fallo ao cambiar os axustes",
|
||||
"Failed to forget room %(errCode)s": "Fallo ao esquecer sala %(errCode)s",
|
||||
"Failed to update keywords": "Fallo ao actualizar as palabras chave",
|
||||
"Failed to get protocol list from Home Server": "Fallo ao obter a lista de protocolo desde o servidor",
|
||||
"Failed to get public room list": "Fallo ao obter a lista de salas públicas",
|
||||
"Failed to remove tag %(tagName)s from room": "Fallo ao eliminar a etiqueta %(tagName)s da sala",
|
||||
"Failed to send custom event.": "Fallo ao enviar evento personalizado.",
|
||||
"Failed to send report: ": "Fallo no envío do informe: ",
|
||||
"Failed to set direct chat tag": "Fallo ao establecer etiqueta do chat directo",
|
||||
"Failed to set Direct Message status of room": "Fallo ao establecer o estado Mensaxe Directa da sala",
|
||||
"Favourite": "Favorita",
|
||||
"Fetching third party location failed": "Fallo ao obter a localización de terceiros",
|
||||
"Files": "Ficheiros",
|
||||
"Filter results": "Filtrar resultados",
|
||||
"Filter room names": "Filtrar nomes de sala",
|
||||
"Forget": "Esquecer",
|
||||
"Forward Message": "Reenviar mensaxe",
|
||||
"Guests can join": "Convidados pódense unir",
|
||||
"Hide panel": "Agochar panel",
|
||||
"(HTTP status %(httpStatus)s)": "(Estado HTTP %(httpStatus)s)",
|
||||
"I understand the risks and wish to continue": "Entendos os riscos e desexo continuar",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Para poder diagnosticar o problema, os rexistros de este cliente enviaranse neste informe de fallo. Si prefire enviar só o texto superior, desmarque:",
|
||||
"Invite to this room": "Convidar a esta sala",
|
||||
"Keywords": "Palabras chave",
|
||||
"Leave": "Saír",
|
||||
"Login": "Conectar",
|
||||
"Loading bug report module": "Cargando o módulo de informe de fallos",
|
||||
"Low Priority": "Baixa prioridade",
|
||||
"Members": "Membresía",
|
||||
"Mentions only": "Só mencións",
|
||||
"Messages containing my display name": "Mensaxes que conteñen o meu nome público",
|
||||
"Messages containing <span>keywords</span>": "Mensaxes que conteñen <span>palabras chave</span>",
|
||||
"Messages containing my user name": "Mensaxes que conteñen o meu nome de usuaria",
|
||||
"Messages in group chats": "Mensaxes en grupos de chat",
|
||||
"Messages in one-to-one chats": "Mensaxes en chats un-a-un",
|
||||
"Messages sent by bot": "Mensaxes enviadas por bot",
|
||||
"more": "máis",
|
||||
"Mute": "Acalar",
|
||||
"No rooms to show": "Sen salas que mostrar",
|
||||
"Noisy": "Ruidoso",
|
||||
"Notification targets": "Obxetivos das notificacións",
|
||||
"Notifications": "Notificacións",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Notificacións das reglas de seguimento das seguintes palabras que non se mostrarán aquí:",
|
||||
"Notify for all other messages/rooms": "Notificar para todas as outras mensaxes/salas",
|
||||
"Notify me for anything else": "Notificarme todo o demáis",
|
||||
"Off": "Off",
|
||||
"On": "On",
|
||||
"Operation failed": "Fallou a operación",
|
||||
"Permalink": "Ligazón permanente",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Por favor describa a incidencia. Que estaba a facer? Que tiña que pasar? Que aconteceu en realidade?",
|
||||
"Please describe the bug and/or send logs.": "Por favor describa a incidencia e/ou envíe o informe.",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Por favor instale <a href=\"https://www.google.com/chrome\">Chrome</a> ou <a href=\"https://getfirefox.com\">Firefox</a> para ter a mellor experiencia de uso.",
|
||||
"powered by Matrix": "funciona grazas a Matrix",
|
||||
"Quote": "Cita",
|
||||
"Reject": "Rexeitar",
|
||||
"Remove %(name)s from the directory?": "Eliminar %(name)s do directorio?",
|
||||
"Remove": "Eliminar",
|
||||
"remove %(name)s from the directory.": "eliminar %(name)s do directorio.",
|
||||
"Remove from Directory": "Eliminar do directorio",
|
||||
"Report a bug": "Informar de un fallo",
|
||||
"Resend": "Voltar a enviar",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop en %(platformName)s",
|
||||
"Riot does not know how to join a room on this network": "Riot non sabe cómo conectar con unha sala en esta rede",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot no se pode executar na web móbil. Instalar a app?",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot utiliza características avanzadas do navegador, algunhas das cales non están dispoñibles ou son experimentales no seu navegador actual.",
|
||||
"Room not found": "Non se atopou a sala",
|
||||
"Search": "Busca",
|
||||
"Search…": "Buscar…",
|
||||
"Search for a room": "Buscar unha sala",
|
||||
"Send": "Enviar",
|
||||
"Send logs": "Enviar informes",
|
||||
"Send Custom Event": "Enviar evento personalizado",
|
||||
"Send Custom State Event": "Enviar evento de estado personalizado",
|
||||
"Explore Room State": "Explorar estado da sala",
|
||||
"Source URL": "URL fonte",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Desculpe, o seu navegador <b>non pode</b> executar Riot.",
|
||||
"The Home Server may be too old to support third party networks": "O servidor de inicio podería ser demasiando antigo como para aceptar redes de terceiros",
|
||||
"There are advanced notifications which are not shown here": "Existen notificacións avanzadas que non se mostran aquí",
|
||||
"The server may be unavailable or overloaded": "O servidor podería non estar dispoñible ou sobrecargado",
|
||||
"This Room": "Esta sala",
|
||||
"Unable to fetch notification target list": "Non se puido procesar a lista de obxetivo de notificacións",
|
||||
"Unable to join network": "Non se puido conectar a rede",
|
||||
"Unable to look up room ID from server": "Non se puido atopar o ID da sala do servidor",
|
||||
"Unavailable": "Non dispoñible",
|
||||
"Unhide Preview": "Desagochar a vista previsa",
|
||||
"Unknown device": "Dispositivo descoñecido",
|
||||
"unknown error code": "código de fallo descoñecido",
|
||||
"Unnamed room": "Sala sen nome",
|
||||
"Update": "Actualizar",
|
||||
"Uploaded on %(date)s by %(user)s": "Subido a %(date)s por %(user)s",
|
||||
"Uploading report": "Informe da subida",
|
||||
"View Decrypted Source": "Ver a fonte descifrada",
|
||||
"View Source": "Ver fonte",
|
||||
"What's New": "Qué hai de novo",
|
||||
"What's new?": "Qué hai de novo?",
|
||||
"Waiting for response from server": "Agardando pola resposta do servidor",
|
||||
"When I'm invited to a room": "Cando son convidado a unha sala",
|
||||
"World readable": "Visible por todos",
|
||||
"You cannot delete this image. (%(code)s)": "Non pode eliminar esta imaxe. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "Non pode eliminar esta mensaxe. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "Non está a recibir notificacións de escritorio",
|
||||
"You must specify an event type!": "Debe indicar un tipo de evento!",
|
||||
"Thank you!": "Grazas!",
|
||||
"Sunday": "Domingo",
|
||||
"Monday": "Luns",
|
||||
"Tuesday": "Martes",
|
||||
"Wednesday": "Mércores",
|
||||
"Thursday": "Xoves",
|
||||
"Friday": "Venres",
|
||||
"Saturday": "Sábado",
|
||||
"Today": "Hoxe",
|
||||
"Yesterday": "Onte",
|
||||
"OK": "OK",
|
||||
"Warning": "Aviso",
|
||||
"Checking for an update...": "Comprobando as actualizacións...",
|
||||
"Error encountered (%(errorDetail)s).": "Houbo un erro (%(errorDetail)s).",
|
||||
"Event sent!": "Evento enviado!",
|
||||
"Event Type": "Tipo de evento",
|
||||
"Event Content": "Contido do evento",
|
||||
"State Key": "Chave do estado",
|
||||
"No update available.": "Sen actualizacións.",
|
||||
"Downloading update...": "Descargando actualización...",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Precisa utilizar HTTPS para establecer unha chamada de pantalla compartida.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Co seu navegador actual a apareciencia e uso do aplicativo poderían estar totalmente falseadas, e algunhas características poderían non funcionar. Se quere pode continuar, pero debe ser consciente de que poden haber fallos!",
|
||||
"Welcome to Riot.im": "Benvida a Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat & colaboración descentralizados e cifrados grazas a [matrix]",
|
||||
"Search the room directory": "Buscar no directorio de salas",
|
||||
"Chat with Riot Bot": "Chat co Bot de Riot",
|
||||
"Get started with some tips from Riot Bot!": "Iníciese con algúns consellos do Bot de Riot!",
|
||||
"General discussion about Matrix and Riot": "Discusión xeral sobre Matrix e Riot",
|
||||
"Discussion of all things Matrix!": "Conversa sobre to o relativo a Matrix!",
|
||||
"Riot/Web & Desktop chat": "Riot/Web & chat de Escritorio",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & chat matrix-ios-sdk",
|
||||
"Matrix technical discussions": "Discusións técnicas sobre Matrix",
|
||||
"Running Matrix services": "Servizos correndo sobre Matrix",
|
||||
"Community-run support for Synapse": "Axuda da comunidade para Synapse",
|
||||
"Admin support for Dendrite": "Axuda administrador para Dendrite",
|
||||
"Announcements about Synapse releases": "Anuncios sobre lanzamentos de Synapse",
|
||||
"Support for those using and running matrix-appservice-irc": "Axuda para quen usa matrix-appservice-irc",
|
||||
"Building services on Matrix": "Deseñando servizos sobre Matrix",
|
||||
"Support for those using the Matrix spec": "Axuda para quen usa a especificación Matrix",
|
||||
"Design and implementation of E2E in Matrix": "Deseño e implementación de E2E en Matrix",
|
||||
"Implementing VR services with Matrix": "Implementando servizos de RV con Matrix",
|
||||
"Implementing VoIP services with Matrix": "Implementación de servizos VoIP con Matrix",
|
||||
"Discussion of the Identity Service API": "Conversa sobre a Identity Service API",
|
||||
"Support for those using, running and writing other bridges": "Axuda para que utiliza, executa e desenvolve outras pontes",
|
||||
"Contributing code to Matrix and Riot": "Contribuíndo ao código en Matrix e Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Chat para o equipo de desenvolvemento do Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "Chat para o equipo de desenvolvemento de Dendrite",
|
||||
"Co-ordination for Riot/Web translators": "Coordinación para tradutores de Riot/Web",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Xa existen multitude de salas en Matrix, ligadas a redes existentes (Slack, IRC, Gitter etc) ou independentes. Busque no directorio!",
|
||||
"Failed to change password. Is your password correct?": "Fallo ao cambiar o contrasinal. É correcto o contrasinal?",
|
||||
"You have successfully set a password!": "Mudou con éxito o seu contrasinal!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Pode voltar a súa contra tras desconectarse, e conectarse en outros dispositivos.",
|
||||
"Continue": "Continuar",
|
||||
"Please set a password!": "Por favor estableza un contrasinal!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Esto permitiralle voltar a súa conta tras desconectarse, e conectarse en outros dispositivos.",
|
||||
"You have successfully set a password and an email address!": "Estableceu correctamente un contrasinal e enderezo de correo!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Lembre, sempre poderá poñer un enderezo de correo nos axustes de usuario si cambia de idea.",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Para voltar a súa conta no futuro debe <u>establecer un contrasinal>/u>",
|
||||
"Set Password": "Establecer contrasinal",
|
||||
"Couldn't load home page": "Non se cargou a páxina de inicio",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Pode que os configurase nun cliente diferente de Riot. Non pode establecelos desde Riot pero aínda así aplicaranse",
|
||||
"Riot/Android & matrix-android-sdk chat": "Chat para Riot/Android & matrix-android-sdk",
|
||||
"Show message in desktop notification": "Mostrar mensaxe nas notificacións de escritorio",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Vostede pode utilizar as opcións de servidor personalizado para conectarse a outros servidores Matrix indicando o enderezo URL do Servidor.</br>Esto permítelle utilizar Riot con unha conta Matrix existente en outro servidor.<br/><br/>Tamén pode indicar un servidor de identidade pero non poderá convidar a usarias polo seu enderezo de correo electrónico, o ser convidada vostede por correo electrónico.",
|
||||
"Toolbox": "Ferramentas",
|
||||
"Edit": "Editar",
|
||||
"Send Account Data": "Enviar datos da conta",
|
||||
"Explore Account Data": "Explorar datos da conta",
|
||||
"Unpin Message": "Desfixar mensaxe",
|
||||
"Pin Message": "Fixar mensaxe",
|
||||
"Register": "Rexistar",
|
||||
"Rooms": "Salas",
|
||||
"Invite to this community": "Convidar a esta comunidade",
|
||||
"Add rooms to this community": "Engadir salas a esta comunidade",
|
||||
"Appear Offline": "Aparecer fora de liña",
|
||||
"Away": "Fóra",
|
||||
"Please install <chromeLink>Chrome</chromeLink> or <firefoxLink>Firefox</firefoxLink> for the best experience.": "Por favor instale <chromeLink>Chrome</chromeLink> ou <firefoxLink>Firefox</firefoxLink> para a mellor experiencia de usuaria.",
|
||||
"<safariLink>Safari</safariLink> and <operaLink>Opera</operaLink> work too.": "<safariLink>Safari</safariLink> e <operaLink>Opera</operaLink> tamén funcionan.",
|
||||
"Reply": "Resposta",
|
||||
"Online": "En liña",
|
||||
"View Community": "Ver Comunidade",
|
||||
"%(count)s Members|other": "%(count)s Membros",
|
||||
"%(count)s Members|one": "%(count)s Membro"
|
||||
}
|
||||
@@ -3,7 +3,7 @@
|
||||
"Add an email address above to configure email notifications": "הוסף כתובת דואר אלקטורני למעלה בכדי להגדיר התראות",
|
||||
"Advanced notification settings": "הגדרות מתקדמות להתראות",
|
||||
"All messages": "כל ההודעות",
|
||||
"All messages (loud)": "כל ההודעות (צעקה)",
|
||||
"All messages (noisy)": "כל ההודעות (צעקה)",
|
||||
"All Rooms": "כל החדרים",
|
||||
"All notifications are currently disabled for all targets.": "התראות מנוטרלות לכלל המערכת.",
|
||||
"An error occurred whilst saving your email notification preferences.": "קרתה שגיאה בזמן שמירת הגדרות התראה באמצעות הדואר האלקטרוני.",
|
||||
@@ -16,7 +16,6 @@
|
||||
"Collapse panel": "סגור פאנל",
|
||||
"Collecting app version information": "אוסף מידע על גרסת האפליקציה",
|
||||
"Collecting logs": "אוסף לוגים",
|
||||
"Create new room": "צור חדר חדש",
|
||||
"Couldn't find a matching Matrix room": "לא נמצא חדר כזה ב Matrix",
|
||||
"Custom Server Options": "הגדרות שרת מותאמות אישית",
|
||||
"customServer_text": "אפשר להשתמש בהגדרות שרת מותאמות אישית בכדי להתחבר לשרתים אחרים באמצעות בחירת כתובת שרת בית שונה.<br/>זה יאפשר לך להשתמש ב Riot עם חשבון קיים ב Matrix אבל אל מול שרת בית שונה. <br/><br/>כמו כן אפשר להגדיר זהות מותאמת אישית אבל אז לא תהיה אפשרות להזמין משתמשים באמצעות כתובת אימייל, או להזמין את עצמך באמצעות כתובת האימייל.",
|
||||
@@ -37,14 +36,12 @@
|
||||
"Error saving email notification preferences": "שגיאה בעת שמירת הגדרות התראה באמצעות הדואר האלקטרוני",
|
||||
"#example": "#דוגמא",
|
||||
"Expand panel": "הרחב פנאל",
|
||||
"Failed to": "נכשל ב",
|
||||
"Failed to add tag %(tagName)s to room": "נכשל בעת הוספת תג %(tagName)s לחדר",
|
||||
"Failed to change settings": "נכשל בעת שינוי הגדרות",
|
||||
"Failed to forget room %(errCode)s": "נכשל בעת בקשה לשכוח חדר %(errCode)s",
|
||||
"Failed to update keywords": "נכשל עדכון מילים",
|
||||
"Failed to get protocol list from Home Server": "נכשל בעת נסיון קבלת רשימת פרוטוקולים משרת הבית",
|
||||
"Failed to get public room list": "נכשלה קבלת רשימת חדרים ציבוריים",
|
||||
"Failed to join the room": "הצטרפות לחדר נכשלה",
|
||||
"Failed to remove tag %(tagName)s from room": "נכשל בעת נסיון הסרת תג %(tagName)s מהחדר",
|
||||
"Failed to send report: ": "נכשל בעת שליחת דו\"ח: ",
|
||||
"Failed to set direct chat tag": "נכשל בעת סימון תג לשיחה ישירה",
|
||||
@@ -55,9 +52,7 @@
|
||||
"Filter room names": "מיין לפי שמות חדרים",
|
||||
"Forget": "שכח",
|
||||
"Forward Message": "העבר הודעה",
|
||||
" from room": " מחדר",
|
||||
"Guests can join": "אורחים יכולים להצטרף",
|
||||
"Guest users can't invite users. Please register to invite.": "משתמש אורח לא יכול להזמין משתמשים אחרים. נא להרשם בכדי להזמין.",
|
||||
"Hide panel": "הסתר פנאל",
|
||||
"I understand the risks and wish to continue": "אני מבין את הסיכונים אבל מבקש להמשיך",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "בכדי לנתח את הבעיות, ישלח דוח עם פרטי הבעיה. אם ברצונך רק לשלוח את שנאמר למעלה, נא הסר את הסימון:",
|
||||
@@ -90,7 +85,6 @@
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "נא תאר את הבאג. מה עשית? מה ציפית שיקרה? מה קרה בפועל?",
|
||||
"Please describe the bug and/or send logs.": "נא תאר את הבאג ו/או שלח את הלוגים.",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "נא התקן <a href=\"https://www.google.com/chrome\"> כרום</a> או <a href=\"https://getfirefox.com\"> פיירפוקס</a> לשימוש מייטבי.",
|
||||
"Please Register": "נא להרשם",
|
||||
"powered by Matrix": "מופעל ע\"י Matrix",
|
||||
"Quote": "ציטוט",
|
||||
"Reject": "דחה",
|
||||
@@ -104,23 +98,18 @@
|
||||
"Riot does not know how to join a room on this network": "Riot אינו יודע כיצד להצטרף לחדר ברשת זו",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot לא נתמך באמצעות דפדפן במכשיר הסלולארי. האם ברצונך להתקין את האפליקציה?",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot משתמש במספר רב של אפשרויות מתקדמות בדפדפן, חלק מהן לא זמינות או בשלבי נסיון בדפדפן שבשימושך כרגע.",
|
||||
"Room directory": "רשימת חדרים",
|
||||
"Room not found": "חדר לא נמצא",
|
||||
"Search": "חפש",
|
||||
"Search…": "חפש…",
|
||||
"Search for a room": "חפש חדר",
|
||||
"Send": "שלח",
|
||||
"Send logs": "שלח לוגים",
|
||||
"Settings": "הגדרות",
|
||||
"Source URL": "כתובת אתר המקור",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "מצטערים, הדפדפן שלך הוא <b> אינו</b> יכול להריץ את Riot.",
|
||||
"Start chat": "התחל שיחה",
|
||||
"The Home Server may be too old to support third party networks": "שרת הבית ישן ואינו יכול לתמוך ברשתות צד שלישי",
|
||||
"There are advanced notifications which are not shown here": "ישנן התראות מתקדמות אשר אינן מוצגות כאן",
|
||||
"The server may be unavailable or overloaded": "השרת אינו זמין או עמוס",
|
||||
"This Room": "החדר הזה",
|
||||
"This room is inaccessible to guests. You may be able to join if you register.": "החדר אינו זמין לאורחים. יש באפשרותך להצטרף רק אחרי רישום.",
|
||||
" to room": " אל חדר",
|
||||
"Unable to fetch notification target list": "לא ניתן לאחזר רשימת יעדי התראה",
|
||||
"Unable to join network": "לא ניתן להצטרף לרשת",
|
||||
"Unable to look up room ID from server": "לא ניתן לאתר מזהה חדר על השרת",
|
||||
@@ -142,7 +131,6 @@
|
||||
"You cannot delete this image. (%(code)s)": "אי אפשר למחוק את התמונה. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "לא ניתן למחוק הודעה זו. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "אתה לא מקבל התראות משולחן העבודה",
|
||||
"You are Rioting as a guest. <a>Register</a> or <a>sign in</a> to access more rooms and features!": "אתה משתמש ב Riot כאורח. <a>הרשם</a> או <a> התחבר</a> בכדי לגשת לחדרים נוספים!",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "יתכן כי בצעת את ההגדרות בצד לקוח ולא ב Riot. לא תוכל לווסת אותם ב Riot אבל הם עדיין תקפים",
|
||||
"Sunday": "ראשון",
|
||||
"Monday": "שני",
|
||||
@@ -155,7 +143,6 @@
|
||||
"Yesterday": "אתמול",
|
||||
"OK": "בסדר",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "עליך להשתמש ב HTTPS בכדי לבצע שיחה משותפת.",
|
||||
"Welcome page": "מסך פתיחה",
|
||||
"Welcome to Riot.im": "ברוכים הבאים ל Riot.im",
|
||||
"Search the room directory": "חפש ברשימת החדרים",
|
||||
"Chat with Riot Bot": "שיחה עם Riot בוט",
|
||||
@@ -191,9 +178,7 @@
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "זה יאפשר לך לחזור לחשבונך אחרי התנתקות ולהתחבר באמצעות התקנים אחרים.",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s באמצעות הדפדפן %(browserName)s על גבי %(osName)s",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\"> ספארי</a> ו <a href=\"http://opera.com\"> אופרה</a> עובדים גם כן.",
|
||||
"Drop here %(toAction)s": "זרוק כאן %(toAction)s",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "התראה על מילות המפתח הבאות עוקבת אחר החוקים שאינם יכולים להיות מוצגים כאן:",
|
||||
"Redact": "אדום",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "באמצעות הדפדפן הנוכחי שלך המראה של האפליקציה יכול להיות שגוי לחלוטין וחלק מהאפשרויות לא תתפקדנה. אם תרצה לנסות בכל זאת תוכל אבל אז הסיכון חל עליך!",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "צ'ט מוצפן & ושת\"פ נעשה ע\"י ה [matrix]"
|
||||
}
|
||||
|
||||
@@ -1,121 +1,108 @@
|
||||
{
|
||||
"Add an email address above to configure email notifications": "E-mail értesítés beállításához írd be az e-mail címed",
|
||||
"Add an email address above to configure email notifications": "E-mail értesítések beállításához adj meg egy e-mail címet",
|
||||
"Advanced notification settings": "Haladó értesítési beállítások",
|
||||
"All messages": "Minden üzenet",
|
||||
"All messages (loud)": "Minden üzenet (hangos)",
|
||||
"All messages (noisy)": "Minden üzenet (hangos)",
|
||||
"All notifications are currently disabled for all targets.": "Minden céleszközön minden értesítés tiltva van.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Hiba történt az e-mail értesítés beállításánál.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Hiba történt az e-mail értesítési beállításaid mentése közben.",
|
||||
"Call invitation": "Hívás meghívó",
|
||||
"Cancel Sending": "Küldés megszakítása",
|
||||
"Can't update user notification settings": "Nem sikerül frissíteni az értesítési beállításokat",
|
||||
"Close": "Bezár",
|
||||
"Create new room": "Új szoba létrehozása",
|
||||
"Can't update user notification settings": "Nem lehet frissíteni az értesítési beállításokat",
|
||||
"Close": "Bezárás",
|
||||
"Couldn't find a matching Matrix room": "Nem található a keresett Matrix szoba",
|
||||
"Custom Server Options": "Egyedi szerver beállítások",
|
||||
"Custom Server Options": "Egyedi szerverbeállítások",
|
||||
"delete the alias.": "becenév törlése.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Törlöd a(z) %(alias)s szobát és kiveszed a könyvtárból ezt: %(name)s?",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Törlöd a szoba nevét (%(alias)s) és eltávolítod a listából ezt: %(name)s?",
|
||||
"Direct Chat": "Közvetlen csevegés",
|
||||
"Directory": "Könyvtár",
|
||||
"Dismiss": "Eltűntet",
|
||||
"Dismiss": "Eltüntet",
|
||||
"Download this file": "Fájl letöltése",
|
||||
"Drop here %(toAction)s": "%(toAction)s -t húzd ide",
|
||||
"Enable audible notifications in web client": "Hallható értesítések engedélyezése a webes kliensben",
|
||||
"Enable audible notifications in web client": "Hangértesítések engedélyezése a webkliensben",
|
||||
"Enable desktop notifications": "Asztali értesítések engedélyezése",
|
||||
"Enable email notifications": "E-mail értesítések engedélyezése",
|
||||
"Enable notifications for this account": "Értesítések engedélyezése a fiókhoz",
|
||||
"Enable notifications for this account": "Értesítések engedélyezése ehhez a fiókhoz",
|
||||
"Enable them now": "Engedélyezés most",
|
||||
"Enter keywords separated by a comma:": "Kulcsszavak vesszővel elválasztva:",
|
||||
"Error": "Hiba",
|
||||
"Error saving email notification preferences": "Hiba email értesítés beállításának mentésénél",
|
||||
"Error saving email notification preferences": "Hiba az e-mail értesítési beállítások mentésekor",
|
||||
"#example": "#példa",
|
||||
"Failed to": "Nem lehet",
|
||||
"Failed to add tag %(tagName)s to room": "Nem lehet a címkét hozzáadni a szobához: %(tagName)s",
|
||||
"Failed to change settings": "Nem lehet a beállítást megváltoztatni",
|
||||
"Failed to forget room %(errCode)s": "Nem lehet eltávolítani a szobát: %(errCode)s",
|
||||
"Failed to update keywords": "Nem lehet a kulcsszavakat frissíteni",
|
||||
"Failed to get protocol list from Home Server": "Nem lehet a protokoll listát lekérni a Saját szerverről",
|
||||
"Failed to get public room list": "Nem lehet lekérdezni a nyílt szobák listáját",
|
||||
"Failed to join the room": "Nem lehet csatlakozni a szobához",
|
||||
"Failed to remove tag %(tagName)s from room": "Nem lehet törölni a(z) %(tagName)s címkét a szobáról",
|
||||
"Failed to set direct chat tag": "Nem lehet a címkét beállítani a közvetlen beszélgetéshez",
|
||||
"Failed to set Direct Message status of room": "Nem lehet beállítani a Közvetlen beszélgetés státuszt a szobához",
|
||||
"Failed to add tag %(tagName)s to room": "Nem sikerült hozzáadni a szobához ezt: %(tagName)s",
|
||||
"Failed to change settings": "A beállítások megváltoztatása nem sikerült",
|
||||
"Failed to forget room %(errCode)s": "Nem sikerült elfelejteni a szobát: %(errCode)s",
|
||||
"Failed to update keywords": "Nem lehet frissíteni a kulcsszavakat",
|
||||
"Failed to get protocol list from Home Server": "Nem sikerült a protokoll listát lekérni a saját szerverről",
|
||||
"Failed to get public room list": "Nem sikerült lekérdezni a nyilvános szobák listáját",
|
||||
"Failed to remove tag %(tagName)s from room": "Nem sikerült a szobáról eltávolítani ezt: %(tagName)s",
|
||||
"Failed to set direct chat tag": "Nem sikerült a közvetlen beszélgetés jelzést beállítani",
|
||||
"Failed to set Direct Message status of room": "Nem lehet beállítani a szoba közvetlen beszélgetés státuszát",
|
||||
"Favourite": "Kedvenc",
|
||||
"Fetching third party location failed": "Nem sikerült lekérdezni a harmadik felet",
|
||||
"Fetching third party location failed": "Nem sikerült lekérdezni a harmadik fél helyét",
|
||||
"Files": "Fájlok",
|
||||
"Filter room names": "Szoba nevek szűrése",
|
||||
"Filter room names": "Szobanevek szűrése",
|
||||
"Forget": "Elfelejt",
|
||||
" from room": " szobából",
|
||||
"Guests can join": "Vendégek csatlakozhatnak",
|
||||
"Guest users can't invite users. Please register to invite.": "Vendég felhasználó nem küldhet meghívót. Kérlek regisztrálj meghívó küldéshez.",
|
||||
"Guests can join": "Vendégek is csatlakozhatnak",
|
||||
"Invite to this room": "Meghívás a szobába",
|
||||
"Keywords": "Kulcsszavak",
|
||||
"Leave": "Elhagy",
|
||||
"Low Priority": "Alacsony priorítás",
|
||||
"Low Priority": "Alacsony prioritás",
|
||||
"Members": "Résztvevők",
|
||||
"Mentions only": "Csak ha megemlítenek",
|
||||
"Messages containing my display name": "Az üzenet tartalmazza a nevem",
|
||||
"Messages containing my user name": "Az üzenet tartalmazza a felhasználói nevem",
|
||||
"Messages in group chats": "Üzenetek a csoportszobában",
|
||||
"Messages in one-to-one chats": "Üzenetek közvetlen beszélgetésekben",
|
||||
"Messages sent by bot": "Botok által küldött üzenetek",
|
||||
"more": "további",
|
||||
"Messages containing my display name": "A profilnevemet tartalmazó üzenetek",
|
||||
"Messages containing my user name": "A felhasználónevemet tartalmazó üzenetek",
|
||||
"Messages in group chats": "Csoportszobák üzenetei",
|
||||
"Messages in one-to-one chats": "Személyes beszélgetések üzenetei",
|
||||
"Messages sent by bot": "Botok üzenetei",
|
||||
"more": "tovább",
|
||||
"Mute": "Elnémít",
|
||||
"No rooms to show": "Nincs megjeleníthető szoba",
|
||||
"No rooms to show": "Nincsenek megjeleníthető szobák",
|
||||
"Noisy": "Hangos",
|
||||
"Notification targets": "Értesítések célpontja",
|
||||
"Notifications": "Értesítések",
|
||||
"Notify for all other messages/rooms": "Értesítés minden más üzenethez/szobához",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a>val és <a href=\"http://opera.com\">Opera</a>val is működik.",
|
||||
"Collapse panel": "Panel bezárása",
|
||||
"Collapse panel": "Panel becsukása",
|
||||
"customServer_text": "Egyedi Matrix szervert használhatsz a Saját szerver URL beállításával.<br/> Ezzel meglévő Matrix fiókot használhatsz Riot klienssel és egyedi szerverrel.<br/><br/>Beállíthatsz egyedi \"identity\" szervert de akkor nem tudsz e-maillel meghívni felhasználót és téged sem tudnak meghívni e-maillel.",
|
||||
"Expand panel": "Panel kinyitása",
|
||||
"I understand the risks and wish to continue": "Megértettem a kockázatot és folytatom",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "A kulcsszavakhoz tartozó értesítések olyan szabályokat követnek amiket nem lehet itt megjeleníteni:",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Az alábbi kulcsszavakról jövő értesítések szabályait nem lehet itt megjeleníteni:",
|
||||
"Notify me for anything else": "Értesíts minden egyéb esetben",
|
||||
"Off": "Ki",
|
||||
"On": "Be",
|
||||
"Operation failed": "Művelet sikertelen",
|
||||
"Operation failed": "Sikertelen művelet",
|
||||
"Permalink": "Állandó hivatkozás",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "A legjobb élmény érdekében telepíts <a href=\"https://www.google.com/chrome\">Chrome</a>ot vagy <a href=\"https://getfirefox.com\">Firefox</a>ot.",
|
||||
"Please Register": "Regisztrálj",
|
||||
"powered by Matrix": "Matrixon alapul",
|
||||
"Quote": "Idézet",
|
||||
"Redact": "Szerkeszt",
|
||||
"powered by Matrix": "A Matrix hajtja",
|
||||
"Quote": "Idéz",
|
||||
"Reject": "Elutasít",
|
||||
"Remove %(name)s from the directory?": "Törlöd a %(name)s szobát a listából?",
|
||||
"Remove": "Töröl",
|
||||
"Remove %(name)s from the directory?": "Törlöd ezt a szobát a listából: %(name)s?",
|
||||
"Remove": "Eltávolítás",
|
||||
"remove %(name)s from the directory.": "%(name)s szoba törlése a listából.",
|
||||
"Remove from Directory": "Törlés a szobák listájából",
|
||||
"Resend": "Újraküld",
|
||||
"Riot does not know how to join a room on this network": "Riot nem tudja, hogy csatlakozzon ehhez a szobához ezen a hálózaton",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot sok haladó képességét használja a böngészőnek amik közül lehet, hogy nem mind érhető el a most használt böngészőben vagy még csak kísérleti jellegű.",
|
||||
"Room directory": "Szobák listája",
|
||||
"Remove from Directory": "Törlés a listából",
|
||||
"Resend": "Küldés újra",
|
||||
"Riot does not know how to join a room on this network": "A Riot nem tud csatlakozni szobához ezen a hálózaton",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "A Riot sok fejlett böngészőfunkciót használ, amelyeknek egy része egyáltalán nem, vagy csak kísérleti jelleggel érhető el a jelenlegi böngésződben.",
|
||||
"Room not found": "A szoba nem található",
|
||||
"Search for a room": "Szoba keresése",
|
||||
"Settings": "Beállítások",
|
||||
"Source URL": "Forrás URL",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Elnézést, a böngésződ <b>nem</b> képes futtatni a Riotot.",
|
||||
"Start chat": "Csevegés indítása",
|
||||
"The Home Server may be too old to support third party networks": "A Saját szerver lehet, hogy túl régi ahhoz, hogy más hálózatokhoz tudjon kapcsolódni",
|
||||
"There are advanced notifications which are not shown here": "Vannak haladó értesítések amik itt nincsenek megjelenítve",
|
||||
"The server may be unavailable or overloaded": "A szerver nem érhető el vagy túl van terhelve",
|
||||
"This room is inaccessible to guests. You may be able to join if you register.": "A szoba vendégek számára elérhetetlen. Csak regisztráció után tudsz csatlakozni.",
|
||||
" to room": " szobába",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Elnézést, a böngésződben <b>nem</b> fut a Riot.",
|
||||
"The Home Server may be too old to support third party networks": "Lehet, hogy a saját szerver túl régi és nem támogatja a csatlakozást más hálózatokhoz",
|
||||
"There are advanced notifications which are not shown here": "Vannak itt nem látható, haladó értesítések",
|
||||
"The server may be unavailable or overloaded": "A szerver nem elérhető vagy túlterhelt",
|
||||
"Unable to fetch notification target list": "Nem sikerült letölteni az értesítési célok listáját",
|
||||
"Unable to join network": "Nem sikerült kapcsolódni a hálózathoz",
|
||||
"Unable to look up room ID from server": "Nem lehet lekérdezni a szoba ID-ját a szervertől",
|
||||
"Unhide Preview": "Előkép felfedése",
|
||||
"unknown error code": "ismeretlen hiba kód",
|
||||
"Unnamed room": "Név nélküli szoba",
|
||||
"Uploaded on %(date)s by %(user)s": "Feltöltés: %(date)s, %(user)s",
|
||||
"Unable to look up room ID from server": "Nem lehet a szoba azonosítóját megkeresni a szerveren",
|
||||
"Unhide Preview": "Előnézet mutatása",
|
||||
"unknown error code": "ismeretlen hibakód",
|
||||
"Unnamed room": "Névtelen szoba",
|
||||
"Uploaded on %(date)s by %(user)s": "Feltöltötte %(user)s ekkor: %(date)s",
|
||||
"View Decrypted Source": "Visszafejtett forrás megjelenítése",
|
||||
"View Source": "Forrás megjelenítése",
|
||||
"When I'm invited to a room": "Amikor meghívtak a szobába",
|
||||
"World readable": "Mindenki olvashatja",
|
||||
"When I'm invited to a room": "Amikor meghívnak egy szobába",
|
||||
"World readable": "Nyilvános",
|
||||
"You cannot delete this image. (%(code)s)": "Nem törölheted ezt a képet. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "Nem törölheted ezt az üzenetet. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "Nem fogadsz asztali értesítéseket",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Valószínűleg Riottól eltérő klienssel állítottad be. Riotból nem állítható de érvényben van",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Egy másik, nem Riot-klienssel állítothattad be. A Riotban módosítani nem tudod ezeket, de érvényben vannak",
|
||||
"Sunday": "Vasárnap",
|
||||
"Monday": "Hétfő",
|
||||
"Tuesday": "Kedd",
|
||||
@@ -125,78 +112,119 @@
|
||||
"Saturday": "Szombat",
|
||||
"Today": "Ma",
|
||||
"Yesterday": "Tegnap",
|
||||
"Welcome page": "Üdvözlő oldal",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "A jelenlegi bőngésződdel teljesen hibás lehet az alkalmazás kinézete és bizonyos funkciók, ha nem az összes, nem fog működni. Ha mindenképpen ki akarod próbálni, folytathatod de egyedül vagy minden felbukkanó problémával!",
|
||||
"Messages containing <span>keywords</span>": "Az üzenet <span>kulcsszavakat</span> tartalmaz",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Ebben a böngészőben az alkalmazás felülete tele lehet hibával, és az is lehet, hogy egyáltalán nem működik. Ha így is ki szeretnéd próbálni, megteheted, de ha valami gondod van, nem tudunk segíteni!",
|
||||
"Messages containing <span>keywords</span>": "<span>Kulcsszavakat</span> tartalmazó üzenetek",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s alkalmazás %(browserName)s böngészőn %(osName)s rendszeren",
|
||||
"A new version of Riot is available.": "Új verzió érhető el a Riot-ból.",
|
||||
"All Rooms": "Minden szoba",
|
||||
"A new version of Riot is available.": "Elérhető egy új Riot verzió.",
|
||||
"All Rooms": "Minden szobában",
|
||||
"Cancel": "Mégse",
|
||||
"Changelog": "Változások",
|
||||
"Collecting app version information": "Alkalmazás verzió információk összegyűjtése",
|
||||
"Collecting logs": "Naplók összegyűjtése",
|
||||
"Describe your problem here.": "Írd le a problémád itt.",
|
||||
"Failed to send report: ": "A jelentést nem lehetett elküldeni: ",
|
||||
"Forward Message": "Üzenet továbbküldése",
|
||||
"Describe your problem here.": "Írd le ide a problémádat.",
|
||||
"Failed to send report: ": "A jelentést nem sikerült elküldeni: ",
|
||||
"Forward Message": "Üzenet továbbítása",
|
||||
"Hide panel": "Panel elrejtése",
|
||||
"Loading bug report module": "Hibabejelentő modul betöltése",
|
||||
"Please describe the bug and/or send logs.": "Írd le a hibát és/vagy küld el a naplókat.",
|
||||
"Please describe the bug and/or send logs.": "Kérünk, írd le a hibát és/vagy küldd el a naplófájlokat.",
|
||||
"Report a bug": "Hiba bejelentése",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop ezen: %(platformName)s",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot nem támogatott mobil webböngészőn. Telepíted az alkalmazást?",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop itt: %(platformName)s",
|
||||
"Riot is not supported on mobile web. Install the app?": "A mobilböngésző nem támogatja a Riotot. Telepíted inkább az alkalmazást?",
|
||||
"Search": "Keresés",
|
||||
"Search…": "Keresés…",
|
||||
"Send": "Küld",
|
||||
"Send logs": "Naplók elküldése",
|
||||
"This Room": "Ez a szoba",
|
||||
"Send": "Elküld",
|
||||
"Send logs": "Naplófájlok elküldése",
|
||||
"This Room": "Ebben a szobában",
|
||||
"Unavailable": "Elérhetetlen",
|
||||
"Unknown device": "Ismeretlen eszköz",
|
||||
"Unknown device": "Ismeretlen készülék",
|
||||
"Update": "Frissítés",
|
||||
"Uploading report": "Jelentés feltöltése",
|
||||
"What's New": "Mik az újdonságok",
|
||||
"What's New": "Újdonságok",
|
||||
"What's new?": "Mik az újdonságok?",
|
||||
"Waiting for response from server": "Válasz várása a szervertől",
|
||||
"You are Rioting as a guest. <a>Register</a> or <a>sign in</a> to access more rooms and features!": "Vendégként használod a Riot-ot. <a>Regisztrálj</a> vagy <a>jelentkezz be</a> további szobák és lehetőségek eléréséhez!",
|
||||
"Waiting for response from server": "Várakozás a szerver válaszára",
|
||||
"OK": "Rendben",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "HTTPS-t kell használnod hogy képernyőmegosztásos hívást kezdeményezz.",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "A problémák diagnosztizálása érdekében erről a kliensről a hibajelentésben naplók lesznek elküldve. Ha csak az alábbi szöveget szeretnéd elküldeni akkor ezt ne jelöld meg:",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Írd le a hibát. Mit csináltál? Mi az amit szerettél volna ha történik? Ezzel szemben mi az ami történt?",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Képernyőmegosztás indításához HTTPS-t kell használnod.",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "A hibajelentésben naplófájlokat küldünk erről a kliensről, hogy feltárjuk a hibákat. Ha inkább csak a fenti szöveget szeretnéd elküldeni, töröld a pipát:",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Kérünk, írd le a hibát. Mit csináltál? Minek kellett volna történnie? Mi történt végül?",
|
||||
"Login": "Bejelentkezés",
|
||||
"Welcome to Riot.im": "Üdvözlünk a Riot.im-en",
|
||||
"Welcome to Riot.im": "Üdvözöl a Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizált, titkosított csevegés és kollaboráció [matrix] alapokon",
|
||||
"Search the room directory": "Keresés a szobák jegyzékében",
|
||||
"Search the room directory": "Keresés a szobajegyzékben",
|
||||
"Chat with Riot Bot": "Csevegés a Riot Robottal",
|
||||
"Get started with some tips from Riot Bot!": "Kezdd el a Riot használatát a Riot Robot tippjei segítségével!",
|
||||
"Get started with some tips from Riot Bot!": "Kezdj a Riot Robot néhány tippjével!",
|
||||
"General discussion about Matrix and Riot": "Általános beszélgetések a Matrixról és a Riotról",
|
||||
"Discussion of all things Matrix!": "Beszélgetések mindenről, ami a Matrixhoz kapcsolódik!",
|
||||
"Riot/Web & Desktop chat": "Riot/Web és asztali csevegés",
|
||||
"Discussion of all things Matrix!": "Beszélgetés mindenről, ami Matrix!",
|
||||
"Riot/Web & Desktop chat": "Riot/Web és Desktop csevegés",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS és matrix-ios-sdk csevegés",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android és matrix-android-sdk csevegés",
|
||||
"Matrix technical discussions": "Technikai jellegű beszélgetések a Matrixról",
|
||||
"Community-run support for Synapse": "Közösségi támogatás a Synapse-hez",
|
||||
"Admin support for Dendrite": "Adminisztrációs támogatás a Dendrite-hoz",
|
||||
"Announcements about Synapse releases": "Bejelentések a Synapse kiadásairól",
|
||||
"Running Matrix services": "Matrixszolgáltatások működtetése",
|
||||
"Support for those using and running matrix-appservice-irc": "Támogatás a matrix-appservice-irc használatáról és működtetéséről",
|
||||
"Building services on Matrix": "Szolgáltatások fejlesztése a Matrixra",
|
||||
"Support for those using the Matrix spec": "Támogatás a Matrix specifikáció használatáról",
|
||||
"Admin support for Dendrite": "Admin támogatás a Dendrite-hoz",
|
||||
"Announcements about Synapse releases": "Hírek a Synapse kiadásairól",
|
||||
"Running Matrix services": "Matrix szolgáltatások működtetése",
|
||||
"Support for those using and running matrix-appservice-irc": "Támogatás a matrix-appservice-irc használóinak és működtetőinek",
|
||||
"Building services on Matrix": "Szolgáltatások fejlesztése Matrixra",
|
||||
"Support for those using the Matrix spec": "Támogatás a Matrix specifikáció használóinak",
|
||||
"Design and implementation of E2E in Matrix": "A végponttól végpontig történő titkosítás (E2E) tervezése és implementációja a Matrixban",
|
||||
"Implementing VR services with Matrix": "A Matrixszal együttműködő virtuális valóság (VR) szolgáltatások implementációja",
|
||||
"Implementing VoIP services with Matrix": "A Matrixszal együttműködő VoIP szolgáltatások implementációja",
|
||||
"Discussion of the Identity Service API": "Beszélgetések az Identity Service API-ról",
|
||||
"Support for those using, running and writing other bridges": "Támogatás egyéb hídak használáról, működtetéséről és fejlesztéséről",
|
||||
"Implementing VR services with Matrix": "VR szolgáltatások implementációja Matrixba",
|
||||
"Implementing VoIP services with Matrix": "VoIP szolgáltatások implementációja Matrixba",
|
||||
"Discussion of the Identity Service API": "Beszélgetés az Identity Service API-ról",
|
||||
"Support for those using, running and writing other bridges": "Támogatás azoknak, akik egyéb hidakat használnak, működtetnek vagy készítenek",
|
||||
"Contributing code to Matrix and Riot": "Hozzájárulás a Matrix és Riot programkódjának fejlesztéséhez",
|
||||
"Dev chat for the Riot/Web dev team": "Csevegés a Riot/Web fejlesztői csapatával fejlesztőknek",
|
||||
"Dev chat for the Dendrite dev team": "Csevegés a Dendrite fejlesztői csapatával fejlesztőknek",
|
||||
"Co-ordination for Riot/Web translators": "Egyeztetés a Riot/Web fordítóival",
|
||||
"Failed to change password. Is your password correct?": "Nem sikerült megváltoztatni a jelszót. Helyesen írtad be a jelszavadat?",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Már sok létező szoba van a Matrixon, melyek más hálózatokkal vannak összekapcsolva (Slack, IRC, Gitter stb.) vagy függetlenek. Látogasd meg a szobajegyzéket!",
|
||||
"You have successfully set a password!": "Sikeresen állítottál be jelszót!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Most már visszatérhetsz a fiókodhoz kijelentkezés után, és más eszközökkel is be tudsz jelentkezni.",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Már sok szoba van a Matrixon: más hálózatokkal (Slack, IRC, Gitter stb.) összekapcsolt és függetlenek szobák is. Nézd meg a szobajegyzéket!",
|
||||
"You have successfully set a password!": "Sikerült beállítani a jelszót!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Most már kijelentkezés után is vissza tudsz lépni a fiókodba, és más készülékekről is be tudsz lépni.",
|
||||
"Continue": "Folytatás",
|
||||
"Please set a password!": "Kérlek, állíts be egy jelszót!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Ezzel visszatérhetsz kijelentkezés után a fiókodhoz és más eszközökkel is be tudsz jelentkezni.",
|
||||
"(HTTP status %(httpStatus)s)": "(HTTP állapot %(httpStatus)s)",
|
||||
"You have successfully set a password and an email address!": "Sikeresen beállítottad a jelszavad és e-mail címed!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Ha meggondolod magad, bármikor beállíthatod az e-mail címed a felhasználói beállításoknál."
|
||||
"Please set a password!": "Állíts be egy jelszót!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Így kijelentkezés után is vissza tudsz lépni a fiókodba, illetve más készülékekről is be tudsz lépni.",
|
||||
"(HTTP status %(httpStatus)s)": "(HTTP állapot: %(httpStatus)s)",
|
||||
"You have successfully set a password and an email address!": "Sikerült beállítani a jelszavad és e-mail címed!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Ha meggondolod magad, bármikor beállíthatod az e-mail címed a felhasználói beállításoknál.",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Hogy később visszaléphess a fiókodba, be kell állítanod egy <u>jelszót</u>",
|
||||
"Set Password": "Jelszó beállítása",
|
||||
"Warning": "Figyelmeztetés",
|
||||
"Checking for an update...": "Frissítés keresése...",
|
||||
"Error encountered (%(errorDetail)s).": "Hiba történt (%(errorDetail)s).",
|
||||
"No update available.": "Nincs elérhető frissítés.",
|
||||
"Downloading update...": "Frissítés letöltése...",
|
||||
"Couldn't load home page": "Nem sikerült betölteni a kezdőlapot",
|
||||
"Bug report sent": "Hibajelentés elküldve",
|
||||
"Thank you!": "Köszönjük!",
|
||||
"Back": "Vissza",
|
||||
"Developer Tools": "Fejlesztői eszközök",
|
||||
"Failed to send custom event.": "Nem sikerült elküldeni az egyéni eseményt.",
|
||||
"Send Custom Event": "Egyéni esemény elküldése",
|
||||
"Send Custom State Event": "Egyéni állapot esemény küldése",
|
||||
"Explore Room State": "Szoba állapot felderítése",
|
||||
"Event sent!": "Az esemény elküldve!",
|
||||
"Event Type": "Esemény típusa",
|
||||
"Event Content": "Esemény tartalma",
|
||||
"State Key": "Állapotkulcs",
|
||||
"Filter results": "Találatok szűrése",
|
||||
"You must specify an event type!": "Meg kell jelölnöd az eseménytípust!",
|
||||
"Show message in desktop notification": "Üzenetek megjelenítése az asztali értesítéseknél",
|
||||
"Pin Message": "Üzenet rögzítése",
|
||||
"Unpin Message": "Üzenet levétele",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Az egyedi szerverbeállításoknál megadhatod egy másik szerver URL-jét, így be tudsz jelentkezni más Matrix szerverre is.<br/>Így a Riotot tudod használni egy már máshol meglévő Matrix fiókkal is.<br/><br/>Beállíthatsz egyéni identitásszervert is, de akkor nem tudsz más felhasználókat e-mail címmel meghívni, illetve ők sem tudnak téged.",
|
||||
"Edit": "Szerkeszt",
|
||||
"Register": "Regisztráció",
|
||||
"Rooms": "Szobák",
|
||||
"Invite to this community": "Meghívás ebbe a közösségbe",
|
||||
"Add rooms to this community": "Szobák hozzáadása ehhez a közösséghez",
|
||||
"Toolbox": "Eszköztár",
|
||||
"Send Account Data": "Fiókadatok küldése",
|
||||
"Explore Account Data": "Fiókadatok felderítése",
|
||||
"Appear Offline": "Offline látszik",
|
||||
"Away": "Távol",
|
||||
"Please install <chromeLink>Chrome</chromeLink> or <firefoxLink>Firefox</firefoxLink> for the best experience.": "A legjobb élmény érdekében telepíts <chromeLink>Chrome</chromeLink> vagy <firefoxLink>Firefox</firefoxLink> böngészőt.",
|
||||
"<safariLink>Safari</safariLink> and <operaLink>Opera</operaLink> work too.": "<safariLink>Safarival</safariLink> és <operaLink>Operával</operaLink> is működik.",
|
||||
"Reply": "Válasz",
|
||||
"%(count)s Members|other": "%(count)s tag",
|
||||
"%(count)s Members|one": "%(count)s tag",
|
||||
"Online": "Online",
|
||||
"View Community": "Közösség megtekintése"
|
||||
}
|
||||
|
||||
@@ -1 +1,200 @@
|
||||
{}
|
||||
{
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s melalui %(browserName)s di %(osName)s",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> dan <a href=\"http://opera.com\">Opera</a> juga berfungsi.",
|
||||
"A new version of Riot is available.": "Riot versi baru telah tersedia.",
|
||||
"Add an email address above to configure email notifications": "Tambahkan alamat email di atas untuk konfigurasi notifikasi email",
|
||||
"Advanced notification settings": "Pengaturan notifikasi lanjutan",
|
||||
"All messages": "Semua pesan",
|
||||
"All messages (noisy)": "Semua pesan (keras)",
|
||||
"All Rooms": "Semua Ruang",
|
||||
"All notifications are currently disabled for all targets.": "Semua notifikasi saat ini dinonaktifkan untuk semua target.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Terjadi kesalahan saat menyimpan preferensi notifikasi email Anda.",
|
||||
"Call invitation": "Undangan panggilan",
|
||||
"Cancel": "Batal",
|
||||
"Cancel Sending": "Batalkan pengiriman",
|
||||
"Can't update user notification settings": "Tidak dapat memperbarui pengaturan notifikasi pengguna",
|
||||
"Changelog": "Daftar perubahan",
|
||||
"Close": "Tutup",
|
||||
"Collapse panel": "Lipat panel",
|
||||
"Collecting app version information": "Mengumpukan informasi versi aplikasi",
|
||||
"Collecting logs": "Mengumpulkan catatan",
|
||||
"Couldn't find a matching Matrix room": "Tidak dapat menemukan ruang Matrix yang sesuai",
|
||||
"Custom Server Options": "Pilihan Server Khusus",
|
||||
"customServer_text": "Anda dapat menggunakan opsi server khusus untuk masuk ke server Matrix lain dengan menyebutkan URL server Home.<br/>Hal ini memperbolehkan Anda untuk menggunakan Riot dengan akun Matrix yang sudah ada di server Home yang berbeda.<br/><br/>Anda juga bisa mengatur server identitas khusus tapi Anda tidak akan dapat mengundang pengguna melalui alamat email, atau diundang dengan alamat email Anda.",
|
||||
"delete the alias.": "hapus alias.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Hapus alias ruang %(alias)s dan hapus %(name)s dari direktori?",
|
||||
"Describe your problem here.": "Jelaskan masalah anda di sini.",
|
||||
"Direct Chat": "Obrolan Langsung",
|
||||
"Directory": "Direktori",
|
||||
"Dismiss": "Abaikan",
|
||||
"Download this file": "Unduh file ini",
|
||||
"Enable audible notifications in web client": "Aktifkan notifikasi suara di klien web",
|
||||
"Enable desktop notifications": "Aktifkan notifikasi desktop",
|
||||
"Enable email notifications": "Aktifkan notifikasi email",
|
||||
"Enable notifications for this account": "Aktifkan notifikasi untuk akun ini",
|
||||
"Enable them now": "Aktifkan sekarang",
|
||||
"Enter keywords separated by a comma:": "Masukkan kata kunci dipisahkan oleh koma:",
|
||||
"Error": "Terjadi Kesalahan",
|
||||
"Error saving email notification preferences": "Terjadi kesalahan saat menyimpan pilihan notifikasi email",
|
||||
"#example": "#contoh",
|
||||
"Expand panel": "Luaskan panel",
|
||||
"Failed to add tag %(tagName)s to room": "Gagal menambahkan tag %(tagName)s ke ruang",
|
||||
"Failed to change settings": "Gagal mengubah pengaturan",
|
||||
"Failed to forget room %(errCode)s": "Gagal melupakan ruang %(errCode)s",
|
||||
"Failed to update keywords": "Gagal memperbarui kata kunci",
|
||||
"Failed to get protocol list from Home Server": "Gagal mendapatkan daftar protokol dari Server Home",
|
||||
"Failed to get public room list": "Gagal mendapatkan daftar ruang publik",
|
||||
"Failed to remove tag %(tagName)s from room": "Gagal menghapus tag %(tagName)s dari ruang",
|
||||
"Failed to send report: ": "Gagal mengirim laporan: ",
|
||||
"Failed to set direct chat tag": "Gagal mengatur tag obrolan langsung",
|
||||
"Failed to set Direct Message status of room": "Gagal mengatur status Pesan Langsung dari ruang",
|
||||
"Favourite": "Favorit",
|
||||
"Fetching third party location failed": "Gagal mengambil lokasi pihak ketiga",
|
||||
"Files": "Files",
|
||||
"Filter room names": "Saring nama ruang",
|
||||
"Forget": "Lupakan",
|
||||
"Forward Message": "Teruskan Pesan",
|
||||
"Guests can join": "Tamu dapat gabung",
|
||||
"Hide panel": "Sembunyikan panel",
|
||||
"(HTTP status %(httpStatus)s)": "(status HTTP %(httpStatus)s)",
|
||||
"I understand the risks and wish to continue": "Saya mengerti resikonya dan berharap untuk melanjutkan",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Untuk diagnosis permasalahannya, catatan dari klien ini akan dikirimkan bersama laporan bug. Jika Anda memilih untuk hanya mengirimkan pesan di atas, mohon hapus centang:",
|
||||
"Invite to this room": "Undang ke ruang ini",
|
||||
"Keywords": "Kata Kunci",
|
||||
"Leave": "Tinggalkan",
|
||||
"Login": "Masuk",
|
||||
"Loading bug report module": "Memuat modul laporan bug",
|
||||
"Low Priority": "Prioritas Rendah",
|
||||
"Members": "Anggota",
|
||||
"Mentions only": "Hanya jika disinggung",
|
||||
"Messages containing my display name": "Pesan mengandung nama tampilan saya",
|
||||
"Messages containing <span>keywords</span>": "Pesan mengandung <span>kata kunci</span>",
|
||||
"Messages containing my user name": "Pesan mengandung nama pengguna saya",
|
||||
"Messages in group chats": "Pesan di obrolan grup",
|
||||
"Messages in one-to-one chats": "Pesan di obrolan satu-ke-satu",
|
||||
"Messages sent by bot": "Pesan dikirim oleh bot",
|
||||
"more": "lagi",
|
||||
"Mute": "Bisu",
|
||||
"No rooms to show": "Tidak ada ruang ditunjukkan",
|
||||
"Noisy": "Berisik",
|
||||
"Notification targets": "Target notifikasi",
|
||||
"Notifications": "Notifikasi",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Notifikasi pada kata kunci berikut mengikuti aturan dimana tidak dapat ditampilkan di sini:",
|
||||
"Notify for all other messages/rooms": "Beritau semua pesan/ruang",
|
||||
"Notify me for anything else": "Beritau saya untuk lainnya",
|
||||
"Off": "Mati",
|
||||
"On": "Nyala",
|
||||
"Operation failed": "Operasi gagal",
|
||||
"Permalink": "Permalink",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Harap jelaskan bug. Apa yang Anda lakukan? Apa yang Anda harap terjadi? Apa yang sebenarnya terjadi?",
|
||||
"Please describe the bug and/or send logs.": "Harap jelaskan bug dan/atau kirim catatan.",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Harap install <a href=\"https://www.google.com/chrome\">Chrome</a> atau <a href=\"https://getfirefox.com\">Firefox</a> untuk pengalaman terbaik.",
|
||||
"powered by Matrix": "didukung oleh Matrix",
|
||||
"Quote": "Kutip",
|
||||
"Reject": "Tolak",
|
||||
"Remove %(name)s from the directory?": "Hapus %(name)s dari direktori?",
|
||||
"Remove": "Hapus",
|
||||
"remove %(name)s from the directory.": "hapus %(name)s dari direktori.",
|
||||
"Remove from Directory": "Hapus dari DIrektori",
|
||||
"Report a bug": "Laporkan bug",
|
||||
"Resend": "Kirim Ulang",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop di %(platformName)s",
|
||||
"Riot does not know how to join a room on this network": "Riot tidak tau bagaimana gabung ruang di jaringan ini",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot tidak mendukung web seluler. Install aplikasi?",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot menggunakan banyak fitur terdepan dari browser, dimana tidak tersedia atau dalam fase eksperimen di browser Anda.",
|
||||
"Room not found": "Ruang tidak ditemukan",
|
||||
"Search": "Cari",
|
||||
"Search…": "Cari…",
|
||||
"Search for a room": "Cari ruang obrolan",
|
||||
"Send": "Kirim",
|
||||
"Send logs": "Kirim catatan",
|
||||
"Source URL": "URL sumber",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Maaf, browser Anda <b>tidak</b> dapat menjalankan Riot.",
|
||||
"The Home Server may be too old to support third party networks": "Server Home mungkin terlalu kuno untuk mendukung jaringan pihak ketiga",
|
||||
"There are advanced notifications which are not shown here": "Ada notifikasi lanjutan yang tidak ditampilkan di sini",
|
||||
"The server may be unavailable or overloaded": "Server mungkin tidak tersedia atau kelebihan muatan",
|
||||
"This Room": "Ruang ini",
|
||||
"Unable to fetch notification target list": "Tidak dapat mengambil daftar notifikasi target",
|
||||
"Unable to join network": "Tidak dapat bergabung di jaringan",
|
||||
"Unable to look up room ID from server": "Tidak dapat mencari ID ruang dari server",
|
||||
"Unavailable": "Tidak Tersedia",
|
||||
"Unhide Preview": "Tampilkan Pratinjau",
|
||||
"Unknown device": "Perangkat Tidak Diketahui",
|
||||
"unknown error code": "kode kesalahan tidak diketahui",
|
||||
"Unnamed room": "Ruang tanpa nama",
|
||||
"Update": "Perbarui",
|
||||
"Uploaded on %(date)s by %(user)s": "Diunggah pada %(date)s oleh %(user)s",
|
||||
"Uploading report": "Unggah laporan",
|
||||
"View Decrypted Source": "Tampilkan Sumber Terdekripsi",
|
||||
"View Source": "Tampilkan Sumber",
|
||||
"What's New": "Apa Yang Baru",
|
||||
"What's new?": "Apa yang baru?",
|
||||
"Waiting for response from server": "Menunggu respon dari server",
|
||||
"When I'm invited to a room": "Ketika Saya diundang ke ruang",
|
||||
"World readable": "Terpublikasi Umum",
|
||||
"You cannot delete this image. (%(code)s)": "Anda tidak dapat menghapus gambar ini. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "Anda tidak dapat menghapus pesan ini. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "Anda tidak menerima notifikasi desktop",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Anda mungkin sudah konfigurasi di klien selain Riot. Anda tidak dapat setel di Riot tetap berlaku",
|
||||
"Sunday": "Minggu",
|
||||
"Monday": "Senin",
|
||||
"Tuesday": "Selasa",
|
||||
"Wednesday": "Rabu",
|
||||
"Thursday": "Kamis",
|
||||
"Friday": "Jumat",
|
||||
"Saturday": "Sabtu",
|
||||
"Today": "Hari Ini",
|
||||
"Yesterday": "Kemarin",
|
||||
"OK": "OK",
|
||||
"Warning": "Peringatan",
|
||||
"Checking for an update...": "Cek pembaruan...",
|
||||
"Error encountered (%(errorDetail)s).": "Terjadi kesalahan (%(errorDetail)s).",
|
||||
"No update available.": "Tidak ada pembaruan.",
|
||||
"Downloading update...": "Unduh pembaruan...",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Anda perlu menggunakan HTTPS untuk melakukan panggilan berbagi-layar.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Dengan browser ini, tampilan dari aplikasi mungkin tidak sesuai, dan beberapa atau bahkan semua fitur mungkin tidak berjalan. Jika Anda ingin tetap mencobanya, Anda bisa melanjutkan, tapi Anda tanggung sendiri jika muncul masalah yang terjadi!",
|
||||
"Welcome to Riot.im": "Selamat datang di Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Obrolan terenkripsi, terdesentralisasi & kolaborasi didukung oleh [matrix]",
|
||||
"Search the room directory": "Cari di direktori ruang",
|
||||
"Chat with Riot Bot": "Mengobrol dengan bot Riot",
|
||||
"Get started with some tips from Riot Bot!": "Mulai dengan beberapa tip dari Bot Riot!",
|
||||
"General discussion about Matrix and Riot": "Diskusi umum tentang Matrix dan Riot",
|
||||
"Discussion of all things Matrix!": "Diskusi semua tentang Matrix!",
|
||||
"Riot/Web & Desktop chat": "Obrolan Riot/Web & Desktop",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Obrolan Riot/iOS & matrix-ios-sdk",
|
||||
"Riot/Android & matrix-android-sdk chat": "Obrolan Riot/Android & matrix-android-sdk",
|
||||
"Matrix technical discussions": "Diskusi teknis Matrix",
|
||||
"Running Matrix services": "Mengoperasikan layanan Matrix",
|
||||
"Community-run support for Synapse": "Dukungan komunitas untuk Synapse",
|
||||
"Admin support for Dendrite": "Dukungan Admin untuk Dendrite",
|
||||
"Announcements about Synapse releases": "Pengumuman tentang rilis Synapse",
|
||||
"Support for those using and running matrix-appservice-irc": "Dukungan untuk pengguna dan penyedia matrix-appservice-irc",
|
||||
"Building services on Matrix": "Membangun layanan dengan Matrix",
|
||||
"Support for those using the Matrix spec": "Dukungan untuk pengguna Matrix spec",
|
||||
"Design and implementation of E2E in Matrix": "Desain dan implementasi E2E di Matrix",
|
||||
"Implementing VR services with Matrix": "Implementasi layanan VR dengan Matrix",
|
||||
"Implementing VoIP services with Matrix": "Implementasi layanan VoIP dengan Matrix",
|
||||
"Discussion of the Identity Service API": "Diskusi tentang API Identity Service",
|
||||
"Support for those using, running and writing other bridges": "Dukungan untuk pengguna, penyedia dan penulis jembatan lainnya",
|
||||
"Contributing code to Matrix and Riot": "Kontribusi kode untuk Matrix dan Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Obrolan Developer untuk tim developer Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "Obrolan Developer untuk tim developer Dendrite",
|
||||
"Co-ordination for Riot/Web translators": "Koordinasi untuk penerjemah Riot/Web",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Banyak ruang sudah tersedia di Matrix, terhubung ke jaringan yang sudah ada (Slack, IRC, Gitter dls) atau independen. Cek direktori!",
|
||||
"Failed to change password. Is your password correct?": "Gagal untuk mengubah password. Apakah password Anda benar?",
|
||||
"You have successfully set a password!": "Anda berhasil mengubah password!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Anda dapat kembali ke akun setelah keluar dan masuk kembali di perangkat lain.",
|
||||
"Continue": "Lanjut",
|
||||
"Please set a password!": "Mohon isi password!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Hal ini akan memperbolehkan anda kembali ke akun setelah keluar dan masuk kembali di perangkat lain.",
|
||||
"You have successfully set a password and an email address!": "Anda telah berhasil mengubah password dan alamat email!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Ingat, Anda selalu dapat mengubah alamat email di pengaturan pengguna jika anda berubah pikiran.",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Untuk kembali ke akun di lain waktu, Anda perlu <u>mengisi password</u>",
|
||||
"Set Password": "Ubah Password",
|
||||
"Couldn't load home page": "Tidak dapat memuat halaman utama",
|
||||
"Show message in desktop notification": "Tampilkan pesan pada desktop",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Anda dapat menggunakan opsi lain untuk mendaftar pada server Matrix yang berbeda dengan memasukkan URL server yang sesuai. <br/>Hal ini memungkinkan anda untuk menggunakan Riot dengan akun matrix yang telah tersedia pada Home server yang berbeda.<br/><br/>Anda juga dapat melakukan pengubahan identitas server akan tetapi akan berakibat tidak dapat mengundang pengguna melalui email, atau diundang melalui email.",
|
||||
"Bug report sent": "Laporan bug terkirim",
|
||||
"Thank you!": "Terima kasih!",
|
||||
"Back": "Kembali"
|
||||
}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "Anche <a href=\"http://apple.com/safari\">Safari</a> e <a href=\"http://opera.com\"> Opera</a> funzionano.",
|
||||
"A new version of Riot is available.": "È disponibile una nuova versione di Riot.",
|
||||
"Add an email address above to configure email notifications": "Specifica un indirizzo email per configurazione le notifiche via email",
|
||||
"Advanced notification settings": "Impostazioni notifiche avanzate",
|
||||
"Add an email address above to configure email notifications": "Aggiungi un indirizzo email sopra per configurare le notifiche via email",
|
||||
"Advanced notification settings": "Impostazioni di notifica avanzate",
|
||||
"All messages": "Tutti i messaggi",
|
||||
"All messages (loud)": "Tutti i messaggi (rumoroso)",
|
||||
"All messages (noisy)": "Tutti i messaggi (rumoroso)",
|
||||
"All Rooms": "Tutte le stanze",
|
||||
"An error occurred whilst saving your email notification preferences.": "È avvenuto un errore durante il salvataggio delle tue preferenze sulle notifiche email.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Si è verificato un errore durante il salvataggio delle tue preferenze sulle notifiche email.",
|
||||
"Call invitation": "Invito ad una chiamata",
|
||||
"Cancel": "Annulla",
|
||||
"Cancel Sending": "Annulla invio",
|
||||
@@ -14,20 +14,19 @@
|
||||
"Changelog": "Cambiamenti",
|
||||
"Close": "Chiudi",
|
||||
"Collapse panel": "Riduci pannello",
|
||||
"Collecting app version information": "Raccolta delle informazioni sulla versione dell'applicazione",
|
||||
"Collecting logs": "Raccolta del registro",
|
||||
"Create new room": "Crea una nuova stanza",
|
||||
"Collecting app version information": "Raccolta di informazioni sulla versione dell'applicazione",
|
||||
"Collecting logs": "Sto recuperando i log",
|
||||
"Couldn't find a matching Matrix room": "Impossibile trovare una stanza Matrix corrispondente",
|
||||
"Custom Server Options": "Opzioni server personale",
|
||||
"customServer_text": "Puoi utilizzare un server personale per entrare in altri server Matrix specificando un diverso indirizzo per il server Home.<br/>Questo ti permetterà di usare Riot con un account Matrix già esistente su un altro server.<br/><br/>Puoi anche specificare un diverso server di identità ma non sarai in grado di invitare utenti o di essere invitato tramite indirizzo email.",
|
||||
"delete the alias.": "Elimina gli alias.",
|
||||
"Custom Server Options": "Opzioni Server Personalizzate",
|
||||
"customServer_text": "Puoi utilizzare un server personale per accedere su altri server Matrix specificando un diverso indirizzo URL per il server Home.<br/>Questo ti permetterà di usare Riot con un account Matrix già esistente su un altro server.<br/><br/>Puoi anche specificare un diverso server di identità ma non sarai in grado di invitare utenti, o di essere invitato tramite indirizzo email.",
|
||||
"delete the alias.": "elimina l'alias.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Eliminare l'alias %(alias)s e rimuovere %(name)s dalla lista?",
|
||||
"Describe your problem here.": "Descrivi qui il tuo problema.",
|
||||
"Direct Chat": "Chat diretta",
|
||||
"Direct Chat": "Chat Diretta",
|
||||
"Directory": "Lista",
|
||||
"Dismiss": "Scarta",
|
||||
"Download this file": "Scarica questo file",
|
||||
"Enable audible notifications in web client": "Abilita notifiche audio nel client Web",
|
||||
"Enable audible notifications in web client": "Abilita notifiche audio nel client web",
|
||||
"Enable desktop notifications": "Abilita le notifiche desktop",
|
||||
"Enable email notifications": "Abilita le notifiche email",
|
||||
"Enable notifications for this account": "Abilita le notifiche per questo account",
|
||||
@@ -37,29 +36,195 @@
|
||||
"Error saving email notification preferences": "Errore nel salvataggio delle preferenze di notifica email",
|
||||
"#example": "#esempio",
|
||||
"Expand panel": "Espandi il pannello",
|
||||
"Failed to": "Non si è riuscito a",
|
||||
"Failed to add tag %(tagName)s to room": "Non si è riuscito ad aggiungere l'etichetta %(tagName)s alla stanza",
|
||||
"Failed to change settings": "Non si è riuscito ad aggiornare le impostazioni",
|
||||
"Failed to update keywords": "Non si è riuscito ad aggiornare le parole chiave",
|
||||
"Failed to get protocol list from Home Server": "Non si è riuscito ad ottenere la lista protocollo dal server Home",
|
||||
"Failed to get public room list": "Non si è riuscito ad ottenere la lista delle stanze pubbliche",
|
||||
"Failed to join the room": "Non si è riuscito a entrare nella stanza",
|
||||
"Failed to remove tag %(tagName)s from room": "Non si è riuscito a rimuovere il tag %(tagName)s dalla stanza",
|
||||
"Failed to send report: ": "Non si è riuscito ad inviare il resoconto: ",
|
||||
"Failed to set direct chat tag": "Non si è riuscito a impostare l'etichetta di chat diretta",
|
||||
"Failed to set Direct Message status of room": "Non si è riuscito ad impostare lo stato di Messaggio Diretto alla stanza",
|
||||
"Failed to add tag %(tagName)s to room": "Impossibile aggiungere l'etichetta %(tagName)s alla stanza",
|
||||
"Failed to change settings": "Impossibile modificare le impostazioni",
|
||||
"Failed to update keywords": "Impossibile aggiornare le parole chiave",
|
||||
"Failed to get protocol list from Home Server": "Impossibile ottenere la lista di protocolli dal server Home",
|
||||
"Failed to get public room list": "Impossibile ottenere la lista delle stanze pubbliche",
|
||||
"Failed to remove tag %(tagName)s from room": "Impossibile rimuovere l'etichetta %(tagName)s dalla stanza",
|
||||
"Failed to send report: ": "Impossibile inviare il resoconto: ",
|
||||
"Failed to set direct chat tag": "Impossibile impostare l'etichetta di chat diretta",
|
||||
"Failed to set Direct Message status of room": "Impossibile impostare lo stato di Messaggio Diretto alla stanza",
|
||||
"Favourite": "Preferito",
|
||||
"Files": "File",
|
||||
"Filter room names": "Filtra i nomi delle stanze",
|
||||
"Forget": "Dimentica",
|
||||
"Forward Message": "Inoltra messaggio",
|
||||
" from room": " dalla stanza",
|
||||
"Guests can join": "Gli ospiti sono ammessi",
|
||||
"Guest users can't invite users. Please register to invite.": "Gli utenti ospite non possono invitare altri utenti. Registrati per invitare.",
|
||||
"Hide panel": "Nascondi pannello",
|
||||
"I understand the risks and wish to continue": "Sono consapevole dei rischi e vorrei continuare",
|
||||
"Invite to this room": "Invita a entrare in questa stanza",
|
||||
"Invite to this room": "Invita in questa stanza",
|
||||
"Keywords": "Parole chiave",
|
||||
"Leave": "Abbandona",
|
||||
"Login": "Entra"
|
||||
"Login": "Entra",
|
||||
"All notifications are currently disabled for all targets.": "Tutte le notifiche sono disabilitate per tutti gli obbiettivi.",
|
||||
"Failed to forget room %(errCode)s": "Impossibile dimenticare la stanza %(errCode)s",
|
||||
"Fetching third party location failed": "Rilevazione posizione di terze parti fallita",
|
||||
"(HTTP status %(httpStatus)s)": "(stato HTTP %(httpStatus)s)",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Per diagnosticare i problemi, i log da questo client verranno inviati con questo bug report. Se vuoi solo mandare il testo sopra, togli la spunta a:",
|
||||
"Loading bug report module": "Caricamento modulo di segnalazione errori",
|
||||
"Low Priority": "Priorità bassa",
|
||||
"Members": "Membri",
|
||||
"Mentions only": "Solo le citazioni",
|
||||
"Messages containing my display name": "Messaggi contenenti il mio nome visualizzato",
|
||||
"Messages containing my user name": "Messaggi contenenti il mio nome utente",
|
||||
"Messages in group chats": "Messaggi nelle chat di gruppo",
|
||||
"Messages in one-to-one chats": "Messaggi in chat uno-a-uno",
|
||||
"Messages sent by bot": "Messaggi inviati dai bot",
|
||||
"more": "altro",
|
||||
"Mute": "Silenzia",
|
||||
"No rooms to show": "Nessuna stanza da mostrare",
|
||||
"Noisy": "Rumoroso",
|
||||
"Notifications": "Notifiche",
|
||||
"Notify for all other messages/rooms": "Notifica per tutti gli altri messaggi/stanze",
|
||||
"Notify me for anything else": "Notificami per qualsiasi altra cosa",
|
||||
"Off": "Spento",
|
||||
"On": "Acceso",
|
||||
"Operation failed": "Operazione fallita",
|
||||
"Permalink": "Link permanente",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Per favore descrivi l'errore. Cosa hai fatto? Cosa ti aspettavi accadesse? Cos'è successo invece?",
|
||||
"Please describe the bug and/or send logs.": "Per favore descrivi l'errore e/o invia i log.",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Per favore installa<a href=\"https://www.google.com/chrome\">Chrome</a> o <a href=\"https://getfirefox.com\">Firefox</a> per un'esperienza migliore.",
|
||||
"powered by Matrix": "offerto da Matrix",
|
||||
"Quote": "Cita",
|
||||
"Reject": "Rifiuta",
|
||||
"Remove %(name)s from the directory?": "Rimuovere %(name)s dalla lista?",
|
||||
"Remove": "Rimuovi",
|
||||
"remove %(name)s from the directory.": "rimuovi %(name)s dalla lista.",
|
||||
"Remove from Directory": "Rimuovi dalla lista",
|
||||
"Report a bug": "Segnala un errore",
|
||||
"Resend": "Reinvia",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop su %(platformName)s",
|
||||
"Riot does not know how to join a room on this network": "Riot non sa come entrare nella stanza su questa rete",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot non è supportato sul web mobile. Vuoi installare l'applicazione?",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot utilizza molte funzioni avanzate del browser, alcune delle quali non sono disponibili o sono sperimentali nel tuo browser attuale.",
|
||||
"Room not found": "Stanza non trovata",
|
||||
"Search": "Cerca",
|
||||
"Search…": "Cerca…",
|
||||
"Search for a room": "Cerca una stanza",
|
||||
"Send": "Invia",
|
||||
"Send logs": "Invia i log",
|
||||
"Source URL": "URL d'origine",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Spiacenti, ma il tuo browser <b>non</b> è in grado di utilizzare Riot.",
|
||||
"Messages containing <span>keywords</span>": "Messaggi contenenti <span>parole chiave</span>",
|
||||
"Notification targets": "Obiettivi di notifica",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Le notifiche alle seguenti parole chiave seguono regole che non possono essere mostrate qui:",
|
||||
"The Home Server may be too old to support third party networks": "Il server Home potrebbe essere troppo vecchio per supportare reti di terze parti",
|
||||
"There are advanced notifications which are not shown here": "Ci sono notifiche avanzate che non sono mostrate qui",
|
||||
"The server may be unavailable or overloaded": "Il server potrebbe essere non disponibile o sovraccarico",
|
||||
"This Room": "Questa stanza",
|
||||
"Unable to join network": "Impossibile collegarsi alla rete",
|
||||
"Unable to look up room ID from server": "Impossibile consultare l'ID stanza dal server",
|
||||
"Unavailable": "Non disponibile",
|
||||
"Unhide Preview": "Mostra anteprima",
|
||||
"Unknown device": "Dispositivo sconosciuto",
|
||||
"unknown error code": "codice errore sconosciuto",
|
||||
"Unnamed room": "Stanza senza nome",
|
||||
"Update": "Aggiornamento",
|
||||
"Uploaded on %(date)s by %(user)s": "Caricato il %(date)s da %(user)s",
|
||||
"Uploading report": "Sto caricando il report",
|
||||
"View Decrypted Source": "Visualizza sorgente decifrato",
|
||||
"View Source": "Visualizza sorgente",
|
||||
"What's New": "Novità",
|
||||
"What's new?": "Cosa c'è di nuovo?",
|
||||
"Waiting for response from server": "In attesa di una risposta dal server",
|
||||
"When I'm invited to a room": "Quando vengo invitato/a in una stanza",
|
||||
"You cannot delete this image. (%(code)s)": "Non puoi eliminare quest'immagine. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "Non puoi eliminare questo messaggio. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "Non stai ricevendo le notifiche sul desktop",
|
||||
"World readable": "Leggibile da tutti",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Potresti averli configurati in un client diverso da Riot. Non puoi cambiarli in Riot ma sono comunque applicati",
|
||||
"Sunday": "Domenica",
|
||||
"Monday": "Lunedì",
|
||||
"Tuesday": "Martedì",
|
||||
"Wednesday": "Mercoledì",
|
||||
"Thursday": "Giovedì",
|
||||
"Friday": "Venerdì",
|
||||
"Saturday": "Sabato",
|
||||
"Today": "Oggi",
|
||||
"Yesterday": "Ieri",
|
||||
"OK": "OK",
|
||||
"Warning": "Attenzione",
|
||||
"Checking for an update...": "Controllo aggiornamenti...",
|
||||
"Error encountered (%(errorDetail)s).": "Errore riscontrato (%(errorDetail)s).",
|
||||
"No update available.": "Nessun aggiornamento disponibile.",
|
||||
"Downloading update...": "Scaricamento aggiornamento...",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Devi usare HTTPS per utilizzare una chiamata con condivisione schermo.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Con il tuo attuale browser, l'aspetto e la sensazione generale dell'applicazione potrebbero essere completamente sbagliati e alcune delle funzionalità potrebbero non funzionare. Se vuoi provare comunque puoi continuare, ma non riceverai aiuto per qualsiasi problema tu possa riscontrare!",
|
||||
"Welcome to Riot.im": "Benvenuto/a su Riot.im",
|
||||
"Search the room directory": "Cerca nella lista delle stanze",
|
||||
"Chat with Riot Bot": "Chatta con Riot Bot",
|
||||
"Get started with some tips from Riot Bot!": "Inizia con alcuni consigli di Riot Bot!",
|
||||
"General discussion about Matrix and Riot": "Discussioni generali riguardo Matrix e Riot",
|
||||
"Couldn't load home page": "Impossibile caricare la pagina principale",
|
||||
"Riot/Web & Desktop chat": "Chat su Riot/Web & Desktop",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Chat su Riot/iOS & matrix-ios-sdk",
|
||||
"Riot/Android & matrix-android-sdk chat": "Chat su Riot/Android & matrix-android-sdk",
|
||||
"Matrix technical discussions": "Discussioni tecniche su Matrix",
|
||||
"Running Matrix services": "Esecuzione servizi Matrix",
|
||||
"Community-run support for Synapse": "Supporto per Synapse dalla comunità",
|
||||
"Admin support for Dendrite": "Supporto amministrativo per Dendrite",
|
||||
"Announcements about Synapse releases": "Annunci riguardo i rilasci di Synapse",
|
||||
"Support for those using and running matrix-appservice-irc": "Supporto per chi usa e amministra matrix-appservice-irc",
|
||||
"Building services on Matrix": "Costruzione servizi su Matrix",
|
||||
"Support for those using the Matrix spec": "Supporto per chi utilizza le specifiche Matrix",
|
||||
"Design and implementation of E2E in Matrix": "Design e implementazione di E2E in Matrix",
|
||||
"Implementing VR services with Matrix": "Implementazione servizi VR con Matrix",
|
||||
"Implementing VoIP services with Matrix": "Implementazione servizi VoIP con Matrix",
|
||||
"Discussion of the Identity Service API": "Discussione sull'Identity Service API",
|
||||
"Support for those using, running and writing other bridges": "Supporto per chi usa, amministra e scrive altri bridge",
|
||||
"Contributing code to Matrix and Riot": "Contributi al codice di Matrix e Riot",
|
||||
"Co-ordination for Riot/Web translators": "Coordinamento per i traduttori di Riot/Web",
|
||||
"Failed to change password. Is your password correct?": "Modifica password fallita. La tua password è corretta?",
|
||||
"You have successfully set a password!": "Hai impostato una password con successo!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Ora puoi tornare al tuo account dopo esserti disconnesso e accedere su altri dispositivi.",
|
||||
"Continue": "Continua",
|
||||
"Please set a password!": "Imposta una password!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Questo ti permetterà di ritornare al tuo account dopo esserti disconnesso e accedere in altri dispositivi.",
|
||||
"You have successfully set a password and an email address!": "Hai impostato con successo una password e un indirizzo email!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Ricorda, puoi sempre specificare un indirizzo email nelle impostazioni utente se cambi idea.",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Per tornare nel tuo account in futuro devi <u>impostare una password</u>",
|
||||
"Set Password": "Imposta Password",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s su %(osName)s",
|
||||
"Unable to fetch notification target list": "Impossibile ottenere la lista di obiettivi notifiche",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat & collaborazione decentralizzata e criptata offerta da [matrix]",
|
||||
"Discussion of all things Matrix!": "Discussione su tutto quanto riguardi Matrix!",
|
||||
"Dev chat for the Riot/Web dev team": "Chat per gli sviluppatori di Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "Chat per gli sviluppatori di Dendrite",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Esistono già molte stanze in Matrix, collegate a reti già esistenti (Slack, IRC, Gitter ecc) o indipendenti. Dai un'occhiata all'elenco!",
|
||||
"Thank you!": "Grazie!",
|
||||
"Bug report sent": "Rapporto inviato",
|
||||
"Back": "Indietro",
|
||||
"Developer Tools": "Strumenti per Sviluppatori",
|
||||
"Failed to send custom event.": "Impossibile inviare evento personalizzato.",
|
||||
"Filter results": "Filtra risultati",
|
||||
"Send Custom Event": "Invia Evento Personalizzato",
|
||||
"Send Custom State Event": "Invia Evento di Stato Personalizzato",
|
||||
"Explore Room State": "Esplora Stato Stanza",
|
||||
"You must specify an event type!": "Devi specificare un tipo di evento!",
|
||||
"Event sent!": "Evento inviato!",
|
||||
"Event Type": "Tipo di Evento",
|
||||
"Event Content": "Contenuto dell'Evento",
|
||||
"State Key": "Chiave dello Stato",
|
||||
"Show message in desktop notification": "Mostra i messaggi nelle notifiche desktop",
|
||||
"Edit": "Modifica",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Puoi usare le opzioni server personalizzate per accedere ad altri server Matrix specificando l'indirizzo dell'home server.<br/> Questo permette di usare Matrix con un account esistente su un home server diverso.<br/><br/>È anche possibile impostare un diverso identity server, ma in quel caso non sarà possibile invitare utenti attraverso l'indirizzo e-mail o essere invitati attraverso l'indirizzo e-mail.",
|
||||
"Appear Offline": "Appari offline",
|
||||
"Away": "Assente",
|
||||
"Explore Account Data": "Esplora dati account",
|
||||
"Toolbox": "Strumenti",
|
||||
"Please install <chromeLink>Chrome</chromeLink> or <firefoxLink>Firefox</firefoxLink> for the best experience.": "Installa <chromeLink>Chrome</chromeLink> o <firefoxLink>Firefox</firefoxLink> per la migliore esperienza d'uso.",
|
||||
"<safariLink>Safari</safariLink> and <operaLink>Opera</operaLink> work too.": "Anche <safariLink>Safari</safariLink> e <operaLink>Opera</operaLink> vanno bene.",
|
||||
"Register": "Registrati",
|
||||
"Rooms": "Stanze",
|
||||
"Send Account Data": "Invia dati account",
|
||||
"Unpin Message": "Sblocca messaggio",
|
||||
"Pin Message": "Blocca messaggio",
|
||||
"Add rooms to this community": "Aggiungi stanze a questa community",
|
||||
"Reply": "Rispondi",
|
||||
"Invite to this community": "Invita a questa comunità",
|
||||
"Online": "Online",
|
||||
"View Community": "Vedi la comunità",
|
||||
"%(count)s Members|other": "%(count)s membri",
|
||||
"%(count)s Members|one": "%(count)s membro"
|
||||
}
|
||||
|
||||
77
src/i18n/strings/ja.json
Normal file
77
src/i18n/strings/ja.json
Normal file
@@ -0,0 +1,77 @@
|
||||
{
|
||||
"All messages": "全ての発言",
|
||||
"All messages (noisy)": "全ての発言(通知音あり)",
|
||||
"Cancel": "取消",
|
||||
"Close": "閉じる",
|
||||
"Direct Chat": "対話",
|
||||
"Favourite": "お気に入り",
|
||||
"Hide panel": "右欄を非表示",
|
||||
"Invite to this room": "この部屋へ招待",
|
||||
"Low Priority": "低優先度",
|
||||
"Members": "参加者",
|
||||
"Mentions only": "呼び掛けられた時のみ",
|
||||
"Mute": "通知しない",
|
||||
"Notifications": "通知",
|
||||
"Report a bug": "バグを報告",
|
||||
"Resend": "再送信",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riotはスマートフォンでの表示に対応していません。できればアプリをインストールして頂けませんでしょうか?",
|
||||
"Room not found": "部屋が見つかりません",
|
||||
"Search": "検索",
|
||||
"Search…": "検索…",
|
||||
"Send": "送信",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "申し訳ありません。あなたのブラウザではRiotは<b>動作できません</b>。",
|
||||
"This Room": "この部屋",
|
||||
"Waiting for response from server": "サーバからの応答を待っています",
|
||||
"You cannot delete this message. (%(code)s)": "あなたはこの発言を削除できません (%(code)s)",
|
||||
"Sunday": "日曜日",
|
||||
"Monday": "月曜日",
|
||||
"Tuesday": "火曜日",
|
||||
"Wednesday": "水曜日",
|
||||
"Thursday": "木曜日",
|
||||
"Friday": "金曜日",
|
||||
"Saturday": "土曜日",
|
||||
"Today": "今日",
|
||||
"Yesterday": "昨日",
|
||||
"Warning": "警告",
|
||||
"No update available.": "更新はありません。",
|
||||
"Welcome to Riot.im": "Riot.imへようこそ",
|
||||
"Search the room directory": "部屋一覧を検索",
|
||||
"Failed to change password. Is your password correct?": "パスワード変更に失敗しました。パスワードは正しいですか?",
|
||||
"Set Password": "パスワードを設定",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a>と<a href=\"http://opera.com\">Opera</a>でも動作します。",
|
||||
"A new version of Riot is available.": "新しいバージョンのRiotが利用可能です。",
|
||||
"All Rooms": "全ての部屋",
|
||||
"Changelog": "変更履歴",
|
||||
"Directory": "部屋一覧",
|
||||
"Download this file": "この添付ファイルをダウンロード",
|
||||
"Enable desktop notifications": "デスクトップ画面に通知を行う",
|
||||
"Enable email notifications": "電子メールでの通知を行う",
|
||||
"Enable notifications for this account": "このアカウントで通知を行う",
|
||||
"Failed to change settings": "設定の変更に失敗しました",
|
||||
"Failed to get public room list": "公開部屋一覧の取得に失敗しました",
|
||||
"Filter room names": "部屋名検索",
|
||||
"Forget": "忘れる",
|
||||
"Leave": "退室",
|
||||
"Files": "添付ファイル",
|
||||
"Unknown device": "不明な端末",
|
||||
"Collecting app version information": "アプリのバージョン情報を収集",
|
||||
"Collecting logs": "ログの収集",
|
||||
"Uploading report": "レポートのアップロード",
|
||||
"Messages containing my display name": "自身の表示名を含むメッセージ",
|
||||
"Messages containing my user name": "自身のユーザー名を含むメッセージ",
|
||||
"Messages in one-to-one chats": "一対一のチャットでのメッセージ",
|
||||
"Messages in group chats": "グループチャットのメッセージ",
|
||||
"When I'm invited to a room": "部屋に招待された時",
|
||||
"Messages sent by bot": "ボットから送信されたメッセージ",
|
||||
"Error saving email notification preferences": "電子メール通知設定の保存エラー",
|
||||
"An error occurred whilst saving your email notification preferences.": "電子メール通知設定を保存中にエラーが発生しました。",
|
||||
"Keywords": "キーワード",
|
||||
"Enter keywords separated by a comma:": "キーワードをコンマで区切って入力:",
|
||||
"OK": "OK",
|
||||
"Operation failed": "操作に失敗しました",
|
||||
"Can't update user notification settings": "ユーザー通知の設定を更新できません",
|
||||
"Failed to update keywords": "キーワードの更新に失敗しました",
|
||||
"Messages containing <span>keywords</span>": "<span>keywords</span>を含むメッセージ",
|
||||
"Add an email address above to configure email notifications": "メール通知を設定するためには、メールアドレスを追加してください",
|
||||
"Call invitation": "通話への招待"
|
||||
}
|
||||
@@ -3,7 +3,7 @@
|
||||
"Add an email address above to configure email notifications": "이메일 알림을 설정하기 위해 이메일 주소를 추가해주세요",
|
||||
"Advanced notification settings": "고급 알림 설정",
|
||||
"All messages": "모든 메시지",
|
||||
"All messages (loud)": "모든 메시지 (크게)",
|
||||
"All messages (noisy)": "모든 메시지 (크게)",
|
||||
"All Rooms": "모든 방",
|
||||
"All notifications are currently disabled for all targets.": "현재 모든 알림이 모든 상대에게서 꺼졌어요.",
|
||||
"An error occurred whilst saving your email notification preferences.": "이메일 알림을 설정하다가 오류가 일어났어요.",
|
||||
@@ -16,7 +16,6 @@
|
||||
"Collapse panel": "패널 접기",
|
||||
"Collecting app version information": "앱 버전 정보를 수집하는 중",
|
||||
"Collecting logs": "로그 수집 중",
|
||||
"Create new room": "새 방 만들기",
|
||||
"Couldn't find a matching Matrix room": "일치하는 매트릭스 방을 찾을 수 없어요",
|
||||
"Custom Server Options": "사용자 지정 서버 설정",
|
||||
"delete the alias.": "가명을 지울게요.",
|
||||
@@ -25,7 +24,7 @@
|
||||
"Directory": "목록",
|
||||
"Dismiss": "없애기",
|
||||
"Download this file": "이 파일 받기",
|
||||
"Enable desktop notifications": "데스크탑에서 알림 받기",
|
||||
"Enable desktop notifications": "컴퓨터에서 알림 받기",
|
||||
"Enable email notifications": "이메일로 알림 받기",
|
||||
"Enable notifications for this account": "이 계정의 알림 받기",
|
||||
"Error": "오류",
|
||||
@@ -34,7 +33,6 @@
|
||||
"Expand panel": "확장 패널",
|
||||
"Forget": "잊기",
|
||||
"Hide panel": "패널 숨기기",
|
||||
"Guest users can't invite users. Please register to invite.": "손님은 사용자를 초대할 수 없어요. 초대하려면 계정을 등록해주세요.",
|
||||
"I understand the risks and wish to continue": "위험할 수 있는 걸 알고 계속하기를 바라요",
|
||||
"Invite to this room": "이 방에 초대하기",
|
||||
"Leave": "떠나기",
|
||||
@@ -51,10 +49,8 @@
|
||||
"On": "켜기",
|
||||
"Permalink": "고유주소",
|
||||
"Please describe the bug and/or send logs.": "오류를 적어주시거나 로그를 보내주세요.",
|
||||
"Please Register": "계정을 등록해주세요",
|
||||
"powered by Matrix": "매트릭스의 지원을 받고 있어요",
|
||||
"Quote": "인용하기",
|
||||
"Redact": "지우기",
|
||||
"Reject": "거절하기",
|
||||
"Remove %(name)s from the directory?": "목록에서 %(name)s을 지우시겠어요?",
|
||||
"Remove": "지우기",
|
||||
@@ -62,19 +58,16 @@
|
||||
"Remove from Directory": "목록에서 지우기",
|
||||
"Report a bug": "오류 보고하기",
|
||||
"Resend": "다시 보내기",
|
||||
"Riot Desktop on %(platformName)s": "%(platformName)s에서 라이엇 데스크탑",
|
||||
"Riot Desktop on %(platformName)s": "%(platformName)s에서 라이엇 컴퓨터판",
|
||||
"Riot is not supported on mobile web. Install the app?": "라이엇은 모바일 사이트를 지원하지 않아요. 앱을 설치하시겠어요?",
|
||||
"Room directory": "방 목록",
|
||||
"Room not found": "방을 찾지 못했어요",
|
||||
"Search": "찾기",
|
||||
"Search…": "찾기…",
|
||||
"Search for a room": "방에서 찾기",
|
||||
"Send": "보내기",
|
||||
"Send logs": "로그 보내기",
|
||||
"Settings": "설정",
|
||||
"Source URL": "출처 주소",
|
||||
"Source URL": "출처 URL",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "죄송해요. 브라우저에서 라이엇을 켤 수가 <b>없어요</b>.",
|
||||
"Start chat": "이야기하기",
|
||||
"This Room": "방",
|
||||
"Unavailable": "이용할 수 없음",
|
||||
"Unknown device": "알 수 없는 장치",
|
||||
@@ -87,7 +80,7 @@
|
||||
"Waiting for response from server": "서버에서 응답을 기다리는 중",
|
||||
"You cannot delete this image. (%(code)s)": "이 사진을 지우실 수 없어요. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "이 메시지를 지우실 수 없어요. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "데스크탑 알림을 받지 않고 있어요",
|
||||
"You are not receiving desktop notifications": "컴퓨터 알림을 받지 않고 있어요",
|
||||
"Sunday": "일요일",
|
||||
"Monday": "월요일",
|
||||
"Tuesday": "화요일",
|
||||
@@ -98,7 +91,6 @@
|
||||
"Today": "오늘",
|
||||
"Yesterday": "어제",
|
||||
"OK": "알았어요",
|
||||
"Welcome page": "환영 화면",
|
||||
"Welcome to Riot.im": "라이엇에 오신 걸 환영해요",
|
||||
"Chat with Riot Bot": "Riot 봇과 이야기하기",
|
||||
"You have successfully set a password!": "비밀번호를 설정했어요!",
|
||||
@@ -106,20 +98,17 @@
|
||||
"Please set a password!": "비밀번호를 설정해주세요!",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(osName)s의 %(browserName)s을 통한 %(appName)s",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">사파리</a>와 <a href=\"http://opera.com\">오페라</a>에서도 작동해요.",
|
||||
"customServer_text": "사용자 지정 서버 설정에서 다른 홈 서버 주소를 지정해 다른 매트릭스 서버에 로그인할 수 있어요.<br/>이를 통해 라이엇과 다른 홈 서버의 기존 매트릭스 계정을 함께 쓸 수 있죠.<br/><br/>사용자 지정 ID 서버를 설정할 수도 있지만 이메일 주소로 사용자를 초대하거나 초대받을 수는 없답니다.",
|
||||
"customServer_text": "사용자 지정 서버 설정에서 다른 홈 서버 URL을 지정해 다른 매트릭스 서버에 로그인할 수 있어요.<br/>이를 통해 라이엇과 다른 홈 서버의 기존 매트릭스 계정을 함께 쓸 수 있죠.<br/><br/>사용자 지정 ID 서버를 설정할 수도 있지만 이메일 주소로 사용자를 초대하거나 초대받을 수는 없답니다.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "방 가명 %(alias)s 을 지우고 목록에서 %(name)s를 지우시겠어요?",
|
||||
"Drop here %(toAction)s": "여기에 놓아주세요 %(toAction)s",
|
||||
"Enable audible notifications in web client": "웹 클라이언트에서 알림 소리 켜기",
|
||||
"Enable them now": "지금 켜기",
|
||||
"Enter keywords separated by a comma:": "키워드를 쉼표로 구분해 입력해주세요:",
|
||||
"Failed to": "실패했어요",
|
||||
"Failed to add tag %(tagName)s to room": "방에 %(tagName)s로 지정하지 못했어요",
|
||||
"Failed to change settings": "설정을 바꾸지 못했어요",
|
||||
"Failed to forget room %(errCode)s": "방 %(errCode)s를 잊지 못했어요",
|
||||
"Failed to update keywords": "키워드를 갱신하지 못했어요",
|
||||
"Failed to get protocol list from Home Server": "홈 서버에서 프로토콜 목록을 얻지 못했어요",
|
||||
"Failed to get public room list": "공개한 방 목록을 얻지 못했어요",
|
||||
"Failed to join the room": "방에 들어가지 못했어요",
|
||||
"Failed to remove tag %(tagName)s from room": "방에서 %(tagName)s 지정을 지우지 못했어요",
|
||||
"Failed to send report: ": "보고를 보내지 못했어요: ",
|
||||
"Failed to set direct chat tag": "직접 이야기 지정을 설정하지 못했어요",
|
||||
@@ -129,7 +118,6 @@
|
||||
"Files": "파일",
|
||||
"Filter room names": "방 이름 거르기",
|
||||
"Forward Message": "메시지 전달",
|
||||
" from room": " 방에서",
|
||||
"Guests can join": "손님이 들어올 수 있어요",
|
||||
"(HTTP status %(httpStatus)s)": "(HTTP 상태 %(httpStatus)s)",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "문제를 진단하기 위해서, 이 클라이언트의 로그를 오류 보고서와 같이 보낼 거에요. 위 내용만 보내시려면, 체크를 해제하세요:",
|
||||
@@ -153,8 +141,6 @@
|
||||
"The Home Server may be too old to support third party networks": "타사 네트워크를 지원하기에는 홈 서버가 너무 오래된 걸 수 있어요",
|
||||
"There are advanced notifications which are not shown here": "여기 보이지 않는 고급 알림이 있어요",
|
||||
"The server may be unavailable or overloaded": "서버를 쓸 수 없거나 과부하일 수 있어요",
|
||||
"This room is inaccessible to guests. You may be able to join if you register.": "이 방은 손님이 들어가실 수 없어요. 계정을 등록하시면 들어가실 수 있을 거에요.",
|
||||
" to room": " 방에서",
|
||||
"Unable to fetch notification target list": "알림 대상 목록을 불러올 수 없어요",
|
||||
"Unable to join network": "네트워크에 들어갈 수 없어요",
|
||||
"Unable to look up room ID from server": "서버에서 방 ID를 찾아볼 수 없어요",
|
||||
@@ -171,7 +157,7 @@
|
||||
"Get started with some tips from Riot Bot!": "라이엇 봇에게 조언을 받고 시작하세요!",
|
||||
"General discussion about Matrix and Riot": "매트릭스와 라이엇에 대한 일반 논의",
|
||||
"Discussion of all things Matrix!": "매트릭스의 모든 것에 대한 토론!",
|
||||
"Riot/Web & Desktop chat": "라이엇/웹 & 데스크탑 대화",
|
||||
"Riot/Web & Desktop chat": "라이엇/웹 & 컴퓨터 이야기",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "라이엇/IOS & matrix-ios-sdk 대화",
|
||||
"Riot/Android & matrix-android-sdk chat": "매트릭스/안드로이드 & matrix-ios-sdk 대화",
|
||||
"Matrix technical discussions": "매트릭스 기술 논의",
|
||||
@@ -197,6 +183,22 @@
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "이런 식으로 로그아웃한 뒤 계정으로 돌아가, 다른 장치에서 로그인하실 수 있어요.",
|
||||
"You have successfully set a password and an email address!": "비밀번호와 이메일 주소를 설정했어요!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "잊지마세요, 마음이 바뀌면 언제라도 사용자 설정에서 이메일 주소를 바꾸실 수 있다는 걸요.",
|
||||
"You are Rioting as a guest. <a>Register</a> or <a>sign in</a> to access more rooms and features!": "손님으로 라이엇에 들어오셨네요. <a>계정을 등록하거나</a> <a>로그인하시고</a> 더 많은 방과 기능을 즐기세요!",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "라이엇이 아닌 다른 클라이언트에서 구성하셨을 수도 있어요. 라이엇에서 조정할 수는 없지만 여전히 적용되있을 거에요"
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "라이엇이 아닌 다른 클라이언트에서 구성하셨을 수도 있어요. 라이엇에서 조정할 수는 없지만 여전히 적용되있을 거에요",
|
||||
"To return to your account in future you need to <u>set a password</u>": "나중에 계정으로 돌아가려면 <u>비밀번호 설정</u>을 해야만 해요",
|
||||
"Set Password": "비밀번호 설정",
|
||||
"Warning": "주의",
|
||||
"Checking for an update...": "업데이트를 확인하는 중...",
|
||||
"Error encountered (%(errorDetail)s).": "오류가 일어났어요 (%(errorDetail)s).",
|
||||
"No update available.": "업데이트가 없어요.",
|
||||
"Downloading update...": "업데이트를 받는 중...",
|
||||
"Couldn't load home page": "중심 화면을 불러올 수 없어요",
|
||||
"Show message in desktop notification": "컴퓨터 알림에서 내용 보이기",
|
||||
"Appear Offline": "미접속으로 표시하기",
|
||||
"Bug report sent": "오류 보고서를 보냈어요",
|
||||
"Thank you!": "감사합니다!",
|
||||
"Back": "돌아가기",
|
||||
"Edit": "수정하기",
|
||||
"Toolbox": "도구상자",
|
||||
"Developer Tools": "개발자 도구",
|
||||
"Register": "등록"
|
||||
}
|
||||
|
||||
223
src/i18n/strings/lt.json
Normal file
223
src/i18n/strings/lt.json
Normal file
@@ -0,0 +1,223 @@
|
||||
{
|
||||
"Waiting for response from server": "Laukiama atsakymo iš serverio",
|
||||
"Unknown device": "Nežinomas įrenginys",
|
||||
"Collecting app version information": "Renkama programėlės versijos informacija",
|
||||
"Collecting logs": "Renkami žurnalai",
|
||||
"Uploading report": "Išsiunčiama ataskaita",
|
||||
"Keywords": "Raktažodžiai",
|
||||
"Enter keywords separated by a comma:": "Įveskite kableliais atskirtus raktažodžius:",
|
||||
"OK": "Gerai",
|
||||
"Failed to change settings": "Nepavyko pakeisti nustatymų",
|
||||
"Operation failed": "Operacija nepavyko",
|
||||
"Failed to update keywords": "Nepavyko atnaujinti raktažodžių",
|
||||
"Enable email notifications": "Įjungti pranešimus el. paštu",
|
||||
"Advanced notification settings": "Išplėstiniai pranešimų nustatymai",
|
||||
"Enable desktop notifications": "Įjungti darbalaukio pranešimus",
|
||||
"Sunday": "Sekmadienis",
|
||||
"Monday": "Pirmadienis",
|
||||
"Tuesday": "Antradienis",
|
||||
"Wednesday": "Trečiadienis",
|
||||
"Thursday": "Ketvirtadienis",
|
||||
"Friday": "Penktadienis",
|
||||
"Saturday": "Šeštadienis",
|
||||
"Today": "Šiandien",
|
||||
"Yesterday": "Vakar",
|
||||
"powered by Matrix": "palaikomas Matrix",
|
||||
"What's New": "Kas naujo",
|
||||
"What's new?": "Kas naujo?",
|
||||
"A new version of Riot is available.": "Yra nauja Riot versija.",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Ateityje norėdami prisijungti prie savo paskyros turite <u>susigalvoti slaptažodį</u>",
|
||||
"Set Password": "Nustatyti slaptažodį",
|
||||
"Checking for an update...": "Tikrinama ar yra atnaujinimų...",
|
||||
"No update available.": "Nėra prieinamų atnaujinimų.",
|
||||
"Downloading update...": "Atsiunčiamas atnaujinimas...",
|
||||
"Warning": "Įspėjimas",
|
||||
"Error": "Klaida",
|
||||
"You cannot delete this image. (%(code)s)": "Jūs negalite ištrinti šio paveikslėlio. (%(code)s)",
|
||||
"Remove": "Šalinti",
|
||||
"Close": "Užverti",
|
||||
"Download this file": "Atsisiųsti šį failą",
|
||||
"Thank you!": "Ačiū!",
|
||||
"Cancel": "Atšaukti",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Aprašykite klaidą. Ką darėte? Ko tikėjotės, kad įvyks? Kas iš tikrųjų įvyko?",
|
||||
"Describe your problem here.": "Čia aprašykite savo problemą.",
|
||||
"Changelog": "Keitinių žurnalas",
|
||||
"Back": "Atgal",
|
||||
"You must specify an event type!": "Privalote nurodyti įvykio tipą!",
|
||||
"Event sent!": "Įvykis išsiųstas!",
|
||||
"Event Type": "Įvykio tipas",
|
||||
"Toolbox": "Įrankinė",
|
||||
"You have successfully set a password!": "Jūs sėkmingai įrašėte slaptažodį!",
|
||||
"You have successfully set a password and an email address!": "Jūs sėkmingai įrašėte slaptažodį ir el. pašto adresą!",
|
||||
"Continue": "Tęsti",
|
||||
"(HTTP status %(httpStatus)s)": "(HTTP būsena %(httpStatus)s)",
|
||||
"Please set a password!": "Prašau įrašykite slaptažodį!",
|
||||
"You cannot delete this message. (%(code)s)": "Jūs negalite trinti šios žinutės. (%(code)s)",
|
||||
"Cancel Sending": "Atšaukti siuntimą",
|
||||
"Forward Message": "Persiųsti žinutę",
|
||||
"Unpin Message": "Atsegti žinutę",
|
||||
"Pin Message": "Prisegti žinutę",
|
||||
"Permalink": "Pastovioji nuoroda",
|
||||
"unknown error code": "nežinomas klaidos kodas",
|
||||
"Reject": "Atmesti",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Atleiskite, jūsų naršyklė <b>negali</b> paleisti Riot.",
|
||||
"I understand the risks and wish to continue": "Aš suprantu riziką ir noriu tęsti",
|
||||
"Login": "Prisijungti",
|
||||
"Register": "Registruotis",
|
||||
"Files": "Failai",
|
||||
"Notifications": "Pranešimai",
|
||||
"Rooms": "Kambariai",
|
||||
"Hide panel": "Slėpti skydelį",
|
||||
"Invite to this community": "Pakviesti į šią bendruomenę",
|
||||
"The server may be unavailable or overloaded": "Gali būti, kad serveris yra neprieinamas arba perkrautas",
|
||||
"Unnamed room": "Kambarys be pavadinimo",
|
||||
"Remove from Directory": "Šalinti iš katalogo",
|
||||
"remove %(name)s from the directory.": "šalinti %(name)s iš katalogo.",
|
||||
"Unable to join network": "Nepavyko prisijungti prie tinklo",
|
||||
"Riot does not know how to join a room on this network": "Riot nežino kaip prisijungti prie kambario šiame tinkle",
|
||||
"Room not found": "Kambarys nerastas",
|
||||
"Couldn't find a matching Matrix room": "Nepavyko rasti atitinkamo Matrix kambario",
|
||||
"Directory": "Katalogas",
|
||||
"#example": "#pavyzdys",
|
||||
"more": "daugiau",
|
||||
"Expand panel": "Išskleisti skydelį",
|
||||
"Collapse panel": "Suskleisti skydelį",
|
||||
"Welcome to Riot.im": "Sveiki atvykę į Riot.im",
|
||||
"Chat with Riot Bot": "Kalbėtis su Riot robotu",
|
||||
"General discussion about Matrix and Riot": "Bendros diskusijos apie Matrix ir Riot",
|
||||
"Matrix technical discussions": "Matrix techninės diskusijos",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot nėra palaikoma naršant svetainėje mobiliaisiais įrenginiais. Įdiegti programėlę?",
|
||||
"Riot Desktop on %(platformName)s": "Riot darbalaukis %(platformName)s",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s per %(browserName)s ant %(osName)s",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Norint skambinti su ekrano dalijimosi funkcija būtina naudoti HTTPS.",
|
||||
"Messages containing my display name": "Žinutės, kuriose paminėtas mano vardas",
|
||||
"Messages containing my user name": "Žinutės, kuriose paminėtas mano vartotojo vardas",
|
||||
"Messages in one-to-one chats": "Žinutės privačiuose pokalbiuose",
|
||||
"Messages in group chats": "Žinutės grupiniuose pokalbiuose",
|
||||
"When I'm invited to a room": "Kai aš esu pakviestas į pokalbių kambarį",
|
||||
"Call invitation": "Pakvietimas skambinant",
|
||||
"Messages sent by bot": "Roboto siunčiamos žinutės",
|
||||
"Error saving email notification preferences": "Klaidos pranešimų saugant el. pašto adresą nustatymai",
|
||||
"An error occurred whilst saving your email notification preferences.": "Pasirodė klaida saugant el. pašto adreso pranešimų nustatymus.",
|
||||
"Can't update user notification settings": "Nėra galimybės atnaujinti vartotojo pranešimų nustatymų",
|
||||
"Messages containing <span>keywords</span>": "Žinutės turinčios <span>keywords</span>",
|
||||
"Notify for all other messages/rooms": "Įspėti apie visas kitas žinutes/pokalbių kambarius",
|
||||
"Notify me for anything else": "Įspėti mane apie visa kita",
|
||||
"Enable notifications for this account": "Įjungti pranešimus šiai paskyrai",
|
||||
"All notifications are currently disabled for all targets.": "Šiuo metu visi pranešimai yra išjungti visiems objektams.",
|
||||
"Add an email address above to configure email notifications": "Norėdami gauti pranešimus el. paštu įveskite į aukščiau esantį laukelį el. pašto adresą",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Pranešimai šiems raktažodžiams yra uždrausti taisyklėmis:",
|
||||
"Unable to fetch notification target list": "Nėra galimybės rasti pranešimo objektų sąrašui",
|
||||
"Notification targets": "Pranešimo objektai",
|
||||
"There are advanced notifications which are not shown here": "Yra išplėstinių pranešimų, kurie nėra čia rodomi",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Jūs turbūt juos sukonfigūravote kitoje programėlėje nei Riot. Negalite jų koreguoti Riot programėlėje, bet jie vistiek yra taikomi",
|
||||
"Show message in desktop notification": "Rodyti žinutes darbalaukio pranešimuose",
|
||||
"Enable audible notifications in web client": "Įgalinti garsinius pranešimus internetinėje aplinkoje",
|
||||
"Off": "Išjungta",
|
||||
"On": "Įjungta",
|
||||
"Noisy": "Triukšmingas",
|
||||
"Search…": "Paieška…",
|
||||
"Search": "Ieškoti",
|
||||
"This Room": "Šis pokalbių kambarys",
|
||||
"All Rooms": "Visi pokalbių kambariai",
|
||||
"Custom Server Options": "Pasirinktiniai serverio nustatymai",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Norėdami jungtis prie kito nei Matrix serverio galite pasirinktinio serverio nustatymuose nurodyti kito serverio URL adresą.<br/>Ši funkcija leis naudoti Riot su esama Matrix serverio paskyrą kituose serveriuose.<br/><br/>Taip pat galite nurodyti pasirinktinį identifikavimo serverį, bet tuomet negalėsite kviesti kitų vartotojų el. paštu ar jie jūsų.",
|
||||
"Dismiss": "Nutraukti",
|
||||
"You are not receiving desktop notifications": "Jūs negaunate darbalaukio pranešimų",
|
||||
"Enable them now": "Įgalinti juos dabar",
|
||||
"Update": "Atnaujinti",
|
||||
"Error encountered (%(errorDetail)s).": "Gauta klaida (%(errorDetail)s).",
|
||||
"Uploaded on %(date)s by %(user)s": "Atnaujinta %(date)s vartotojo %(user)s",
|
||||
"Please describe the bug and/or send logs.": "Prašau apibūdinkite programos klaidą ir/arba išsiųskite žurnalo įrašus.",
|
||||
"Loading bug report module": "Įkraunamas klaidų ataskaitų modulis",
|
||||
"Bug report sent": "Klaidos ataskaita išsiųsta",
|
||||
"Failed to send report: ": "Nepavyko išsiųsti ataskaitos: ",
|
||||
"Report a bug": "Siųsti klaidos ataskaitą",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Tam, kad nustatytume problemas, iš šio kliento bus išsiųsti žurnalai kartu su klaidos ataskaita. Jeigu norite siųsti tik žemiau esantį tekstą nuimkite šia varnelę:",
|
||||
"Send logs": "Siųsti žurnalus",
|
||||
"Send": "Siųsti",
|
||||
"Unavailable": "Neprieinamas",
|
||||
"Send Custom Event": "Siųsti pasirinktinį įvykį",
|
||||
"Failed to send custom event.": "Nepavyko išsiųsti pasirinktinio įvykio.",
|
||||
"State Key": "Būklės raktas",
|
||||
"Event Content": "Įvykio turinys",
|
||||
"Send Account Data": "Siųsti paskyros duomenis",
|
||||
"Filter results": "Išfiltruoti rezultatus",
|
||||
"Explore Room State": "Peržiūrėti pokalbių kambario būseną",
|
||||
"Edit": "Koreguoti",
|
||||
"Explore Account Data": "Peržiūrėti paskyros duomenis",
|
||||
"Developer Tools": "Programuotojo įrankiai",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Po atsijungimo galite grįžti prie savo paskyros ir prisijungti kituose įrenginiuose.",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Nepamirškite, kad galite, bet kada įrašyti savo el. pašto adresą paskyros nustatymuose.",
|
||||
"Failed to change password. Is your password correct?": "Nepavyko pakeisti slaptažodžio. Ar Jūsų slaptažodis teisingas?",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Tai leis Jums grįžti prie paskyros po atsijungimo ir prisijungti kituose įrenginiuose.",
|
||||
"Resend": "Siųsti iš naujo",
|
||||
"Reply": "Atsakyti",
|
||||
"View Source": "Peržiūrėti šaltinį",
|
||||
"View Decrypted Source": "Peržiūrėti iššifruotą šaltinį",
|
||||
"Unhide Preview": "Rodyti paržiūrą",
|
||||
"Quote": "Citata",
|
||||
"Source URL": "Šaltinio URL adresas",
|
||||
"Online": "Prisijungęs",
|
||||
"Away": "Neaktyvus",
|
||||
"Appear Offline": "Neprisijungęs",
|
||||
"Failed to set Direct Message status of room": "Nepavyko nustatyti tiesioginio pranešimo kambario būklės",
|
||||
"Failed to forget room %(errCode)s": "Nepavyko pašalinti pokalbių kambario %(errCode)s",
|
||||
"All messages (noisy)": "Visos žinutės (triukšmingas)",
|
||||
"All messages": "Visos žinutės",
|
||||
"Mentions only": "Tik paminėjimai",
|
||||
"Mute": "Užtildyti",
|
||||
"Leave": "Atsijungti",
|
||||
"Forget": "Pamiršti",
|
||||
"Favourite": "Svarbūs",
|
||||
"Low Priority": "Nesvarbūs",
|
||||
"Direct Chat": "Tiesioginis pokalbis",
|
||||
"View Community": "Peržiūrėti bendruomenes",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot naudoja daug išplėstinių naršyklės funkcionalumų, kai kurie iš jų yra neprieinami ar eksperimentinei Jūsų naršyklėje.",
|
||||
"Please install <chromeLink>Chrome</chromeLink> or <firefoxLink>Firefox</firefoxLink> for the best experience.": "Prašau įdiekite <chromeLink>Chrome</chromeLink> arba <firefoxLink>Firefox</firefoxLink> geriausiam rezultatui gauti.",
|
||||
"<safariLink>Safari</safariLink> and <operaLink>Opera</operaLink> work too.": "Naudojant <safariLink>Safari</safariLink> ir <operaLink>Opera</operaLink> taip pat gerai veikia.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Naudojant šią naršyklę aplikacija gali atrodyti ir reaguoti neteisingai. Kai kurios arba visos funkcijos gali neveikti. Jei vis tiek norite pabandyti gali tęsti, tačiau iškilusios problemos yra jūsų pačių reikalas!",
|
||||
"Couldn't load home page": "Nepavyksta užkrauti namų puslapio",
|
||||
"Members": "Nariai",
|
||||
"%(count)s Members|other": "%(count)s nariai",
|
||||
"%(count)s Members|one": "%(count)s narys",
|
||||
"Invite to this room": "Pakviesti į šį kambarį",
|
||||
"Add rooms to this community": "Įtraukti kambarius į šią bendruomenę",
|
||||
"Failed to get protocol list from Home Server": "Nepavyko gauti protokolų sąrašo iš serverio",
|
||||
"The Home Server may be too old to support third party networks": "Serveris gali būti per senas ir negali palaikyti trečių šalių tinklų",
|
||||
"Failed to get public room list": "Nepavyko gauti viešų pokalbių kambarių sąrašo",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Ar ištrinti kambarį %(alias)s ir %(name)s kambario pavadinimą iš katalogo?",
|
||||
"Remove %(name)s from the directory?": "Ar ištrinti %(name)s iš katalogo?",
|
||||
"delete the alias.": "ištrinti slapyvardį.",
|
||||
"Fetching third party location failed": "Nepavyko gauti trečios šalies vietos",
|
||||
"Unable to look up room ID from server": "Nepavyko gauti kambario ID iš serverio",
|
||||
"World readable": "Visiems skaitomas",
|
||||
"Guests can join": "Svečiai gali prisijungti",
|
||||
"No rooms to show": "Nėra kambarių rodymui",
|
||||
"Search for a room": "Ieškoti kambario",
|
||||
"Filter room names": "Filtruoti kambarių pavadinimus",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizuotas, šifruotas čatas; bendradarbiavimas palaikomas [matrix]",
|
||||
"Search the room directory": "Ieškoti kambarių kataloge",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Daugybė kambarių yra prisijungę prie Matrix, kurie yra susieti su egzistuojančiais tinklais (Slack, IRC, Gitter etc) arba nepriklausomi. Patikrinkite kambarių katalogą!",
|
||||
"Get started with some tips from Riot Bot!": "Pradėkite su patarimais nuo Riot roboto!",
|
||||
"Discussion of all things Matrix!": "Diskusijos apie viską Matrix!",
|
||||
"Riot/Web & Desktop chat": "Riot/Web & Darbalaukio čatas",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk chat",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk chat",
|
||||
"Running Matrix services": "Vykdant Matrix servisus",
|
||||
"Community-run support for Synapse": "Bendruomenės Synapse palaikymas",
|
||||
"Admin support for Dendrite": "Administratoriaus Dendrite palaikymas",
|
||||
"Announcements about Synapse releases": "Pranešimai apie Synapse naujinimus",
|
||||
"Support for those using and running matrix-appservice-irc": "Palaikymas skirtas matrix-appservice-irc naudotojams",
|
||||
"Building services on Matrix": "Servisų kūrimas ant Matrix",
|
||||
"Support for those using the Matrix spec": "Palaikymas skirtas Matrix spec",
|
||||
"Design and implementation of E2E in Matrix": "E2E dizainas ir įgyvendinimas Matrix'e",
|
||||
"Implementing VR services with Matrix": "VR serviso įgyvendinimas su Matrix",
|
||||
"Implementing VoIP services with Matrix": "VoIP serviso įgyvendinimas su Matrix",
|
||||
"Discussion of the Identity Service API": "Diskusijos apie identifikavimo serviso API",
|
||||
"Support for those using, running and writing other bridges": "Palaikymas skirtas tiems kas naudoja kitus tiltus",
|
||||
"Contributing code to Matrix and Riot": "Contributing code to Matrix and Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Kūrėjų čatas Riot/Web dev team",
|
||||
"Dev chat for the Dendrite dev team": "Kūrėjų čatas Dendrite dev team",
|
||||
"Co-ordination for Riot/Web translators": "Riot/Web vertėjų koordinacija"
|
||||
}
|
||||
227
src/i18n/strings/lv.json
Normal file
227
src/i18n/strings/lv.json
Normal file
@@ -0,0 +1,227 @@
|
||||
{
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s caur %(browserName)s un %(osName)s",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "darbojas arī <a href=\"http://apple.com/safari\">Safari</a> un <a href=\"http://opera.com\">Opera</a>.",
|
||||
"A new version of Riot is available.": "Pieejama jauna Riot versija.",
|
||||
"Add an email address above to configure email notifications": "Lai konfigurētu epasta paziņojumus, pievieno epasta adresi",
|
||||
"Advanced notification settings": "Paziņojumu papildus iestatījumi",
|
||||
"All messages": "Visas ziņas",
|
||||
"All messages (noisy)": "Visas ziņas (ar skaņu)",
|
||||
"All Rooms": "Visas istabas",
|
||||
"All notifications are currently disabled for all targets.": "Visiem saņēmējiem visi paziņojumi ir atspējoti.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Saglabājot Tavus epasta paziņojumu uzstādījumus, radās kļūda.",
|
||||
"Call invitation": "Uzaicinājuma zvans",
|
||||
"Cancel": "Atcelt",
|
||||
"Cancel Sending": "Atcelt sūtīšanu",
|
||||
"Can't update user notification settings": "Neizdodas atjaunot lietotāja paziņojumu iestatījumus",
|
||||
"Changelog": "Izmaiņu saraksts (vēsture)",
|
||||
"Close": "Aizvērt",
|
||||
"Collapse panel": "Sakļaut (saritināt) paneli",
|
||||
"Collecting app version information": "Tiek iegūta programmas versijas informācija",
|
||||
"Collecting logs": "Tiek iegūti logfaili",
|
||||
"Couldn't find a matching Matrix room": "Atbilstoša Matrix istaba netika atrasta",
|
||||
"Custom Server Options": "Iestatāmie servera uzstādījumi",
|
||||
"customServer_text": "Tu vari izmantot īpašus servera uzstādījumus, lai pierakstītos citos Matrix serveros, norādot atšķirīgu servera URL adresi.<br/>Tas atļaus Tev izmantot Riot ar jau eksistējošu Matrix kontu citā serverī.<br/><br/>Tu vari norādīt arī īpašu identitātes serveri, bet tad nevarēsi uzaicināt lietotājus pēc epasta adreses,kā arī pēc tās tikt uzaicināts/a.",
|
||||
"Discussion of the Identity Service API": "Diskusija par Identitātes servisa API",
|
||||
"delete the alias.": "dzēst aizstājējvārdu (aliasi).",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Dzēst istabas aizstājējvārdu %(alias)s un dzēst %(name)s no kataloga?",
|
||||
"Describe your problem here.": "Apraksti šeit savu problēmu.",
|
||||
"Direct Chat": "Tiešais čats",
|
||||
"Directory": "Katalogs",
|
||||
"Dismiss": "Atteikums",
|
||||
"Download this file": "Lejupielādēt šo failu",
|
||||
"Enable audible notifications in web client": "Iespējot skaņas paziņojumus web klientā",
|
||||
"Enable desktop notifications": "Iespējot darbvirsmas paziņojumus",
|
||||
"Enable email notifications": "Iespējot paziņojumus pa epastu",
|
||||
"Enable notifications for this account": "Iespējot paziņojumus šim kontam",
|
||||
"Enable them now": "Iespējot tos tagad",
|
||||
"Enter keywords separated by a comma:": "Ievadi atslēgvārdus, atdalītus ar komatu:",
|
||||
"Error": "Kļūda",
|
||||
"Error saving email notification preferences": "Kļūda saglabājot epasta notifikāciju paziņojumu uzstādījumus",
|
||||
"#example": "#piemērs",
|
||||
"Expand panel": "Izvērst paneli",
|
||||
"Failed to add tag %(tagName)s to room": "Neizdevās istabai pievienot birku %(tagName)s",
|
||||
"Failed to change settings": "Neizdevās nomainīt iestatījumus",
|
||||
"Failed to forget room %(errCode)s": "Neizdevās \"aizmirst\" istabu %(errCode)s",
|
||||
"Failed to update keywords": "Neizdevās aktualizēt atslēgvārdus",
|
||||
"Failed to get protocol list from Home Server": "Neizdevās iegūt protokolu sarakstu no mājas servera",
|
||||
"Failed to get public room list": "Neizdevās iegūt publisko istabu sarakstu",
|
||||
"Failed to remove tag %(tagName)s from room": "Neizdevās istabai noņemt birku %(tagName)s",
|
||||
"Failed to send report: ": "Neizdevās nosūtīt atskaiti: ",
|
||||
"Failed to set direct chat tag": "Neizdevās tiešajam čatam uzstādīt birku",
|
||||
"Continue": "Turpināt",
|
||||
"Failed to change password. Is your password correct?": "Neizdevās nomainīt paroli. Vai tā ir pareiza?",
|
||||
"Favourite": "Tava izlase (favorīti)",
|
||||
"Mute": "Kluss (noklusināt)",
|
||||
"Notifications": "Paziņojumi",
|
||||
"OK": "Labs ir",
|
||||
"Operation failed": "Darbība neizdevās",
|
||||
"Remove": "Dzēst",
|
||||
"Search": "Meklēt",
|
||||
"unknown error code": "nezināms kļūdas kods",
|
||||
"Monday": "pirmdiena",
|
||||
"Tuesday": "otrdiena",
|
||||
"Wednesday": "trešdiena",
|
||||
"Thursday": "ceturtdiena",
|
||||
"Friday": "piektdiena",
|
||||
"Saturday": "sestdiena",
|
||||
"Sunday": "svētdiena",
|
||||
"powered by Matrix": "Tiek darbināts ar Matrix",
|
||||
"Failed to set Direct Message status of room": "Neizdevās iestatīt istabas tiešās ziņas statusu",
|
||||
"Fetching third party location failed": "Neizdevās iegūt trešās puses atrašanās vietu",
|
||||
"Files": "Faili",
|
||||
"Filter room names": "Filtrēt pēc istabu nosaukuma",
|
||||
"Forget": "Aizmirst",
|
||||
"Forward Message": "Pārsūtīt ziņu",
|
||||
"Guests can join": "Var pievienoties viesi",
|
||||
"Hide panel": "Slēpt paneli",
|
||||
"(HTTP status %(httpStatus)s)": "(HTTP statuss %(httpStatus)s)",
|
||||
"I understand the risks and wish to continue": "Es apzinos riskus un vēlos turpināt",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Problēmu diagnosticēšanas mērķim šī klienta logfaili tiks nosūtīti kopā ar šo kļūdas atskaiti. Ja vēlies nosūtīt vienīgi zemāk redzamo tekstu, lūdzu noņem ķeksi:",
|
||||
"Invite to this room": "Uzaicināt uz šo istabu",
|
||||
"Keywords": "Atslēgvārdi",
|
||||
"Leave": "Atstāt",
|
||||
"Login": "Ierakstīties",
|
||||
"Loading bug report module": "Ielādējas kļūdu atskaišu modulis",
|
||||
"Low Priority": "Zema prioritāte",
|
||||
"Members": "Biedri",
|
||||
"Mentions only": "Vienīgi atsauces",
|
||||
"Messages containing my display name": "Ziņas, kuras satur manu redzamo vārdu",
|
||||
"Messages containing <span>keywords</span>": "Ziņas, kuras satur <span>atslēgvārdus</span>",
|
||||
"Messages containing my user name": "Ziņas, kuras satur manu lietotājvārdu",
|
||||
"Messages in group chats": "Ziņas grupas čatos",
|
||||
"Messages in one-to-one chats": "Ziņas viens-pret-vienu čatos",
|
||||
"Messages sent by bot": "Botu nosūtītās ziņas",
|
||||
"more": "vairāk",
|
||||
"No rooms to show": "Nav istabu, kuras parādīt",
|
||||
"Noisy": "Trokšņains",
|
||||
"Notification targets": "Paziņojuma mērķi",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Paziņojumi par šādiem atslēgvārdiem atbilst noteikumiem, kurus šeit nevar parādīt:",
|
||||
"Notify for all other messages/rooms": "Paziņot par visām citām ziņām/istabām",
|
||||
"Notify me for anything else": "Paziņot man par jebko citu",
|
||||
"Off": "Izslēgt",
|
||||
"On": "Ieslēgt",
|
||||
"Permalink": "Pastāvīgā saite",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Lūdzu, apraksti kļūdu. Kas tika darīts? Kādas bija gaidas (kāds rezultāts tika sagaidīts)? Kas realitātē notika?",
|
||||
"Please describe the bug and/or send logs.": "Lūdzu apraksti kļūdu un/vai nosūti logfailus.",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Lūdzu instalē <a href=\"https://www.google.com/chrome\">Chrome</a> vai <a href=\"https://getfirefox.com\">Firefox</a> pārlūku labākai pārlūkošanas pieredzei.",
|
||||
"Quote": "Citāts",
|
||||
"Reject": "Noraidīt",
|
||||
"Remove %(name)s from the directory?": "Dzēst %(name)s no kataloga?",
|
||||
"remove %(name)s from the directory.": "dzēst %(name)s no kataloga.",
|
||||
"Remove from Directory": "Dzēst no kataloga",
|
||||
"Report a bug": "Informēt par kļūdu",
|
||||
"Resend": "Nosūtīt atkārtoti",
|
||||
"Riot Desktop on %(platformName)s": "Riot darbvirsma %(platformName)s",
|
||||
"Riot does not know how to join a room on this network": "Riot nezin kā pievienoties šajā tīklā esošajai istabai",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot netiek atbalstīts mobilajā versijā. Instalēt aplikāciju?",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot izmanto daudzas advancētas tīmekļa pārlūka iespējas, no kurām dažas var nebūt pieejamas vai ir eksperimentālas Tavā pašreizējajā pārlūkā.",
|
||||
"Room not found": "Istaba netika atrasta",
|
||||
"Search…": "Meklēt…",
|
||||
"Search for a room": "Meklēt istabu",
|
||||
"Send": "Sūtīt",
|
||||
"Send logs": "Nosūtīt logfailus",
|
||||
"Source URL": "Avota URL adrese",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Atvaino, diemžēl tavs tīmekļa pārlūks <b>nespēj</b> darbināt Riot.",
|
||||
"The Home Server may be too old to support third party networks": "Mājas serveris var būt pārāk novecojis, lai ļautu izmantot trešo pušu tīmekļa resursus",
|
||||
"There are advanced notifications which are not shown here": "Pastāv papildus paziņojumi, kuri šeit netiek rādīti",
|
||||
"The server may be unavailable or overloaded": "Serveris nav pieejams vai ir pārslogots",
|
||||
"This Room": "Šī istaba",
|
||||
"Unable to fetch notification target list": "Neizdevās iegūt paziņojumu mērķu sarakstu",
|
||||
"Unable to join network": "Nav iespējams pievienoties tīklam",
|
||||
"Unable to look up room ID from server": "Nav iespējams no servera iegūt istabas ID",
|
||||
"Unavailable": "Nepieejams",
|
||||
"Unhide Preview": "Rādīt priekšskatījumu",
|
||||
"Unknown device": "Nezināma ierīce",
|
||||
"Unnamed room": "Nenosaukta istaba",
|
||||
"Update": "Aktualizēt",
|
||||
"Uploaded on %(date)s by %(user)s": "Augšuplādēja %(user)s %(date)s",
|
||||
"Uploading report": "Augšuplādē atskaiti",
|
||||
"View Decrypted Source": "Skatīt atšifrētu avotu",
|
||||
"View Source": "Skatīt avotu",
|
||||
"What's New": "Kas jauns",
|
||||
"What's new?": "Kas jauns?",
|
||||
"Waiting for response from server": "Gaidam atbildi no servera",
|
||||
"When I'm invited to a room": "Kad esmu uzaicināts/a istabā",
|
||||
"World readable": "Pieejams ikvienam no visurienes",
|
||||
"You cannot delete this image. (%(code)s)": "Šo attēlu nevar izdzēst (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "Tu nevari dzēst šo ziņu. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "Netiek saņemti darbvirsmas paziņojumi",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Droši vien Tu konfigurēji tās kādā citā Matrix klientā, nevis Riot. Nav iespējams tos pārkonfigurēt ar Riot, bet tie joprojām tiek izmantoti",
|
||||
"Today": "šodien",
|
||||
"Yesterday": "vakar",
|
||||
"Warning": "Brīdinājums",
|
||||
"Checking for an update...": "Lūkojamies pēc aktualizācijas...",
|
||||
"Error encountered (%(errorDetail)s).": "Gadījās kļūda (%(errorDetail)s).",
|
||||
"No update available.": "Nav pieejamu aktualizāciju .",
|
||||
"Downloading update...": "Lejupielādējam aktualizāciju...",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Lai izmantotu ekrāna kopīgošanas zvanu, nepieciešams izmantot HTTPS savienojumu.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Tavā pašreizējā pārlūkā aplikācijas izskats un uzvedība var būt pilnīgi neatbilstoša, kā arī dažas no visām funkcijām var nedarboties. Ja vēlies turpināt izmantot šo pārlūku, Tu vari arī turpināt, apzinoties, ka šajā gadījumā esi viens/a ar iespējamo problēmu!",
|
||||
"Welcome to Riot.im": "Esiet gaidīti Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizēta, šifrēta čata & kopdarbošanās sistēma uz [matrix] bāzes",
|
||||
"Search the room directory": "Meklēt istabu katalogā",
|
||||
"Chat with Riot Bot": "Pačatot ar Riot botu",
|
||||
"Get started with some tips from Riot Bot!": "Iepazīsties ar dažiem knifiem no Riot bota!",
|
||||
"General discussion about Matrix and Riot": "Galvenā diskusija par Matrix un Riot",
|
||||
"Discussion of all things Matrix!": "Diskusija par visām ar Matrix saistītajām lietām!",
|
||||
"Riot/Web & Desktop chat": "Riot/Web & darbvirsmas čats",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk čats",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk čats",
|
||||
"Matrix technical discussions": "Matrix tehniskās diskusijas",
|
||||
"Running Matrix services": "Matrix pakalpojumu izmantošana",
|
||||
"Community-run support for Synapse": "\"Synapse\" komūnas nodrošināts atbalsts",
|
||||
"Admin support for Dendrite": "Administrotora atbalsts \"Dendrite\"",
|
||||
"Announcements about Synapse releases": "Paziņojumi par \"Synapse\" izlaidumiem",
|
||||
"Support for those using and running matrix-appservice-irc": "Atbalsts tiem, kuri izmanto matrix-appservice-irc",
|
||||
"Building services on Matrix": "Uz Matrix bāzētu pakalpojumu izveide",
|
||||
"Support for those using the Matrix spec": "Atbalsts tiem, kuri izmanto Matrix specifikācijas",
|
||||
"Design and implementation of E2E in Matrix": "E2E arhitektūra un iedzīvināšana Matrix",
|
||||
"Implementing VR services with Matrix": "VR pakalpojumu iedzīvināšana Matrix",
|
||||
"Implementing VoIP services with Matrix": "VoIP pakalpojumu iedzīvināšana Matrix",
|
||||
"Support for those using, running and writing other bridges": "Atbalsts tiem, kuri izmanto un rada citus \"tiltu\" risinājumus",
|
||||
"Contributing code to Matrix and Riot": "Dot ieguldījumu Matrix and Riot kodā",
|
||||
"Dev chat for the Riot/Web dev team": "Riot/Web izstrādātāju komandas čats",
|
||||
"Dev chat for the Dendrite dev team": "Dendrite izstrādatāju komandas čats",
|
||||
"Co-ordination for Riot/Web translators": "Riot/Web tulkotāju koordinācija",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Matrix-ā pastāv daudzas neatkarīgas un/vai eksistējošiem tīmekļa resursiem (Slack, IRC, Gitter u.tml.) piesaistītas istabas. Ieskaties katalogā!",
|
||||
"You have successfully set a password!": "Tu veiksmīgi nomainīji paroli!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Tu vari tagad atgriezties savā kontā pēc izrakstīšanās, un pierakstīties no citām ierīcēm.",
|
||||
"Please set a password!": "Lūdzu iestati paroli!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Tas atļaus Tev atgriezties savā kontā pēc izrakstīšanās, un pierakstīties no citām ierīcēm.",
|
||||
"You have successfully set a password and an email address!": "Tu veiksmīgi iestatīji paroli un epasta adresi!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Atceries, ka Tu vienmēr vari iestatīt epasta adresi lietotāja uzstādījumos, ja pārdomāsi.",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Lai nākotnē atgrieztos savā kontā, nepieciešams <u>iestatīt paroli</u>",
|
||||
"Set Password": "Iestatīt paroli",
|
||||
"Couldn't load home page": "Neizdevās ielādēt sākumlapu",
|
||||
"Show message in desktop notification": "Parādīt ziņu darbvirsmas paziņojumos",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Tu vari lietot \"custom\" servera opcijas, lai ielogotos citos Matrix serveros, norādot citu mājasservera URL.<br> Tas atļaus tev lietot Riot ar esošo Matrix kontu uz cita mājasservera.<br/><br/>Tu arī vari uzstādīt atsevišķu identitāšu serveri, taču tad Tev nebūs iespēju uzaicināt lietotājus izmantojot epasta adresi, vai pašam tikt uzaicinātam izmantojot epasta adresi.",
|
||||
"Appear Offline": "Šķiet nesaistē (oflainā)",
|
||||
"Away": "Prom (nav uz vietas)",
|
||||
"Bug report sent": "Kļūdas atskaite nosūtīta",
|
||||
"Thank you!": "Tencinam!",
|
||||
"Back": "Atpakaļ",
|
||||
"Send Custom Event": "Sūtīt individuālu notikumu",
|
||||
"You must specify an event type!": "Jānorāda notikuma tips!",
|
||||
"Event sent!": "Notikums nosūtīts!",
|
||||
"Failed to send custom event.": "Individuālo notikumu nosūtīt neizdevās.",
|
||||
"Event Type": "Notikuma tips",
|
||||
"State Key": "Stāvokļa atslēga",
|
||||
"Event Content": "Notikuma saturs",
|
||||
"Send Account Data": "Sūtīt konta datus",
|
||||
"Filter results": "Rezultātu filtrēšana",
|
||||
"Explore Room State": "Istabas statusa noskaidrošana",
|
||||
"Edit": "Rediģēt",
|
||||
"Explore Account Data": "Aplūkot konta datus",
|
||||
"Toolbox": "Instrumentārijs",
|
||||
"Developer Tools": "Attīstītāja instrumenti",
|
||||
"Unpin Message": "Atkabināt ziņu",
|
||||
"Pin Message": "Piekabināt ziņu",
|
||||
"Please install <chromeLink>Chrome</chromeLink> or <firefoxLink>Firefox</firefoxLink> for the best experience.": "Labāko lietošanas pieredzi gūsi uzstādot pārlūkprogrammu <chromeLink>Chromium</chromeLink> vai <firefoxLink>Firefox</firefoxLink>.",
|
||||
"<safariLink>Safari</safariLink> and <operaLink>Opera</operaLink> work too.": "<safariLink>Safari</safariLink> un <operaLink>Opera</operaLink> arī nav skādējami.",
|
||||
"Register": "Reģistrēties",
|
||||
"%(count)s Members|other": "%(count)s biedru",
|
||||
"%(count)s Members|one": "%(count)s biedru",
|
||||
"Rooms": "Istabas",
|
||||
"Invite to this community": "Uzaicināt šajā komūnā",
|
||||
"Add rooms to this community": "Pievienot istabas šai kopienai",
|
||||
"Reply": "Atbildēt"
|
||||
}
|
||||
@@ -1,6 +1,196 @@
|
||||
{
|
||||
"Add an email address above to configure email notifications": "ഇ മെയില് അറിയിപ്പുകൾ ലഭിക്കാന് മുകളില് ഇ-മെയില് വിലാസം നല്കൂ",
|
||||
"All messages": "എല്ലാ സന്ദേശങ്ങളും",
|
||||
"All messages (loud)": "എല്ലാ സന്ദേശങ്ങളും (ഉച്ചത്തിൽ)",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(osName)sല് %(browserName)s വഴി %(appName)s"
|
||||
"All messages (noisy)": "എല്ലാ സന്ദേശങ്ങളും (ഉച്ചത്തിൽ)",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(osName)sല് %(browserName)s വഴി %(appName)s",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">സഫാരിയിലും</a>പിന്നെ <a href=\"http://opera.com\">ഓപ്പേറയിലും</a>പ്രവര്ത്തിക്കുന്നു.",
|
||||
"A new version of Riot is available.": "റയട്ടിന്റെ ഒരു പുതിയ പതിപ്പ് ലഭ്യമാണ്.",
|
||||
"Advanced notification settings": "അറിയപ്പുകളുടെ സങ്കീര്ണമായ സജ്ജീകരണങ്ങള്",
|
||||
"All Rooms": "എല്ലാ മുറികളും കാണുക",
|
||||
"All notifications are currently disabled for all targets.": "അറിയിപ്പുകളെല്ലാം നിര്ത്തിയിരിയ്ക്കുന്നു.",
|
||||
"An error occurred whilst saving your email notification preferences.": "ഇ-മെയില് വഴി അറിയിയ്ക്കാനുള്ള നിങ്ങളുടെ സജ്ജീകരണങ്ങള് സൂക്ഷിക്കുന്നതില് ഒരു പ്രശ്നമുണ്ടായി.",
|
||||
"Call invitation": "വിളിയ്ക്കുന്നു",
|
||||
"Cancel": "റദ്ദാക്കുക",
|
||||
"Cancel Sending": "അയയ്ക്കുന്നത് റദ്ദാക്കുക",
|
||||
"Can't update user notification settings": "ഉപയോക്താവിനെ അറിയിയ്ക്കാനുള്ള സജ്ജീകരണം പുതുക്കാനായില്ല",
|
||||
"Changelog": "മാറ്റങ്ങളുടെ നാള്വഴി",
|
||||
"Close": "അടയ്ക്കുക",
|
||||
"Collapse panel": "പാനല് കൊളാപ്സ് ചെയ്യുക",
|
||||
"Collecting app version information": "ആപ്പ് പതിപ്പു വിവരങ്ങള് ശേഖരിക്കുന്നു",
|
||||
"Collecting logs": "നാള്വഴി ശേഖരിക്കുന്നു",
|
||||
"Couldn't find a matching Matrix room": "ആവശ്യപ്പെട്ട മാട്രിക്സ് റൂം കണ്ടെത്താനായില്ല",
|
||||
"Custom Server Options": "കസ്റ്റം സെര്വര് ഓപ്ഷനുകള്",
|
||||
"delete the alias.": "ഏലിയാസ് നീക്കം ചെയ്യുക.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "റൂം ഏലിയാസ് %(alias)s നീക്കം ചെയ്യുകയും %(name)s കള് ഡയറക്ടറിയില് നിന്നും നീക്കം ചെയ്യുകയും ചെയ്യുക ?",
|
||||
"Describe your problem here.": "നിങ്ങള് നേരിട്ട പ്രശ്നം ഇവിടെ വിവരിക്കാം.",
|
||||
"Direct Chat": "നേരിട്ടുള്ള ചാറ്റ്",
|
||||
"Directory": "ഡയറക്ടറി",
|
||||
"Dismiss": "ഒഴിവാക്കുക",
|
||||
"Download this file": "ഈ ഫയല് ഡൌണ്ലോഡ് ചെയ്യുക",
|
||||
"Enable audible notifications in web client": "വെബ് പതിപ്പിലെ അറിയിപ്പുകള് കേള്ക്കാവുന്നതാക്കുക",
|
||||
"Enable desktop notifications": "ഡെസ്ക്ടോപ്പ് നോട്ടിഫിക്കേഷനുകള് ഇനേബിള് ചെയ്യുക",
|
||||
"Enable email notifications": "ഇമെയില് നോട്ടിഫിക്കേഷനുകള് ഇനേബിള് ചെയ്യുക",
|
||||
"Enable notifications for this account": "ഈ അക്കൌണ്ടില് നോട്ടിഫിക്കേഷനുകള് ഇനേബിള് ചെയ്യുക",
|
||||
"Enable them now": "ഇപ്പോള് ഇനേബിള് ചെയ്യുക",
|
||||
"Enter keywords separated by a comma:": "കീവേഡുകളെ കോമ കൊണ്ട് വേര്ത്തിരിച്ച് ടൈപ്പ് ചെയ്യുക :",
|
||||
"Error": "എറര്",
|
||||
"Error saving email notification preferences": "ഇമെയില് നോട്ടിഫിക്കേഷന് സജ്ജീകരണങ്ങള് സൂക്ഷിക്കവേ എറര് നേരിട്ടു",
|
||||
"#example": "#ഉദാഹരണം",
|
||||
"Expand panel": "പാനല് വലുതാക്കുക",
|
||||
"Failed to add tag %(tagName)s to room": "റൂമിന് %(tagName)s എന്ന ടാഗ് ആഡ് ചെയ്യുവാന് സാധിച്ചില്ല",
|
||||
"Failed to change settings": "സജ്ജീകരണങ്ങള് മാറ്റുന്നവാന് സാധിച്ചില്ല",
|
||||
"Failed to forget room %(errCode)s": "%(errCode)s റൂം ഫോര്ഗെറ്റ് ചെയ്യുവാന് സാധിച്ചില്ല",
|
||||
"Failed to update keywords": "കീവേഡുകള് പുതുക്കുവാന് സാധിച്ചില്ല",
|
||||
"Failed to get protocol list from Home Server": "ഹോം സെര്വറില് നിന്ന് പ്രോട്ടോക്കോള് ലിസ്റ്റ് നേടാന് സാധിച്ചില്ല",
|
||||
"Failed to get public room list": "പബ്ലിക്ക് റൂം ലിസ്റ്റ് നേടാന് സാധിച്ചില്ല",
|
||||
"Failed to remove tag %(tagName)s from room": "റൂമില് നിന്നും %(tagName)s ടാഗ് നീക്കം ചെയ്യുവാന് സാധിച്ചില്ല",
|
||||
"Failed to send report: ": "റിപ്പോര്ട്ട് അയക്കുവാന് സാധിച്ചില്ല : ",
|
||||
"Failed to set direct chat tag": "ഡയറക്റ്റ് ചാറ്റ് ടാഗ് സെറ്റ് ചെയ്യാനായില്ല",
|
||||
"Failed to set Direct Message status of room": "റൂമില് നിന്നും ഡയറക്റ്റ് മെസേജ് സ്റ്റാറ്റസ് സജ്ജീകരിക്കാന് കഴിഞ്ഞില്ല",
|
||||
"Favourite": "പ്രിയപ്പെട്ടവ",
|
||||
"Fetching third party location failed": "തേഡ് പാര്ട്ടി ലൊക്കേഷന് ഫെച്ച് ചെയ്യാന് കഴിഞ്ഞില്ല",
|
||||
"Files": "ഫയലുകള്",
|
||||
"Filter room names": "റൂം പേരുകള് ഫില്ട്ടര് ചെയ്യുക",
|
||||
"Forget": "മറക്കുക",
|
||||
"Forward Message": "സന്ദേശം ഫോര്വേഡ് ചെയ്യുക",
|
||||
"Guests can join": "അതിഥികള്ക്കും പ്രവേശിക്കാം",
|
||||
"Hide panel": "പാനല് ഒളിപ്പിക്കുക",
|
||||
"(HTTP status %(httpStatus)s)": "(HTTP സ്റ്റാറ്റസ് %(httpStatus)s)",
|
||||
"I understand the risks and wish to continue": "കുഴപ്പമാകാന് സാധ്യതയുണ്ടെന്നെനിയ്ക്കു് മനസ്സിലായി, എന്നാലും മുന്നോട്ട് പോകുക",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "നേരിട്ട പ്രശ്നം മനസ്സിലാക്കാന്, ഈ ക്ലയന്റില് നിന്നുള്ള നാള്വഴികള് ബഗ് റിപ്പോര്ട്ടിനൊപ്പം അയയ്ക്കും. അതിനു പകരം ഈ എഴുത്ത് മാത്രം അയച്ചാല് മതിയെങ്കില് ദയവായി ശരിച്ഛിഹ്നം ഒഴിവാക്കുക:",
|
||||
"Invite to this room": "ഈ റൂമിലേക്ക് ക്ഷണിക്കുക",
|
||||
"Keywords": "കീവേഡുകള്",
|
||||
"Leave": "വിടവാങ്ങുക",
|
||||
"Login": "ലോഗിന്",
|
||||
"Loading bug report module": "പിഴവുകള് അറിയിയ്ക്കാനുള്ള ഘടകം ചേര്ക്കുന്നു",
|
||||
"Low Priority": "താഴ്ന്ന പരിഗണന",
|
||||
"Members": "അംഗങ്ങള്",
|
||||
"Mentions only": "മെന്ഷനുകള് മാത്രം",
|
||||
"Messages containing my display name": "എന്റെ പേര് അടങ്ങിയിരിക്കുന്ന സന്ദേശങ്ങള്ക്ക്",
|
||||
"Messages containing <span>keywords</span>": "<span>കീവേഡുകള്</span>അടങ്ങിയ സന്ദേശങ്ങള്ക്ക്",
|
||||
"Messages containing my user name": "എന്റെ യൂസര് നെയിം അടങ്ങിയിരിക്കുന്ന സന്ദേശങ്ങള്ക്ക്",
|
||||
"Messages in group chats": "ഗ്രൂപ്പ് ചാറ്റുകളിലെ സന്ദേശങ്ങള്ക്ക്",
|
||||
"Messages in one-to-one chats": "നേര്ക്കുനേര് ചാറ്റിലെ സന്ദേശങ്ങള്ക്ക്",
|
||||
"Messages sent by bot": "ബോട്ട് അയയ്ക്കുന്ന സന്ദേശങ്ങള്ക്ക്",
|
||||
"more": "കൂടുതല്",
|
||||
"Mute": "നിശ്ശബ്ദം",
|
||||
"No rooms to show": "കാണിക്കാന് റൂമുകളില്ല",
|
||||
"Noisy": "ഉച്ചത്തില്",
|
||||
"Notification targets": "നോട്ടിഫിക്കേഷന് ടാര്ഗെറ്റുകള്",
|
||||
"Notifications": "നോട്ടിഫിക്കേഷനുകള്",
|
||||
"Operation failed": "ശ്രമം പരാജയപ്പെട്ടു",
|
||||
"Permalink": "പെര്മാലിങ്ക്",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "ബഗ് വിശദീകരിക്കുക. എന്ത് ചെയ്തപ്പോഴാണ് വന്നത് ? എന്തായിരുന്നു പ്രതീക്ഷിച്ചിരുന്നത് ? ശരിക്കും എന്താണ് സംഭവിച്ചത് ?",
|
||||
"Please describe the bug and/or send logs.": "ബഗ് വിശദീകരിക്കുക , കൂടെ / അല്ലെങ്കില് നാള്വഴികളും അയക്കുക.",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "ഏറ്റവും മികച്ച ഉപയോഗത്തിനായി <a href=\"https://www.google.com/chrome\">ഗൂഗിള് ക്രോം</a>ബ്രൌസറോ അല്ലെങ്കില് <a href=\"https://getfirefox.com\">ഫയര്ഫോക്സ്</a> ബ്രൌസറോ ഇന്സ്റ്റാള് ചെയ്യൂ.",
|
||||
"powered by Matrix": "മാട്രിക്സില് പ്രവര്ത്തിക്കുന്നു",
|
||||
"Quote": "ഉദ്ധരിക്കുക",
|
||||
"Reject": "നിരസിക്കുക",
|
||||
"Remove %(name)s from the directory?": "%(name)s കള് ഡയറക്റ്ററിയില് നിന്നും മാറ്റണോ ?",
|
||||
"Remove": "നീക്കം ചെയ്യുക",
|
||||
"Remove from Directory": "ഡയറക്റ്ററിയില് നിന്നും നീക്കം ചെയ്യുക",
|
||||
"Report a bug": "ബഗ് റിപ്പോര്ട്ട് ചെയ്യുക",
|
||||
"Resend": "വീണ്ടും അയയ്ക്കുക",
|
||||
"Riot Desktop on %(platformName)s": "%(platformName)s ലെ റയട്ട് ഡെസ്ക്ടോപ്പ്",
|
||||
"Riot does not know how to join a room on this network": "ഈ നെറ്റ്വര്ക്കിലെ ഒരു റൂമില് എങ്ങനെ അംഗമാകാമെന്ന് റയട്ടിന് അറിയില്ല",
|
||||
"Riot is not supported on mobile web. Install the app?": "മൊബൈലില് റയട്ട് വെബ് പിന്തുണ ഇല്ല. ആപ്പ് ഇന്സ്റ്റാള് ചെയ്യാം ?",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "റയട്ട് നൂതന ബ്രൌസര് ഫീച്ചറുകള് ഉപയോഗിക്കുന്നു. നിങ്ങളുടെ ബ്രൌസറില് അവയില് പലതും ഇല്ല / പൂര്ണ്ണമല്ല .",
|
||||
"Room not found": "റൂം കണ്ടെത്താനായില്ല",
|
||||
"Search": "തിരയുക",
|
||||
"Search…": "തിരയുക…",
|
||||
"Search for a room": "ഒരു റൂം തിരയുക",
|
||||
"Send": "അയയ്ക്കുക",
|
||||
"Send logs": "നാള്വഴി അയയ്ക്കുക",
|
||||
"Source URL": "സോഴ്സ് യു ആര് എല്",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "ക്ഷമിക്കണം, നിങ്ങളുടെ ബ്രൌസര് റയട്ട് പ്രവര്ത്തിപ്പിക്കാന് <b>പര്യാപ്തമല്ല</b>.",
|
||||
"The Home Server may be too old to support third party networks": "തേഡ് പാര്ട്ടി നെറ്റ്വര്ക്കുകളെ പിന്തുണക്കാത്ത വളരെ പഴയ ഹോം സെര്വര് ആയേക്കാം",
|
||||
"There are advanced notifications which are not shown here": "ഇവിടെ കാണിക്കാത്ത നൂതന നോട്ടിഫിക്കേഷനുകള് ഉണ്ട്",
|
||||
"The server may be unavailable or overloaded": "സെര്വര് ലഭ്യമല്ല അല്ലെങ്കില് ഓവര്ലോഡഡ് ആണ്",
|
||||
"This Room": "ഈ മുറി",
|
||||
"Unable to fetch notification target list": "നോട്ടിഫിക്കേഷന് ടാര്ഗെറ്റ് ലിസ്റ്റ് നേടാനായില്ല",
|
||||
"Unable to join network": "നെറ്റ്വര്ക്കില് ജോയിന് ചെയ്യാന് കഴിയില്ല",
|
||||
"Unable to look up room ID from server": "സെര്വറില് നിന്നും റൂം ഐഡി കണ്ടെത്താനായില്ല",
|
||||
"Unavailable": "ലഭ്യമല്ല",
|
||||
"Unhide Preview": "പ്രിവ്യു കാണിക്കുക",
|
||||
"Unknown device": "അപരിചിത ഡിവൈസ്",
|
||||
"unknown error code": "അപരിചിത എറര് കോഡ്",
|
||||
"Unnamed room": "പേരില്ലാത്ത റൂം",
|
||||
"Update": "പുതുക്കുക",
|
||||
"Uploaded on %(date)s by %(user)s": "%(date)s ല് %(user)s അപ്ലോഡ് ചെയ്തത്",
|
||||
"Uploading report": "റിപ്പോര്ട്ട് അപ്ലോഡ് ചെയ്യുന്നു",
|
||||
"View Decrypted Source": "ഡീക്രിപ്റ്റ് ചെയ്ത സോഴ്സ് കാണുക",
|
||||
"View Source": "സോഴ്സ് കാണുക",
|
||||
"What's New": "പുതിയ വിശേഷങ്ങള്",
|
||||
"What's new?": "എന്തൊക്കെ പുതിയ വിശേഷങ്ങള് ?",
|
||||
"Waiting for response from server": "സെര്വറില് നിന്നുള്ള പ്രതികരണത്തിന് കാക്കുന്നു",
|
||||
"When I'm invited to a room": "ഞാന് ഒരു റൂമിലേക്ക് ക്ഷണിക്കപ്പെടുമ്പോള്",
|
||||
"You cannot delete this image. (%(code)s)": "നിങ്ങള്ക്ക് ഈ ചിത്രം നീക്കം ചെയ്യാനാകില്ല. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "നിങ്ങള്ക്ക് ഈ സന്ദേശം നീക്കം ചെയ്യാനാകില്ല. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "നിങ്ങള്ക്ക് ഇപ്പോള് ഡെസ്ക്ടോപ്പ് നോട്ടിഫിക്കേഷനുകള് ലഭിക്കുന്നില്ല",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "ഇവ റയട്ടല്ലാതെ മറ്റൊരു ക്ലയന്റില് വച്ച് കോണ്ഫിഗര് ചെയ്തതാകാം. റയട്ടില് അവ ലഭിക്കില്ല, എങ്കിലും അവ നിലവിലുണ്ട്",
|
||||
"Sunday": "ഞായര്",
|
||||
"Monday": "തിങ്കള്",
|
||||
"Tuesday": "ചൊവ്വ",
|
||||
"Wednesday": "ബുധന്",
|
||||
"Thursday": "വ്യാഴം",
|
||||
"Friday": "വെള്ളി",
|
||||
"Saturday": "ശനി",
|
||||
"Today": "ഇന്ന്",
|
||||
"Yesterday": "ഇന്നലെ",
|
||||
"OK": "ശരി",
|
||||
"Warning": "മുന്നറിയിപ്പ്",
|
||||
"Checking for an update...": "അപ്ഡേറ്റ് ഉണ്ടോ എന്ന് തിരയുന്നു...",
|
||||
"Error encountered (%(errorDetail)s).": "എറര് നേരിട്ടു (%(errorDetail)s).",
|
||||
"No update available.": "അപ്ഡേറ്റുകള് ലഭ്യമല്ല.",
|
||||
"Downloading update...": "അപ്ഡേറ്റ് ഡൌണ്ലോഡ് ചെയ്യുന്നു...",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "സ്ക്രീന് ഷെയറിങ്ങ് കോള് നടത്തണമെങ്കില് https ഉപയോഗിക്കണം.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "നിങ്ങളുടെ ഇപ്പോളത്തെ ബ്രൌസര് റയട്ട് പ്രവര്ത്തിപ്പിക്കാന് പൂര്ണമായും പര്യാപത്മല്ല. പല ഫീച്ചറുകളും പ്രവര്ത്തിക്കാതെയിരിക്കാം. ഈ ബ്രൌസര് തന്നെ ഉപയോഗിക്കണമെങ്കില് മുന്നോട്ട് പോകാം. പക്ഷേ നിങ്ങള് നേരിടുന്ന പ്രശ്നങ്ങള് നിങ്ങളുടെ ഉത്തരവാദിത്തത്തില് ആയിരിക്കും!",
|
||||
"Welcome to Riot.im": "റയട്ടിലേക്ക് സ്വാഗതം",
|
||||
"Search the room directory": "റൂം ഡയറക്റ്ററിയില് പരതുക",
|
||||
"Chat with Riot Bot": "റയട്ട് ബോട്ടുമായി ചാറ്റ് ചെയ്യുക",
|
||||
"Get started with some tips from Riot Bot!": "റയട്ട് ബോട്ടില് നിന്നുള്ള നിര്ദേശങ്ങള് സ്വീകരിച്ച് കൊണ്ട് തുടങ്ങൂ!",
|
||||
"General discussion about Matrix and Riot": "മാട്രിക്സിനേയും റയട്ടിനേയും കുറിച്ചുള്ള പൊതു ചര്ച്ച",
|
||||
"Discussion of all things Matrix!": "മാട്രിക്സിനെ കുറിച്ചുള്ള ചര്ച്ച!",
|
||||
"Riot/Web & Desktop chat": "റയട്ട്/വെബ് & ഡെസ്ക്ടോപ്പ് ചാറ്റ്",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "റയട്ട്/iOS& matrix-ios-sdk ചാറ്റ്",
|
||||
"Riot/Android & matrix-android-sdk chat": "റയട്ട്/ആന്ഡ്രോയ്ഡ്& matrix-android-sdk ചാറ്റ്",
|
||||
"Matrix technical discussions": "മാട്രിക്സ് സാങ്കേതിക ചര്ച്ച",
|
||||
"Running Matrix services": "മാട്രിക്സ് സര്വീസുകള് റണ് ചെയ്യുന്നു",
|
||||
"Community-run support for Synapse": "സിനാപ്സിനുള്ള കമ്യൂണിറ്റി-നേതൃത്വത്തലുള്ള പിന്തുണ",
|
||||
"Admin support for Dendrite": "ഡെന്ഡ്രൈറ്റിനുള്ള അഡ്മിന് പിന്തുണ",
|
||||
"Announcements about Synapse releases": "സിനാപ്സ് റിലീസുകളെ കുറിച്ചുള്ള അറിയിപ്പുകള്",
|
||||
"Support for those using and running matrix-appservice-irc": "matrix-appservice-irc ഉപയോഗിക്കുന്നവര്ക്കും റണ് ചെയ്യുന്നവര്ക്കുമുള്ള സപ്പോര്ട്ട്",
|
||||
"Support for those using the Matrix spec": "Matrix spec ഉപയോഗിക്കുന്നവര്ക്കുള്ള പിന്തുണ",
|
||||
"Design and implementation of E2E in Matrix": "മാട്രിക്സിലെ e2eയുടെ ഡിസൈനും ഇമ്പ്ലിമെന്റേഷനും",
|
||||
"remove %(name)s from the directory.": "%(name)s ഡയറക്റ്ററിയില് നിന്ന് നീക്കം ചെയ്യുക.",
|
||||
"World readable": "ആർക്കും വായിക്കാവുന്നത്",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "വികേന്ദ്രീകൃത , എന്ക്രിപ്റ്റഡ് ചാറ്റ് & മാട്രിക്സ് നല്കുന്ന കൊളാബൊറേഷന്",
|
||||
"Support for those using, running and writing other bridges": "മറ്റ് ബ്രിഡ്ജുകള് ഉപയോഗിക്കുന്ന, റണ് ചെയ്യുന്ന, എഴുതുന്നവര്ക്കുള്ള പിന്തുണ",
|
||||
"Contributing code to Matrix and Riot": "മാട്രിക്സിലേക്കും റയട്ടിലേക്കും കോഡ് സംഭാവന ചെയ്യാം",
|
||||
"Dev chat for the Riot/Web dev team": "റയട്ട്/വെബ് ഡെവലപ്പര് ടീമിനുള്ള dev chat",
|
||||
"Dev chat for the Dendrite dev team": "ഡെന്ഡ്രൈറ്റ് ഡെവലപ്പര് ടീമിനുള്ള dev chat",
|
||||
"Co-ordination for Riot/Web translators": "റയട്ട്/വെബ് പരിഭാഷകരുടെ കൂട്ടായ്മ",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "മാട്രിക്സിലുള്ളതും പഴയ നെറ്റ്വര്ക്കുകളിലേക്ക് ( സ്ലാക്ക്, IRC, ഗിറ്റര് മുതലായവ ) ലിങ്ക് ചെയ്തതുമൊക്കെയായ ധാരാളം റൂമുകളുണ്ട്. ഡയറക്റ്ററി പരിശാധിക്കൂ!",
|
||||
"Failed to change password. Is your password correct?": "രഹസ്യവാക്ക് മാറ്റാന് സാധിച്ചില്ല. രഹസ്യവാക്ക് ശരിയാണോ ?",
|
||||
"You have successfully set a password!": "രഹസ്യവാക്ക് സജ്ജീകരിച്ചിരിക്കുന്നു!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "നിങ്ങള്ക്ക് ഇപ്പോള് സൈന് ഔട്ട് ചെയ്ത ശേഷവും നിങ്ങളുടെ അക്കൌണ്ടിലേക്ക് തിരികെ വരാം, അതു പോലെ മറ്റ് ഡിവൈസുകളില് സൈന് ഇന് ചെയ്യുകയുമാവാം.",
|
||||
"Continue": "മുന്നോട്ട്",
|
||||
"Please set a password!": "ദയവായി ഒരു രഹസ്യവാക്ക് ക്രമീകരിക്കുക!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "സൈന് ഔട്ട് ചെയ്ത ശേഷം വീണ്ടും നിങ്ങളുടെ അക്കൌണ്ടിലേക്ക് മടങ്ങി വരാനും, മറ്റ് ഡിവൈസുകളില് സൈന് ഇന് ചെയ്യാനും ഇത് സഹായിക്കും.",
|
||||
"You have successfully set a password and an email address!": "ഇമെയില് വിലാസവും രഹസ്യവാക്കും വിജയകരമായി ക്രമീകരിച്ചിരിക്കുന്നു!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "ഓര്ക്കുക, വേണ്ട സമയത്ത് യൂസര് സെറ്റിങ്സില് ഒരു ഇമെയില് വിലാസം നല്കാം.",
|
||||
"To return to your account in future you need to <u>set a password</u>": "വീണ്ടും ഈ അക്കൌണ്ട് ഉപയോഗിക്കണമെങ്കില് <u>ഒരു രഹസ്യവാക്ക് സെറ്റ് ചെയ്യുക</u>",
|
||||
"Set Password": "രഹസ്യവാക്ക് സജ്ജീകരിക്കുക",
|
||||
"customServer_text": "മറ്റ് മാട്രിക്സ് സെര്വറുകളില് ലോഗിന് ചെയ്യാന് കസ്റ്റം സെര്വര് ഓപ്ഷനില് ഹോം സെര്വര് യു ആര് എല് വ്യക്തമാക്കുക.<br/>ഇത് വഴി മറ്റൊരു ഹോം സെര്വറില് ഉള്ള മാട്രിക്സ് അക്കൌണ്ട് റയട്ടില് ഉപയോഗിക്കാം.<br/><br/>അതു പോലെ, നിങ്ങള്ക്ക് കസ്റ്റം ഐഡന്റിറ്റി സെര്വറും ക്രമീകരിക്കാം. പക്ഷേ അപ്പോള് നിങ്ങള്ക്ക് ആരേയും ഇമെയില് വഴി ക്ഷണിക്കാനോ തിരിച്ചോ സാധിക്കില്ല.",
|
||||
"Off": "ഓഫ്",
|
||||
"On": "ഓണ്",
|
||||
"Notify me for anything else": "ബാക്കി ഏതിനും എനിക്ക് അറിയിപ്പു നൽകുക",
|
||||
"Notify for all other messages/rooms": "ബാക്കി എല്ലാ സന്ദേശങ്ങൾക്കും/റൂമുകൾക്കും അറിയിപ്പു നൽകുക",
|
||||
"Building services on Matrix": "മട്രിക്സിന്മേൽ സർവീസുകൾ പണിയുന്നു",
|
||||
"Implementing VR services with Matrix": "മട്രിക്സ് ഉപയോഗിച്ചു വി.അർ. സർവീസുകൾ നടപ്പിലാക്കുന്നു",
|
||||
"Implementing VoIP services with Matrix": "മേട്രിക്സിന്മേൽ VoIP സർവീസുകൾ നടപ്പിലാക്കുന്നു",
|
||||
"Discussion of the Identity Service API": "ഐഡൻടിറ്റി സർവീസ് എപിഐ യെ പറ്റിയുള്ള ചർച്ച",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "ഈ പറയുന്ന കീവേർഡുകളെ പറ്റിയുള്ള അറിയിപ്പുകൾ പിൻതുടരുന്ന നിയമങ്ങൾ ഇവിടെ കാണിക്കുവാൻ സാധ്യമല്ല:",
|
||||
"Back": "തിരികെ",
|
||||
"Bug report sent": "ബഗ് റിപ്പോർട്ട് അയയ്ക്കുക"
|
||||
}
|
||||
|
||||
@@ -2,13 +2,12 @@
|
||||
"Add an email address above to configure email notifications": "Legg til en epost adresse for å sette opp epost varsling",
|
||||
"Advanced notification settings": "Avanserte varslingsinnstillinger",
|
||||
"All messages": "Alle meldinger",
|
||||
"All messages (loud)": "Alle meldinger (høy)",
|
||||
"All messages (noisy)": "Alle meldinger (høy)",
|
||||
"All notifications are currently disabled for all targets.": "Alle varsler er deaktivert for alle mottakere.",
|
||||
"An error occurred whilst saving your email notification preferences.": "En feil oppsto i forbindelse med lagring av epost varsel innstillinger.",
|
||||
"Cancel Sending": "Avbryt sending",
|
||||
"Can't update user notification settings": "Kan ikke oppdatere brukervarsel innstillinger",
|
||||
"Close": "Lukk",
|
||||
"Create new room": "Opprett nytt rom",
|
||||
"Couldn't find a matching Matrix room": "Kunne ikke finne et samsvarende Matrix rom",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> og <a href=\"http://opera.com\">Opera</a> fungerer også.",
|
||||
"Call invitation": "Anropsinvitasjon",
|
||||
@@ -20,7 +19,6 @@
|
||||
"Direct Chat": "Direkte Chat",
|
||||
"Directory": "Katalog",
|
||||
"Download this file": "Last ned filen",
|
||||
"Drop here %(toAction)s": "Dra hit %(toAction)s",
|
||||
"Enable audible notifications in web client": "Aktiver lyd-varsel i webklient",
|
||||
"Enable desktop notifications": "Aktiver skrivebordsvarsler",
|
||||
"Enable email notifications": "Aktiver e-postvarsler",
|
||||
@@ -31,14 +29,12 @@
|
||||
"Error saving email notification preferences": "Feil ved lagring av e-postvarselinnstillinger",
|
||||
"#example": "#eksempel",
|
||||
"Expand panel": "Utvid panel",
|
||||
"Failed to": "Feilet å",
|
||||
"Failed to add tag %(tagName)s to room": "Kunne ikke legge til tagg %(tagName)s til rom",
|
||||
"Failed to change settings": "Kunne ikke endre innstillingene",
|
||||
"Failed to forget room %(errCode)s": "Kunne ikke glemme rommet %(errCode)s",
|
||||
"Failed to update keywords": "Kunne ikke oppdatere nøkkelord",
|
||||
"Failed to get protocol list from Home Server": "Kunne ikke hente protokolliste fra Hjemme-Server",
|
||||
"Failed to get public room list": "Kunne ikke hente offentlig romliste",
|
||||
"Failed to join the room": "Kunne ikke bli med på rommet",
|
||||
"Failed to remove tag %(tagName)s from room": "Kunne ikke fjerne tagg %(tagName)s fra rommet",
|
||||
"Failed to set direct chat tag": "Kunne ikke angi direkte chat-tagg",
|
||||
"Failed to set Direct Message status of room": "Kunne ikke angi status for direkte melding i rommet",
|
||||
@@ -47,9 +43,7 @@
|
||||
"Files": "Filer",
|
||||
"Filter room names": "Filtrer romnavn",
|
||||
"Forget": "Glem",
|
||||
" from room": " fra rommet",
|
||||
"Guests can join": "Gjester kan bli med",
|
||||
"Guest users can't invite users. Please register to invite.": "Gjester kan ikke invitere brukere. Vennligst registrer deg for å invitere.",
|
||||
"I understand the risks and wish to continue": "Jeg forstår risikoen og ønsker å fortsette",
|
||||
"Invite to this room": "Inviter til dette rommet",
|
||||
"Keywords": "Nøkkelord",
|
||||
@@ -73,10 +67,8 @@
|
||||
"On": "På",
|
||||
"Permalink": "Permanent lenke",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Vennligst installer <a href=\"https://www.google.com/chrome\">Chrome</a> eller <a href=\"https://getfirefox.com\">Firefox</a> for den beste opplevelsen.",
|
||||
"Please Register": "Vennligst registrer deg",
|
||||
"powered by Matrix": "benytter seg av Matrix",
|
||||
"Quote": "Sitat",
|
||||
"Redact": "Maskere",
|
||||
"Reject": "Avvis",
|
||||
"Remove %(name)s from the directory?": "Fjern %(name)s fra katalogen?",
|
||||
"Remove": "Fjern",
|
||||
@@ -85,18 +77,13 @@
|
||||
"Resend": "Send på nytt",
|
||||
"Riot does not know how to join a room on this network": "Riot vet ikke hvordan man kan komme inn på et rom på dette nettverket",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot benytter mange avanserte nettleserfunksjoner, og noen av disse er ikke tilgjengelige eller er eksperimentelle på din nåværende nettleser.",
|
||||
"Room directory": "Rom katalog",
|
||||
"Room not found": "Rommet ble ikke funnet",
|
||||
"Search for a room": "Søk etter et rom",
|
||||
"Settings": "Innstillinger",
|
||||
"Source URL": "Kilde URL",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Beklager, din nettleser er <b>ikke</b> i stand til å kjøre Riot.",
|
||||
"Start chat": "Start chat",
|
||||
"The Home Server may be too old to support third party networks": "Hjemme-serveren kan være for gammel til å støtte tredjeparts-nettverk",
|
||||
"There are advanced notifications which are not shown here": "Det er avanserte varsler som ikke vises her",
|
||||
"The server may be unavailable or overloaded": "Serveren kan være utilgjengelig eller overbelastet",
|
||||
"This room is inaccessible to guests. You may be able to join if you register.": "Dette rommet er ikke tilgjengelig for gjester. Du kan kanskje komme inn om du registrerer deg.",
|
||||
" to room": " til rom",
|
||||
"Unable to fetch notification target list": "Kunne ikke hente varsel-mål liste",
|
||||
"Unable to join network": "Kunne ikke bli med i nettverket",
|
||||
"Unable to look up room ID from server": "Kunne ikke slå opp rom-ID fra serveren",
|
||||
@@ -107,7 +94,7 @@
|
||||
"View Decrypted Source": "Vis dekryptert kilde",
|
||||
"View Source": "Vis kilde",
|
||||
"When I'm invited to a room": "Når jeg blir invitert til et rom",
|
||||
"World readable": "Verden lesbar",
|
||||
"World readable": "Lesbar for alle",
|
||||
"You cannot delete this image. (%(code)s)": "Du kan ikke slette dette bildet. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "Du kan ikke slette denne meldingen. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "Du mottar ikke skrivebords varsler",
|
||||
@@ -120,6 +107,5 @@
|
||||
"Friday": "Fredag",
|
||||
"Saturday": "Lørdag",
|
||||
"Today": "I dag",
|
||||
"Yesterday": "I går",
|
||||
"Welcome page": "Velkomst side"
|
||||
"Yesterday": "I går"
|
||||
}
|
||||
|
||||
1
src/i18n/strings/ne.json
Normal file
1
src/i18n/strings/ne.json
Normal file
@@ -0,0 +1 @@
|
||||
{}
|
||||
@@ -2,14 +2,13 @@
|
||||
"Add an email address above to configure email notifications": "Voeg een e-mailadres toe om e-mailmeldingen te ontvangen",
|
||||
"Advanced notification settings": "Geavanceerde meldingsinstellingen",
|
||||
"All messages": "Alle berichten",
|
||||
"All messages (loud)": "Alle berichten (luid)",
|
||||
"All messages (noisy)": "Alle berichten (luid)",
|
||||
"All notifications are currently disabled for all targets.": "Alle meldingen zijn momenteel uitgeschakeld voor alle doelen.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Er is een fout opgetreden tijdens het opslaan van uw e-mailmeldingsvoorkeuren.",
|
||||
"Call invitation": "Oproep-uitnodiging",
|
||||
"Cancel Sending": "Versturen annuleren",
|
||||
"Can't update user notification settings": "Het is niet gelukt om de meldingsinstellingen van de gebruiker bij te werken",
|
||||
"Close": "Sluiten",
|
||||
"Create new room": "Een nieuwe kamer maken",
|
||||
"Couldn't find a matching Matrix room": "Het is niet gelukt om een bijbehorende Matrix-kamer te vinden",
|
||||
"Custom Server Options": "Aangepaste serverinstellingen",
|
||||
"customServer_text": "U kunt de aangepaste serverinstellingen gebruiken om in te loggen bij andere Matrix-servers door een andere homeserver-URL in te voeren.<br/>Dit maakt het mogelijk om Riot te gebruiken met een bestaand Matrix-account op een andere homeserver.<br/><br/>U kunt ook een aangepaste identiteitsserver instellen, maar het is dan niet mogelijk om gebruikers uit te nodigen met behulp van een e-mailadres of zelf uitgenodigd te worden met een e-mailadres.",
|
||||
@@ -28,14 +27,12 @@
|
||||
"Error": "Fout",
|
||||
"Error saving email notification preferences": "Fout bij het opslaan van de meldingsvoorkeuren voor e-mail",
|
||||
"#example": "#voorbeeld",
|
||||
"Failed to": "Mislukt om",
|
||||
"Failed to add tag %(tagName)s to room": "Mislukt om de label %(tagName)s aan de kamer toe te voegen",
|
||||
"Failed to change settings": "Instellingen wijzigen mislukt",
|
||||
"Failed to forget room %(errCode)s": "Ruimte vergeten mislukt %(errCode)s",
|
||||
"Failed to update keywords": "Trefwoorden bijwerken mislukt",
|
||||
"Failed to get protocol list from Home Server": "Protocollijst ophalen van de homeserver mislukt",
|
||||
"Failed to get public room list": "Lijst met publieke kamers ophalen mislukt",
|
||||
"Failed to join the room": "Kamer binnengaan mislukt",
|
||||
"Failed to remove tag %(tagName)s from room": "Label %(tagName)s van de kamer verwijderen mislukt",
|
||||
"Failed to set direct chat tag": "Het is mislukt om het privéchatlabel weg te halen",
|
||||
"Favourite": "Favoriet",
|
||||
@@ -43,9 +40,7 @@
|
||||
"Files": "Bestanden",
|
||||
"Filter room names": "Filter kamernamen",
|
||||
"Forget": "Vergeten",
|
||||
" from room": " van kamer",
|
||||
"Guests can join": "Gasten kunnen deelnemen",
|
||||
"Guest users can't invite users. Please register to invite.": "Gasten kunnen geen gebruikers uitnodigen. Om anderen uit te nodigen zult u zich moeten registreren.",
|
||||
"Guests can join": "Gasten kunnen toetreden",
|
||||
"Invite to this room": "Uitnodigen voor deze kamer",
|
||||
"Keywords": "Trefwoorden",
|
||||
"Leave": "Verlaten",
|
||||
@@ -59,10 +54,10 @@
|
||||
"Messages sent by bot": "Berichten verzonden door een bot",
|
||||
"more": "meer",
|
||||
"Mute": "Dempen",
|
||||
"No rooms to show": "Geen kamers om te laten zien",
|
||||
"No rooms to show": "Geen ruimtes om weer te geven",
|
||||
"Noisy": "Luidruchtig",
|
||||
"Notification targets": "Meldingsdoelen",
|
||||
"Notifications": "Meldingen",
|
||||
"Notifications": "Notificaties",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Meldingen op de volgende trefwoorden volgen regels die hier niet kunnen worden getoond:",
|
||||
"Notify for all other messages/rooms": "Stuur een melding voor alle andere berichten/kamers",
|
||||
"Notify me for anything else": "Stuur een melding voor al het andere",
|
||||
@@ -70,9 +65,8 @@
|
||||
"On": "Aan",
|
||||
"Operation failed": "Actie mislukt",
|
||||
"Permalink": "Permanente link",
|
||||
"Please Register": "Registreer Alstublieft",
|
||||
"powered by Matrix": "mogelijk gemaakt door Matrix",
|
||||
"Quote": "Citeer",
|
||||
"Quote": "Citeren",
|
||||
"Reject": "Afwijzen",
|
||||
"Remove %(name)s from the directory?": "%(name)s uit de kamerlijst verwijderen?",
|
||||
"Remove": "Verwijderen",
|
||||
@@ -80,28 +74,23 @@
|
||||
"Remove from Directory": "Uit de kamerlijst verwijderen",
|
||||
"Resend": "Opnieuw verzenden",
|
||||
"Riot does not know how to join a room on this network": "Riot weet niet hoe het moet deelnemen in een kamer op dit netwerk",
|
||||
"Room directory": "Kamerlijst",
|
||||
"Room not found": "De kamer is niet gevonden",
|
||||
"Search for a room": "Een kamer opzoeken",
|
||||
"Settings": "Instellingen",
|
||||
"Source URL": "Bron-URL",
|
||||
"Start chat": "Gesprek starten",
|
||||
"The Home Server may be too old to support third party networks": "De home server is misschien te oud om netwerken van derde partijen te ondersteunen",
|
||||
"The Home Server may be too old to support third party networks": "De thuisserver is misschien te oud om netwerken van derde partijen te ondersteunen",
|
||||
"There are advanced notifications which are not shown here": "Er zijn geavanceerde notificaties die hier niet getoond worden",
|
||||
"The server may be unavailable or overloaded": "De server is misschien niet beschikbaar of overbelast",
|
||||
"This room is inaccessible to guests. You may be able to join if you register.": "Deze kamer is niet toegankelijk voor gasten. Je zou misschien kunnen deelnemen als je geregistreerd bent.",
|
||||
" to room": " naar kamer",
|
||||
"Unable to fetch notification target list": "Het is mislukt om de lijst van notificatiedoelen op te halen",
|
||||
"Unable to join network": "Het is mislukt om toe te treden tot dit netwerk",
|
||||
"Unable to look up room ID from server": "Het is mislukt om de kamer-ID op te halen van de server",
|
||||
"Unhide Preview": "Zichtbaar maken preview",
|
||||
"unknown error code": "onbekende foutcode",
|
||||
"Unnamed room": "Kamer zonder naam",
|
||||
"Unnamed room": "Ruimte zonder naam",
|
||||
"Uploaded on %(date)s by %(user)s": "Geüpload op %(date)s door %(user)s",
|
||||
"View Decrypted Source": "Bekijk ontsleutelde bron",
|
||||
"View Source": "Bekijk bron",
|
||||
"When I'm invited to a room": "Wanneer ik uitgenodigd word voor een kamer",
|
||||
"World readable": "Door iedereen leesbaar",
|
||||
"World readable": "Leesbaar voor iedereen",
|
||||
"You cannot delete this image. (%(code)s)": "Je kunt deze afbeelding niet verwijderen. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "Je kunt dit bericht niet verwijderen. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "Je ontvangt momenteel geen desktopmeldingen",
|
||||
@@ -115,10 +104,7 @@
|
||||
"Saturday": "Zaterdag",
|
||||
"Today": "Vandaag",
|
||||
"Yesterday": "Gisteren",
|
||||
"Welcome page": "Welkomstpagina",
|
||||
"Drop here %(toAction)s": "%(toAction)s hier naartoe verplaatsen",
|
||||
"Failed to set Direct Message status of room": "Het is mislukt om de directe-berichtenstatus van de kamer in te stellen",
|
||||
"Redact": "Redigeren",
|
||||
"A new version of Riot is available.": "Er is een nieuwe versie van Riot beschikbaar.",
|
||||
"All Rooms": "Alle kamers",
|
||||
"Cancel": "Annuleren",
|
||||
@@ -143,7 +129,7 @@
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot wordt niet ondersteund op het mobiele web. Wil je de app installeren?",
|
||||
"Search": "Zoeken",
|
||||
"Search…": "Zoeken…",
|
||||
"Send": "Versturen",
|
||||
"Send": "Verstuur",
|
||||
"Send logs": "Logboeken versturen",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Sorry, uw browser werkt <b>niet</b> met Riot.",
|
||||
"This Room": "Deze kamer",
|
||||
@@ -154,7 +140,6 @@
|
||||
"What's New": "Wat is er nieuw",
|
||||
"What's new?": "Wat is er nieuw?",
|
||||
"Waiting for response from server": "Wachten op antwoord van de server",
|
||||
"You are Rioting as a guest. <a>Register</a> or <a>sign in</a> to access more rooms and features!": "U gebruikt Riot als gast. <a>Registreren</a> of <a>aanmelden</a> om voor meer kamers en functies!",
|
||||
"OK": "OK",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "U moet HTTPS gebruiken om een oproep met schermdelen te kunnen starten.",
|
||||
"Welcome to Riot.im": "Welkom bij Riot.im",
|
||||
@@ -196,7 +181,50 @@
|
||||
"Discussion of the Identity Service API": "Discussie over de Identity Service API",
|
||||
"Support for those using, running and writing other bridges": "Ondersteuning voor het gebruiken, draaien en ontwikkelen aan andere bruggen",
|
||||
"Dev chat for the Riot/Web dev team": "Dev-chat voor het Riot/Web ontwikkelteam",
|
||||
"Dev chat for the Dendrite dev team": "Dev-chat voor het Dendrite ontwikkelteam",
|
||||
"Dev chat for the Dendrite dev team": "Dev-chat voor het Dendrite-ontwikkelteam",
|
||||
"You have successfully set a password and an email address!": "Het instellen van een wachtwoord en e-mailadres is geslaagd!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Onthoud dat u altijd een e-mailadres in kan stellen in de gebruikersinstellingen als u zich bedenkt."
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Onthoud dat u altijd een e-mailadres in kan stellen in de gebruikersinstellingen als u zich bedenkt.",
|
||||
"Warning": "Waarschuwing",
|
||||
"Checking for an update...": "Aan het kijken voor een update...",
|
||||
"Error encountered (%(errorDetail)s).": "Fout ondervonden (%(errorDetail)s).",
|
||||
"No update available.": "Geen update beschikbaar.",
|
||||
"Downloading update...": "Update aan het downloaden...",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Om in de toekomst naar je account terug te gaan moet je <u>een wachtwoord instellen</u>",
|
||||
"Set Password": "Wachtwoord instellen",
|
||||
"Couldn't load home page": "Kon de home pagina niet laden",
|
||||
"Bug report sent": "Bug report verzonden",
|
||||
"Thank you!": "Bedankt!",
|
||||
"Back": "Terug",
|
||||
"Failed to send custom event.": "Aangepast Event verzenden mislukt.",
|
||||
"Send Custom Event": "Verzend aangepast evenement",
|
||||
"Send Custom State Event": "Verzend aangepast State Event",
|
||||
"Developer Tools": "Ontwikkelaarsgereedschap",
|
||||
"Filter results": "Resultaten filteren",
|
||||
"Explore Room State": "Verken Ruimtetoestand",
|
||||
"You must specify an event type!": "Je moet een event-type specificeren!",
|
||||
"Event sent!": "Event verstuurd!",
|
||||
"Event Type": "Event-type",
|
||||
"Event Content": "Event-inhoud",
|
||||
"State Key": "Toestandssleutel",
|
||||
"Show message in desktop notification": "Toon boodschap in bureaublad popup",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Je kan de custom server opties gebruiken om op andere Matrix server in te loggen door een andere Home server URL op te geven.<br/> Dit laat je toe om Riot te gebruiken met een bestaande Matrix account op een andere home server.<br/><br/>Je kan ook een custom identiteits-server opzetten maar dan kan je geen gebruikers uitnodigen via hun email adres, of zelf uitgenodigd worden via je email adres.",
|
||||
"Appear Offline": "Lijk offline",
|
||||
"Away": "Afwezig",
|
||||
"Send Account Data": "Stuur account informatie",
|
||||
"Edit": "Aanpassen",
|
||||
"Explore Account Data": "Bekijk account informatie",
|
||||
"Unpin Message": "Maak pin los",
|
||||
"Pin Message": "Bericht vastpinnen",
|
||||
"Please install <chromeLink>Chrome</chromeLink> or <firefoxLink>Firefox</firefoxLink> for the best experience.": "Installeer alstublieft <chromeLink>Chrome</chromeLink> of <firefoxLink>Firefox</firefoxLink> voor de beste gebruikerservaring.",
|
||||
"<safariLink>Safari</safariLink> and <operaLink>Opera</operaLink> work too.": "<safariLink>Safari</safariLink> en <operaLink>Opera</operaLink> werken ook.",
|
||||
"Register": "Registreer",
|
||||
"Rooms": "Kamers",
|
||||
"Invite to this community": "Nodig uit in deze community",
|
||||
"Add rooms to this community": "Voeg kamers toe aan deze community",
|
||||
"Toolbox": "Eigenschappen",
|
||||
"%(count)s Members|other": "%(count)s Deelnemers",
|
||||
"%(count)s Members|one": "%(count)s Deelnemer",
|
||||
"Reply": "Beantwoord",
|
||||
"Online": "Online",
|
||||
"View Community": "Gemeenschap Weergeven"
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"Add an email address above to configure email notifications": "Dodaj adres e-mail powyżej, aby skonfigurować powiadomienia e-mailowe",
|
||||
"Advanced notification settings": "Zaawansowane ustawienia powiadomień",
|
||||
"All messages": "Wszystkie wiadomości",
|
||||
"All messages (loud)": "Wszystkie wiadomości (głośno)",
|
||||
"All messages (noisy)": "Wszystkie wiadomości (głośno)",
|
||||
"All Rooms": "Wszystkie pokoje",
|
||||
"All notifications are currently disabled for all targets.": "Wszystkie powiadomienia są obecnie wyłączone dla wszystkich celów.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Podczas zapisywania ustawień powiadomień e-mail wystąpił błąd.",
|
||||
@@ -14,29 +14,24 @@
|
||||
"Cancel Sending": "Anuluj wysyłanie",
|
||||
"Can't update user notification settings": "Nie można zaktualizować ustawień powiadomień użytkownika",
|
||||
"Changelog": "Dziennik zmian",
|
||||
"Close": "Blisko",
|
||||
"Close": "Zamknij",
|
||||
"Collecting app version information": "Zbieranie informacji o wersji aplikacji",
|
||||
"Collecting logs": "Zbieranie dzienników",
|
||||
"Create new room": "Utwórz nowy pokój",
|
||||
"Couldn't find a matching Matrix room": "Nie można znaleźć pasującego pokoju Matrix",
|
||||
"Custom Server Options": "Niestandardowe opcje serwera",
|
||||
"delete the alias.": "usunąć alias.",
|
||||
"Describe your problem here.": "Opisz swój problem tutaj.",
|
||||
"Directory": "Księga adresowa",
|
||||
"Download this file": "Pobierz plik",
|
||||
"Welcome page": "Strona powitalna",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot nie jest obsługiwany przez przeglądarki mobilne. Zainstaluj aplikację?",
|
||||
"Room directory": "Spis pokojów",
|
||||
"Search": "Szukaj",
|
||||
"Search…": "Szukaj…",
|
||||
"Search for a room": "Szukaj pokoju",
|
||||
"Send": "Wyślij",
|
||||
"Settings": "Ustawienia",
|
||||
"Collapse panel": "Ukryj panel",
|
||||
"customServer_text": "Możesz używać opcji serwera niestandardowego do logowania się na inne serwery Matrix, określając inny adres URL serwera domowego.<br/>Pozwala to na wykorzystanie Riot z istniejącym kontem Matrix na innym serwerze domowym.<br/><br/>Można również ustawić niestandardowy serwer tożsamości, ale nie będzie można zapraszać użytkowników adresem e-mail, ani być zaproszony przez adres e-mailowy.",
|
||||
"customServer_text": "Możesz używać opcji serwera niestandardowego do logowania się na inne serwery Matrix, określając inny adres URL serwera domowego.<br/>Pozwala to na wykorzystanie Riot z istniejącym kontem Matrix na innym serwerze domowym.<br/><br/>Można również ustawić niestandardowy serwer tożsamości, ale nie będzie można zapraszać użytkowników adresem e-mail, ani być zaproszonym przez adres e-mailowy.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Usuń alias %(alias)s i usuń %(name)s z katalogu?",
|
||||
"Dismiss": "Zdymisjonować",
|
||||
"Drop here %(toAction)s": "Upuść tutaj %(toAction)s",
|
||||
"Dismiss": "Zamknij",
|
||||
"Enable audible notifications in web client": "Włącz dźwiękowe powiadomienia w kliencie internetowym",
|
||||
"Enable email notifications": "Włącz powiadomienia e-mailowe",
|
||||
"Enable notifications for this account": "Włącz powiadomienia na tym koncie",
|
||||
@@ -46,14 +41,12 @@
|
||||
"Error saving email notification preferences": "Wystąpił błąd podczas zapisywania ustawień powiadomień e-mailowych",
|
||||
"#example": "#przykład",
|
||||
"Expand panel": "Rozwiń panel",
|
||||
"Failed to": "Nie udało się",
|
||||
"Failed to add tag %(tagName)s to room": "Nie można dodać tagu %(tagName)s do pokoju",
|
||||
"Failed to change settings": "Nie udało się zmienić ustawień",
|
||||
"Failed to forget room %(errCode)s": "Nie mogłem zapomnieć o pokoju %(errCode)s",
|
||||
"Failed to update keywords": "Nie udało się zaktualizować słów kluczowych",
|
||||
"Failed to get protocol list from Home Server": "Nie można pobrać listy protokołów z serwera domowego",
|
||||
"Failed to get public room list": "Nie udało się uzyskać publicznej listy pokojowej",
|
||||
"Failed to join the room": "Nie udało się dołączyć do pokoju",
|
||||
"Failed to remove tag %(tagName)s from room": "Nie udało się usunąć tagu %(tagName)s z pokoju",
|
||||
"Failed to send report: ": "Nie udało się wysłać raportu: ",
|
||||
"Favourite": "Ulubiony",
|
||||
@@ -61,7 +54,6 @@
|
||||
"Filter room names": "Filtruj nazwy pokojów",
|
||||
"Forget": "Zapomnij",
|
||||
"Forward Message": "Przekaż wiadomość",
|
||||
" from room": " z pokoju",
|
||||
"Guests can join": "Goście mogą dołączyć",
|
||||
"Hide panel": "Ukryj panel",
|
||||
"I understand the risks and wish to continue": "Rozumiem ryzyko i chęć kontynuować",
|
||||
@@ -76,7 +68,6 @@
|
||||
"Messages sent by bot": "Wiadomości wysłane przez bota",
|
||||
"more": "więcej",
|
||||
"Enable desktop notifications": "Włącz powiadomienia",
|
||||
"Guest users can't invite users. Please register to invite.": "Gość nie ma uprawnień dow wysyłania zaproszeń. Proszę się zarejestrować.",
|
||||
"(HTTP status %(httpStatus)s)": "(status HTTP %(httpStatus)s)",
|
||||
"Leave": "Opuść",
|
||||
"Login": "Logowanie",
|
||||
@@ -94,7 +85,6 @@
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Proszę opisz problem (w miarę możliwości po angielsku). Co doprowadziło do błędu? Jakie było Twoje oczekiwanie, a co stało się zamiast tego?",
|
||||
"Please describe the bug and/or send logs.": "Proszę opisz błąd i/lub wyślij logi.",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Zainstaluj proszę <a href=\"https://www.google.com/chrome\">Chrome</a> lub <a href=\"https://getfirefox.com\">Firefox</a>.",
|
||||
"Please Register": "Proszę się zarejestrować",
|
||||
"Quote": "Cytat",
|
||||
"Remove %(name)s from the directory?": "Usunąć %(name)s z katalogu?",
|
||||
"Remove from Directory": "Usuń z katalogu",
|
||||
@@ -106,9 +96,7 @@
|
||||
"Room not found": "Pokój nie znaleziony",
|
||||
"Send logs": "Wyślij logi",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Przepraszamy, Twoja przeglądarka <b>nie jest w stanie</b> uruchomić Riot.",
|
||||
"Start chat": "Rozpocznij rozmowę",
|
||||
"powered by Matrix": "zbudowane na Matrix",
|
||||
"Redact": "Zredaguj",
|
||||
"powered by Matrix": "napędzany przez Matrix",
|
||||
"Reject": "Odrzuć",
|
||||
"Remove": "Usuń",
|
||||
"remove %(name)s from the directory.": "usuń %(name)s z katalogu.",
|
||||
@@ -116,7 +104,6 @@
|
||||
"There are advanced notifications which are not shown here": "Masz zaawansowane powiadomienia, nie pokazane tutaj",
|
||||
"The server may be unavailable or overloaded": "Serwer jest nieosiągalny lub jest przeciążony",
|
||||
"This Room": "Ten pokój",
|
||||
"This room is inaccessible to guests. You may be able to join if you register.": "Ten pokój jest niedostępny dla gości. Możliwe, że będziesz mógł dołączyć po rejestracji.",
|
||||
"Unable to join network": "Nie można dołączyć do sieci",
|
||||
"Unable to look up room ID from server": "Nie można wyszukać ID pokoju na serwerze",
|
||||
"Unavailable": "Niedostępny",
|
||||
@@ -135,7 +122,6 @@
|
||||
"Off": "Wyłącz",
|
||||
"On": "Włącz",
|
||||
"Source URL": "Źródłowy URL",
|
||||
" to room": " do pokoju",
|
||||
"Unable to fetch notification target list": "Nie można pobrać listy docelowej dla powiadomień",
|
||||
"View Decrypted Source": "Pokaż zdeszyfrowane źródło",
|
||||
"View Source": "Pokaż źródło",
|
||||
@@ -147,7 +133,6 @@
|
||||
"You cannot delete this image. (%(code)s)": "Nie możesz usunąć tego obrazka. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "Nie możesz usunąć tej wiadomości. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "Nie otrzymujesz powiadomień na pulpit",
|
||||
"You are Rioting as a guest. <a>Register</a> or <a>sign in</a> to access more rooms and features!": "You are Rioting jako gość. <a>Zarejestruj się</a> albo <a>zaloguj się</a> aby uzyskać dostęp do pokojów lub dodatkowych możliwości!",
|
||||
"Sunday": "Niedziela",
|
||||
"Monday": "Poniedziałek",
|
||||
"Tuesday": "Wtorek",
|
||||
@@ -198,5 +183,42 @@
|
||||
"Please set a password!": "Proszę, ustaw hasło!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "To pozwoli Ci powrócić do Twojego konta po wylogowaniu i ponownym zalogowaniu się na innych urządzeniach.",
|
||||
"You have successfully set a password and an email address!": "Z powodzeniem ustawiono hasło i adres e-mail dla Twojego konta!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Pamiętaj, że zawsze możesz zmienić swój e-mail lub hasło w panelu ustawień użytkownika."
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Pamiętaj, że zawsze możesz zmienić swój e-mail lub hasło w panelu ustawień użytkownika.",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Aby wrócić do swojego konta w przyszłości musisz <u> ustawić hasło </u>",
|
||||
"Set Password": "Ustaw hasło",
|
||||
"No update available.": "Brak aktualizacji.",
|
||||
"Warning": "Ostrzeżenie",
|
||||
"Error encountered (%(errorDetail)s).": "Wystąpił błąd (%(errorDetail)s).",
|
||||
"Downloading update...": "Pobieranie aktualizacji...",
|
||||
"Checking for an update...": "Sprawdzanie aktualizacji...",
|
||||
"Couldn't load home page": "Nie można załadować strony startowej",
|
||||
"Bug report sent": "Raport błędu wysłany",
|
||||
"Thank you!": "Dziękujemy!",
|
||||
"Back": "Powrót",
|
||||
"Developer Tools": "Narzędzia programistyczne",
|
||||
"Failed to send custom event.": "Wysyłanie niestandardowego wydarzenia nie powiodło się.",
|
||||
"Filter results": "Filtruj wyniki",
|
||||
"Send Custom Event": "Wyślij niestandardowe wydarzenie",
|
||||
"Send Custom State Event": "Wyślij wydarzenie o niestandardowym stanie",
|
||||
"Explore Room State": "Przeglądaj stan pokoju",
|
||||
"You must specify an event type!": "Musisz określić typ wydarzenia!",
|
||||
"Event sent!": "Wydarzenie wysłane!",
|
||||
"Event Type": "Typ wydarzenia",
|
||||
"Event Content": "Zawartość wydarzenia",
|
||||
"State Key": "Klucz stanu",
|
||||
"Toolbox": "Przybornik",
|
||||
"Edit": "Edycja",
|
||||
"Show message in desktop notification": "Pokaż wiadomość w notyfikacji na pulpicie",
|
||||
"Unpin Message": "Odepnij Wiadomość",
|
||||
"Pin Message": "Przypnij Wiadomość",
|
||||
"Register": "Rejestracja",
|
||||
"Rooms": "Pokoje",
|
||||
"Invite to this community": "Zaproś do tej społeczności",
|
||||
"Add rooms to this community": "Dodaj pokoje do tej społeczności",
|
||||
"Send Account Data": "Wyślij dane konta",
|
||||
"Explore Account Data": "Odkryj dane konta",
|
||||
"Reply": "Odpowiedz",
|
||||
"View Community": "Pokaż społeczność",
|
||||
"%(count)s Members|other": "%(count)s Członków",
|
||||
"%(count)s Members|one": "%(count)s Członek"
|
||||
}
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
{
|
||||
"Add an email address above to configure email notifications": "Insira um endereço de email no campo acima para configurar as notificações por email",
|
||||
"All messages": "Todas as mensagens",
|
||||
"All messages (loud)": "Todas as mensagens (alto)",
|
||||
"All messages (noisy)": "Todas as mensagens (alto)",
|
||||
"An error occurred whilst saving your email notification preferences.": "Ocorreu um erro ao guardar as suas preferências de notificação por email.",
|
||||
"Call invitation": "Convite para chamada",
|
||||
"Cancel Sending": "Cancelar o envio",
|
||||
"Can't update user notification settings": "Não é possível atualizar as preferências de notificação",
|
||||
"Close": "Fechar",
|
||||
"Create new room": "Criar nova sala",
|
||||
"Couldn't find a matching Matrix room": "Não foi possível encontrar uma sala correspondente no servidor Matrix",
|
||||
"Custom Server Options": "Opções para Servidor Personalizado",
|
||||
"delete the alias.": "apagar o apelido da sala.",
|
||||
@@ -16,7 +15,6 @@
|
||||
"Directory": "Diretório",
|
||||
"Dismiss": "Descartar",
|
||||
"Download this file": "Transferir este ficheiro",
|
||||
"Drop here %(toAction)s": "Arraste aqui para %(toAction)s",
|
||||
"Enable audible notifications in web client": "Ativar notificações de áudio no cliente web",
|
||||
"Enable desktop notifications": "Ativar notificações no desktop",
|
||||
"Enable email notifications": "Ativar notificações por e-mail",
|
||||
@@ -25,16 +23,12 @@
|
||||
"Enter keywords separated by a comma:": "Insira palavras-chave separadas por vírgula:",
|
||||
"Error": "Erro",
|
||||
"Error saving email notification preferences": "Erro ao guardar as preferências de notificação por e-mail",
|
||||
"#example:": "#exemplo",
|
||||
"Failed to": "Falha ao",
|
||||
"Failed to add tag %(tagName)s to room": "Falha ao adicionar %(tagName)s à sala",
|
||||
"Failed to change settings": "Falha ao alterar as configurações",
|
||||
"Failed to forget room %(errCode)s": "Falha ao esquecer a sala %(errCode)s",
|
||||
"Failed to update keywords": "Falha ao atualizar as palavras-chave",
|
||||
"Failed to get protocol list from Home Server": "Falha ao obter a lista de protocolos do servidor padrão",
|
||||
"Failed to get public room list": "Falha ao obter a lista de salas públicas",
|
||||
"Failed to join the room": "Falha ao entrar na sala",
|
||||
"Failed to remove tag %(tag)s from room": "Falha ao remover a palavra-chave %(tag)s da sala",
|
||||
"Failed to set direct chat tag": "Falha ao definir conversa como pessoal",
|
||||
"Failed to set Direct Message status of room": "Falha em definir a mensagem de status da sala",
|
||||
"Favourite": "Favorito",
|
||||
@@ -43,9 +37,7 @@
|
||||
"Filter room names": "Filtrar salas por título",
|
||||
"Forget": "Esquecer",
|
||||
"Forward Message": "Encaminhar",
|
||||
" from room": " da sala",
|
||||
"Guests can join": "Convidados podem entrar",
|
||||
"Guest users can't invite users. Please register to invite.": "Utilizadores convidados não podem convidar utilizadores. Por favor registe-se para convidar.",
|
||||
"Invite to this room": "Convidar para esta sala",
|
||||
"Keywords": "Palavras-chave",
|
||||
"Leave": "Sair",
|
||||
@@ -70,10 +62,8 @@
|
||||
"On": "Ativado",
|
||||
"Operation failed": "A operação falhou",
|
||||
"Permalink": "Link permanente",
|
||||
"Please Register": "Por favor registe-se",
|
||||
"powered by Matrix": "rodando a partir do Matrix",
|
||||
"Quote": "Citar",
|
||||
"Redact": "Remover",
|
||||
"Reject": "Rejeitar",
|
||||
"Remove": "Remover",
|
||||
"Remove %(name)s from the directory?": "Remover %(name)s da lista pública de salas?",
|
||||
@@ -81,17 +71,12 @@
|
||||
"Remove from Directory": "Remover da lista pública de salas",
|
||||
"Resend": "Reenviar",
|
||||
"Riot does not know how to join a room on this network": "O Riot não sabe como entrar numa sala nesta rede",
|
||||
"Room directory": "Lista de salas públicas",
|
||||
"Room not found": "Sala não encontrada",
|
||||
"Search for a room": "Pesquisar por uma sala",
|
||||
"Settings": "Configurações",
|
||||
"Source URL": "URL fonte",
|
||||
"Start chat": "Iniciar conversa",
|
||||
"The Home Server may be too old to support third party networks": "O servidor pode ser muito antigo para suportar redes de terceiros",
|
||||
"There are advanced notifications which are not shown here": "Existem notificações avançadas que não são exibidas aqui",
|
||||
"The server may be unavailable or overloaded": "O servidor pode estar inacessível ou sobrecarregado",
|
||||
"This room is inaccessible to guests. You may be able to join if you register.": "Esta sala é inacessível para convidados. Poderá conseguir entrar caso se registe.",
|
||||
" to room": " para sala",
|
||||
"Unable to fetch notification target list": "Não foi possível obter a lista de alvos de notificação",
|
||||
"Unable to join network": "Não foi possível juntar-se à rede",
|
||||
"Unable to look up room ID from server": "Não foi possível obter a identificação da sala do servidor",
|
||||
@@ -99,7 +84,7 @@
|
||||
"unknown error code": "código de erro desconhecido",
|
||||
"Unnamed room": "Sala sem nome",
|
||||
"Uploaded on %(date)s by %(user)s": "Enviada em %(date)s por %(user)s",
|
||||
"View Decrypted Source": "Ver a fonte decifrada",
|
||||
"View Decrypted Source": "Ver a fonte desencriptada",
|
||||
"View Source": "Ver a fonte",
|
||||
"When I'm invited to a room": "Quando sou convidado para uma sala",
|
||||
"World readable": "Público",
|
||||
@@ -118,7 +103,6 @@
|
||||
"Yesterday": "Ontem",
|
||||
"#example": "#exemplo",
|
||||
"Failed to remove tag %(tagName)s from room": "Não foi possível remover a marcação %(tagName)s desta sala",
|
||||
"Welcome page": "Página de boas-vindas",
|
||||
"Advanced notification settings": "Configurações avançadas de notificação",
|
||||
"customServer_text": "Pode usar as opções de servidor personalizado para entrar noutros servidores Matrix especificando para isso um URL de outro Servidor de Base.<br/> Isto permite que use o Riot com uma conta Matrix que exista noutro Servidor de Base.<br/> <br/> Também pode configurar um servidor de Identidade personalizado mas não poderá convidar utilizadores através do endereço de e-mail, ou ser convidado pelo seu endereço de e-mail.",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> e <a href=\"http://opera.com\">Opera</a> também funcionam.",
|
||||
@@ -160,7 +144,66 @@
|
||||
"What's New": "Novidades",
|
||||
"What's new?": "O que há de novo?",
|
||||
"Waiting for response from server": "À espera de resposta do servidor",
|
||||
"You are Rioting as a guest. <a>Register</a> or <a>sign in</a> to access more rooms and features!": "Está a usar o Riot como convidado. <a>Registe-se</a> ou <a>faça login</a> para aceder a mais salas e funcionalidades!",
|
||||
"OK": "Ok",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Necessita de estar a usar HTTPS para poder iniciar uma chamada com partilha de ecrã."
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Necessita de estar a usar HTTPS para poder iniciar uma chamada com partilha de ecrã.",
|
||||
"No update available.": "Nenhuma atualização disponível.",
|
||||
"Welcome to Riot.im": "Bem-vindo ao Riot.im",
|
||||
"Login": "Entrar",
|
||||
"Warning": "Aviso",
|
||||
"Checking for an update...": "A procurar uma atualização...",
|
||||
"Error encountered (%(errorDetail)s).": "Erro encontrado (%(errorDetail)s).",
|
||||
"Downloading update...": "A transferir atualização...",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat descentralizado, encriptado & colaborativo alimentado por [matrix]",
|
||||
"Back": "Voltar",
|
||||
"Bug report sent": "Relatório de erros enviado",
|
||||
"Developer Tools": "Ferramentas de desenvolvedor",
|
||||
"Failed to send custom event.": "Falha ao enviar evento personalizado.",
|
||||
"(HTTP status %(httpStatus)s)": "(Estado HTTP %(httpStatus)s)",
|
||||
"Send Custom Event": "Enviar evento personalizado",
|
||||
"Send Custom State Event": "Enviar evento personalizado de estado",
|
||||
"Explore Room State": "Explorar estado da sala",
|
||||
"Thank you!": "Obrigado!",
|
||||
"Event sent!": "Evento enviado!",
|
||||
"Event Type": "Tipo de evento",
|
||||
"Event Content": "Conteúdo do evento",
|
||||
"State Key": "Chave de estado",
|
||||
"Search the room directory": "Procurar o diretório de salas",
|
||||
"Chat with Riot Bot": "Falar com o Bot do Riot",
|
||||
"Get started with some tips from Riot Bot!": "Comece com algumas dicas do Bot do Riot",
|
||||
"General discussion about Matrix and Riot": "Discussão geral acerca do Matrix e do Riot",
|
||||
"Discussion of all things Matrix!": "Discussão de tudo o que envolva o Matrix!",
|
||||
"Riot/Web & Desktop chat": "Riot/Web & Desktop chat",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk chat",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk chat",
|
||||
"Matrix technical discussions": "Discussões técnicas do Matrix",
|
||||
"Running Matrix services": "Correr serviços do Matrix",
|
||||
"Community-run support for Synapse": "Suporte da comunidade para o Synapse",
|
||||
"Admin support for Dendrite": "Suporte de administração para o Dendrite",
|
||||
"Announcements about Synapse releases": "Anúncios acerca de lançamentos do Synapse",
|
||||
"Support for those using and running matrix-appservice-irc": "Suporte para aqueles a correr e a utilizar o matrix-appservice-irc",
|
||||
"Building services on Matrix": "Construir serviços no Matrix",
|
||||
"Support for those using the Matrix spec": "Suporte para os utilizadores da especificação do Matrix",
|
||||
"Design and implementation of E2E in Matrix": "Design e implementação de encriptação ponto-a-ponto (E2E) no Matrix",
|
||||
"Implementing VR services with Matrix": "Implementar serviços de realidade virtual (VR) com o Matrix",
|
||||
"Implementing VoIP services with Matrix": "Implementar serviços VoIP com o Matrix",
|
||||
"Discussion of the Identity Service API": "Discussão da API do serviço de identidade",
|
||||
"Support for those using, running and writing other bridges": "Suporte para aqueles a usar, correr e desenvolver outras pontes (bridges)",
|
||||
"Contributing code to Matrix and Riot": "Contribuir código para o Matrix e para o Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Conversa de desenvolvimento para a equipa do Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "Conversa de desenvolvimento para a equipa do Dendrite",
|
||||
"Co-ordination for Riot/Web translators": "Coordenação para a equipa de tradutores do Riot/Web",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Já existem muitas salas no Matrix, ligadas a redes já existentes (Slack, IRC, Gitter, etc) ou independentes. Dê uma vista de olhos no diretório!",
|
||||
"Failed to change password. Is your password correct?": "Falha ao alterar a palavra-passe. A sua palavra-passe está correta?",
|
||||
"You have successfully set a password!": "Palavra-passe definida com sucesso!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Pode agora voltar à sua conta no fim de terminar sessão, e iniciar sessão noutros dispositivos.",
|
||||
"Continue": "Continuar",
|
||||
"Please set a password!": "Por favor, defina uma palavra-passe!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Isto irá permitir-lhe voltar à sua conta depois de terminar sessão, assim como iniciar sessão noutros dispositivos.",
|
||||
"You have successfully set a password and an email address!": "Palavra passe e endereço de e-mail definidos com sucesso!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Lembre-se, pode sempre definir um endereço de e-mail nas definições de utilizador se mudar de ideias.",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Para voltar à sua conta no futuro, necessita de <u>definir uma palavra-passe</u>",
|
||||
"Set Password": "Definir palavra-passe",
|
||||
"Couldn't load home page": "Não foi possível carregar a página inicial",
|
||||
"Filter results": "Filtrar resultados",
|
||||
"You must specify an event type!": "Tem que especificar um tipo de evento!"
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user