Compare commits
488 Commits
v1.11.25
...
rav/nuke_i
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f4749b8424 | ||
|
|
67401eeb27 | ||
|
|
29bd206f85 | ||
|
|
5d04a2adc3 | ||
|
|
df6b106b26 | ||
|
|
e456ca1b20 | ||
|
|
744ff5ca9a | ||
|
|
0c0f4cfdbd | ||
|
|
8436c91279 | ||
|
|
c52c62ebc0 | ||
|
|
1e303652cc | ||
|
|
361941e5d4 | ||
|
|
dc6c7022fc | ||
|
|
60585cce94 | ||
|
|
3a6a603778 | ||
|
|
28a8c1cd1e | ||
|
|
b9be840291 | ||
|
|
81b6320595 | ||
|
|
189fa14c29 | ||
|
|
ee254efcf3 | ||
|
|
c9e5df4aa0 | ||
|
|
eec8b37c49 | ||
|
|
14746004b5 | ||
|
|
be3cb55f7d | ||
|
|
0aa7368e5d | ||
|
|
24d5457518 | ||
|
|
badff8cae5 | ||
|
|
6dc6c80cc5 | ||
|
|
e84e161034 | ||
|
|
5a534e4010 | ||
|
|
34d7eca8f3 | ||
|
|
472c07c0a8 | ||
|
|
c944a273d0 | ||
|
|
501f01cdd5 | ||
|
|
e93a12d1fa | ||
|
|
8c83307371 | ||
|
|
7ede4b783d | ||
|
|
50afd46c79 | ||
|
|
f93a7c0ffe | ||
|
|
54fd7a9872 | ||
|
|
a189fab5d4 | ||
|
|
f659c47a61 | ||
|
|
b0d5eb906f | ||
|
|
adcf635f59 | ||
|
|
ee3c1192bc | ||
|
|
e94b80b9e5 | ||
|
|
cef2df4b0b | ||
|
|
c525b633bd | ||
|
|
d429e69d35 | ||
|
|
26e5cfc4fa | ||
|
|
2bfe31e242 | ||
|
|
c577b95e5e | ||
|
|
00803950bf | ||
|
|
bff5b6e8e2 | ||
|
|
cbe24e2531 | ||
|
|
1ada110fed | ||
|
|
19b2eded16 | ||
|
|
3fd6b62254 | ||
|
|
2ad80c8fcf | ||
|
|
c5a90f03d9 | ||
|
|
25460bd8b7 | ||
|
|
5ee16a9db1 | ||
|
|
61669e5cbf | ||
|
|
61fba2c32c | ||
|
|
e870fe2048 | ||
|
|
fcd805255c | ||
|
|
83b940605e | ||
|
|
a3c0324dc6 | ||
|
|
780da23c70 | ||
|
|
b464a7e106 | ||
|
|
ba5f9767f3 | ||
|
|
60a8dc592a | ||
|
|
50f7c1edfb | ||
|
|
9c06e33e78 | ||
|
|
469d11ffcb | ||
|
|
86c563cd29 | ||
|
|
c13816dce4 | ||
|
|
7f3d85c0c5 | ||
|
|
65f7545ba5 | ||
|
|
c026879237 | ||
|
|
d9b4e531b0 | ||
|
|
062e93a5d2 | ||
|
|
96c652ef08 | ||
|
|
017fbb3793 | ||
|
|
6bce017823 | ||
|
|
f9b7372883 | ||
|
|
6755448e86 | ||
|
|
9a650bd12a | ||
|
|
7dabb3ce9a | ||
|
|
8c33ebfd52 | ||
|
|
70742e0432 | ||
|
|
fb984abf12 | ||
|
|
7351c722be | ||
|
|
d1f7b0898a | ||
|
|
a61ab7c033 | ||
|
|
424cbdd47b | ||
|
|
f58b122850 | ||
|
|
f676406fb2 | ||
|
|
f77d968da9 | ||
|
|
3cce4de454 | ||
|
|
84fe974606 | ||
|
|
e3bc5f45f5 | ||
|
|
b1129e4d28 | ||
|
|
15836ac5df | ||
|
|
1093b41d70 | ||
|
|
030b1fb339 | ||
|
|
7a3e36d434 | ||
|
|
595ddc316e | ||
|
|
e059524f6e | ||
|
|
ab7536d220 | ||
|
|
0b72e925d5 | ||
|
|
bb223eedd5 | ||
|
|
8fc0763391 | ||
|
|
e395178b2b | ||
|
|
c6756ea52a | ||
|
|
4f790eb134 | ||
|
|
50ca01f8d0 | ||
|
|
3b37081818 | ||
|
|
a0e0df32af | ||
|
|
fc94e9b6d4 | ||
|
|
69c43bb142 | ||
|
|
2abff92b7b | ||
|
|
a0558a8287 | ||
|
|
b404d2d014 | ||
|
|
5644c4e175 | ||
|
|
790ff16701 | ||
|
|
a19c3f5da6 | ||
|
|
58e40c597d | ||
|
|
7018f78510 | ||
|
|
4eae1d4bcf | ||
|
|
a618f95369 | ||
|
|
fef081c77b | ||
|
|
6406ae1a88 | ||
|
|
cc8afed196 | ||
|
|
2753bc9f8e | ||
|
|
1c420b436d | ||
|
|
19d663d052 | ||
|
|
494cb39984 | ||
|
|
29ca7a4bd9 | ||
|
|
af929fcf0d | ||
|
|
9be4fcf7d2 | ||
|
|
c1bbaf6c02 | ||
|
|
4cf4dc9a3d | ||
|
|
44dde72950 | ||
|
|
048d8c417d | ||
|
|
42afb0199f | ||
|
|
e68583a6e2 | ||
|
|
48044f3847 | ||
|
|
93e6ee11ab | ||
|
|
dd9678d97c | ||
|
|
49c78214f5 | ||
|
|
3ee4cbd992 | ||
|
|
d77877dc20 | ||
|
|
a84349f969 | ||
|
|
b89b000f05 | ||
|
|
0e97a178e3 | ||
|
|
767c30f2ee | ||
|
|
fe3d7f3fa9 | ||
|
|
9856863b03 | ||
|
|
231d3387e6 | ||
|
|
d67db02eea | ||
|
|
6508aca804 | ||
|
|
30aff46e40 | ||
|
|
da0b6580e5 | ||
|
|
453a361017 | ||
|
|
5a701c418f | ||
|
|
abc559388e | ||
|
|
98f0735784 | ||
|
|
ea0edf75f7 | ||
|
|
137f5c96d3 | ||
|
|
f859db9054 | ||
|
|
3b3f12fb97 | ||
|
|
a952f258be | ||
|
|
ef30662c04 | ||
|
|
311c5fec66 | ||
|
|
80075ee2cf | ||
|
|
77db00cef1 | ||
|
|
29037c8543 | ||
|
|
4c9baa60ec | ||
|
|
cb2d5efa4e | ||
|
|
71ab30432b | ||
|
|
96103269c7 | ||
|
|
98e36ffd0e | ||
|
|
a4eb2f40bb | ||
|
|
ccb0a306c8 | ||
|
|
93c17104f1 | ||
|
|
9ec3f79198 | ||
|
|
d18c69eb65 | ||
|
|
bac0da3fe9 | ||
|
|
0a4a205fbe | ||
|
|
6726b93cb4 | ||
|
|
fad458d8c5 | ||
|
|
658e282929 | ||
|
|
01a234aafa | ||
|
|
d31a498457 | ||
|
|
faa602d73a | ||
|
|
210a8eee7f | ||
|
|
ab158ceae0 | ||
|
|
c286617959 | ||
|
|
aa55a2ffa0 | ||
|
|
eec95438de | ||
|
|
53ac1d1808 | ||
|
|
7164aeb65b | ||
|
|
4f1ce3c39a | ||
|
|
0299aef79d | ||
|
|
6bbc2b8238 | ||
|
|
51baaf6667 | ||
|
|
cd3a88eb0d | ||
|
|
9be30a892f | ||
|
|
8b481fdef2 | ||
|
|
f35bbf0173 | ||
|
|
6113541b5f | ||
|
|
4ab85cb569 | ||
|
|
30bff44cf9 | ||
|
|
b64cf2e51c | ||
|
|
9c8027d03c | ||
|
|
a0ca53554f | ||
|
|
727ed6f94e | ||
|
|
e4bf321e65 | ||
|
|
bdbae36f5e | ||
|
|
1e67eb2ca6 | ||
|
|
130ea1853f | ||
|
|
33eb055f24 | ||
|
|
0b6e028ade | ||
|
|
86be392f44 | ||
|
|
278c494eb3 | ||
|
|
3609ab8003 | ||
|
|
41aa36e6b4 | ||
|
|
f699c6fbe6 | ||
|
|
2cacd89408 | ||
|
|
1c403b7a63 | ||
|
|
b73a01abd4 | ||
|
|
104dcad7dd | ||
|
|
041747391c | ||
|
|
2b31b8d9d8 | ||
|
|
2d09b826d1 | ||
|
|
37203d193a | ||
|
|
15192b976e | ||
|
|
89a28b1ae5 | ||
|
|
5ba75a32f7 | ||
|
|
1a0a15a671 | ||
|
|
081706435d | ||
|
|
4ef9a60713 | ||
|
|
f8b8f17c4b | ||
|
|
b5b584d616 | ||
|
|
322dab0b58 | ||
|
|
2ec33e8e41 | ||
|
|
9358c41aad | ||
|
|
fa21a0ee17 | ||
|
|
569c9044e4 | ||
|
|
0504c8260e | ||
|
|
a7208cc07b | ||
|
|
69ad6c3993 | ||
|
|
e918170dc3 | ||
|
|
8fe89f2182 | ||
|
|
c1273590f3 | ||
|
|
bd8fabc70b | ||
|
|
945c0793b9 | ||
|
|
2a078dd713 | ||
|
|
50bfa7e86c | ||
|
|
f965f2064e | ||
|
|
82f231d7b1 | ||
|
|
fea43b7997 | ||
|
|
df6423b2b8 | ||
|
|
0a26b57789 | ||
|
|
86eaa5787b | ||
|
|
5b904c08c8 | ||
|
|
faf626e5a6 | ||
|
|
71800ba28c | ||
|
|
8997b84f24 | ||
|
|
ee4679f0f7 | ||
|
|
8c97de47a3 | ||
|
|
4296005408 | ||
|
|
22b96e0679 | ||
|
|
6ab7a2855b | ||
|
|
3c7a9933b9 | ||
|
|
6b7f71f973 | ||
|
|
e526bfd44c | ||
|
|
6b5c792aad | ||
|
|
ed1eaf6549 | ||
|
|
0bdc59ac41 | ||
|
|
0a5173f258 | ||
|
|
a68c535eb8 | ||
|
|
11a8fb31a4 | ||
|
|
bb52c1311a | ||
|
|
fa103b7ba8 | ||
|
|
e16f1248da | ||
|
|
41322984a6 | ||
|
|
0fe50e099c | ||
|
|
23bfce81a4 | ||
|
|
122d4d3503 | ||
|
|
88c5395349 | ||
|
|
d01eabd340 | ||
|
|
d7a98fe392 | ||
|
|
9457af27f6 | ||
|
|
cc5914a7dc | ||
|
|
1e7d001cd3 | ||
|
|
6e73a2b01c | ||
|
|
8274ad6394 | ||
|
|
df8f8415bf | ||
|
|
e902a0bd59 | ||
|
|
81397ffbf4 | ||
|
|
96cf7053bc | ||
|
|
b25a7ef505 | ||
|
|
99b68eedae | ||
|
|
aa1538ea09 | ||
|
|
1941097fed | ||
|
|
b633be382e | ||
|
|
9860f4befc | ||
|
|
349f7ee27a | ||
|
|
17c65f1a0c | ||
|
|
1fb03c82fe | ||
|
|
f00c742ebc | ||
|
|
9e6467c684 | ||
|
|
c0e070934a | ||
|
|
5f9baed93e | ||
|
|
2bcfb257ea | ||
|
|
87a2060282 | ||
|
|
09bfb8ad2a | ||
|
|
024ad5311f | ||
|
|
71c491db62 | ||
|
|
0ae3cfdcdd | ||
|
|
15ef05791f | ||
|
|
152923306f | ||
|
|
86ab757571 | ||
|
|
a722b71b6c | ||
|
|
6e8f76e93c | ||
|
|
ed15578eed | ||
|
|
f5452fb097 | ||
|
|
2b17090855 | ||
|
|
afab95288e | ||
|
|
59b6285458 | ||
|
|
1709b3e9ba | ||
|
|
3eddc939ce | ||
|
|
e558661a77 | ||
|
|
506a1b6dc7 | ||
|
|
0035580aef | ||
|
|
f59d4c9574 | ||
|
|
ba5e8670a4 | ||
|
|
50d44864b0 | ||
|
|
2dc54ec80b | ||
|
|
f5b8bccb65 | ||
|
|
a2da1eb79d | ||
|
|
40f95a6c06 | ||
|
|
ece117b33f | ||
|
|
66c86a6397 | ||
|
|
a0791ff48f | ||
|
|
1a04705960 | ||
|
|
2dc3f523aa | ||
|
|
ac33b4a428 | ||
|
|
5557487ef2 | ||
|
|
fa4d1addd3 | ||
|
|
77074cce44 | ||
|
|
e447f6d6dd | ||
|
|
22996fd55a | ||
|
|
b3b834cab2 | ||
|
|
b31aa17253 | ||
|
|
f7c9bdcd97 | ||
|
|
fc49190efe | ||
|
|
acc9b4c1d4 | ||
|
|
447b9dc661 | ||
|
|
38dbd66474 | ||
|
|
3015b90a6e | ||
|
|
a1176ce66d | ||
|
|
c0ba077d06 | ||
|
|
586309e851 | ||
|
|
decbd0aa04 | ||
|
|
cdabefa285 | ||
|
|
8b1d3a1265 | ||
|
|
dcb9dec749 | ||
|
|
b9fd456bf4 | ||
|
|
c1371fee27 | ||
|
|
a4b10a8766 | ||
|
|
80b9f7baab | ||
|
|
d26d56e579 | ||
|
|
ddc65d5cff | ||
|
|
22e3ebd89a | ||
|
|
8a54f74589 | ||
|
|
1ebe574ab1 | ||
|
|
0714d74956 | ||
|
|
6cfa1eea7b | ||
|
|
892ee3a707 | ||
|
|
2df33458a1 | ||
|
|
27dc1fb1ef | ||
|
|
88ade4a995 | ||
|
|
7899cd3077 | ||
|
|
3182508238 | ||
|
|
1237e73c1b | ||
|
|
04f2a55500 | ||
|
|
04cf98d0e5 | ||
|
|
1a34ded0a1 | ||
|
|
79de2f6262 | ||
|
|
508d562040 | ||
|
|
12a380a08e | ||
|
|
407891073d | ||
|
|
8df1d67a83 | ||
|
|
6d241c8ce0 | ||
|
|
34662d13c8 | ||
|
|
a79fba39de | ||
|
|
7b191b90df | ||
|
|
472518fcc9 | ||
|
|
4cf671d005 | ||
|
|
ddc2932541 | ||
|
|
ea6056fa59 | ||
|
|
b3c88f7a16 | ||
|
|
95f166ad61 | ||
|
|
1a7c5a294b | ||
|
|
569e5cb0c1 | ||
|
|
f2160391c2 | ||
|
|
62fa62dc3a | ||
|
|
e0aa7754b1 | ||
|
|
89054a50ac | ||
|
|
f833c57348 | ||
|
|
1a63a7ff2e | ||
|
|
a66df9d434 | ||
|
|
c0cd678542 | ||
|
|
b9837cc771 | ||
|
|
9faa625551 | ||
|
|
ebda5f4d31 | ||
|
|
145564719f | ||
|
|
166d88058c | ||
|
|
60d5ab427a | ||
|
|
bcc5bd8e54 | ||
|
|
b9b52c8c06 | ||
|
|
3210ff2e9c | ||
|
|
7cbd8e04c2 | ||
|
|
86c2cb7649 | ||
|
|
84242fc81f | ||
|
|
48e845575a | ||
|
|
39061f9b8c | ||
|
|
41d025bf48 | ||
|
|
581beee0b2 | ||
|
|
9ec10a274e | ||
|
|
c848295b8b | ||
|
|
b472f34d63 | ||
|
|
7a002341f4 | ||
|
|
4969a80c06 | ||
|
|
21fa0887bd | ||
|
|
11f56b06bf | ||
|
|
dfaeb6368b | ||
|
|
f033becebb | ||
|
|
f10171b6bc | ||
|
|
dcc0cb74fe | ||
|
|
389f55c261 | ||
|
|
1716a7f9ca | ||
|
|
2575322360 | ||
|
|
ab19f5654c | ||
|
|
b9b0b096a4 | ||
|
|
b391109469 | ||
|
|
50f8be4a62 | ||
|
|
d35f3df621 | ||
|
|
4121f72593 | ||
|
|
6a1a47aae1 | ||
|
|
4440315cfb | ||
|
|
b2a7d65fc9 | ||
|
|
c8b3f5d512 | ||
|
|
21a2a028a5 | ||
|
|
77e7bad4f1 | ||
|
|
292449369e | ||
|
|
e7be53fe85 | ||
|
|
310b478b75 | ||
|
|
86ab455b54 | ||
|
|
a66f5e7530 | ||
|
|
7059420be8 | ||
|
|
afe2ac2ae6 | ||
|
|
8122b85567 | ||
|
|
4a18ab6d1b | ||
|
|
714ba20b41 | ||
|
|
93d2112bfe | ||
|
|
e8bfd38865 | ||
|
|
f43e6fddfc | ||
|
|
b2f8875175 | ||
|
|
eb31df7d1d | ||
|
|
2b8a819d3d | ||
|
|
a36b76faf0 | ||
|
|
f9edd3668f | ||
|
|
f5bb7a2513 | ||
|
|
9371737104 | ||
|
|
764e1a01cc | ||
|
|
3d7d82ab2a | ||
|
|
9b571e12a7 | ||
|
|
bc785e9860 | ||
|
|
e2a9da1020 | ||
|
|
c85eb81ed0 | ||
|
|
23d496d0e8 | ||
|
|
6a4986ee06 | ||
|
|
296d1e2b75 | ||
|
|
2bfa2edd60 |
@@ -19,7 +19,7 @@ module.exports = {
|
||||
},
|
||||
overrides: [
|
||||
{
|
||||
files: ["src/**/*.{ts,tsx}", "test/**/*.{ts,tsx}"],
|
||||
files: ["src/**/*.{ts,tsx}", "test/**/*.{ts,tsx}", "scripts/*.ts"],
|
||||
extends: ["plugin:matrix-org/typescript", "plugin:matrix-org/react"],
|
||||
// NOTE: These rules are frozen and new rules should not be added here.
|
||||
// New changes belong in https://github.com/matrix-org/eslint-plugin-matrix-org/
|
||||
@@ -87,6 +87,7 @@ module.exports = {
|
||||
// We don't need super strict typing in test utilities
|
||||
"@typescript-eslint/explicit-function-return-type": "off",
|
||||
"@typescript-eslint/explicit-member-accessibility": "off",
|
||||
"@typescript-eslint/ban-ts-comment": "off",
|
||||
},
|
||||
},
|
||||
],
|
||||
|
||||
3
.github/cfp_headers
vendored
3
.github/cfp_headers
vendored
@@ -1,6 +1,9 @@
|
||||
/*
|
||||
! Access-Control-Allow-Origin
|
||||
X-XSS-Protection: 1; mode=block
|
||||
X-Content-Type-Options: nosniff
|
||||
X-Frame-Options: SAMEORIGIN
|
||||
Content-Security-Policy: frame-ancestors 'self'
|
||||
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
|
||||
|
||||
/version
|
||||
|
||||
2
.github/workflows/backport.yml
vendored
2
.github/workflows/backport.yml
vendored
@@ -23,7 +23,7 @@ jobs:
|
||||
)
|
||||
)
|
||||
steps:
|
||||
- uses: tibdex/backport@v2
|
||||
- uses: tibdex/backport@9565281eda0731b1d20c4025c43339fb0a23812e # v2
|
||||
with:
|
||||
labels_template: "<%= JSON.stringify([...labels, 'X-Release-Blocker']) %>"
|
||||
# We can't use GITHUB_TOKEN here or CI won't run on the new PR
|
||||
|
||||
2
.github/workflows/build.yml
vendored
2
.github/workflows/build.yml
vendored
@@ -13,7 +13,7 @@ jobs:
|
||||
name: "Build"
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
|
||||
56
.github/workflows/build_debian.yaml
vendored
Normal file
56
.github/workflows/build_debian.yaml
vendored
Normal file
@@ -0,0 +1,56 @@
|
||||
name: Build Debian package
|
||||
on:
|
||||
release:
|
||||
types: [published]
|
||||
concurrency: ${{ github.workflow }}
|
||||
jobs:
|
||||
build:
|
||||
name: Build package
|
||||
if: github.event.release.prerelease == false
|
||||
environment: packages.element.io
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
R2_INCOMING_BUCKET: ${{ vars.R2_INCOMING_BUCKET }}
|
||||
R2_URL: ${{ vars.CF_R2_S3_API }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Prepare
|
||||
run: |
|
||||
mkdir -p /tmp/element-web-debian/DEBIAN
|
||||
cp -R debian/ /tmp/element-web-debian/DEBIAN/
|
||||
mkdir -p /tmp/element-web-debian/usr/share/element-web/
|
||||
|
||||
wget https://github.com/vector-im/element-web/releases/download/$VERSION/element-$VERSION.tar.gz
|
||||
mv element-* /tmp/element-web-debian/usr/share/element-web
|
||||
mv debian/usr/share/element-web/config.sample.json /tmp/element-web-debian/usr/share/element-web/config.json
|
||||
env:
|
||||
VERSION: ${{ github.ref_name }}
|
||||
|
||||
- name: Build deb package
|
||||
run: |
|
||||
VERSION=$(cat package.json | jq -r .version)
|
||||
chmod -R u=rw,go=r /tmp/element-web-debian/usr/share/element-web/
|
||||
dpkg-deb -Zxz --root-owner-group -VVersion=$VERSION --build /tmp/element-web-debian element-web.deb
|
||||
|
||||
# For now just upload the artifact to github
|
||||
- uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: debs
|
||||
path: "*.deb"
|
||||
retention-days: 14
|
||||
|
||||
#- name: Upload incoming deb
|
||||
# run: aws s3 cp element-io-archive-keyring.deb "s3://$R2_INCOMING_BUCKET" --endpoint-url "$R2_URL" --region auto
|
||||
# env:
|
||||
# AWS_ACCESS_KEY_ID: ${{ secrets.CF_R2_ACCESS_KEY_ID }}
|
||||
# AWS_SECRET_ACCESS_KEY: ${{ secrets.CF_R2_TOKEN }}
|
||||
|
||||
#reprepro:
|
||||
# needs: build
|
||||
# name: Run reprepro
|
||||
# if: inputs.deploy && github.event.release.prerelease == false
|
||||
# uses: ./.github/workflows/reprepro.yaml
|
||||
# secrets: inherit
|
||||
# with:
|
||||
# incoming: element-web.deb
|
||||
20
.github/workflows/build_develop.yml
vendored
20
.github/workflows/build_develop.yml
vendored
@@ -18,10 +18,10 @@ jobs:
|
||||
environment: develop
|
||||
env:
|
||||
R2_BUCKET: "element-web-develop"
|
||||
R2_URL: ${{ secrets.CF_R2_S3_API }}
|
||||
R2_URL: ${{ vars.CF_R2_S3_API }}
|
||||
R2_PUBLIC_URL: "https://element-web-develop.element.io"
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
@@ -68,20 +68,24 @@ jobs:
|
||||
run: cp .github/cfp_headers _deploy/_headers
|
||||
|
||||
# Redirect requests for the develop tarball and the historical bundles to R2
|
||||
# We find the latest 100 bundle.css files and add their bundles to the redirects file
|
||||
# S3 has no sane way to get the age of a directory as they don't really exist
|
||||
- name: Populate _redirects
|
||||
run: |
|
||||
{
|
||||
echo "/develop.tar.gz $R2_PUBLIC_URL/develop.tar.gz 301"
|
||||
for bundle in $(aws s3 ls s3://$R2_BUCKET/bundles/ --endpoint-url $R2_URL --region=auto | awk '{print $2}'); do
|
||||
echo "/bundles/${bundle}* $R2_PUBLIC_URL/bundles/${bundle}:splat 301"
|
||||
done
|
||||
echo "/develop.tar.gz $R2_PUBLIC_URL/develop.tar.gz 301"
|
||||
aws s3api --region auto --endpoint-url $R2_URL list-objects-v2 --bucket $R2_BUCKET \
|
||||
--query "sort_by(Contents[?ends_with(Key, '/bundle.css')], &LastModified)[-100:].Key" \
|
||||
--prefix "bundles/" | jq -r '.[]' | grep -oE '[^\"].*\/\s*' | while read -r path ; do
|
||||
echo "/${path}* $R2_PUBLIC_URL/${path}:splat 301"
|
||||
done
|
||||
} | tee _deploy/_redirects
|
||||
env:
|
||||
AWS_ACCESS_KEY_ID: ${{ secrets.CF_R2_ACCESS_KEY_ID }}
|
||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.CF_R2_TOKEN }}
|
||||
|
||||
- name: Wait for other steps to succeed
|
||||
uses: lewagon/wait-on-check-action@v1.3.1
|
||||
uses: t3chguy/wait-on-check-action@05861d3a448898eb33dfce34153bd1ecb9422fb9 # fork
|
||||
with:
|
||||
ref: ${{ github.sha }}
|
||||
running-workflow-name: "Build & Deploy develop.element.io"
|
||||
@@ -102,7 +106,7 @@ jobs:
|
||||
|
||||
- name: Deploy to Cloudflare Pages
|
||||
id: cfp
|
||||
uses: cloudflare/pages-action@1
|
||||
uses: cloudflare/pages-action@f0a1cd58cd66095dee69bfa18fa5efd1dde93bca # v1
|
||||
with:
|
||||
apiToken: ${{ secrets.CF_PAGES_TOKEN }}
|
||||
accountId: ${{ secrets.CF_PAGES_ACCOUNT_ID }}
|
||||
|
||||
16
.github/workflows/dockerhub.yaml
vendored
16
.github/workflows/dockerhub.yaml
vendored
@@ -6,34 +6,34 @@ on:
|
||||
schedule:
|
||||
# This job can take a while, and we have usage limits, so just publish develop only twice a day
|
||||
- cron: "0 7/12 * * *"
|
||||
concurrency: ${{ github.ref_name }}
|
||||
concurrency: ${{ github.workflow }}-${{ github.ref_name }}
|
||||
jobs:
|
||||
buildx:
|
||||
name: Docker Buildx
|
||||
runs-on: ubuntu-latest
|
||||
environment: dockerhub
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0 # needed for docker-package to be able to calculate the version
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v2
|
||||
uses: docker/setup-qemu-action@2b82ce82d56a2a04d2637cd93a637ae1b359c0a7 # v2
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v2
|
||||
uses: docker/setup-buildx-action@885d1462b80bc1c1c7f0b00334ad271f09369c55 # v2
|
||||
with:
|
||||
install: true
|
||||
|
||||
- name: Login to Docker Hub
|
||||
uses: docker/login-action@v2
|
||||
uses: docker/login-action@465a07811f14bebb1938fbed4728c6a1ff8901fc # v2
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
|
||||
- name: Docker meta
|
||||
id: meta
|
||||
uses: docker/metadata-action@v4
|
||||
uses: docker/metadata-action@818d4b7b91585d195f67373fd9cb0332e31a7175 # v4
|
||||
with:
|
||||
images: |
|
||||
vectorim/element-web
|
||||
@@ -44,7 +44,7 @@ jobs:
|
||||
latest=${{ contains(github.ref_name, '-rc.') && 'false' || 'auto' }}
|
||||
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v4
|
||||
uses: docker/build-push-action@2eb1c1961a95fc15694676618e422e8ba1d63825 # v4
|
||||
with:
|
||||
context: .
|
||||
push: true
|
||||
@@ -53,7 +53,7 @@ jobs:
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
|
||||
- name: Update repo description
|
||||
uses: peter-evans/dockerhub-description@v3
|
||||
uses: peter-evans/dockerhub-description@dc67fad7001ef9e8e3c124cb7a64e16d0a63d864 # v3
|
||||
continue-on-error: true
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
|
||||
8
.github/workflows/localazy_download.yaml
vendored
Normal file
8
.github/workflows/localazy_download.yaml
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
name: Localazy Download
|
||||
on:
|
||||
workflow_dispatch: {}
|
||||
jobs:
|
||||
download:
|
||||
uses: matrix-org/matrix-web-i18n/.github/workflows/localazy_download.yaml@main
|
||||
secrets:
|
||||
ELEMENT_BOT_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
||||
11
.github/workflows/localazy_upload.yaml
vendored
Normal file
11
.github/workflows/localazy_upload.yaml
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
name: Localazy Upload
|
||||
on:
|
||||
push:
|
||||
branches: [develop]
|
||||
paths:
|
||||
- "src/strings/i18n/en_EN.json"
|
||||
jobs:
|
||||
upload:
|
||||
uses: matrix-org/matrix-web-i18n/.github/workflows/localazy_upload.yaml@main
|
||||
secrets:
|
||||
LOCALAZY_WRITE_KEY: ${{ secrets.LOCALAZY_WRITE_KEY }}
|
||||
70
.github/workflows/pending-reviews.yaml
vendored
70
.github/workflows/pending-reviews.yaml
vendored
@@ -11,6 +11,7 @@ jobs:
|
||||
environment: Matrix
|
||||
env:
|
||||
URL: "https://github.com/pulls?q=is%3Apr+is%3Aopen+repo%3Amatrix-org%2Fmatrix-js-sdk+repo%3Amatrix-org%2Fmatrix-react-sdk+repo%3Avector-im%2Felement-web+repo%3Avector-im%2Felement-desktop+review-requested%3A%40me+sort%3Aupdated-desc+"
|
||||
RELEASE_BLOCKERS_URL: "https://github.com/pulls?q=is%3Aopen+repo%3Amatrix-org%2Fmatrix-js-sdk+repo%3Amatrix-org%2Fmatrix-react-sdk+repo%3Avector-im%2Felement-web+repo%3Avector-im%2Felement-desktop+sort%3Aupdated-desc+label%3AX-Release-Blocker+"
|
||||
steps:
|
||||
- uses: actions/github-script@v6
|
||||
env:
|
||||
@@ -21,6 +22,43 @@ jobs:
|
||||
# PAT needed as the GITHUB_TOKEN won't be able to see cross-references from other orgs (matrix-org)
|
||||
github-token: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
||||
script: |
|
||||
const { HS_URL, ROOM_ID, TOKEN, URL, RELEASE_BLOCKERS_URL } = process.env;
|
||||
|
||||
async function updateCounter(counter, link, severity, title, value, clearOnZero) {
|
||||
const apiUrl = `${HS_URL}/_matrix/client/v3/rooms/${ROOM_ID}/state/re.jki.counter/${counter}`;
|
||||
const headers = {
|
||||
"Content-Type": "application/json",
|
||||
"Authorization": `Bearer ${TOKEN}`,
|
||||
};
|
||||
const res = await fetch(apiUrl, {
|
||||
method: "GET",
|
||||
headers,
|
||||
});
|
||||
|
||||
const data = await res.json();
|
||||
|
||||
if (data.value === issueCount) {
|
||||
console.log("Pending review count already correct");
|
||||
return;
|
||||
}
|
||||
|
||||
let body = {};
|
||||
if (issueCount || !clearOnZero) {
|
||||
body = JSON.stringify({
|
||||
link,
|
||||
severity,
|
||||
title,
|
||||
value,
|
||||
});
|
||||
}
|
||||
|
||||
await fetch(apiUrl, {
|
||||
method: "PUT",
|
||||
body,
|
||||
headers,
|
||||
});
|
||||
}
|
||||
|
||||
const repos = [
|
||||
"vector-im/element-desktop",
|
||||
"vector-im/element-web",
|
||||
@@ -43,32 +81,10 @@ jobs:
|
||||
});
|
||||
issueCount += data.total_count;
|
||||
}
|
||||
await updateCounter("gh_reviews", URL, "warning", "Pending reviews", issueCount);
|
||||
|
||||
const { HS_URL, ROOM_ID, TOKEN, URL } = process.env;
|
||||
const apiUrl = `${HS_URL}/_matrix/client/v3/rooms/${ROOM_ID}/state/re.jki.counter/gh_reviews`;
|
||||
const headers = {
|
||||
"Content-Type": "application/json",
|
||||
"Authorization": `Bearer ${TOKEN}`,
|
||||
};
|
||||
const res = await fetch(apiUrl, {
|
||||
method: "GET",
|
||||
headers,
|
||||
});
|
||||
|
||||
const data = await res.json();
|
||||
|
||||
if (data.value === issueCount) {
|
||||
console.log("Pending review count already correct");
|
||||
return;
|
||||
}
|
||||
|
||||
await fetch(apiUrl, {
|
||||
method: "PUT",
|
||||
body: JSON.stringify({
|
||||
"link": URL,
|
||||
"severity": "warning",
|
||||
"title": "Pending reviews",
|
||||
"value": issueCount
|
||||
}),
|
||||
headers,
|
||||
const { data } = await github.rest.search.issuesAndPullRequests({
|
||||
q: `is:open ${repos.map(repo => `repo:${repo}`).join(" ")} label:X-Release-Blocker`,
|
||||
});
|
||||
const blockerCount = data.total_count;
|
||||
await updateCounter("release_blockers", RELEASE_BLOCKERS_URL, "alert", "Release Blockers", blockerCount, true);
|
||||
|
||||
1
.github/workflows/pull_request.yaml
vendored
1
.github/workflows/pull_request.yaml
vendored
@@ -2,7 +2,6 @@ name: Pull Request
|
||||
on:
|
||||
pull_request_target:
|
||||
types: [opened, edited, labeled, unlabeled, synchronize]
|
||||
concurrency: ${{ github.workflow }}-${{ github.event.pull_request.head.ref }}
|
||||
jobs:
|
||||
action:
|
||||
uses: matrix-org/matrix-js-sdk/.github/workflows/pull_request.yaml@develop
|
||||
|
||||
50
.github/workflows/static_analysis.yaml
vendored
50
.github/workflows/static_analysis.yaml
vendored
@@ -14,7 +14,7 @@ jobs:
|
||||
name: "Typescript Syntax Check"
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
@@ -26,53 +26,15 @@ jobs:
|
||||
- name: Typecheck
|
||||
run: "yarn run lint:types"
|
||||
|
||||
tsc-strict:
|
||||
name: Typescript Strict Error Checker
|
||||
if: github.event_name == 'pull_request'
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
pull-requests: read
|
||||
checks: write
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Install Deps
|
||||
run: "scripts/layered.sh"
|
||||
|
||||
- name: Get diff lines
|
||||
id: diff
|
||||
uses: Equip-Collaboration/diff-line-numbers@v1.0.0
|
||||
with:
|
||||
include: '["\\.tsx?$"]'
|
||||
|
||||
- name: Detecting files changed
|
||||
id: files
|
||||
uses: futuratrepadeira/changed-files@v4.0.0
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
pattern: '^.*\.tsx?$'
|
||||
|
||||
- uses: t3chguy/typescript-check-action@main
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
use-check: false
|
||||
check-fail-mode: added
|
||||
output-behaviour: annotate
|
||||
ts-extra-args: "--strict --noImplicitAny"
|
||||
files-changed: ${{ steps.files.outputs.files_updated }}
|
||||
files-added: ${{ steps.files.outputs.files_created }}
|
||||
files-deleted: ${{ steps.files.outputs.files_deleted }}
|
||||
line-numbers: ${{ steps.diff.outputs.lineNumbers }}
|
||||
|
||||
i18n_lint:
|
||||
name: "i18n Check"
|
||||
uses: matrix-org/matrix-react-sdk/.github/workflows/i18n_check.yml@develop
|
||||
uses: matrix-org/matrix-web-i18n/.github/workflows/i18n_check.yml@main
|
||||
|
||||
js_lint:
|
||||
name: "ESLint"
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
@@ -80,7 +42,7 @@ jobs:
|
||||
|
||||
# Does not need branch matching as only analyses this layer
|
||||
- name: Install Deps
|
||||
run: "yarn install --pure-lockfile"
|
||||
run: "yarn install --frozen-lockfile"
|
||||
|
||||
- name: Run Linter
|
||||
run: "yarn run lint:js"
|
||||
@@ -89,7 +51,7 @@ jobs:
|
||||
name: "Style Lint"
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
@@ -106,7 +68,7 @@ jobs:
|
||||
name: "Analyse Dead Code"
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
|
||||
6
.github/workflows/tests.yaml
vendored
6
.github/workflows/tests.yaml
vendored
@@ -15,7 +15,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Yarn cache
|
||||
uses: actions/setup-node@v3
|
||||
@@ -27,10 +27,10 @@ jobs:
|
||||
|
||||
- name: Get number of CPU cores
|
||||
id: cpu-cores
|
||||
uses: SimenB/github-actions-cpu-cores@v1
|
||||
uses: SimenB/github-actions-cpu-cores@410541432439795d30db6501fb1d8178eb41e502 # v1
|
||||
|
||||
- name: Run tests with coverage
|
||||
run: "yarn coverage --ci --reporters github-actions --max-workers ${{ steps.cpu-cores.outputs.count }}"
|
||||
run: "yarn coverage --ci --max-workers ${{ steps.cpu-cores.outputs.count }}"
|
||||
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
|
||||
19
.github/workflows/triage-assigned.yml
vendored
19
.github/workflows/triage-assigned.yml
vendored
@@ -12,20 +12,7 @@ jobs:
|
||||
contains(github.event.issue.assignees.*.login, 'andybalaam') ||
|
||||
contains(github.event.issue.assignees.*.login, 'justjanne')
|
||||
steps:
|
||||
- uses: octokit/graphql-action@v2.x
|
||||
id: add_to_project
|
||||
- uses: actions/add-to-project@main
|
||||
with:
|
||||
headers: '{"GraphQL-Features": "projects_next_graphql"}'
|
||||
query: |
|
||||
mutation add_to_project($projectid:ID!,$contentid:ID!) {
|
||||
addProjectV2ItemById(input: {projectId: $projectid contentId: $contentid}) {
|
||||
item {
|
||||
id
|
||||
}
|
||||
}
|
||||
}
|
||||
projectid: ${{ env.PROJECT_ID }}
|
||||
contentid: ${{ github.event.issue.node_id }}
|
||||
env:
|
||||
PROJECT_ID: "PVT_kwDOAM0swc4AKjJS"
|
||||
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
||||
project-url: https://github.com/orgs/vector-im/projects/67
|
||||
github-token: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
||||
|
||||
243
.github/workflows/triage-labelled.yml
vendored
243
.github/workflows/triage-labelled.yml
vendored
@@ -72,23 +72,10 @@ jobs:
|
||||
contains(github.event.issue.labels.*.name, 'O-Frequent') ||
|
||||
contains(github.event.issue.labels.*.name, 'A11y'))
|
||||
steps:
|
||||
- uses: octokit/graphql-action@v2.x
|
||||
id: add_to_project
|
||||
- uses: actions/add-to-project@main
|
||||
with:
|
||||
headers: '{"GraphQL-Features": "projects_next_graphql"}'
|
||||
query: |
|
||||
mutation add_to_project($projectid:ID!,$contentid:ID!) {
|
||||
addProjectV2ItemById(input: {projectId: $projectid contentId: $contentid}) {
|
||||
item {
|
||||
id
|
||||
}
|
||||
}
|
||||
}
|
||||
projectid: ${{ env.PROJECT_ID }}
|
||||
contentid: ${{ github.event.issue.node_id }}
|
||||
env:
|
||||
PROJECT_ID: "PVT_kwDOAM0swc0sUA"
|
||||
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
||||
project-url: https://github.com/orgs/vector-im/projects/18
|
||||
github-token: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
||||
|
||||
add_product_issues:
|
||||
name: X-Needs-Product to product project board
|
||||
@@ -96,23 +83,10 @@ jobs:
|
||||
if: >
|
||||
contains(github.event.issue.labels.*.name, 'X-Needs-Product')
|
||||
steps:
|
||||
- uses: octokit/graphql-action@v2.x
|
||||
id: add_to_project
|
||||
- uses: actions/add-to-project@main
|
||||
with:
|
||||
headers: '{"GraphQL-Features": "projects_next_graphql"}'
|
||||
query: |
|
||||
mutation add_to_project($projectid:ID!,$contentid:ID!) {
|
||||
addProjectV2ItemById(input: {projectId: $projectid contentId: $contentid}) {
|
||||
item {
|
||||
id
|
||||
}
|
||||
}
|
||||
}
|
||||
projectid: ${{ env.PROJECT_ID }}
|
||||
contentid: ${{ github.event.issue.node_id }}
|
||||
env:
|
||||
PROJECT_ID: "PVT_kwDOAM0swc4AAg6N"
|
||||
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
||||
project-url: https://github.com/orgs/vector-im/projects/28
|
||||
github-token: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
||||
|
||||
Search_issues_to_board:
|
||||
name: Search issues to project board
|
||||
@@ -120,114 +94,10 @@ jobs:
|
||||
if: >
|
||||
contains(github.event.issue.labels.*.name, 'A-New-Search-Experience')
|
||||
steps:
|
||||
- uses: octokit/graphql-action@v2.x
|
||||
- uses: actions/add-to-project@main
|
||||
with:
|
||||
headers: '{"GraphQL-Features": "projects_next_graphql"}'
|
||||
query: |
|
||||
mutation add_to_project($projectid:ID!,$contentid:ID!) {
|
||||
addProjectV2ItemById(input: {projectId: $projectid contentId: $contentid}) {
|
||||
item {
|
||||
id
|
||||
}
|
||||
}
|
||||
}
|
||||
projectid: ${{ env.PROJECT_ID }}
|
||||
contentid: ${{ github.event.issue.node_id }}
|
||||
env:
|
||||
PROJECT_ID: "PVT_kwDOAM0swc4ADtaO"
|
||||
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
||||
|
||||
move_voice-message_issues:
|
||||
name: A-Voice Messages to voice message board
|
||||
runs-on: ubuntu-latest
|
||||
if: >
|
||||
contains(github.event.issue.labels.*.name, 'A-Voice Messages')
|
||||
steps:
|
||||
- uses: octokit/graphql-action@v2.x
|
||||
with:
|
||||
headers: '{"GraphQL-Features": "projects_next_graphql"}'
|
||||
query: |
|
||||
mutation add_to_project($projectid:ID!,$contentid:ID!) {
|
||||
addProjectV2ItemById(input: {projectId: $projectid contentId: $contentid}) {
|
||||
item {
|
||||
id
|
||||
}
|
||||
}
|
||||
}
|
||||
projectid: ${{ env.PROJECT_ID }}
|
||||
contentid: ${{ github.event.issue.node_id }}
|
||||
env:
|
||||
PROJECT_ID: "PVT_kwDOAM0swc2KCw"
|
||||
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
||||
|
||||
move_message_bubbles_issues:
|
||||
name: A-Message-Bubbles to Message bubbles board
|
||||
runs-on: ubuntu-latest
|
||||
if: >
|
||||
contains(github.event.issue.labels.*.name, 'A-Message-Bubbles')
|
||||
steps:
|
||||
- uses: octokit/graphql-action@v2.x
|
||||
with:
|
||||
headers: '{"GraphQL-Features": "projects_next_graphql"}'
|
||||
query: |
|
||||
mutation add_to_project($projectid:ID!,$contentid:ID!) {
|
||||
addProjectV2ItemById(input: {projectId: $projectid contentId: $contentid}) {
|
||||
item {
|
||||
id
|
||||
}
|
||||
}
|
||||
}
|
||||
projectid: ${{ env.PROJECT_ID }}
|
||||
contentid: ${{ github.event.issue.node_id }}
|
||||
env:
|
||||
PROJECT_ID: "PVT_kwDOAM0swc3m-g"
|
||||
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
||||
|
||||
move_ftue_issues:
|
||||
name: Z-FTUE issues to the FTUE project board
|
||||
runs-on: ubuntu-latest
|
||||
if: >
|
||||
contains(github.event.issue.labels.*.name, 'Z-FTUE')
|
||||
steps:
|
||||
- uses: octokit/graphql-action@v2.x
|
||||
with:
|
||||
headers: '{"GraphQL-Features": "projects_next_graphql"}'
|
||||
query: |
|
||||
mutation add_to_project($projectid:ID!,$contentid:ID!) {
|
||||
addProjectV2ItemById(input: {projectId: $projectid contentId: $contentid}) {
|
||||
item {
|
||||
id
|
||||
}
|
||||
}
|
||||
}
|
||||
projectid: ${{ env.PROJECT_ID }}
|
||||
contentid: ${{ github.event.issue.node_id }}
|
||||
env:
|
||||
PROJECT_ID: "PVT_kwDOAM0swc4AAqVx"
|
||||
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
||||
|
||||
move_WTF_issues:
|
||||
name: Z-WTF issues to the WTF project board
|
||||
runs-on: ubuntu-latest
|
||||
if: >
|
||||
contains(github.event.issue.labels.*.name, 'Z-WTF')
|
||||
steps:
|
||||
- uses: octokit/graphql-action@v2.x
|
||||
with:
|
||||
headers: '{"GraphQL-Features": "projects_next_graphql"}'
|
||||
query: |
|
||||
mutation add_to_project($projectid:ID!,$contentid:ID!) {
|
||||
addProjectV2ItemById(input: {projectId: $projectid contentId: $contentid}) {
|
||||
item {
|
||||
id
|
||||
}
|
||||
}
|
||||
}
|
||||
projectid: ${{ env.PROJECT_ID }}
|
||||
contentid: ${{ github.event.issue.node_id }}
|
||||
env:
|
||||
PROJECT_ID: "PVT_kwDOAM0swc4AArk0"
|
||||
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
||||
project-url: https://github.com/orgs/vector-im/projects/48
|
||||
github-token: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
||||
|
||||
ps_features1:
|
||||
name: Add labelled issues to PS features team 1
|
||||
@@ -240,23 +110,10 @@ jobs:
|
||||
(contains(github.event.issue.labels.*.name, 'A-Session-Mgmt') &&
|
||||
contains(github.event.issue.labels.*.name, 'A-User-Settings'))
|
||||
steps:
|
||||
- uses: octokit/graphql-action@v2.x
|
||||
id: add_to_project
|
||||
- uses: actions/add-to-project@main
|
||||
with:
|
||||
headers: '{"GraphQL-Features": "projects_next_graphql"}'
|
||||
query: |
|
||||
mutation add_to_project($projectid:ID!,$contentid:ID!) {
|
||||
addProjectV2ItemById(input: {projectId: $projectid contentId: $contentid}) {
|
||||
item {
|
||||
id
|
||||
}
|
||||
}
|
||||
}
|
||||
projectid: ${{ env.PROJECT_ID }}
|
||||
contentid: ${{ github.event.issue.node_id }}
|
||||
env:
|
||||
PROJECT_ID: "PVT_kwDOAM0swc4AHJKF"
|
||||
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
||||
project-url: https://github.com/orgs/vector-im/projects/56
|
||||
github-token: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
||||
|
||||
ps_features2:
|
||||
name: Add labelled issues to PS features team 2
|
||||
@@ -265,23 +122,10 @@ jobs:
|
||||
contains(github.event.issue.labels.*.name, 'A-DM-Start') ||
|
||||
contains(github.event.issue.labels.*.name, 'A-Broadcast')
|
||||
steps:
|
||||
- uses: octokit/graphql-action@v2.x
|
||||
id: add_to_project
|
||||
- uses: actions/add-to-project@main
|
||||
with:
|
||||
headers: '{"GraphQL-Features": "projects_next_graphql"}'
|
||||
query: |
|
||||
mutation add_to_project($projectid:ID!,$contentid:ID!) {
|
||||
addProjectV2ItemById(input: {projectId: $projectid contentId: $contentid}) {
|
||||
item {
|
||||
id
|
||||
}
|
||||
}
|
||||
}
|
||||
projectid: ${{ env.PROJECT_ID }}
|
||||
contentid: ${{ github.event.issue.node_id }}
|
||||
env:
|
||||
PROJECT_ID: "PVT_kwDOAM0swc4AHJKd"
|
||||
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
||||
project-url: https://github.com/orgs/vector-im/projects/58
|
||||
github-token: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
||||
|
||||
ps_features3:
|
||||
name: Add labelled issues to PS features team 3
|
||||
@@ -289,23 +133,10 @@ jobs:
|
||||
if: >
|
||||
contains(github.event.issue.labels.*.name, 'A-Rich-Text-Editor')
|
||||
steps:
|
||||
- uses: octokit/graphql-action@v2.x
|
||||
id: add_to_project
|
||||
- uses: actions/add-to-project@main
|
||||
with:
|
||||
headers: '{"GraphQL-Features": "projects_next_graphql"}'
|
||||
query: |
|
||||
mutation add_to_project($projectid:ID!,$contentid:ID!) {
|
||||
addProjectV2ItemById(input: {projectId: $projectid contentId: $contentid}) {
|
||||
item {
|
||||
id
|
||||
}
|
||||
}
|
||||
}
|
||||
projectid: ${{ env.PROJECT_ID }}
|
||||
contentid: ${{ github.event.issue.node_id }}
|
||||
env:
|
||||
PROJECT_ID: "PVT_kwDOAM0swc4AHJKW"
|
||||
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
||||
project-url: https://github.com/orgs/vector-im/projects/57
|
||||
github-token: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
||||
|
||||
voip:
|
||||
name: Add labelled issues to VoIP project board
|
||||
@@ -313,23 +144,10 @@ jobs:
|
||||
if: >
|
||||
contains(github.event.issue.labels.*.name, 'Team: VoIP')
|
||||
steps:
|
||||
- uses: octokit/graphql-action@v2.x
|
||||
id: add_to_project
|
||||
- uses: actions/add-to-project@main
|
||||
with:
|
||||
headers: '{"GraphQL-Features": "projects_next_graphql"}'
|
||||
query: |
|
||||
mutation add_to_project($projectid:ID!,$contentid:ID!) {
|
||||
addProjectV2ItemById(input: {projectId: $projectid contentId: $contentid}) {
|
||||
item {
|
||||
id
|
||||
}
|
||||
}
|
||||
}
|
||||
projectid: ${{ env.PROJECT_ID }}
|
||||
contentid: ${{ github.event.issue.node_id }}
|
||||
env:
|
||||
PROJECT_ID: "PVT_kwDOAM0swc4ABMIk"
|
||||
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
||||
project-url: https://github.com/orgs/vector-im/projects/41
|
||||
github-token: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
||||
|
||||
verticals_feature:
|
||||
name: Add labelled issues to Verticals Feature project
|
||||
@@ -337,20 +155,7 @@ jobs:
|
||||
if: >
|
||||
contains(github.event.issue.labels.*.name, 'Team: Verticals Feature')
|
||||
steps:
|
||||
- uses: octokit/graphql-action@v2.x
|
||||
id: add_to_project
|
||||
- uses: actions/add-to-project@main
|
||||
with:
|
||||
headers: '{"GraphQL-Features": "projects_next_graphql"}'
|
||||
query: |
|
||||
mutation add_to_project($projectid:ID!,$contentid:ID!) {
|
||||
addProjectV2ItemById(input: {projectId: $projectid contentId: $contentid}) {
|
||||
item {
|
||||
id
|
||||
}
|
||||
}
|
||||
}
|
||||
projectid: ${{ env.PROJECT_ID }}
|
||||
contentid: ${{ github.event.issue.node_id }}
|
||||
env:
|
||||
PROJECT_ID: "PVT_kwDOAM0swc4AHJKW"
|
||||
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
||||
project-url: https://github.com/orgs/vector-im/projects/57
|
||||
github-token: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
||||
|
||||
@@ -43,11 +43,11 @@ jobs:
|
||||
|
||||
# If either a reviewer matches a team member, or a team matches our team, say "true"
|
||||
if [ $(join /tmp/team_members.txt /tmp/reviewers.txt | wc -l) != 0 ]; then
|
||||
echo "::set-output name=match::true"
|
||||
echo "match=true" >> $GITHUB_OUTPUT
|
||||
elif [ $(join /tmp/team.txt /tmp/team_reviewers.txt | wc -l) != 0 ]; then
|
||||
echo "::set-output name=match::true"
|
||||
echo "match=true" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "::set-output name=match::false"
|
||||
echo "match=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
env:
|
||||
TEAM: "design"
|
||||
@@ -110,11 +110,11 @@ jobs:
|
||||
|
||||
# If either a reviewer matches a team member, or a team matches our team, say "true"
|
||||
if [ $(join /tmp/team_members.txt /tmp/reviewers.txt | wc -l) != 0 ]; then
|
||||
echo "::set-output name=match::true"
|
||||
echo "match=true" >> $GITHUB_OUTPUT
|
||||
elif [ $(join /tmp/team.txt /tmp/team_reviewers.txt | wc -l) != 0 ]; then
|
||||
echo "::set-output name=match::true"
|
||||
echo "match=true" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "::set-output name=match::false"
|
||||
echo "match=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
env:
|
||||
TEAM: "product"
|
||||
|
||||
95
.github/workflows/update-topics.yaml
vendored
Normal file
95
.github/workflows/update-topics.yaml
vendored
Normal file
@@ -0,0 +1,95 @@
|
||||
name: Update release topics
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
expected_status:
|
||||
description: What type of release is the next expected release
|
||||
required: true
|
||||
default: RC
|
||||
type: choice
|
||||
options:
|
||||
- RC
|
||||
- Release
|
||||
expected_date:
|
||||
description: Expected release date e.g. July 11th
|
||||
required: true
|
||||
type: string
|
||||
concurrency: ${{ github.workflow }}
|
||||
jobs:
|
||||
bot:
|
||||
name: Release topic update
|
||||
runs-on: ubuntu-latest
|
||||
environment: Matrix
|
||||
steps:
|
||||
- uses: actions/github-script@v6
|
||||
env:
|
||||
HS_URL: ${{ secrets.BETABOT_HS_URL }}
|
||||
LOBBY_ROOM_ID: ${{ secrets.ROOM_ID }}
|
||||
PUBLIC_ROOM_ID: "!YTvKGNlinIzlkMTVRl:matrix.org"
|
||||
ANNOUNCEMENT_ROOM_ID: "!bijaLdadorKgNGtHdA:matrix.org"
|
||||
TOKEN: ${{ secrets.BETABOT_ACCESS_TOKEN }}
|
||||
RELEASE_STATUS: "Release status: ${{ inputs.expected_status }} expected ${{ inputs.expected_date }}"
|
||||
with:
|
||||
script: |
|
||||
const { HS_URL, TOKEN, RELEASE_STATUS, LOBBY_ROOM_ID, PUBLIC_ROOM_ID, ANNOUNCEMENT_ROOM_ID } = process.env;
|
||||
|
||||
const repo = context.repo;
|
||||
const { data } = await github.rest.repos.getLatestRelease({
|
||||
owner: repo.owner,
|
||||
repo: repo.repo,
|
||||
});
|
||||
console.log("Found latest version: " + data.tag_name);
|
||||
|
||||
const releaseTopic = `Stable: ${data.tag_name} | ${RELEASE_STATUS}`;
|
||||
console.log("Release topic: " + releaseTopic);
|
||||
|
||||
const regex = /Stable: v(.+) \| Release status: (\w+) expected (\w+ \d+\w\w)/gm;
|
||||
|
||||
async function updateReleaseInTopic(roomId) {
|
||||
const apiUrl = `${HS_URL}/_matrix/client/v3/rooms/${roomId}/state/m.room.topic/`;
|
||||
const headers = {
|
||||
"Content-Type": "application/json",
|
||||
"Authorization": `Bearer ${TOKEN}`,
|
||||
};
|
||||
await fetch(`${HS_URL}/_matrix/client/v3/rooms/${roomId}/join`, {
|
||||
method: "POST",
|
||||
headers,
|
||||
body: "{}",
|
||||
});
|
||||
|
||||
let res = await fetch(apiUrl, {
|
||||
method: "GET",
|
||||
headers,
|
||||
});
|
||||
|
||||
const data = await res.json();
|
||||
const topic = data.topic.replace(regex, releaseTopic);
|
||||
if (topic === data.topic) {
|
||||
console.log(roomId, "nothing to do");
|
||||
return;
|
||||
}
|
||||
if (data["org.matrix.msc3765.topic"]) {
|
||||
data["org.matrix.msc3765.topic"].forEach(d => {
|
||||
d.body = d.body.replace(regex, releaseTopic);
|
||||
});
|
||||
}
|
||||
|
||||
res = await fetch(apiUrl, {
|
||||
method: "PUT",
|
||||
body: JSON.stringify({
|
||||
...data,
|
||||
topic,
|
||||
}),
|
||||
headers,
|
||||
});
|
||||
|
||||
if (res.ok) {
|
||||
console.log(roomId, "topic updated:", topic);
|
||||
} else {
|
||||
console.log(roomId, await res.text());
|
||||
}
|
||||
}
|
||||
|
||||
await updateReleaseInTopic(LOBBY_ROOM_ID);
|
||||
await updateReleaseInTopic(PUBLIC_ROOM_ID);
|
||||
await updateReleaseInTopic(ANNOUNCEMENT_ROOM_ID);
|
||||
@@ -1,4 +1,4 @@
|
||||
module.exports = {
|
||||
...require("matrix-react-sdk/.stylelintrc.js"),
|
||||
extends: ["stylelint-config-standard", "stylelint-config-prettier"],
|
||||
extends: ["stylelint-config-standard"],
|
||||
};
|
||||
|
||||
566
CHANGELOG.md
566
CHANGELOG.md
@@ -1,3 +1,569 @@
|
||||
Changes in [1.11.43](https://github.com/vector-im/element-web/releases/tag/v1.11.43) (2023-09-15)
|
||||
=================================================================================================
|
||||
|
||||
(No changes - bumping the version number for an element-desktop release.)
|
||||
|
||||
Changes in [1.11.42](https://github.com/vector-im/element-web/releases/tag/v1.11.42) (2023-09-13)
|
||||
=================================================================================================
|
||||
|
||||
## 🐛 Bug Fixes
|
||||
* Update Compound to fix Firefox-specific avatar regression ([\#11604](https://github.com/matrix-org/matrix-react-sdk/pull/11604)). Fixes #26155.
|
||||
|
||||
Changes in [1.11.41](https://github.com/vector-im/element-web/releases/tag/v1.11.41) (2023-09-12)
|
||||
=================================================================================================
|
||||
|
||||
## 🦖 Deprecations
|
||||
* Deprecate customisations in favour of Module API ([\#25736](https://github.com/vector-im/element-web/pull/25736)). Fixes #25733.
|
||||
|
||||
## ✨ Features
|
||||
* Make SVGR icons use forward ref ([\#26082](https://github.com/vector-im/element-web/pull/26082)).
|
||||
* Add support for rendering a custom wrapper around Element ([\#25537](https://github.com/vector-im/element-web/pull/25537)). Contributed by @maheichyk.
|
||||
* Allow creating public knock rooms ([\#11481](https://github.com/matrix-org/matrix-react-sdk/pull/11481)). Contributed by @charlynguyen.
|
||||
* Render custom images in reactions according to MSC4027 ([\#11087](https://github.com/matrix-org/matrix-react-sdk/pull/11087)). Contributed by @sumnerevans.
|
||||
* Introduce room knocks bar ([\#11475](https://github.com/matrix-org/matrix-react-sdk/pull/11475)). Contributed by @charlynguyen.
|
||||
* Room header UI updates ([\#11507](https://github.com/matrix-org/matrix-react-sdk/pull/11507)). Fixes #25892.
|
||||
* Remove green "verified" bar for encrypted events ([\#11496](https://github.com/matrix-org/matrix-react-sdk/pull/11496)).
|
||||
* Update member count on room summary update ([\#11488](https://github.com/matrix-org/matrix-react-sdk/pull/11488)).
|
||||
* Support for E2EE in Element Call ([\#11492](https://github.com/matrix-org/matrix-react-sdk/pull/11492)).
|
||||
* Allow requesting to join knock rooms via spotlight ([\#11482](https://github.com/matrix-org/matrix-react-sdk/pull/11482)). Contributed by @charlynguyen.
|
||||
* Lock out the first tab if Element is opened in a second tab. ([\#11425](https://github.com/matrix-org/matrix-react-sdk/pull/11425)). Fixes #25157.
|
||||
* Change avatar to use Compound implementation ([\#11448](https://github.com/matrix-org/matrix-react-sdk/pull/11448)).
|
||||
|
||||
## 🐛 Bug Fixes
|
||||
* Fix vertical alignment of default avatar font ([\#11582](https://github.com/matrix-org/matrix-react-sdk/pull/11582)). Fixes #26081.
|
||||
* Fix avatars in public room & space search being flex shrunk ([\#11580](https://github.com/matrix-org/matrix-react-sdk/pull/11580)). Fixes #26133.
|
||||
* Fix EventTile avatars being rendered with a size of 0 instead of hidden ([\#11558](https://github.com/matrix-org/matrix-react-sdk/pull/11558)). Fixes #26075.
|
||||
* Fix compound external assets path in bundle ([\#26069](https://github.com/vector-im/element-web/pull/26069)).
|
||||
* Use RoomStateEvent.Update for knocks ([\#11516](https://github.com/matrix-org/matrix-react-sdk/pull/11516)). Contributed by @charlynguyen.
|
||||
* Prevent event propagation when clicking icon buttons ([\#11515](https://github.com/matrix-org/matrix-react-sdk/pull/11515)).
|
||||
* Only display RoomKnocksBar when feature flag is enabled ([\#11513](https://github.com/matrix-org/matrix-react-sdk/pull/11513)). Contributed by @andybalaam.
|
||||
* Fix avatars of knock members for people tab of room settings ([\#11506](https://github.com/matrix-org/matrix-react-sdk/pull/11506)). Fixes #26083. Contributed by @charlynguyen.
|
||||
* Fixes read receipt avatar offset ([\#11483](https://github.com/matrix-org/matrix-react-sdk/pull/11483)). Fixes #26067, #26064 #26059 and #26061.
|
||||
* Fix avatar defects ([\#11473](https://github.com/matrix-org/matrix-react-sdk/pull/11473)). Fixes #26051 and #26046.
|
||||
* Fix consistent avatar output for Percy ([\#11472](https://github.com/matrix-org/matrix-react-sdk/pull/11472)). Fixes #26049 and #26052.
|
||||
* Fix colour of avatar and colour matching with username ([\#11470](https://github.com/matrix-org/matrix-react-sdk/pull/11470)). Fixes #26042.
|
||||
* Fix incompatibility of Soft Logout with Element-R ([\#11468](https://github.com/matrix-org/matrix-react-sdk/pull/11468)).
|
||||
* Fix instances of double translation and guard translation calls using typescript ([\#11443](https://github.com/matrix-org/matrix-react-sdk/pull/11443)).
|
||||
|
||||
Changes in [1.11.40](https://github.com/vector-im/element-web/releases/tag/v1.11.40) (2023-08-29)
|
||||
=================================================================================================
|
||||
|
||||
## ✨ Features
|
||||
* Hide account deactivation for externally managed accounts ([\#11445](https://github.com/matrix-org/matrix-react-sdk/pull/11445)). Fixes #26022. Contributed by @kerryarchibald.
|
||||
* OIDC: Redirect to delegated auth provider when signing out ([\#11432](https://github.com/matrix-org/matrix-react-sdk/pull/11432)). Fixes #26000. Contributed by @kerryarchibald.
|
||||
* Disable 3pid fields in settings when `m.3pid_changes` capability is disabled ([\#11430](https://github.com/matrix-org/matrix-react-sdk/pull/11430)). Fixes #25995. Contributed by @kerryarchibald.
|
||||
* OIDC: disable multi session signout for OIDC-aware servers in session manager ([\#11431](https://github.com/matrix-org/matrix-react-sdk/pull/11431)). Contributed by @kerryarchibald.
|
||||
* Implement updated open dialog method of the Module API ([\#11395](https://github.com/matrix-org/matrix-react-sdk/pull/11395)). Contributed by @dhenneke.
|
||||
* Polish & delabs `Exploring public spaces` feature ([\#11423](https://github.com/matrix-org/matrix-react-sdk/pull/11423)).
|
||||
* Treat lists with a single empty item as plain text, not Markdown. ([\#6833](https://github.com/matrix-org/matrix-react-sdk/pull/6833)). Fixes vector-im/element-meta#1265.
|
||||
* Allow managing room knocks ([\#11404](https://github.com/matrix-org/matrix-react-sdk/pull/11404)). Contributed by @charlynguyen.
|
||||
* Pin the action buttons to the bottom of the scrollable dialogs ([\#11407](https://github.com/matrix-org/matrix-react-sdk/pull/11407)). Contributed by @dhenneke.
|
||||
* Support Matrix 1.1 (drop legacy r0 versions) ([\#9819](https://github.com/matrix-org/matrix-react-sdk/pull/9819)).
|
||||
|
||||
## 🐛 Bug Fixes
|
||||
* Fix path separator for Windows based systems ([\#25997](https://github.com/vector-im/element-web/pull/25997)).
|
||||
* Fix instances of double translation and guard translation calls using typescript ([\#11443](https://github.com/matrix-org/matrix-react-sdk/pull/11443)).
|
||||
* Fix export type "Current timeline" to match its behaviour to its name ([\#11426](https://github.com/matrix-org/matrix-react-sdk/pull/11426)). Fixes #25988.
|
||||
* Fix Room Settings > Notifications file upload input being shown superfluously ([\#11415](https://github.com/matrix-org/matrix-react-sdk/pull/11415)). Fixes #18392.
|
||||
* Simplify registration with email validation ([\#11398](https://github.com/matrix-org/matrix-react-sdk/pull/11398)). Fixes #25832 #23601 and #22297.
|
||||
* correct home server URL ([\#11391](https://github.com/matrix-org/matrix-react-sdk/pull/11391)). Fixes #25931. Contributed by @NSV1991.
|
||||
* Include non-matching DMs in Spotlight recent conversations when the DM's userId is part of the search API results ([\#11374](https://github.com/matrix-org/matrix-react-sdk/pull/11374)). Contributed by @mgcm.
|
||||
* Fix useRoomMembers missing updates causing incorrect membership counts ([\#11392](https://github.com/matrix-org/matrix-react-sdk/pull/11392)). Fixes #17096.
|
||||
* Show error when searching public rooms fails ([\#11378](https://github.com/matrix-org/matrix-react-sdk/pull/11378)).
|
||||
|
||||
Changes in [1.11.39](https://github.com/vector-im/element-web/releases/tag/v1.11.39) (2023-08-15)
|
||||
=================================================================================================
|
||||
|
||||
## 🦖 Deprecations
|
||||
* Deprecate camelCase config options ([\#25800](https://github.com/vector-im/element-web/pull/25800)).
|
||||
* Deprecate customisations in favour of Module API ([\#25736](https://github.com/vector-im/element-web/pull/25736)). Fixes #25733.
|
||||
|
||||
## ✨ Features
|
||||
* Update labs.md for knock rooms ([\#25923](https://github.com/vector-im/element-web/pull/25923)). Contributed by @charlynguyen.
|
||||
* Package release builds of element-web in package.element.io debs ([\#25198](https://github.com/vector-im/element-web/pull/25198)).
|
||||
* Allow knocking rooms ([\#11353](https://github.com/matrix-org/matrix-react-sdk/pull/11353)). Contributed by @charlynguyen.
|
||||
* Support adding space-restricted joins on rooms not members of those spaces ([\#9017](https://github.com/matrix-org/matrix-react-sdk/pull/9017)). Fixes #19213.
|
||||
* Clear requiresClient and show pop-out if widget-api fails to ready ([\#11321](https://github.com/matrix-org/matrix-react-sdk/pull/11321)). Fixes vector-im/customer-retainer#73.
|
||||
* Bump pagination sizes due to hidden events ([\#11342](https://github.com/matrix-org/matrix-react-sdk/pull/11342)).
|
||||
* Remove display of key backup signatures from backup settings ([\#11333](https://github.com/matrix-org/matrix-react-sdk/pull/11333)).
|
||||
* Use PassphraseFields in ExportE2eKeysDialog to enforce minimum passphrase complexity ([\#11222](https://github.com/matrix-org/matrix-react-sdk/pull/11222)). Fixes #9478.
|
||||
|
||||
## 🐛 Bug Fixes
|
||||
* Fix "Export chat" not respecting configured time format in plain text mode ([\#10696](https://github.com/matrix-org/matrix-react-sdk/pull/10696)). Fixes #23838. Contributed by @rashmitpankhania.
|
||||
* Fix some missing 1-count pluralisations around event list summaries ([\#11371](https://github.com/matrix-org/matrix-react-sdk/pull/11371)). Fixes #25925.
|
||||
* Fix create subspace dialog not working for public space creation ([\#11367](https://github.com/matrix-org/matrix-react-sdk/pull/11367)). Fixes #25916.
|
||||
* Search for users on paste ([\#11304](https://github.com/matrix-org/matrix-react-sdk/pull/11304)). Fixes #17523. Contributed by @peterscheu-aceart.
|
||||
* Fix AppTile context menu not always showing up when it has options ([\#11358](https://github.com/matrix-org/matrix-react-sdk/pull/11358)). Fixes #25914.
|
||||
* Fix clicking on home all rooms space notification not working ([\#11337](https://github.com/matrix-org/matrix-react-sdk/pull/11337)). Fixes #22844.
|
||||
* Fix joining a suggested room switching space away ([\#11347](https://github.com/matrix-org/matrix-react-sdk/pull/11347)). Fixes #25838.
|
||||
* Fix home/all rooms context menu in space panel ([\#11350](https://github.com/matrix-org/matrix-react-sdk/pull/11350)). Fixes #25896.
|
||||
* Make keyboard handling in and out of autocomplete completions consistent ([\#11344](https://github.com/matrix-org/matrix-react-sdk/pull/11344)). Fixes #25878.
|
||||
* De-duplicate reactions by sender to account for faulty/malicious servers ([\#11340](https://github.com/matrix-org/matrix-react-sdk/pull/11340)). Fixes #25872.
|
||||
* Fix disable_3pid_login being ignored for the email field ([\#11335](https://github.com/matrix-org/matrix-react-sdk/pull/11335)). Fixes #25863.
|
||||
* Upgrade wysiwyg editor for ctrl+backspace windows fix ([\#11324](https://github.com/matrix-org/matrix-react-sdk/pull/11324)). Fixes vector-im/verticals-internal#102.
|
||||
* Unhide the view source event toggle - it works well enough ([\#11336](https://github.com/matrix-org/matrix-react-sdk/pull/11336)). Fixes #25861.
|
||||
|
||||
Changes in [1.11.38](https://github.com/vector-im/element-web/releases/tag/v1.11.38) (2023-08-04)
|
||||
=================================================================================================
|
||||
|
||||
## ✨ Features
|
||||
* Package release builds of element-web in package.element.io debs ([\#25198](https://github.com/vector-im/element-web/pull/25198)).
|
||||
|
||||
## 🐛 Bug Fixes
|
||||
* Revert to using the /presence API for presence ([\#11366](https://github.com/matrix-org/matrix-react-sdk/pull/11366))
|
||||
|
||||
Changes in [1.11.37](https://github.com/vector-im/element-web/releases/tag/v1.11.37) (2023-08-01)
|
||||
=================================================================================================
|
||||
|
||||
## 🦖 Deprecations
|
||||
* Deprecate camelCase config options ([\#25800](https://github.com/vector-im/element-web/pull/25800)).
|
||||
* Deprecate customisations in favour of Module API ([\#25736](https://github.com/vector-im/element-web/pull/25736)). Fixes #25733.
|
||||
|
||||
## ✨ Features
|
||||
* Do not show "Forget room" button in Room View header for guest users ([\#10898](https://github.com/matrix-org/matrix-react-sdk/pull/10898)). Contributed by @spantaleev.
|
||||
* Switch to updating presence via /sync calls instead of PUT /presence ([\#11223](https://github.com/matrix-org/matrix-react-sdk/pull/11223)). Fixes #20809 #13877 and #4813.
|
||||
* Fix blockquote colour contrast ([\#11299](https://github.com/matrix-org/matrix-react-sdk/pull/11299)). Fixes matrix-org/element-web-rageshakes#21800.
|
||||
* Don't hide room header buttons in video rooms and rooms with a call ([\#9712](https://github.com/matrix-org/matrix-react-sdk/pull/9712)). Fixes #23900.
|
||||
* OIDC: Persist details in session storage, create store ([\#11302](https://github.com/matrix-org/matrix-react-sdk/pull/11302)). Fixes #25710. Contributed by @kerryarchibald.
|
||||
* Allow setting room join rule to knock ([\#11248](https://github.com/matrix-org/matrix-react-sdk/pull/11248)). Contributed by @charlynguyen.
|
||||
* Retry joins on 524 (Cloudflare timeout) also ([\#11296](https://github.com/matrix-org/matrix-react-sdk/pull/11296)). Fixes #8776.
|
||||
* Make sure users returned by the homeserver search API are displayed. Don't silently drop any. ([\#9556](https://github.com/matrix-org/matrix-react-sdk/pull/9556)). Fixes #24422. Contributed by @maxmalek.
|
||||
* Offer to unban user during invite if inviter has sufficient permissions ([\#11256](https://github.com/matrix-org/matrix-react-sdk/pull/11256)). Fixes #3222.
|
||||
* Split join and goto slash commands, the latter shouldn't auto_join ([\#11259](https://github.com/matrix-org/matrix-react-sdk/pull/11259)). Fixes #10128.
|
||||
* Integration work for rich text editor 2.3.1 ([\#11172](https://github.com/matrix-org/matrix-react-sdk/pull/11172)). Contributed by @alunturner.
|
||||
* Compound color pass ([\#11079](https://github.com/matrix-org/matrix-react-sdk/pull/11079)). Fixes vector-im/internal-planning#450 and #25547.
|
||||
* Warn when demoting self via /op and /deop slash commands ([\#11214](https://github.com/matrix-org/matrix-react-sdk/pull/11214)). Fixes #13726.
|
||||
|
||||
## 🐛 Bug Fixes
|
||||
* Correct Jitsi preferred_domain property ([\#25813](https://github.com/vector-im/element-web/pull/25813)). Contributed by @benbz.
|
||||
* Fix edge case with sent indicator being drawn when it shouldn't be ([\#11320](https://github.com/matrix-org/matrix-react-sdk/pull/11320)).
|
||||
* Use correct translation function for WYSIWYG buttons ([\#11315](https://github.com/matrix-org/matrix-react-sdk/pull/11315)). Fixes vector-im/verticals-internal#109.
|
||||
* Handle empty own profile ([\#11319](https://github.com/matrix-org/matrix-react-sdk/pull/11319)). Fixes #25510.
|
||||
* Fix peeked rooms showing up in historical ([\#11316](https://github.com/matrix-org/matrix-react-sdk/pull/11316)). Fixes #22473.
|
||||
* Ensure consistency when rendering the sent event indicator ([\#11314](https://github.com/matrix-org/matrix-react-sdk/pull/11314)). Fixes #17937.
|
||||
* Prevent re-filtering user directory results in spotlight ([\#11290](https://github.com/matrix-org/matrix-react-sdk/pull/11290)). Fixes #24422.
|
||||
* Fix GIF label on dark theme ([\#11312](https://github.com/matrix-org/matrix-react-sdk/pull/11312)). Fixes #25836.
|
||||
* Fix issues around room notification settings flaking out ([\#11306](https://github.com/matrix-org/matrix-react-sdk/pull/11306)). Fixes #16472 #21309 and #6828.
|
||||
* Fix invite dialog showing the same user multiple times ([\#11308](https://github.com/matrix-org/matrix-react-sdk/pull/11308)). Fixes #25578.
|
||||
* Don't show composer send button if user cannot send ([\#11298](https://github.com/matrix-org/matrix-react-sdk/pull/11298)). Fixes #25825.
|
||||
* Restore color for sender in imageview ([\#11289](https://github.com/matrix-org/matrix-react-sdk/pull/11289)). Fixes #25822.
|
||||
* Fix changelog dialog heading size ([\#11286](https://github.com/matrix-org/matrix-react-sdk/pull/11286)). Fixes #25789.
|
||||
* Restore offline presence badge color ([\#11287](https://github.com/matrix-org/matrix-react-sdk/pull/11287)). Fixes #25792.
|
||||
* Fix bubble message layout avatar overlap ([\#11284](https://github.com/matrix-org/matrix-react-sdk/pull/11284)). Fixes #25818.
|
||||
* Fix voice call tile size ([\#11285](https://github.com/matrix-org/matrix-react-sdk/pull/11285)). Fixes #25684.
|
||||
* Fix layout of sessions tab buttons ([\#11279](https://github.com/matrix-org/matrix-react-sdk/pull/11279)). Fixes #25545.
|
||||
* Don't bother showing redundant tooltip on space menu ([\#11276](https://github.com/matrix-org/matrix-react-sdk/pull/11276)). Fixes #20380.
|
||||
* Remove reply fallback from notifications ([\#11278](https://github.com/matrix-org/matrix-react-sdk/pull/11278)). Fixes #17859.
|
||||
* Populate info.duration for audio & video file uploads ([\#11225](https://github.com/matrix-org/matrix-react-sdk/pull/11225)). Fixes #17720.
|
||||
* Hide widget menu button if it there are no options available ([\#11257](https://github.com/matrix-org/matrix-react-sdk/pull/11257)). Fixes #24826.
|
||||
* Fix colour regressions ([\#11273](https://github.com/matrix-org/matrix-react-sdk/pull/11273)). Fixes #25788, #25808 #25811 and #25812.
|
||||
* Fix room view not properly maintaining scroll position ([\#11274](https://github.com/matrix-org/matrix-react-sdk/pull/11274)). Fixes #25810.
|
||||
* Prevent user from accidentally double clicking user info admin actions ([\#11254](https://github.com/matrix-org/matrix-react-sdk/pull/11254)). Fixes #10944.
|
||||
* Fix missing metaspace notification badges ([\#11269](https://github.com/matrix-org/matrix-react-sdk/pull/11269)). Fixes #25679.
|
||||
* Fix clicking MXID in timeline going to matrix.to ([\#11263](https://github.com/matrix-org/matrix-react-sdk/pull/11263)). Fixes #23342.
|
||||
* Restoring optional ligatures by resetting letter-spacing ([\#11202](https://github.com/matrix-org/matrix-react-sdk/pull/11202)). Fixes #25727.
|
||||
* Allow emoji presentation selector to not break BigEmoji styling ([\#11253](https://github.com/matrix-org/matrix-react-sdk/pull/11253)). Fixes #17848.
|
||||
* Make event highliht use primary content token ([\#11255](https://github.com/matrix-org/matrix-react-sdk/pull/11255)).
|
||||
* Fix event info events size and color ([\#11252](https://github.com/matrix-org/matrix-react-sdk/pull/11252)). Fixes #25778.
|
||||
* Fix color mapping for blockquote border ([\#11251](https://github.com/matrix-org/matrix-react-sdk/pull/11251)). Fixes #25782.
|
||||
* Strip emoji variation when searching emoji by emoji ([\#11221](https://github.com/matrix-org/matrix-react-sdk/pull/11221)). Fixes #18703.
|
||||
|
||||
Changes in [1.11.36](https://github.com/vector-im/element-web/releases/tag/v1.11.36) (2023-07-18)
|
||||
=================================================================================================
|
||||
|
||||
## 🔒 Security
|
||||
* Fixes for [CVE-2023-37259](https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=CVE-2023-37259) / [GHSA-c9vx-2g7w-rp65](https://github.com/matrix-org/matrix-react-sdk/security/advisories/GHSA-c9vx-2g7w-rp65)
|
||||
|
||||
## 🦖 Deprecations
|
||||
* Deprecate customisations in favour of Module API ([\#25736](https://github.com/vector-im/element-web/pull/25736)). Fixes #25733.
|
||||
|
||||
## ✨ Features
|
||||
* OIDC: store initial screen in session storage ([\#25688](https://github.com/vector-im/element-web/pull/25688)). Fixes #25656. Contributed by @kerryarchibald.
|
||||
* Allow default_server_config as a fallback config ([\#25682](https://github.com/vector-im/element-web/pull/25682)). Contributed by @ShadowRZ.
|
||||
* OIDC: remove auth params from url after login attempt ([\#25664](https://github.com/vector-im/element-web/pull/25664)). Contributed by @kerryarchibald.
|
||||
* feat(faq): remove keyboard shortcuts button ([\#9342](https://github.com/matrix-org/matrix-react-sdk/pull/9342)). Fixes #22625. Contributed by @gefgu.
|
||||
* GYU: Update banner ([\#11211](https://github.com/matrix-org/matrix-react-sdk/pull/11211)). Fixes #25530. Contributed by @justjanne.
|
||||
* Linkify mxc:// URLs as links to your media repo ([\#11213](https://github.com/matrix-org/matrix-react-sdk/pull/11213)). Fixes #6942.
|
||||
* OIDC: Log in ([\#11199](https://github.com/matrix-org/matrix-react-sdk/pull/11199)). Fixes #25657. Contributed by @kerryarchibald.
|
||||
* Handle all permitted url schemes in linkify ([\#11215](https://github.com/matrix-org/matrix-react-sdk/pull/11215)). Fixes #4457 and #8720.
|
||||
* Autoapprove Element Call oidc requests ([\#11209](https://github.com/matrix-org/matrix-react-sdk/pull/11209)). Contributed by @toger5.
|
||||
* Allow creating knock rooms ([\#11182](https://github.com/matrix-org/matrix-react-sdk/pull/11182)). Contributed by @charlynguyen.
|
||||
* Expose and pre-populate thread ID in devtools dialog ([\#10953](https://github.com/matrix-org/matrix-react-sdk/pull/10953)).
|
||||
* Hide URL preview if it will be empty ([\#9029](https://github.com/matrix-org/matrix-react-sdk/pull/9029)).
|
||||
* Change wording from avatar to profile picture ([\#7015](https://github.com/matrix-org/matrix-react-sdk/pull/7015)). Fixes vector-im/element-meta#1331. Contributed by @aaronraimist.
|
||||
* Quick and dirty devtool to explore state history ([\#11197](https://github.com/matrix-org/matrix-react-sdk/pull/11197)).
|
||||
* Consider more user inputs when calculating zxcvbn score ([\#11180](https://github.com/matrix-org/matrix-react-sdk/pull/11180)).
|
||||
* GYU: Account Notification Settings ([\#11008](https://github.com/matrix-org/matrix-react-sdk/pull/11008)). Fixes #24567. Contributed by @justjanne.
|
||||
* Compound Typography pass ([\#11103](https://github.com/matrix-org/matrix-react-sdk/pull/11103)). Fixes #25548.
|
||||
* OIDC: navigate to authorization endpoint ([\#11096](https://github.com/matrix-org/matrix-react-sdk/pull/11096)). Fixes #25574. Contributed by @kerryarchibald.
|
||||
|
||||
## 🐛 Bug Fixes
|
||||
* Fix read receipt sending behaviour around thread roots ([\#3600](https://github.com/matrix-org/matrix-js-sdk/pull/3600)).
|
||||
* Fix missing metaspace notification badges ([\#11269](https://github.com/matrix-org/matrix-react-sdk/pull/11269)). Fixes #25679.
|
||||
* Make checkboxes less rounded ([\#11224](https://github.com/matrix-org/matrix-react-sdk/pull/11224)). Contributed by @andybalaam.
|
||||
* GYU: Fix issues with audible keywords without activated mentions ([\#11218](https://github.com/matrix-org/matrix-react-sdk/pull/11218)). Contributed by @justjanne.
|
||||
* PosthogAnalytics unwatch settings on logout ([\#11207](https://github.com/matrix-org/matrix-react-sdk/pull/11207)). Fixes #25703.
|
||||
* Avoid trying to set room account data for pinned events as guest ([\#11216](https://github.com/matrix-org/matrix-react-sdk/pull/11216)). Fixes #6300.
|
||||
* GYU: Disable sound for DMs checkbox when DM notifications are disabled ([\#11210](https://github.com/matrix-org/matrix-react-sdk/pull/11210)). Contributed by @justjanne.
|
||||
* force to allow calls without video and audio in embedded mode ([\#11131](https://github.com/matrix-org/matrix-react-sdk/pull/11131)). Contributed by @EnricoSchw.
|
||||
* Fix room tile text clipping ([\#11196](https://github.com/matrix-org/matrix-react-sdk/pull/11196)). Fixes #25718.
|
||||
* Handle newlines in user pills ([\#11166](https://github.com/matrix-org/matrix-react-sdk/pull/11166)). Fixes #10994.
|
||||
* Limit width of user menu in space panel ([\#11192](https://github.com/matrix-org/matrix-react-sdk/pull/11192)). Fixes #22627.
|
||||
* Add isLocation to ComposerEvent analytics events ([\#11187](https://github.com/matrix-org/matrix-react-sdk/pull/11187)). Contributed by @andybalaam.
|
||||
* Fix: hide unsupported login elements ([\#11185](https://github.com/matrix-org/matrix-react-sdk/pull/11185)). Fixes #25711. Contributed by @kerryarchibald.
|
||||
* Scope smaller font size to user info panel ([\#11178](https://github.com/matrix-org/matrix-react-sdk/pull/11178)). Fixes #25683.
|
||||
* Apply i18n to strings in the html export ([\#11176](https://github.com/matrix-org/matrix-react-sdk/pull/11176)).
|
||||
* Inhibit url previews on MXIDs containing slashes same as those without ([\#11160](https://github.com/matrix-org/matrix-react-sdk/pull/11160)).
|
||||
* Make event info size consistent with state events ([\#11181](https://github.com/matrix-org/matrix-react-sdk/pull/11181)).
|
||||
* Fix markdown content spacing ([\#11177](https://github.com/matrix-org/matrix-react-sdk/pull/11177)). Fixes #25685.
|
||||
* Fix font-family definition for emojis ([\#11170](https://github.com/matrix-org/matrix-react-sdk/pull/11170)). Fixes #25686.
|
||||
* Fix spurious error sending receipt in thread errors ([\#11157](https://github.com/matrix-org/matrix-react-sdk/pull/11157)).
|
||||
* Consider the empty push rule actions array equiv to deprecated dont_notify ([\#11155](https://github.com/matrix-org/matrix-react-sdk/pull/11155)). Fixes #25674.
|
||||
* Only trap escape key for cancel reply if there is a reply ([\#11140](https://github.com/matrix-org/matrix-react-sdk/pull/11140)). Fixes #25640.
|
||||
* Update linkify to 4.1.1 ([\#11132](https://github.com/matrix-org/matrix-react-sdk/pull/11132)). Fixes #23806.
|
||||
|
||||
Changes in [1.11.35](https://github.com/vector-im/element-web/releases/tag/v1.11.35) (2023-07-04)
|
||||
=================================================================================================
|
||||
|
||||
## 🦖 Deprecations
|
||||
* Remove `feature_favourite_messages` as it is has been abandoned for now ([\#11097](https://github.com/matrix-org/matrix-react-sdk/pull/11097)). Fixes #25555.
|
||||
|
||||
## ✨ Features
|
||||
* Don't setup keys on login when encryption is force disabled ([\#11125](https://github.com/matrix-org/matrix-react-sdk/pull/11125)). Contributed by @kerryarchibald.
|
||||
* OIDC: attempt dynamic client registration ([\#11074](https://github.com/matrix-org/matrix-react-sdk/pull/11074)). Fixes #25468 and #25467. Contributed by @kerryarchibald.
|
||||
* OIDC: Check static client registration and add login flow ([\#11088](https://github.com/matrix-org/matrix-react-sdk/pull/11088)). Fixes #25467. Contributed by @kerryarchibald.
|
||||
* Improve message body output from plain text editor ([\#11124](https://github.com/matrix-org/matrix-react-sdk/pull/11124)). Contributed by @alunturner.
|
||||
* Disable encryption toggle in room settings when force disabled ([\#11122](https://github.com/matrix-org/matrix-react-sdk/pull/11122)). Contributed by @kerryarchibald.
|
||||
* Add .well-known config option to force disable encryption on room creation ([\#11120](https://github.com/matrix-org/matrix-react-sdk/pull/11120)). Contributed by @kerryarchibald.
|
||||
* Handle permalinks in room topic ([\#11115](https://github.com/matrix-org/matrix-react-sdk/pull/11115)). Fixes #23395.
|
||||
* Add at room avatar for RTE ([\#11106](https://github.com/matrix-org/matrix-react-sdk/pull/11106)). Contributed by @alunturner.
|
||||
* Remove new room breadcrumbs ([\#11104](https://github.com/matrix-org/matrix-react-sdk/pull/11104)).
|
||||
* Update rich text editor dependency and associated changes ([\#11098](https://github.com/matrix-org/matrix-react-sdk/pull/11098)). Contributed by @alunturner.
|
||||
* Implement new model, hooks and reconcilation code for new GYU notification settings ([\#11089](https://github.com/matrix-org/matrix-react-sdk/pull/11089)). Contributed by @justjanne.
|
||||
* Allow maintaining a different right panel width for thread panels ([\#11064](https://github.com/matrix-org/matrix-react-sdk/pull/11064)). Fixes #25487.
|
||||
* Make AppPermission pane scrollable ([\#10954](https://github.com/matrix-org/matrix-react-sdk/pull/10954)). Fixes #25438 and #25511. Contributed by @luixxiul.
|
||||
* Integrate compound design tokens ([\#11091](https://github.com/matrix-org/matrix-react-sdk/pull/11091)). Fixes vector-im/internal-planning#450.
|
||||
* Don't warn about the effects of redacting state events when redacting non-state-events ([\#11071](https://github.com/matrix-org/matrix-react-sdk/pull/11071)). Fixes #8478.
|
||||
* Allow specifying help URLs in config.json ([\#11070](https://github.com/matrix-org/matrix-react-sdk/pull/11070)). Fixes #15268.
|
||||
|
||||
## 🐛 Bug Fixes
|
||||
* Fix error when generating error for polling for updates ([\#25609](https://github.com/vector-im/element-web/pull/25609)).
|
||||
* Fix spurious notifications on non-live events ([\#11133](https://github.com/matrix-org/matrix-react-sdk/pull/11133)). Fixes #24336.
|
||||
* Prevent auto-translation within composer ([\#11114](https://github.com/matrix-org/matrix-react-sdk/pull/11114)). Fixes #25624.
|
||||
* Fix caret jump when backspacing into empty line at beginning of editor ([\#11128](https://github.com/matrix-org/matrix-react-sdk/pull/11128)). Fixes #22335.
|
||||
* Fix server picker not allowing you to switch from custom to default ([\#11127](https://github.com/matrix-org/matrix-react-sdk/pull/11127)). Fixes #25650.
|
||||
* Consider the unthreaded read receipt for Unread dot state ([\#11117](https://github.com/matrix-org/matrix-react-sdk/pull/11117)). Fixes #24229.
|
||||
* Increase RTE resilience ([\#11111](https://github.com/matrix-org/matrix-react-sdk/pull/11111)). Fixes #25277. Contributed by @alunturner.
|
||||
* Fix RoomView ignoring alias lookup errors due to them not knowing the roomId ([\#11099](https://github.com/matrix-org/matrix-react-sdk/pull/11099)). Fixes #24783 and #25562.
|
||||
* Fix style inconsistencies on SecureBackupPanel ([\#11102](https://github.com/matrix-org/matrix-react-sdk/pull/11102)). Fixes #25615. Contributed by @luixxiul.
|
||||
* Remove unknown MXIDs from invite suggestions ([\#11055](https://github.com/matrix-org/matrix-react-sdk/pull/11055)). Fixes #25446.
|
||||
* Reduce volume of ring sounds to normalised levels ([\#9143](https://github.com/matrix-org/matrix-react-sdk/pull/9143)). Contributed by @JMoVS.
|
||||
* Fix slash commands not being enabled in certain cases ([\#11090](https://github.com/matrix-org/matrix-react-sdk/pull/11090)). Fixes #25572.
|
||||
* Prevent escape in threads from sending focus to main timeline composer ([\#11061](https://github.com/matrix-org/matrix-react-sdk/pull/11061)). Fixes #23397.
|
||||
|
||||
Changes in [1.11.34](https://github.com/vector-im/element-web/releases/tag/v1.11.34) (2023-06-20)
|
||||
=================================================================================================
|
||||
|
||||
## ✨ Features
|
||||
* OIDC: add delegatedauthentication to validated server config ([\#11053](https://github.com/matrix-org/matrix-react-sdk/pull/11053)). Contributed by @kerryarchibald.
|
||||
* Allow image pasting in plain mode in RTE ([\#11056](https://github.com/matrix-org/matrix-react-sdk/pull/11056)). Contributed by @alunturner.
|
||||
* Show room options menu if "UIComponent.roomOptionsMenu" is enabled ([\#10365](https://github.com/matrix-org/matrix-react-sdk/pull/10365)). Contributed by @maheichyk.
|
||||
* Allow image pasting in rich text mode in RTE ([\#11049](https://github.com/matrix-org/matrix-react-sdk/pull/11049)). Contributed by @alunturner.
|
||||
* Update voice broadcast redaction to use MSC3912 `with_rel_type` instead of `with_relations` ([\#11014](https://github.com/matrix-org/matrix-react-sdk/pull/11014)). Fixes #25471.
|
||||
* Add config to skip widget_build_url for DM rooms ([\#11044](https://github.com/matrix-org/matrix-react-sdk/pull/11044)). Fixes vector-im/customer-retainer#74.
|
||||
* Inhibit interactions on forward dialog message previews ([\#11025](https://github.com/matrix-org/matrix-react-sdk/pull/11025)). Fixes #23459.
|
||||
* Removed `DecryptionFailureBar.tsx` ([\#11027](https://github.com/matrix-org/matrix-react-sdk/pull/11027)). Fixes vector-im/element-meta#1358. Contributed by @florianduros.
|
||||
|
||||
## 🐛 Bug Fixes
|
||||
* Fix translucent `TextualEvent` on search results panel ([\#10810](https://github.com/matrix-org/matrix-react-sdk/pull/10810)). Fixes #25292. Contributed by @luixxiul.
|
||||
* Matrix matrix scheme permalink constructor not stripping query params ([\#11060](https://github.com/matrix-org/matrix-react-sdk/pull/11060)). Fixes #25535.
|
||||
* Fix: "manually verify by text" does nothing ([\#11059](https://github.com/matrix-org/matrix-react-sdk/pull/11059)). Fixes #25375. Contributed by @kerryarchibald.
|
||||
* Make group calls respect the ICE fallback setting ([\#11047](https://github.com/matrix-org/matrix-react-sdk/pull/11047)). Fixes vector-im/voip-internal#65.
|
||||
* Align list items on the tooltip to the start ([\#11041](https://github.com/matrix-org/matrix-react-sdk/pull/11041)). Fixes #25355. Contributed by @luixxiul.
|
||||
* Clear thread panel event permalink when changing rooms ([\#11024](https://github.com/matrix-org/matrix-react-sdk/pull/11024)). Fixes #25484.
|
||||
* Fix spinner placement on pinned widgets being reloaded ([\#10970](https://github.com/matrix-org/matrix-react-sdk/pull/10970)). Fixes #25431. Contributed by @luixxiul.
|
||||
|
||||
Changes in [1.11.33](https://github.com/vector-im/element-web/releases/tag/v1.11.33) (2023-06-09)
|
||||
=================================================================================================
|
||||
|
||||
## 🐛 Bug Fixes
|
||||
* Bump matrix-react-sdk to v3.73.1 for matrix-js-sdk v26.0.1. Fixes #25526.
|
||||
|
||||
Changes in [1.11.32](https://github.com/vector-im/element-web/releases/tag/v1.11.32) (2023-06-06)
|
||||
=================================================================================================
|
||||
|
||||
## ✨ Features
|
||||
* Redirect to the SSO page if `sso_redirect_options.on_welcome_page` is enabled and the URL hash is empty ([\#25495](https://github.com/vector-im/element-web/pull/25495)). Contributed by @dhenneke.
|
||||
* vector/index.html: Allow fetching blob urls ([\#25336](https://github.com/vector-im/element-web/pull/25336)). Contributed by @SuperKenVery.
|
||||
* When joining room in sub-space join the parents too ([\#11011](https://github.com/matrix-org/matrix-react-sdk/pull/11011)).
|
||||
* Include thread replies in message previews ([\#10631](https://github.com/matrix-org/matrix-react-sdk/pull/10631)). Fixes #23920.
|
||||
* Use semantic headings in space preferences ([\#11021](https://github.com/matrix-org/matrix-react-sdk/pull/11021)). Contributed by @kerryarchibald.
|
||||
* Use semantic headings in user settings - Ignored users ([\#11006](https://github.com/matrix-org/matrix-react-sdk/pull/11006)). Contributed by @kerryarchibald.
|
||||
* Use semantic headings in user settings - profile ([\#10973](https://github.com/matrix-org/matrix-react-sdk/pull/10973)). Fixes #25461. Contributed by @kerryarchibald.
|
||||
* Use semantic headings in user settings - account ([\#10972](https://github.com/matrix-org/matrix-react-sdk/pull/10972)). Contributed by @kerryarchibald.
|
||||
* Support `Insert from iPhone or iPad` in Safari ([\#10851](https://github.com/matrix-org/matrix-react-sdk/pull/10851)). Fixes #25327. Contributed by @SuperKenVery.
|
||||
* Specify supportedStages for User Interactive Auth ([\#10975](https://github.com/matrix-org/matrix-react-sdk/pull/10975)). Fixes #19605.
|
||||
* Pass device id to widgets ([\#10209](https://github.com/matrix-org/matrix-react-sdk/pull/10209)). Contributed by @Fox32.
|
||||
* Use semantic headings in user settings - discovery ([\#10838](https://github.com/matrix-org/matrix-react-sdk/pull/10838)). Contributed by @kerryarchibald.
|
||||
* Use semantic headings in user settings - Notifications ([\#10948](https://github.com/matrix-org/matrix-react-sdk/pull/10948)). Contributed by @kerryarchibald.
|
||||
* Use semantic headings in user settings - spellcheck and language ([\#10959](https://github.com/matrix-org/matrix-react-sdk/pull/10959)). Contributed by @kerryarchibald.
|
||||
* Use semantic headings in user settings Appearance ([\#10827](https://github.com/matrix-org/matrix-react-sdk/pull/10827)). Contributed by @kerryarchibald.
|
||||
* Use semantic heading in user settings Sidebar & Voip ([\#10782](https://github.com/matrix-org/matrix-react-sdk/pull/10782)). Contributed by @kerryarchibald.
|
||||
* Use semantic headings in user settings Security ([\#10774](https://github.com/matrix-org/matrix-react-sdk/pull/10774)). Contributed by @kerryarchibald.
|
||||
* Use semantic headings in user settings - integrations and account deletion ([\#10837](https://github.com/matrix-org/matrix-react-sdk/pull/10837)). Fixes #25378. Contributed by @kerryarchibald.
|
||||
* Use semantic headings in user settings Preferences ([\#10794](https://github.com/matrix-org/matrix-react-sdk/pull/10794)). Contributed by @kerryarchibald.
|
||||
* Use semantic headings in user settings Keyboard ([\#10793](https://github.com/matrix-org/matrix-react-sdk/pull/10793)). Contributed by @kerryarchibald.
|
||||
* RTE plain text mentions as pills ([\#10852](https://github.com/matrix-org/matrix-react-sdk/pull/10852)). Contributed by @alunturner.
|
||||
* Allow welcome.html logo to be replaced by config ([\#25339](https://github.com/vector-im/element-web/pull/25339)). Fixes #8636.
|
||||
* Use semantic headings in user settings Labs ([\#10773](https://github.com/matrix-org/matrix-react-sdk/pull/10773)). Contributed by @kerryarchibald.
|
||||
* Use semantic list elements for menu lists and tab lists ([\#10902](https://github.com/matrix-org/matrix-react-sdk/pull/10902)). Fixes #24928.
|
||||
* Fix aria-required-children axe violation ([\#10900](https://github.com/matrix-org/matrix-react-sdk/pull/10900)). Fixes #25342.
|
||||
* Enable pagination for overlay timelines ([\#10757](https://github.com/matrix-org/matrix-react-sdk/pull/10757)). Fixes vector-im/voip-internal#107.
|
||||
* Add tooltip to disabled invite button due to lack of permissions ([\#10869](https://github.com/matrix-org/matrix-react-sdk/pull/10869)). Fixes #9824.
|
||||
* Respect configured auth_header_logo_url for default Welcome page ([\#10870](https://github.com/matrix-org/matrix-react-sdk/pull/10870)).
|
||||
* Specify lazy loading for avatars ([\#10866](https://github.com/matrix-org/matrix-react-sdk/pull/10866)). Fixes #1983.
|
||||
* Room and user mentions for plain text editor ([\#10665](https://github.com/matrix-org/matrix-react-sdk/pull/10665)). Contributed by @alunturner.
|
||||
* Add audible notifcation on broadcast error ([\#10654](https://github.com/matrix-org/matrix-react-sdk/pull/10654)). Fixes #25132.
|
||||
* Fall back from server generated thumbnail to original image ([\#10853](https://github.com/matrix-org/matrix-react-sdk/pull/10853)).
|
||||
* Use semantically correct elements for room sublist context menu ([\#10831](https://github.com/matrix-org/matrix-react-sdk/pull/10831)). Fixes vector-im/customer-retainer#46.
|
||||
* Avoid calling prepareToEncrypt onKeyDown ([\#10828](https://github.com/matrix-org/matrix-react-sdk/pull/10828)).
|
||||
* Allows search to recognize full room links ([\#8275](https://github.com/matrix-org/matrix-react-sdk/pull/8275)). Contributed by @bolu-tife.
|
||||
* "Show rooms with unread messages first" should not be on by default for new users ([\#10820](https://github.com/matrix-org/matrix-react-sdk/pull/10820)). Fixes #25304. Contributed by @kerryarchibald.
|
||||
* Fix emitter handler leak in ThreadView ([\#10803](https://github.com/matrix-org/matrix-react-sdk/pull/10803)).
|
||||
* Add better error for email invites without identity server ([\#10739](https://github.com/matrix-org/matrix-react-sdk/pull/10739)). Fixes #16893.
|
||||
* Move reaction message previews out of labs ([\#10601](https://github.com/matrix-org/matrix-react-sdk/pull/10601)). Fixes #25083.
|
||||
* Sort muted rooms to the bottom of their section of the room list ([\#10592](https://github.com/matrix-org/matrix-react-sdk/pull/10592)). Fixes #25131. Contributed by @kerryarchibald.
|
||||
* Use semantic headings in user settings Help & About ([\#10752](https://github.com/matrix-org/matrix-react-sdk/pull/10752)). Contributed by @kerryarchibald.
|
||||
* use ExternalLink components for external links ([\#10758](https://github.com/matrix-org/matrix-react-sdk/pull/10758)). Contributed by @kerryarchibald.
|
||||
* Use semantic headings in space settings ([\#10751](https://github.com/matrix-org/matrix-react-sdk/pull/10751)). Contributed by @kerryarchibald.
|
||||
* Use semantic headings for room settings content ([\#10734](https://github.com/matrix-org/matrix-react-sdk/pull/10734)). Contributed by @kerryarchibald.
|
||||
|
||||
## 🐛 Bug Fixes
|
||||
* Use consistent fonts for Japanese text ([\#10980](https://github.com/matrix-org/matrix-react-sdk/pull/10980)). Fixes #22333 and #23899.
|
||||
* Fix: server picker validates unselected option ([\#11020](https://github.com/matrix-org/matrix-react-sdk/pull/11020)). Fixes #25488. Contributed by @kerryarchibald.
|
||||
* Fix room list notification badges going missing in compact layout ([\#11022](https://github.com/matrix-org/matrix-react-sdk/pull/11022)). Fixes #25372.
|
||||
* Fix call to `startSingleSignOn` passing enum in place of idpId ([\#10998](https://github.com/matrix-org/matrix-react-sdk/pull/10998)). Fixes #24953.
|
||||
* Remove hover effect from user name on a DM creation UI ([\#10887](https://github.com/matrix-org/matrix-react-sdk/pull/10887)). Fixes #25305. Contributed by @luixxiul.
|
||||
* Fix layout regression in public space invite dialog ([\#11009](https://github.com/matrix-org/matrix-react-sdk/pull/11009)). Fixes #25458.
|
||||
* Fix layout regression in session dropdown ([\#10999](https://github.com/matrix-org/matrix-react-sdk/pull/10999)). Fixes #25448.
|
||||
* Fix spacing regression in user settings - roles & permissions ([\#10993](https://github.com/matrix-org/matrix-react-sdk/pull/10993)). Fixes #25447 and #25451. Contributed by @kerryarchibald.
|
||||
* Fall back to receipt timestamp if we have no event (react-sdk part) ([\#10974](https://github.com/matrix-org/matrix-react-sdk/pull/10974)). Fixes #10954. Contributed by @andybalaam.
|
||||
* Fix: Room header 'view your device list' does not link to new session manager ([\#10979](https://github.com/matrix-org/matrix-react-sdk/pull/10979)). Fixes #25440. Contributed by @kerryarchibald.
|
||||
* Fix display of devices without encryption support in Settings dialog ([\#10977](https://github.com/matrix-org/matrix-react-sdk/pull/10977)). Fixes #25413.
|
||||
* Use aria descriptions instead of labels for TextWithTooltip ([\#10952](https://github.com/matrix-org/matrix-react-sdk/pull/10952)). Fixes #25398.
|
||||
* Use grapheme-splitter instead of lodash for saving emoji from being ripped apart ([\#10976](https://github.com/matrix-org/matrix-react-sdk/pull/10976)). Fixes #22196.
|
||||
* Fix: content overflow in settings subsection ([\#10960](https://github.com/matrix-org/matrix-react-sdk/pull/10960)). Fixes #25416. Contributed by @kerryarchibald.
|
||||
* Make `Privacy Notice` external link on integration manager ToS clickable ([\#10914](https://github.com/matrix-org/matrix-react-sdk/pull/10914)). Fixes #25384. Contributed by @luixxiul.
|
||||
* Ensure that open message context menus are updated when the event is sent ([\#10950](https://github.com/matrix-org/matrix-react-sdk/pull/10950)).
|
||||
* Ensure that open sticker picker dialogs are updated when the widget configuration is updated. ([\#10945](https://github.com/matrix-org/matrix-react-sdk/pull/10945)).
|
||||
* Fix big emoji in replies ([\#10932](https://github.com/matrix-org/matrix-react-sdk/pull/10932)). Fixes #24798.
|
||||
* Hide empty `MessageActionBar` on message edit history dialog ([\#10447](https://github.com/matrix-org/matrix-react-sdk/pull/10447)). Fixes #24903. Contributed by @luixxiul.
|
||||
* Fix roving tab index getting confused after dragging space order ([\#10901](https://github.com/matrix-org/matrix-react-sdk/pull/10901)).
|
||||
* Attempt a potential workaround for stuck notifs ([\#3384](https://github.com/matrix-org/matrix-js-sdk/pull/3384)). Fixes vector-im/element-web#25406. Contributed by @andybalaam.
|
||||
* Handle trailing dot FQDNs for domain-specific config.json files ([\#25351](https://github.com/vector-im/element-web/pull/25351)). Fixes #8858.
|
||||
* Ignore edits in message previews when they concern messages other than latest ([\#10868](https://github.com/matrix-org/matrix-react-sdk/pull/10868)). Fixes #14872.
|
||||
* Send correct receipts when viewing a room ([\#10864](https://github.com/matrix-org/matrix-react-sdk/pull/10864)). Fixes #25196.
|
||||
* Fix timeline search bar being overlapped by the right panel ([\#10809](https://github.com/matrix-org/matrix-react-sdk/pull/10809)). Fixes #25291. Contributed by @luixxiul.
|
||||
* Fix the state shown for call in rooms ([\#10833](https://github.com/matrix-org/matrix-react-sdk/pull/10833)).
|
||||
* Add string for membership event where both displayname & avatar change ([\#10880](https://github.com/matrix-org/matrix-react-sdk/pull/10880)). Fixes #18026.
|
||||
* Fix people space notification badge not updating for new DM invites ([\#10849](https://github.com/matrix-org/matrix-react-sdk/pull/10849)). Fixes #23248.
|
||||
* Fix regression in emoji picker order mangling after clearing filter ([\#10854](https://github.com/matrix-org/matrix-react-sdk/pull/10854)). Fixes #25323.
|
||||
* Fix: Edit history modal crash ([\#10834](https://github.com/matrix-org/matrix-react-sdk/pull/10834)). Fixes #25309. Contributed by @kerryarchibald.
|
||||
* Fix long room address and name not being clipped on room info card and update `_RoomSummaryCard.pcss` ([\#10811](https://github.com/matrix-org/matrix-react-sdk/pull/10811)). Fixes #25293. Contributed by @luixxiul.
|
||||
* Treat thumbnail upload failures as complete upload failures ([\#10829](https://github.com/matrix-org/matrix-react-sdk/pull/10829)). Fixes #7069.
|
||||
* Update finite automata to match user identifiers as per spec ([\#10798](https://github.com/matrix-org/matrix-react-sdk/pull/10798)). Fixes #25246.
|
||||
* Fix icon on empty notification panel ([\#10817](https://github.com/matrix-org/matrix-react-sdk/pull/10817)). Fixes #25298 and #25302. Contributed by @luixxiul.
|
||||
* Fix: Threads button is highlighted when I create a new room ([\#10819](https://github.com/matrix-org/matrix-react-sdk/pull/10819)). Fixes #25284. Contributed by @kerryarchibald.
|
||||
* Fix the top heading of notification panel ([\#10818](https://github.com/matrix-org/matrix-react-sdk/pull/10818)). Fixes #25303. Contributed by @luixxiul.
|
||||
* Fix the color of the verified E2EE icon on `RoomSummaryCard` ([\#10812](https://github.com/matrix-org/matrix-react-sdk/pull/10812)). Fixes #25295. Contributed by @luixxiul.
|
||||
* Fix: No feedback when waiting for the server on a /delete_devices request with SSO ([\#10795](https://github.com/matrix-org/matrix-react-sdk/pull/10795)). Fixes #23096. Contributed by @kerryarchibald.
|
||||
* Fix: reveal images when image previews are disabled ([\#10781](https://github.com/matrix-org/matrix-react-sdk/pull/10781)). Fixes #25271. Contributed by @kerryarchibald.
|
||||
* Fix accessibility issues around the room list and space panel ([\#10717](https://github.com/matrix-org/matrix-react-sdk/pull/10717)). Fixes #13345.
|
||||
* Ensure tooltip contents is linked via aria to the target element ([\#10729](https://github.com/matrix-org/matrix-react-sdk/pull/10729)). Fixes vector-im/customer-retainer#43.
|
||||
|
||||
Changes in [1.11.31](https://github.com/vector-im/element-web/releases/tag/v1.11.31) (2023-05-10)
|
||||
=================================================================================================
|
||||
|
||||
## ✨ Features
|
||||
* Improve Content-Security-Policy ([\#25210](https://github.com/vector-im/element-web/pull/25210)).
|
||||
* Add UIFeature.locationSharing to hide location sharing ([\#10727](https://github.com/matrix-org/matrix-react-sdk/pull/10727)).
|
||||
* Memoize field validation results ([\#10714](https://github.com/matrix-org/matrix-react-sdk/pull/10714)).
|
||||
* Commands for plain text editor ([\#10567](https://github.com/matrix-org/matrix-react-sdk/pull/10567)). Contributed by @alunturner.
|
||||
* Allow 16 lines of text in the rich text editors ([\#10670](https://github.com/matrix-org/matrix-react-sdk/pull/10670)). Contributed by @alunturner.
|
||||
* Bail out of `RoomSettingsDialog` when room is not found ([\#10662](https://github.com/matrix-org/matrix-react-sdk/pull/10662)). Contributed by @kerryarchibald.
|
||||
* Element-R: Populate device list for right-panel ([\#10671](https://github.com/matrix-org/matrix-react-sdk/pull/10671)). Contributed by @florianduros.
|
||||
* Make existing and new issue URLs configurable ([\#10710](https://github.com/matrix-org/matrix-react-sdk/pull/10710)). Fixes #24424.
|
||||
* Fix usages of ARIA tabpanel ([\#10628](https://github.com/matrix-org/matrix-react-sdk/pull/10628)). Fixes #25016.
|
||||
* Element-R: Starting a DMs with a user ([\#10673](https://github.com/matrix-org/matrix-react-sdk/pull/10673)). Contributed by @florianduros.
|
||||
* ARIA Accessibility improvements ([\#10675](https://github.com/matrix-org/matrix-react-sdk/pull/10675)).
|
||||
* ARIA Accessibility improvements ([\#10674](https://github.com/matrix-org/matrix-react-sdk/pull/10674)).
|
||||
* Add arrow key controls to emoji and reaction pickers ([\#10637](https://github.com/matrix-org/matrix-react-sdk/pull/10637)). Fixes #17189.
|
||||
* Translate credits in help about section ([\#10676](https://github.com/matrix-org/matrix-react-sdk/pull/10676)).
|
||||
|
||||
## 🐛 Bug Fixes
|
||||
* Fix: reveal images when image previews are disabled ([\#10781](https://github.com/matrix-org/matrix-react-sdk/pull/10781)). Fixes #25271. Contributed by @kerryarchibald.
|
||||
* Fix autocomplete not resetting properly on message send ([\#10741](https://github.com/matrix-org/matrix-react-sdk/pull/10741)). Fixes #25170.
|
||||
* Fix start_sso not working with guests disabled ([\#10720](https://github.com/matrix-org/matrix-react-sdk/pull/10720)). Fixes #16624.
|
||||
* Fix soft crash with Element call widgets ([\#10684](https://github.com/matrix-org/matrix-react-sdk/pull/10684)).
|
||||
* Send correct receipt when marking a room as read ([\#10730](https://github.com/matrix-org/matrix-react-sdk/pull/10730)). Fixes #25207.
|
||||
* Offload some more waveform processing onto a worker ([\#9223](https://github.com/matrix-org/matrix-react-sdk/pull/9223)). Fixes #19756.
|
||||
* Consolidate login errors ([\#10722](https://github.com/matrix-org/matrix-react-sdk/pull/10722)). Fixes #17520.
|
||||
* Fix all rooms search generating permalinks to wrong room id ([\#10625](https://github.com/matrix-org/matrix-react-sdk/pull/10625)). Fixes #25115.
|
||||
* Posthog properly handle Analytics ID changing from under us ([\#10702](https://github.com/matrix-org/matrix-react-sdk/pull/10702)). Fixes #25187.
|
||||
* Fix Clock being read as an absolute time rather than duration ([\#10706](https://github.com/matrix-org/matrix-react-sdk/pull/10706)). Fixes #22582.
|
||||
* Properly translate errors in `ChangePassword.tsx` so they show up translated to the user but not in our logs ([\#10615](https://github.com/matrix-org/matrix-react-sdk/pull/10615)). Fixes #9597. Contributed by @MadLittleMods.
|
||||
* Honour feature toggles in guest mode ([\#10651](https://github.com/matrix-org/matrix-react-sdk/pull/10651)). Fixes #24513. Contributed by @andybalaam.
|
||||
* Fix default content in devtools event sender ([\#10699](https://github.com/matrix-org/matrix-react-sdk/pull/10699)). Contributed by @tulir.
|
||||
* Fix a crash when a call ends while you're in it ([\#10681](https://github.com/matrix-org/matrix-react-sdk/pull/10681)). Fixes #25153.
|
||||
* Fix lack of screen reader indication when triggering auto complete ([\#10664](https://github.com/matrix-org/matrix-react-sdk/pull/10664)). Fixes #11011.
|
||||
* Fix typing tile duplicating users ([\#10678](https://github.com/matrix-org/matrix-react-sdk/pull/10678)). Fixes #25165.
|
||||
* Fix wrong room topic tooltip position ([\#10667](https://github.com/matrix-org/matrix-react-sdk/pull/10667)). Fixes #25158.
|
||||
* Fix create subspace dialog not working ([\#10652](https://github.com/matrix-org/matrix-react-sdk/pull/10652)). Fixes #24882.
|
||||
|
||||
Changes in [1.11.30](https://github.com/vector-im/element-web/releases/tag/v1.11.30) (2023-04-25)
|
||||
=================================================================================================
|
||||
|
||||
## 🔒 Security
|
||||
* Fixes for [CVE-2023-30609](https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=CVE-2023-30609) / GHSA-xv83-x443-7rmw
|
||||
|
||||
## ✨ Features
|
||||
* Pick sensible default option for phone country dropdown ([\#10627](https://github.com/matrix-org/matrix-react-sdk/pull/10627)). Fixes #3528.
|
||||
* Relate field validation tooltip via aria-describedby ([\#10522](https://github.com/matrix-org/matrix-react-sdk/pull/10522)). Fixes #24963.
|
||||
* Handle more completion types in rte autocomplete ([\#10560](https://github.com/matrix-org/matrix-react-sdk/pull/10560)). Contributed by @alunturner.
|
||||
* Show a tile for an unloaded predecessor room if it has via_servers ([\#10483](https://github.com/matrix-org/matrix-react-sdk/pull/10483)). Contributed by @andybalaam.
|
||||
* Exclude message timestamps from aria live region ([\#10584](https://github.com/matrix-org/matrix-react-sdk/pull/10584)). Fixes #5696.
|
||||
* Make composer format bar an aria toolbar ([\#10583](https://github.com/matrix-org/matrix-react-sdk/pull/10583)). Fixes #11283.
|
||||
* Improve accessibility of font slider ([\#10473](https://github.com/matrix-org/matrix-react-sdk/pull/10473)). Fixes #20168 and #24962.
|
||||
* fix file size display from kB to KB ([\#10561](https://github.com/matrix-org/matrix-react-sdk/pull/10561)). Fixes #24866. Contributed by @NSV1991.
|
||||
* Handle /me in rte ([\#10558](https://github.com/matrix-org/matrix-react-sdk/pull/10558)). Contributed by @alunturner.
|
||||
* bind html with switch for manage extension setting option ([\#10553](https://github.com/matrix-org/matrix-react-sdk/pull/10553)). Contributed by @NSV1991.
|
||||
* Handle command completions in RTE ([\#10521](https://github.com/matrix-org/matrix-react-sdk/pull/10521)). Contributed by @alunturner.
|
||||
* Add room and user avatars to rte ([\#10497](https://github.com/matrix-org/matrix-react-sdk/pull/10497)). Contributed by @alunturner.
|
||||
* Support for MSC3882 revision 1 ([\#10443](https://github.com/matrix-org/matrix-react-sdk/pull/10443)). Contributed by @hughns.
|
||||
* Check profiles before starting a DM ([\#10472](https://github.com/matrix-org/matrix-react-sdk/pull/10472)). Fixes #24830.
|
||||
* Quick settings: Change the copy / labels on the options ([\#10427](https://github.com/matrix-org/matrix-react-sdk/pull/10427)). Fixes #24522. Contributed by @justjanne.
|
||||
* Update rte autocomplete styling ([\#10503](https://github.com/matrix-org/matrix-react-sdk/pull/10503)). Contributed by @alunturner.
|
||||
|
||||
## 🐛 Bug Fixes
|
||||
* Fix create subspace dialog not working ([\#10652](https://github.com/matrix-org/matrix-react-sdk/pull/10652)). Fixes vector-im/element-web#24882
|
||||
* Fix multiple accessibility defects identified by AXE ([\#10606](https://github.com/matrix-org/matrix-react-sdk/pull/10606)).
|
||||
* Fix view source from edit history dialog always showing latest event ([\#10626](https://github.com/matrix-org/matrix-react-sdk/pull/10626)). Fixes #21859.
|
||||
* #21451 Fix WebGL disabled error message ([\#10589](https://github.com/matrix-org/matrix-react-sdk/pull/10589)). Contributed by @rashmitpankhania.
|
||||
* Properly translate errors in `AddThreepid.ts` so they show up translated to the user but not in our logs ([\#10432](https://github.com/matrix-org/matrix-react-sdk/pull/10432)). Contributed by @MadLittleMods.
|
||||
* Fix overflow on auth pages ([\#10605](https://github.com/matrix-org/matrix-react-sdk/pull/10605)). Fixes #19548.
|
||||
* Fix incorrect avatar background colour when using a custom theme ([\#10598](https://github.com/matrix-org/matrix-react-sdk/pull/10598)). Contributed by @jdauphant.
|
||||
* Remove dependency on `org.matrix.e2e_cross_signing` unstable feature ([\#10593](https://github.com/matrix-org/matrix-react-sdk/pull/10593)).
|
||||
* Update setting description to match reality ([\#10600](https://github.com/matrix-org/matrix-react-sdk/pull/10600)). Fixes #25106.
|
||||
* Fix no identity server in help & about settings ([\#10563](https://github.com/matrix-org/matrix-react-sdk/pull/10563)). Fixes #25077.
|
||||
* Fix: Images no longer reserve their space in the timeline correctly ([\#10571](https://github.com/matrix-org/matrix-react-sdk/pull/10571)). Fixes #25082. Contributed by @kerryarchibald.
|
||||
* Fix issues with inhibited accessible focus outlines ([\#10579](https://github.com/matrix-org/matrix-react-sdk/pull/10579)). Fixes #19742.
|
||||
* Fix read receipts falling from sky ([\#10576](https://github.com/matrix-org/matrix-react-sdk/pull/10576)). Fixes #25081.
|
||||
* Fix avatar text issue in rte ([\#10559](https://github.com/matrix-org/matrix-react-sdk/pull/10559)). Contributed by @alunturner.
|
||||
* fix resizer only work with left mouse click ([\#10546](https://github.com/matrix-org/matrix-react-sdk/pull/10546)). Contributed by @NSV1991.
|
||||
* Fix send two join requests when joining a room from spotlight search ([\#10534](https://github.com/matrix-org/matrix-react-sdk/pull/10534)). Fixes #25054.
|
||||
* Highlight event when any version triggered a highlight ([\#10502](https://github.com/matrix-org/matrix-react-sdk/pull/10502)). Fixes #24923 and #24970. Contributed by @kerryarchibald.
|
||||
* Fix spacing of headings of integration manager on General settings tab ([\#10232](https://github.com/matrix-org/matrix-react-sdk/pull/10232)). Fixes #24085. Contributed by @luixxiul.
|
||||
|
||||
Changes in [1.11.29](https://github.com/vector-im/element-web/releases/tag/v1.11.29) (2023-04-11)
|
||||
=================================================================================================
|
||||
|
||||
## ✨ Features
|
||||
* Allow desktop app to expose recent rooms in UI integrations ([\#16940](https://github.com/vector-im/element-web/pull/16940)).
|
||||
* Add API params to mute audio and/or video in Jitsi calls by default ([\#24820](https://github.com/vector-im/element-web/pull/24820)). Contributed by @dhenneke.
|
||||
* Style mentions as pills in rich text editor ([\#10448](https://github.com/matrix-org/matrix-react-sdk/pull/10448)). Contributed by @alunturner.
|
||||
* Show room create icon if "UIComponent.roomCreation" is enabled ([\#10364](https://github.com/matrix-org/matrix-react-sdk/pull/10364)). Contributed by @maheichyk.
|
||||
* Mentions as links rte ([\#10463](https://github.com/matrix-org/matrix-react-sdk/pull/10463)). Contributed by @alunturner.
|
||||
* Better error handling in jump to date ([\#10405](https://github.com/matrix-org/matrix-react-sdk/pull/10405)). Contributed by @MadLittleMods.
|
||||
* Show "Invite" menu option if "UIComponent.sendInvites" is enabled. ([\#10363](https://github.com/matrix-org/matrix-react-sdk/pull/10363)). Contributed by @maheichyk.
|
||||
* Added `UserProfilesStore`, `LruCache` and user permalink profile caching ([\#10425](https://github.com/matrix-org/matrix-react-sdk/pull/10425)). Fixes #10559.
|
||||
* Mentions as links rte ([\#10422](https://github.com/matrix-org/matrix-react-sdk/pull/10422)). Contributed by @alunturner.
|
||||
* Implement MSC3952: intentional mentions ([\#9983](https://github.com/matrix-org/matrix-react-sdk/pull/9983)).
|
||||
* Implement MSC3973: Search users in the user directory with the Widget API ([\#10269](https://github.com/matrix-org/matrix-react-sdk/pull/10269)). Contributed by @dhenneke.
|
||||
* Permalinks to message are now displayed as pills ([\#10392](https://github.com/matrix-org/matrix-react-sdk/pull/10392)). Fixes #24751 and #24706.
|
||||
* Show search,dial,explore in filterContainer if "UIComponent.filterContainer" is enabled ([\#10381](https://github.com/matrix-org/matrix-react-sdk/pull/10381)). Contributed by @maheichyk.
|
||||
* Increase space panel collapse clickable area ([\#6084](https://github.com/matrix-org/matrix-react-sdk/pull/6084)). Fixes #17379. Contributed by @jaiwanth-v.
|
||||
* Add fallback for replies to Polls ([\#10380](https://github.com/matrix-org/matrix-react-sdk/pull/10380)). Fixes #24197. Contributed by @kerryarchibald.
|
||||
* Permalinks to rooms and users are now pillified ([\#10388](https://github.com/matrix-org/matrix-react-sdk/pull/10388)). Fixes #24825.
|
||||
* Poll history - access poll history from room settings ([\#10356](https://github.com/matrix-org/matrix-react-sdk/pull/10356)). Contributed by @kerryarchibald.
|
||||
* Add API params to mute audio and/or video in Jitsi calls by default ([\#10376](https://github.com/matrix-org/matrix-react-sdk/pull/10376)). Contributed by @dhenneke.
|
||||
* Notifications: inline error message on notifications saving error ([\#10288](https://github.com/matrix-org/matrix-react-sdk/pull/10288)). Contributed by @kerryarchibald.
|
||||
* Support dynamic room predecessor in SpaceProvider ([\#10348](https://github.com/matrix-org/matrix-react-sdk/pull/10348)). Contributed by @andybalaam.
|
||||
* Support dynamic room predecessors for RoomProvider ([\#10346](https://github.com/matrix-org/matrix-react-sdk/pull/10346)). Contributed by @andybalaam.
|
||||
* Support dynamic room predecessors in OwnBeaconStore ([\#10339](https://github.com/matrix-org/matrix-react-sdk/pull/10339)). Contributed by @andybalaam.
|
||||
* Support dynamic room predecessors in ForwardDialog ([\#10344](https://github.com/matrix-org/matrix-react-sdk/pull/10344)). Contributed by @andybalaam.
|
||||
* Support dynamic room predecessors in SpaceHierarchy ([\#10341](https://github.com/matrix-org/matrix-react-sdk/pull/10341)). Contributed by @andybalaam.
|
||||
* Support dynamic room predecessors in AddExistingToSpaceDialog ([\#10342](https://github.com/matrix-org/matrix-react-sdk/pull/10342)). Contributed by @andybalaam.
|
||||
* Support dynamic room predecessors in leave-behaviour ([\#10340](https://github.com/matrix-org/matrix-react-sdk/pull/10340)). Contributed by @andybalaam.
|
||||
* Support dynamic room predecessors in StopGapWidgetDriver ([\#10338](https://github.com/matrix-org/matrix-react-sdk/pull/10338)). Contributed by @andybalaam.
|
||||
* Support dynamic room predecessors in WidgetLayoutStore ([\#10326](https://github.com/matrix-org/matrix-react-sdk/pull/10326)). Contributed by @andybalaam.
|
||||
* Support dynamic room predecessors in SpaceStore ([\#10332](https://github.com/matrix-org/matrix-react-sdk/pull/10332)). Contributed by @andybalaam.
|
||||
* Sync polls push rules on changes to account_data ([\#10287](https://github.com/matrix-org/matrix-react-sdk/pull/10287)). Contributed by @kerryarchibald.
|
||||
* Support dynamic room predecessors in BreadcrumbsStore ([\#10295](https://github.com/matrix-org/matrix-react-sdk/pull/10295)). Contributed by @andybalaam.
|
||||
* Improved a11y for Field feedback and Secure Phrase input ([\#10320](https://github.com/matrix-org/matrix-react-sdk/pull/10320)). Contributed by @Sebbones.
|
||||
* Support dynamic room predecessors in RoomNotificationStateStore ([\#10297](https://github.com/matrix-org/matrix-react-sdk/pull/10297)). Contributed by @andybalaam.
|
||||
|
||||
## 🐛 Bug Fixes
|
||||
* Use a newly generated access_token while joining Jitsi ([\#24646](https://github.com/vector-im/element-web/pull/24646)). Fixes #24687. Contributed by @emrahcom.
|
||||
* Fix cloudflare action pointing at commit hash instead of tag ([\#24777](https://github.com/vector-im/element-web/pull/24777)). Contributed by @justjanne.
|
||||
* Allow editing with RTE to overflow for autocomplete visibility ([\#10499](https://github.com/matrix-org/matrix-react-sdk/pull/10499)). Contributed by @alunturner.
|
||||
* Added auto focus to Github URL on opening of debug logs modal ([\#10479](https://github.com/matrix-org/matrix-react-sdk/pull/10479)). Contributed by @ShivamSpm.
|
||||
* Fix detection of encryption for all users in a room ([\#10487](https://github.com/matrix-org/matrix-react-sdk/pull/10487)). Fixes #24995.
|
||||
* Properly generate mentions when editing a reply with MSC3952 ([\#10486](https://github.com/matrix-org/matrix-react-sdk/pull/10486)). Fixes #24924. Contributed by @kerryarchibald.
|
||||
* Improve performance of rendering a room with many hidden events ([\#10131](https://github.com/matrix-org/matrix-react-sdk/pull/10131)). Contributed by @andybalaam.
|
||||
* Prevent future date selection in jump to date ([\#10419](https://github.com/matrix-org/matrix-react-sdk/pull/10419)). Fixes #20800. Contributed by @MadLittleMods.
|
||||
* Add aria labels to message search bar to improve accessibility ([\#10476](https://github.com/matrix-org/matrix-react-sdk/pull/10476)). Fixes #24921.
|
||||
* Fix decryption failure bar covering the timeline ([\#10360](https://github.com/matrix-org/matrix-react-sdk/pull/10360)). Fixes #24780 #24074 and #24183. Contributed by @luixxiul.
|
||||
* Improve profile picture settings accessibility ([\#10470](https://github.com/matrix-org/matrix-react-sdk/pull/10470)). Fixes #24919.
|
||||
* Handle group call redaction ([\#10465](https://github.com/matrix-org/matrix-react-sdk/pull/10465)).
|
||||
* Display relative timestamp for threads on the same calendar day ([\#10399](https://github.com/matrix-org/matrix-react-sdk/pull/10399)). Fixes #24841. Contributed by @kerryarchibald.
|
||||
* Fix timeline list and paragraph display issues ([\#10424](https://github.com/matrix-org/matrix-react-sdk/pull/10424)). Fixes #24602. Contributed by @alunturner.
|
||||
* Use unique keys for voice broadcast pips ([\#10457](https://github.com/matrix-org/matrix-react-sdk/pull/10457)). Fixes #24959.
|
||||
* Fix "show read receipts sent by other users" not applying to threads ([\#10445](https://github.com/matrix-org/matrix-react-sdk/pull/10445)). Fixes #24910.
|
||||
* Fix joining public rooms without aliases in search dialog ([\#10437](https://github.com/matrix-org/matrix-react-sdk/pull/10437)). Fixes #23937.
|
||||
* Add input validation for `m.direct` in `DMRoomMap` ([\#10436](https://github.com/matrix-org/matrix-react-sdk/pull/10436)). Fixes #24909.
|
||||
* Reduce height reserved for "collapse" button's line on IRC layout ([\#10211](https://github.com/matrix-org/matrix-react-sdk/pull/10211)). Fixes #24605. Contributed by @luixxiul.
|
||||
* Fix `creatorUserId is required` error when opening sticker picker ([\#10423](https://github.com/matrix-org/matrix-react-sdk/pull/10423)).
|
||||
* Fix block/inline Element descendants error noise in `NewRoomIntro.tsx` ([\#10412](https://github.com/matrix-org/matrix-react-sdk/pull/10412)). Contributed by @MadLittleMods.
|
||||
* Fix profile resizer to make first character of a line selectable in IRC layout ([\#10396](https://github.com/matrix-org/matrix-react-sdk/pull/10396)). Fixes #14764. Contributed by @luixxiul.
|
||||
* Ensure space between wrapped lines of room name on IRC layout ([\#10188](https://github.com/matrix-org/matrix-react-sdk/pull/10188)). Fixes #24742. Contributed by @luixxiul.
|
||||
* Remove unreadable alt attribute from the room status bar warning icon (nonsense to screenreaders) ([\#10402](https://github.com/matrix-org/matrix-react-sdk/pull/10402)). Contributed by @MadLittleMods.
|
||||
* Fix big date separators when jump to date is enabled ([\#10404](https://github.com/matrix-org/matrix-react-sdk/pull/10404)). Fixes #22969. Contributed by @MadLittleMods.
|
||||
* Fixes user authentication when registering via the module API ([\#10257](https://github.com/matrix-org/matrix-react-sdk/pull/10257)). Contributed by @maheichyk.
|
||||
* Handle more edge cases in Space Hierarchy ([\#10280](https://github.com/matrix-org/matrix-react-sdk/pull/10280)). Contributed by @justjanne.
|
||||
* Further improve performance with lots of hidden events ([\#10353](https://github.com/matrix-org/matrix-react-sdk/pull/10353)). Fixes #24480. Contributed by @andybalaam.
|
||||
* Respect user cancelling upload flow by dismissing spinner ([\#10373](https://github.com/matrix-org/matrix-react-sdk/pull/10373)). Fixes #24667.
|
||||
* When starting a DM, the end-to-end encryption status icon does now only appear if the DM can be encrypted ([\#10394](https://github.com/matrix-org/matrix-react-sdk/pull/10394)). Fixes #24397.
|
||||
* Fix `[object Object]` in feedback metadata ([\#10390](https://github.com/matrix-org/matrix-react-sdk/pull/10390)).
|
||||
* Fix pinned messages card saying nothing pinned while loading ([\#10385](https://github.com/matrix-org/matrix-react-sdk/pull/10385)). Fixes #24615.
|
||||
* Fix import e2e key dialog staying disabled after paste ([\#10375](https://github.com/matrix-org/matrix-react-sdk/pull/10375)). Fixes #24818.
|
||||
* Show all labs even if incompatible, with appropriate tooltip explaining requirements ([\#10369](https://github.com/matrix-org/matrix-react-sdk/pull/10369)). Fixes #24813.
|
||||
* Fix UIFeature.Registration not applying to all paths ([\#10371](https://github.com/matrix-org/matrix-react-sdk/pull/10371)). Fixes #24814.
|
||||
* Clicking on a user pill does now only open the profile in the right panel and no longer navigates to the home view. ([\#10359](https://github.com/matrix-org/matrix-react-sdk/pull/10359)). Fixes #24797.
|
||||
* Fix start DM with pending third party invite ([\#10347](https://github.com/matrix-org/matrix-react-sdk/pull/10347)). Fixes #24781.
|
||||
* Fix long display name overflowing reply tile on IRC layout ([\#10343](https://github.com/matrix-org/matrix-react-sdk/pull/10343)). Fixes #24738. Contributed by @luixxiul.
|
||||
* Display redacted body on ThreadView in the same way as normal messages ([\#9016](https://github.com/matrix-org/matrix-react-sdk/pull/9016)). Fixes #24729. Contributed by @luixxiul.
|
||||
* Handle more edge cases in ACL updates ([\#10279](https://github.com/matrix-org/matrix-react-sdk/pull/10279)). Contributed by @justjanne.
|
||||
* Allow parsing png files to fail if thumbnailing is successful ([\#10308](https://github.com/matrix-org/matrix-react-sdk/pull/10308)).
|
||||
|
||||
Changes in [1.11.28](https://github.com/vector-im/element-web/releases/tag/v1.11.28) (2023-03-31)
|
||||
=================================================================================================
|
||||
|
||||
## 🐛 Bug Fixes
|
||||
* (No changes, version bumped to sync with element-desktop.)
|
||||
|
||||
Changes in [1.11.27](https://github.com/vector-im/element-web/releases/tag/v1.11.27) (2023-03-31)
|
||||
=================================================================================================
|
||||
|
||||
## 🐛 Bug Fixes
|
||||
* Fix detection of encryption for all users in a room ([\#10487](https://github.com/matrix-org/matrix-react-sdk/pull/10487)). Fixes #24995.
|
||||
|
||||
Changes in [1.11.26](https://github.com/vector-im/element-web/releases/tag/v1.11.26) (2023-03-28)
|
||||
=================================================================================================
|
||||
|
||||
## 🔒 Security
|
||||
* Fixes for [CVE-2023-28427](https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=CVE-2023-28427) / GHSA-mwq8-fjpf-c2gr
|
||||
* Fixes for [CVE-2023-28103](https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=CVE-2023-28103) / GHSA-6g43-88cp-w5gv
|
||||
|
||||
Changes in [1.11.25](https://github.com/vector-im/element-web/releases/tag/v1.11.25) (2023-03-15)
|
||||
=================================================================================================
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Builder
|
||||
FROM --platform=$BUILDPLATFORM node:16-buster as builder
|
||||
FROM --platform=$BUILDPLATFORM node:20-bullseye as builder
|
||||
|
||||
# Support custom branches of the react-sdk and js-sdk. This also helps us build
|
||||
# images of element-web develop.
|
||||
@@ -15,7 +15,7 @@ WORKDIR /src
|
||||
|
||||
COPY . /src
|
||||
RUN dos2unix /src/scripts/docker-link-repos.sh && bash /src/scripts/docker-link-repos.sh
|
||||
RUN yarn --network-timeout=100000 install
|
||||
RUN yarn --network-timeout=200000 install
|
||||
|
||||
RUN dos2unix /src/scripts/docker-package.sh && bash /src/scripts/docker-package.sh
|
||||
|
||||
@@ -23,7 +23,7 @@ RUN dos2unix /src/scripts/docker-package.sh && bash /src/scripts/docker-package.
|
||||
RUN cp /src/config.sample.json /src/webapp/config.json
|
||||
|
||||
# App
|
||||
FROM nginx:alpine
|
||||
FROM nginx:alpine-slim
|
||||
|
||||
COPY --from=builder /src/webapp /app
|
||||
|
||||
|
||||
11
README.md
11
README.md
@@ -1,7 +1,7 @@
|
||||
[](https://matrix.to/#/#element-web:matrix.org)
|
||||

|
||||

|
||||
[](https://translate.element.io/engage/element-web/)
|
||||
[](https://localazy.com/p/element-web)
|
||||
[](https://sonarcloud.io/summary/new_code?id=element-web)
|
||||
[](https://sonarcloud.io/summary/new_code?id=element-web)
|
||||
[](https://sonarcloud.io/summary/new_code?id=element-web)
|
||||
@@ -18,7 +18,8 @@ Element has several tiers of support for different environments:
|
||||
|
||||
- Supported
|
||||
- Definition: Issues **actively triaged**, regressions **block** the release
|
||||
- Last 2 major versions of Chrome, Firefox, Safari, and Edge on desktop OSes
|
||||
- Last 2 major versions of Chrome, Firefox, and Edge on desktop OSes
|
||||
- Last 2 versions of Safari
|
||||
- Latest release of official Element Desktop app on desktop OSes
|
||||
- Desktop OSes means macOS, Windows, and Linux versions for desktop devices
|
||||
that are actively supported by the OS vendor and receive security updates
|
||||
@@ -85,7 +86,7 @@ your web server configuration when hosting Element Web:
|
||||
|
||||
- The `X-Frame-Options: SAMEORIGIN` header, to prevent Element Web from being
|
||||
framed and protect from [clickjacking][owasp-clickjacking].
|
||||
- The `frame-ancestors 'none'` directive to your `Content-Security-Policy`
|
||||
- The `frame-ancestors 'self'` directive to your `Content-Security-Policy`
|
||||
header, as the modern replacement for `X-Frame-Options` (though both should be
|
||||
included since not all browsers support it yet, see
|
||||
[this][owasp-clickjacking-csp]).
|
||||
@@ -113,7 +114,7 @@ For Apache, the configuration looks like:
|
||||
Header set X-Frame-Options SAMEORIGIN
|
||||
Header set X-Content-Type-Options nosniff
|
||||
Header set X-XSS-Protection "1; mode=block"
|
||||
Header set Content-Security-Policy "frame-ancestors 'none'"
|
||||
Header set Content-Security-Policy "frame-ancestors 'self'"
|
||||
```
|
||||
|
||||
Note: In case you are already setting a `Content-Security-Policy` header
|
||||
@@ -387,8 +388,6 @@ 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.element.io/widgets/element-web/-/multi-auto.svg" alt="translationsstatus" width="340">](https://translate.element.io/engage/element-web/?utm_source=widget)
|
||||
|
||||
# Triaging issues
|
||||
|
||||
Issues are triaged by community members and the Web App Team, following the [triage process](https://github.com/vector-im/element-meta/wiki/Triage-process).
|
||||
|
||||
@@ -59,20 +59,21 @@ Unless otherwise specified, the following applies to all code:
|
||||
6. Lines are trimmed of all excess whitespace, including blank lines.
|
||||
7. Long lines are broken up for readability.
|
||||
|
||||
## TypeScript / JavaScript {#typescript-javascript}
|
||||
## TypeScript / JavaScript
|
||||
|
||||
1. Write TypeScript. Turn JavaScript into TypeScript when working in the area.
|
||||
2. Use named exports.
|
||||
3. Use semicolons for block/line termination.
|
||||
2. Use [TSDoc](https://tsdoc.org/) to document your code. See [Comments](#comments) below.
|
||||
3. Use named exports.
|
||||
4. Use semicolons for block/line termination.
|
||||
1. Except when defining interfaces, classes, and non-arrow functions specifically.
|
||||
4. When a statement's body is a single line, it must be written without curly braces, so long as the body is placed on
|
||||
5. When a statement's body is a single line, it must be written without curly braces, so long as the body is placed on
|
||||
the same line as the statement.
|
||||
|
||||
```typescript
|
||||
if (x) doThing();
|
||||
```
|
||||
|
||||
5. Blocks for `if`, `for`, `switch` and so on must have a space surrounding the condition, but not
|
||||
6. Blocks for `if`, `for`, `switch` and so on must have a space surrounding the condition, but not
|
||||
within the condition.
|
||||
|
||||
```typescript
|
||||
@@ -81,17 +82,17 @@ Unless otherwise specified, the following applies to all code:
|
||||
}
|
||||
```
|
||||
|
||||
6. lowerCamelCase is used for function and variable naming.
|
||||
7. UpperCamelCase is used for general naming.
|
||||
8. Interface names should not be marked with an uppercase `I`.
|
||||
9. One variable declaration per line.
|
||||
10. If a variable is not receiving a value on declaration, its type must be defined.
|
||||
7. lowerCamelCase is used for function and variable naming.
|
||||
8. UpperCamelCase is used for general naming.
|
||||
9. Interface names should not be marked with an uppercase `I`.
|
||||
10. One variable declaration per line.
|
||||
11. If a variable is not receiving a value on declaration, its type must be defined.
|
||||
|
||||
```typescript
|
||||
let errorMessage: Optional<string>;
|
||||
```
|
||||
|
||||
11. Objects can use shorthand declarations, including mixing of types.
|
||||
12. Objects can use shorthand declarations, including mixing of types.
|
||||
|
||||
```typescript
|
||||
{
|
||||
@@ -102,7 +103,7 @@ Unless otherwise specified, the following applies to all code:
|
||||
{ room, prop: this.prop }
|
||||
```
|
||||
|
||||
12. Object keys should always be non-strings when possible.
|
||||
13. Object keys should always be non-strings when possible.
|
||||
|
||||
```typescript
|
||||
{
|
||||
@@ -112,12 +113,6 @@ Unless otherwise specified, the following applies to all code:
|
||||
}
|
||||
```
|
||||
|
||||
13. Explicitly cast to a boolean.
|
||||
|
||||
```typescript
|
||||
!!stringVar || Boolean(stringVar);
|
||||
```
|
||||
|
||||
14. Use `switch` statements when checking against more than a few enum-like values.
|
||||
15. Use `const` for constants, `let` for mutability.
|
||||
16. Describe types exhaustively (ensure noImplictAny would pass).
|
||||
@@ -255,7 +250,7 @@ Inheriting all the rules of TypeScript, the following additionally apply:
|
||||
if at all possible.
|
||||
11. A component should only use CSS class names in line with the component name.
|
||||
|
||||
1. When knowingly using a class name from another component, document it.
|
||||
1. When knowingly using a class name from another component, document it with a [comment](#comments).
|
||||
|
||||
12. Curly braces within JSX should be padded with a space, however properties on those components should not.
|
||||
See above code example.
|
||||
@@ -275,11 +270,15 @@ Inheriting all the rules of TypeScript, the following additionally apply:
|
||||
Note: We use PostCSS + some plugins to process our styles. It looks like SCSS, but actually it is not.
|
||||
|
||||
1. Class names must be prefixed with "mx\_".
|
||||
2. Class names should denote the component which defines them, followed by any context:
|
||||
1. mx_MyFoo
|
||||
2. mx_MyFoo_avatar
|
||||
3. mx_MyFoo_avatar--user
|
||||
3. Use the `$font` and `$spacing` variables instead of manual values.
|
||||
2. Class names must denote the component which defines them, followed by any context.
|
||||
The context is not further specified here in terms of meaning or syntax.
|
||||
Use whatever is appropriate for your implementation use case.
|
||||
Some examples:
|
||||
1. `mx_MyFoo`
|
||||
2. `mx_MyFoo_avatar`
|
||||
3. `mx_MyFoo_avatarUser`
|
||||
4. `mx_MyFoo_avatar--user`
|
||||
3. Use the `$font` variables instead of manual values.
|
||||
4. Keep indentation/nesting to a minimum. Maximum suggested nesting is 5 layers.
|
||||
5. Use the whole class name instead of shortcuts:
|
||||
|
||||
@@ -304,7 +303,7 @@ Note: We use PostCSS + some plugins to process our styles. It looks like SCSS, b
|
||||
|
||||
7. Non-shared variables should use $lowerCamelCase. Shared variables use $dashed-naming.
|
||||
8. Overrides to Z indexes, adjustments of dimensions/padding with pixels, and so on should all be
|
||||
documented for what the values mean:
|
||||
[documented](#comments) for what the values mean:
|
||||
|
||||
```scss
|
||||
.mx_MyFoo {
|
||||
@@ -314,7 +313,7 @@ Note: We use PostCSS + some plugins to process our styles. It looks like SCSS, b
|
||||
}
|
||||
```
|
||||
|
||||
9. Avoid the use of `!important`. If necessary, add a comment.
|
||||
9. Avoid the use of `!important`. If `!important` is necessary, add a [comment](#comments) explaining why.
|
||||
|
||||
## Tests
|
||||
|
||||
@@ -358,3 +357,38 @@ Note: We use PostCSS + some plugins to process our styles. It looks like SCSS, b
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
## Comments
|
||||
|
||||
1. As a general principle: be liberal with comments. This applies to all files: stylesheets as well as
|
||||
JavaScript/TypeScript.
|
||||
|
||||
Good comments not only help future readers understand and maintain the code; they can also encourage good design
|
||||
by clearly setting out how different parts of the codebase interact where that would otherwise be implicit and
|
||||
subject to interpretation.
|
||||
|
||||
2. Aim to document all types, methods, class properties, functions, etc, with [TSDoc](https://tsdoc.org/) doc comments.
|
||||
This is _especially_ important for public interfaces in `matrix-js-sdk`, but is good practice in general.
|
||||
|
||||
Even very simple interfaces can often benefit from a doc-comment, both as a matter of consistency, and because simple
|
||||
interfaces have a habit of becoming more complex over time.
|
||||
|
||||
3. React components should be documented in the same way as other classes or functions. The documentation should give
|
||||
a brief description of how the component should be used, and, especially for more complex components, each of its
|
||||
properties should be clearly documented.
|
||||
|
||||
4. Inside a function, there is no need to comment every line, but consider:
|
||||
|
||||
- before a particular multiline section of code within the function, give an overview of what it does,
|
||||
to make it easier for a reader to follow the flow through the function as a whole.
|
||||
- if it is anything less than obvious, explain _why_ we are doing a particular operation, with particular emphasis
|
||||
on how this function interacts with other parts of the codebase.
|
||||
|
||||
5. When making changes to existing code, authors are expected to read existing comments and make any necessary changes
|
||||
to ensure they remain accurate.
|
||||
|
||||
6. Reviewers are encouraged to consider whether more comments would be useful, and to ask the author to add them.
|
||||
|
||||
It is natural for an author to feel that the code they have just written is "obvious" and that comments would be
|
||||
redundant, whereas in reality it would take some time for reader unfamiliar with the code to understand it. A
|
||||
reviewer is well-placed to make a more objective judgement.
|
||||
|
||||
@@ -22,8 +22,6 @@
|
||||
"https://scalar-staging.vector.im/api",
|
||||
"https://scalar-staging.riot.im/scalar/api"
|
||||
],
|
||||
"bug_report_endpoint_url": "https://element.io/bugreports/submit",
|
||||
"uisi_autorageshake_app": "element-auto-uisi",
|
||||
"default_country_code": "GB",
|
||||
"show_labs_settings": false,
|
||||
"features": {},
|
||||
|
||||
1
debian/conffiles
vendored
Normal file
1
debian/conffiles
vendored
Normal file
@@ -0,0 +1 @@
|
||||
/usr/share/element-web/config.json
|
||||
12
debian/control
vendored
Executable file
12
debian/control
vendored
Executable file
@@ -0,0 +1,12 @@
|
||||
Package: element-web
|
||||
License: Apache-2.0
|
||||
Vendor: support@element.io
|
||||
Architecture: all
|
||||
Maintainer: support@element.io
|
||||
Recommends: element-io-archive-keyring
|
||||
Section: web
|
||||
Priority: optional
|
||||
Homepage: https://element.io/
|
||||
Version: ${Version}
|
||||
Description:
|
||||
A feature-rich client for Matrix.org
|
||||
@@ -1,5 +1,13 @@
|
||||
# Configuration
|
||||
|
||||
### 🦖 Deprecation notice
|
||||
|
||||
Configuration keys were previously a mix of camelCase and snake_case.
|
||||
We standardised to snake_case but added compatibility for camelCase to all settings.
|
||||
This backwards compatibility will be getting removed in a future release so please ensure you are using snake_case.
|
||||
|
||||
---
|
||||
|
||||
You can configure the app by copying `config.sample.json` to `config.json` or `config.$domain.json` and customising it.
|
||||
Element will attempt to load first `config.$domain.json` and if it fails `config.json`. This mechanism allows different
|
||||
configuration options depending on if you're hitting e.g. `app1.example.com` or `app2.example.com`. Configs are not mixed
|
||||
@@ -45,8 +53,9 @@ One of the following options **must** be supplied:
|
||||
information. These are the same values seen as `base_url` in the `default_server_config` example, with `default_is_url`
|
||||
being optional.
|
||||
|
||||
If a combination of these three methods is used then Element will fail to load. This is because it is unclear which
|
||||
should be considered "first".
|
||||
If both `default_server_config` and `default_server_name` are used, Element will try to look up the connection
|
||||
infomation using `.well-known`, and if that fails, take `default_server_config` as the homeserver connection
|
||||
infomation.
|
||||
|
||||
## Labs flags
|
||||
|
||||
@@ -144,6 +153,8 @@ complete re-branding/private labeling, a more personalised experience can be ach
|
||||
1. `title`: Required. Title to show at the top of the notice.
|
||||
2. `description`: Required. The description to use for the notice.
|
||||
3. `show_once`: Optional. If true then the notice will only be shown once per device.
|
||||
18. `help_url`: The URL to point users to for help with the app, defaults to `https://element.io/help`.
|
||||
19. `help_encrption_url`: The URL to point users to for help with encryption, defaults to `https://element.io/help#encryption`.
|
||||
|
||||
### `desktop_builds` and `mobile_builds`
|
||||
|
||||
@@ -320,7 +331,8 @@ The VoIP and Jitsi options are:
|
||||
}
|
||||
```
|
||||
The `widget` is the `content` of a normal widget state event. The `layout` is the layout specifier for the widget being created,
|
||||
as defined by the `io.element.widgets.layout` state event.
|
||||
as defined by the `io.element.widgets.layout` state event. By default this applies to all rooms, but the behaviour can be skipped for DMs
|
||||
by setting the option `widget_build_url_ignore_dm` to `true`.
|
||||
5. `audio_stream_url`: Optional URL to pass to Jitsi to enable live streaming. This option is considered experimental and may be removed
|
||||
at any time without notice.
|
||||
6. `element_call`: Optional configuration for native group calls using Element Call, with the following subkeys:
|
||||
@@ -508,6 +520,7 @@ Currently, the following UI feature flags are supported:
|
||||
timeline for recent messages. When false day dates will be used.
|
||||
- `UIFeature.BulkUnverifiedSessionsReminder` - Display popup reminders to verify or remove unverified sessions. Defaults
|
||||
to true.
|
||||
- `UIFeature.locationSharing` - Whether or not location sharing menus will be shown.
|
||||
|
||||
## Undocumented / developer options
|
||||
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
# Customisations
|
||||
|
||||
### 🦖 DEPRECATED
|
||||
|
||||
Customisations have been deprecated in favour of the [Module API](https://github.com/vector-im/element-web/blob/develop/docs/modules.md).
|
||||
If you have use cases from customisations which are not yet available via the Module API please open an issue.
|
||||
Customisations will be removed from the codebase in a future release.
|
||||
|
||||
---
|
||||
|
||||
Element Web and the React SDK support "customisation points" that can be used to
|
||||
easily add custom logic specific to a particular deployment of Element Web.
|
||||
|
||||
|
||||
22
docs/e2ee.md
22
docs/e2ee.md
@@ -16,6 +16,28 @@ Set the following on your homeserver's
|
||||
}
|
||||
```
|
||||
|
||||
## Disabling encryption
|
||||
|
||||
Set the following on your homeserver's
|
||||
`/.well-known/matrix/client` config:
|
||||
|
||||
```json
|
||||
{
|
||||
"io.element.e2ee": {
|
||||
"force_disable": true
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
When `force_disable` is true:
|
||||
|
||||
- all rooms will be created with encryption disabled, and it will not be possible to enable
|
||||
encryption from room settings.
|
||||
- any `io.element.e2ee.default` value will be disregarded.
|
||||
|
||||
Note: If the server is configured to forcibly enable encryption for some or all rooms,
|
||||
this behaviour will be overriden.
|
||||
|
||||
# Secure backup
|
||||
|
||||
By default, Element strongly encourages (but does not require) users to set up
|
||||
|
||||
@@ -30,7 +30,7 @@ to your [config](./config.md) the following:
|
||||
```json
|
||||
{
|
||||
"jitsi": {
|
||||
"preferredDomain": "your.jitsi.example.org"
|
||||
"preferred_domain": "your.jitsi.example.org"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
66
docs/labs.md
66
docs/labs.md
@@ -86,11 +86,6 @@ present in the room. The Bridge info tab pulls information from the `m.bridge` s
|
||||
bridges are not expected to be compatible, and users should not rely on this
|
||||
tab as the single source of truth just yet.
|
||||
|
||||
## Presence indicator in room list (`feature_presence_in_room_list`)
|
||||
|
||||
This adds a presence indicator in the room list next to DM rooms where the other
|
||||
person is online.
|
||||
|
||||
## Custom themes (`feature_custom_themes`)
|
||||
|
||||
Custom themes are possible through Element's [theme support](./theming.md), though
|
||||
@@ -100,51 +95,11 @@ theme definition.
|
||||
|
||||
For some sample themes, check out [aaronraimist/element-themes](https://github.com/aaronraimist/element-themes).
|
||||
|
||||
## Message preview tweaks
|
||||
|
||||
To enable message previews in the left panel for reactions in all rooms, enable `feature_roomlist_preview_reactions_all`.
|
||||
|
||||
To enable message previews for reactions in DMs only, enable `feature_roomlist_preview_reactions_dms`. This is ignored when it is enabled for all rooms.
|
||||
|
||||
## Dehydrated devices (`feature_dehydration`)
|
||||
|
||||
Allows users to receive encrypted messages by creating a device that is stored
|
||||
encrypted on the server, as described in [MSC2697](https://github.com/matrix-org/matrix-doc/pull/2697).
|
||||
|
||||
## Breadcrumbs v2 (`feature_breadcrumbs_v2`)
|
||||
|
||||
Instead of showing the horizontal list of breadcrumbs under the filter field, the new UX is an interactive context menu
|
||||
triggered by the button to the right of the filter field.
|
||||
|
||||
## Spotlight search (`feature_spotlight`) [In Development]
|
||||
|
||||
Switches to a new room search experience.
|
||||
|
||||
## Extensible events rendering (`feature_extensible_events`) [In Development]
|
||||
|
||||
_Intended for developer use only at the moment._
|
||||
|
||||
Extensible Events are a [new event format](https://github.com/matrix-org/matrix-doc/pull/1767) which
|
||||
supports graceful fallback in unknown event types. Instead of rendering nothing or a blank space, events
|
||||
can define a series of other events which represent the event's information but in different ways. The
|
||||
base of these fallbacks being text.
|
||||
|
||||
Turning this flag on indicates that, when possible, the extensible events structure should be parsed on
|
||||
supported event types. This should lead to zero perceptual change in the timeline except in cases where
|
||||
the sender is using unknown/unrecognised event types.
|
||||
|
||||
Sending events with extensible events structure is always enabled - this should not affect any downstream
|
||||
client.
|
||||
|
||||
## Right panel stays open (`feature_right_panel_default_open`)
|
||||
|
||||
This is an experimental default open right panel mode as a quick fix for those
|
||||
who prefer to have the right panel open consistently across rooms.
|
||||
|
||||
If no right panel state is known for the room or it was closed on the last room
|
||||
visit, it will default to the room member list. Otherwise, the saved card last
|
||||
used in that room is shown.
|
||||
|
||||
## Live location sharing (`feature_location_share_live`) [In Development]
|
||||
|
||||
Enables sharing your current location to the timeline, with live updates.
|
||||
@@ -169,21 +124,16 @@ If you're enabling this at the deployment level, you may also want to reference
|
||||
|
||||
Enables rendering of MD / HTML in room topics.
|
||||
|
||||
## Exploring public spaces (`feature_exploring_public_spaces`)
|
||||
|
||||
Enables exploring public spaces in the new search dialog. Requires the server to
|
||||
have [MSC3827](https://github.com/matrix-org/matrix-spec-proposals/pull/3827) enabled.
|
||||
|
||||
## Favourite Messages (`feature_favourite_messages`) [In Development]
|
||||
|
||||
Enables users to bookmark a message or content for a later reference.
|
||||
|
||||
## Sign in another device by showing a QR code (`feature_qr_signin_reciprocate_show`)
|
||||
|
||||
Add capability to the session/device manager screens to generate a QR code to sign in another device + set up E2EE. This requires the homeserver to have support for [MSC3882](https://github.com/matrix-org/matrix-spec-proposals/pull/3882) and [MSC3886](https://github.com/matrix-org/matrix-spec-proposals/pull/3886) enabled.
|
||||
|
||||
## Use the Rust cryptography implementation (`feature_rust_crypto`) [In Development]
|
||||
|
||||
Configures Element to use a new cryptography implementation based on the [matrix-rust-sdk](https://github.com/matrix-org/matrix-rust-sdk).
|
||||
|
||||
This setting is (currently) _sticky_ to a user's session: it only takes effect when the user logs in to a new session. Likewise, even after disabling the setting in `config.json`, the Rust implemention will remain in use until users log out.
|
||||
|
||||
## New room header & details (`feature_new_room_decoration_ui`) [In Development]
|
||||
|
||||
Refactors visually the room header and room sidebar
|
||||
|
||||
## Knock rooms (`feature_ask_to_join`) [In Development]
|
||||
|
||||
Enables knock feature for rooms. This allows users to ask to join a room.
|
||||
|
||||
@@ -6,11 +6,16 @@
|
||||
- Including up-to-date versions of matrix-react-sdk and matrix-js-sdk
|
||||
- Latest LTS version of Node.js installed
|
||||
- Be able to understand English
|
||||
- Be able to understand the language you want to translate Element 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).
|
||||
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()`.
|
||||
|
||||
@@ -29,24 +34,40 @@ function getColorName(hex) {
|
||||
}
|
||||
```
|
||||
|
||||
## Key naming rules
|
||||
|
||||
These rules are based on https://github.com/vector-im/element-x-android/blob/develop/tools/localazy/README.md
|
||||
At this time we are not trying to have a translation key per UI element as some methodologies use,
|
||||
whilst that would offer the greatest flexibility, it would also make reuse between projects nigh impossible.
|
||||
We are aiming for a set of common strings to be shared then some more localised translations per context they may appear in.
|
||||
|
||||
1. Ensure the string doesn't already exist in a related project, such as https://localazy.com/p/element
|
||||
2. Keys for common strings, i.e. strings that can be used at multiple places must start by `action_` if this is a verb, or `common_` if not
|
||||
3. Keys for common accessibility strings must start by `a11y_`. Example: `a11y_hide_password`
|
||||
4. Otherwise, try to group keys logically and nest where appropriate, such as `keyboard_` for strings relating to keyboard shortcuts.
|
||||
5. Ensure your translation keys do not include `.` or `|` or ` `. Try to balance string length against descriptiveness.
|
||||
|
||||
## matrix-react-sdk is still undergoing migration to translation keys
|
||||
|
||||
If you are fortunate enough to be modifying not yet migrated strings please treat them as a new string using instructions below.
|
||||
|
||||
## Adding new strings
|
||||
|
||||
1. Check if the import `import { _t } from 'matrix-react-sdk/src/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 `yarn i18n` to update `src/i18n/strings/en_EN.json`
|
||||
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).
|
||||
1. Check if the import `import { _t } from 'matrix-react-sdk/src/languageHandler';` is present. If not add it to the other import statements. Also import `_td` if needed.
|
||||
1. Add `_t()` to your string passing the translation key you come up with based on the rules above. 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 `yarn i18n` to add the keys to `src/i18n/strings/en_EN.json`
|
||||
1. Modify the new entries in `src/i18n/strings/en_EN.json` with the English (UK) translations for the added keys.
|
||||
|
||||
## Editing existing strings
|
||||
|
||||
1. Edit every occurrence of the string inside `_t()` and `_td()` in the JSX files.
|
||||
1. Run `yarn i18n` to update `src/i18n/strings/en_EN.json`. (Be sure to run this in the same project as the JSX files you just edited.)
|
||||
1. Run `yarn prunei18n` to remove the old string from `src/i18n/strings/*.json`.
|
||||
Edits to existing strings should be performed only via Localazy.
|
||||
There you can also require all translations to be redone if the meaning of the string has changed significantly.
|
||||
|
||||
## Adding variables inside a string.
|
||||
|
||||
1. Extend your `_t()` call. Instead of `_t(STRING)` use `_t(STRING, {})`
|
||||
1. Extend your `_t()` call. Instead of `_t(TKEY)` use `_t(TKEY, {})`
|
||||
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 it to the array in `_t` for example `_t(TKEY, {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).
|
||||
@@ -61,4 +82,5 @@ function getColorName(hex) {
|
||||
- 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.
|
||||
- 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 repetition, 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.
|
||||
- Don't forget curly braces when you assign an expression to JSX attributes in the render method)
|
||||
|
||||
@@ -1,63 +1,33 @@
|
||||
# How to translate Element
|
||||
|
||||
# 🚨 Translations are currently frozen as we are migrating Translation Management Systems! 🚨
|
||||
|
||||
## Requirements
|
||||
|
||||
- Web Browser
|
||||
- Be able to understand English
|
||||
- Be able to understand the language you want to translate Element into
|
||||
|
||||
## Step 0: Join #element-translations:matrix.org
|
||||
## Join #element-translations:matrix.org
|
||||
|
||||
1. Come and join https://matrix.to/#/#element-translations:matrix.org for general discussion
|
||||
2. Join https://matrix.to/#/#element-translators:matrix.org for language-specific rooms
|
||||
3. Read scrollback and/or ask if anyone else is working on your language, and co-ordinate if needed. In general little-or-no coordination is needed though :)
|
||||
|
||||
## Step 1: Preparing your Weblate Profile
|
||||
|
||||
1. Head to https://translate.element.io and register either via Github or email
|
||||
2. After registering check if you got an email to verify your account and click the link (if there is none head to step 1.4)
|
||||
3. Log into weblate
|
||||
4. Head to https://translate.element.io/accounts/profile/ and select the languages you know and maybe another language you know too.
|
||||
|
||||
## How to check if your language already is being translated
|
||||
|
||||
Go to https://translate.element.io/projects/element-web/ and visit the 2 sub-projects.
|
||||
If your language is listed go to Step 2a and if not go to Step 2b
|
||||
Go to https://localazy.com/p/element-web
|
||||
If your language is listed then you can get started, have a read of https://localazy.com/docs/general/translating-strings
|
||||
if you need help getting started. If your language is not yet listed please express your wishes to start translating it in
|
||||
the general discussion room linked above.
|
||||
|
||||
## Step 2a: Helping on existing languages.
|
||||
### What are `%(something)s`?
|
||||
|
||||
1. Head to one of the projects listed https://translate.element.io/projects/element-web/
|
||||
2. Click on the `translate` button on the right side of your language
|
||||
3. Fill in the translations in the writeable field. You will see the original English string and the string of your second language above.
|
||||
These things are placeholders that are expanded when displayed by Element. They can be room names, usernames or similar.
|
||||
If you find one, you can move to the right place for your language, but not delete it as the variable will be missing if you do.
|
||||
A special case is `%(count)s` as this is also used to determine which pluralisation is used.
|
||||
|
||||
Head to the explanations under Steb 2b
|
||||
### What are `<link>Something</link>`
|
||||
|
||||
## Step 2b: Adding a new language
|
||||
|
||||
1. Go to one of the projects listed https://translate.element.io/projects/element-web/
|
||||
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
|
||||
|
||||
### What means the green button under the text field?
|
||||
|
||||
The green button let you save our translations directly. Please only use it if you are 100% sure about that translation. If you do not know a translation please DO NOT click that button. Use the arrows above the translations field and click to the right.
|
||||
|
||||
### What means the yellow button under the text field?
|
||||
|
||||
The yellow button has to be used if you are unsure about the translation but you have a rough idea. It adds a new suggestion to the string which can than be reviewed by others.
|
||||
|
||||
### What are "%(something)s"?
|
||||
|
||||
These things are variables that are expanded when displayed by Element. They can be room names, usernames or similar. If you find one, you can move to the right place for your language, but not delete it as the variable will be missing if you do.
|
||||
|
||||
A special case is `%(urlStart)s` and `%(urlEnd)s` which are used to mark the beginning of a hyperlink (i.e. `<a href="/somewhere">` and `</a>`. You must keep these markers surrounding the equivalent string in your language that needs to be hyperlinked.
|
||||
|
||||
### "I want to come back to this string. How?"
|
||||
|
||||
You can use inside the translation field "Review needed" checkbox. It will be shown as Strings that need to be reviewed.
|
||||
|
||||
### Further reading
|
||||
|
||||
The official Weblate doc provides some more in-depth explanation on how to do translations and talks about do and don'ts. You can find it at: https://docs.weblate.org/en/latest/user/translating.html
|
||||
These things are markup tags, they encapsulate sections of translations to be marked up, with links, buttons, emphasis and such.
|
||||
You must keep these markers surrounding the equivalent string in your language that needs to be marked up.
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
{
|
||||
"default_server_name": "matrix.org",
|
||||
"default_server_config": {
|
||||
"m.homeserver": {
|
||||
"base_url": "https://matrix-client.matrix.org"
|
||||
},
|
||||
"m.identity_server": {
|
||||
"base_url": "https://vector.im"
|
||||
}
|
||||
},
|
||||
"brand": "Element",
|
||||
"integrations_ui_url": "https://scalar.vector.im/",
|
||||
"integrations_rest_url": "https://scalar.vector.im/api",
|
||||
@@ -12,8 +20,8 @@
|
||||
],
|
||||
"bug_report_endpoint_url": "https://element.io/bugreports/submit",
|
||||
"uisi_autorageshake_app": "element-auto-uisi",
|
||||
"showLabsSettings": false,
|
||||
"roomDirectory": {
|
||||
"show_labs_settings": false,
|
||||
"room_directory": {
|
||||
"servers": ["matrix.org", "gitter.im", "libera.chat"]
|
||||
},
|
||||
"enable_presence_by_hs_url": {
|
||||
@@ -31,8 +39,8 @@
|
||||
}
|
||||
],
|
||||
"posthog": {
|
||||
"projectApiKey": "phc_Jzsm6DTm6V2705zeU5dcNvQDlonOR68XvX2sh1sEOHO",
|
||||
"apiHost": "https://posthog.element.io"
|
||||
"project_api_key": "phc_Jzsm6DTm6V2705zeU5dcNvQDlonOR68XvX2sh1sEOHO",
|
||||
"api_host": "https://posthog.element.io"
|
||||
},
|
||||
"privacy_policy_url": "https://element.io/cookie-policy",
|
||||
"map_style_url": "https://api.maptiler.com/maps/streets/style.json?key=fU3vlMsMn4Jb6dnEIFsx"
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
{
|
||||
"default_server_name": "matrix.org",
|
||||
"default_server_config": {
|
||||
"m.homeserver": {
|
||||
"base_url": "https://matrix-client.matrix.org"
|
||||
},
|
||||
"m.identity_server": {
|
||||
"base_url": "https://vector.im"
|
||||
}
|
||||
},
|
||||
"brand": "Element",
|
||||
"integrations_ui_url": "https://scalar.vector.im/",
|
||||
"integrations_rest_url": "https://scalar.vector.im/api",
|
||||
@@ -12,8 +20,8 @@
|
||||
],
|
||||
"bug_report_endpoint_url": "https://element.io/bugreports/submit",
|
||||
"uisi_autorageshake_app": "element-auto-uisi",
|
||||
"showLabsSettings": true,
|
||||
"roomDirectory": {
|
||||
"show_labs_settings": true,
|
||||
"room_directory": {
|
||||
"servers": ["matrix.org", "gitter.im", "libera.chat"]
|
||||
},
|
||||
"enable_presence_by_hs_url": {
|
||||
@@ -35,16 +43,15 @@
|
||||
"environment": "develop"
|
||||
},
|
||||
"posthog": {
|
||||
"projectApiKey": "phc_Jzsm6DTm6V2705zeU5dcNvQDlonOR68XvX2sh1sEOHO",
|
||||
"apiHost": "https://posthog.element.io"
|
||||
"project_api_key": "phc_Jzsm6DTm6V2705zeU5dcNvQDlonOR68XvX2sh1sEOHO",
|
||||
"api_host": "https://posthog.element.io"
|
||||
},
|
||||
"privacy_policy_url": "https://element.io/cookie-policy",
|
||||
"features": {
|
||||
"feature_spotlight": true,
|
||||
"feature_video_rooms": true
|
||||
},
|
||||
"element_call": {
|
||||
"url": "https://element-call.netlify.app"
|
||||
"url": "https://element-call-livekit.netlify.app"
|
||||
},
|
||||
"map_style_url": "https://api.maptiler.com/maps/streets/style.json?key=fU3vlMsMn4Jb6dnEIFsx"
|
||||
}
|
||||
|
||||
61
jest.config.ts
Normal file
61
jest.config.ts
Normal file
@@ -0,0 +1,61 @@
|
||||
/*
|
||||
Copyright 2023 The Matrix.org Foundation C.I.C.
|
||||
|
||||
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 { env } from "process";
|
||||
|
||||
import type { Config } from "jest";
|
||||
|
||||
const config: Config = {
|
||||
testEnvironment: "jsdom",
|
||||
testEnvironmentOptions: {
|
||||
url: "http://localhost/",
|
||||
},
|
||||
testMatch: ["<rootDir>/test/**/*-test.[tj]s?(x)"],
|
||||
setupFiles: ["jest-canvas-mock"],
|
||||
setupFilesAfterEnv: [
|
||||
"<rootDir>/node_modules/matrix-react-sdk/test/setupTests.ts",
|
||||
"<rootDir>/test/setup/setupLanguage.ts",
|
||||
],
|
||||
moduleNameMapper: {
|
||||
"\\.(css|scss|pcss)$": "<rootDir>/__mocks__/cssMock.js",
|
||||
"\\.(gif|png|ttf|woff2)$": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/imageMock.js",
|
||||
"\\.svg$": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/svg.js",
|
||||
"\\$webapp/i18n/languages.json": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/languages.json",
|
||||
"^react$": "<rootDir>/node_modules/react",
|
||||
"^react-dom$": "<rootDir>/node_modules/react-dom",
|
||||
"^matrix-js-sdk$": "<rootDir>/node_modules/matrix-js-sdk/src",
|
||||
"^matrix-react-sdk$": "<rootDir>/node_modules/matrix-react-sdk/src",
|
||||
"decoderWorker\\.min\\.js": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/empty.js",
|
||||
"decoderWorker\\.min\\.wasm": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/empty.js",
|
||||
"waveWorker\\.min\\.js": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/empty.js",
|
||||
"context-filter-polyfill": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/empty.js",
|
||||
"FontManager.ts": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/FontManager.js",
|
||||
"workers/(.+)\\.worker\\.ts": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/workerMock.js",
|
||||
"^!!raw-loader!.*": "jest-raw-loader",
|
||||
"RecorderWorklet": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/empty.js",
|
||||
"^fetch-mock$": "<rootDir>/node_modules/fetch-mock",
|
||||
},
|
||||
transformIgnorePatterns: ["/node_modules/(?!matrix-js-sdk).+$", "/node_modules/(?!matrix-react-sdk).+$"],
|
||||
coverageReporters: ["text-summary", "lcov"],
|
||||
testResultsProcessor: "@casualbot/jest-sonar-reporter",
|
||||
};
|
||||
|
||||
// if we're running under GHA, enable the GHA reporter
|
||||
if (env["GITHUB_ACTIONS"] !== undefined) {
|
||||
config.reporters = [["github-actions", { silent: false }], "summary"];
|
||||
}
|
||||
|
||||
export default config;
|
||||
37
localazy.json
Normal file
37
localazy.json
Normal file
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"readKey": "a7688614897667993891-866e2615b0a22e6ccef56aea9b10e815efa3e1296752a7a30bd9925f1a8f33e7",
|
||||
|
||||
"upload": {
|
||||
"type": "json",
|
||||
"keySeparator": "|",
|
||||
"deprecate": "file",
|
||||
"features": ["plural_object", "filter_untranslated"],
|
||||
"files": [
|
||||
{
|
||||
"pattern": "src/i18n/strings/en_EN.json",
|
||||
"file": "element-web.json",
|
||||
"lang": "inherited"
|
||||
},
|
||||
{
|
||||
"group": "existing",
|
||||
"pattern": "src/i18n/strings/*.json",
|
||||
"file": "element-web.json",
|
||||
"excludes": ["src/i18n/strings/en_EN.json"],
|
||||
"lang": "${autodetectLang}"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
"download": {
|
||||
"files": [
|
||||
{
|
||||
"conditions": "equals: ${file}, element-web.json",
|
||||
"output": "src/i18n/strings/${langLsrUnderscore}.json"
|
||||
}
|
||||
],
|
||||
"includeSourceLang": "${includeSourceLang|false}",
|
||||
"langAliases": {
|
||||
"en": "en-EN"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -185,9 +185,20 @@ function getModuleApiVersionFor(moduleName: string): string {
|
||||
return findDepVersionInPackageJson(moduleApiDepName, pkgJsonStr);
|
||||
}
|
||||
|
||||
// A list of Module API versions that are supported in addition to the currently installed one
|
||||
// defined in the package.json. This is necessary because semantic versioning is applied to both
|
||||
// the Module-side surface of the API and the Client-side surface of the API. So breaking changes
|
||||
// in the Client-side surface lead to a major bump even though the Module-side surface stays
|
||||
// compatible. We aim to not break the Module-side surface so we maintain a list of compatible
|
||||
// older versions.
|
||||
const backwardsCompatibleMajorVersions = ["1.0.0"];
|
||||
|
||||
function isModuleVersionCompatible(ourApiVersion: string, moduleApiVersion: string): boolean {
|
||||
if (!moduleApiVersion) return false;
|
||||
return semver.satisfies(ourApiVersion, moduleApiVersion);
|
||||
return (
|
||||
semver.satisfies(ourApiVersion, moduleApiVersion) ||
|
||||
backwardsCompatibleMajorVersions.some((version) => semver.satisfies(version, moduleApiVersion))
|
||||
);
|
||||
}
|
||||
|
||||
function writeModulesTs(content: string): void {
|
||||
|
||||
125
package.json
125
package.json
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "element-web",
|
||||
"version": "1.11.25",
|
||||
"version": "1.11.43",
|
||||
"description": "A feature-rich client for Matrix.org",
|
||||
"author": "New Vector Ltd.",
|
||||
"repository": {
|
||||
@@ -26,15 +26,19 @@
|
||||
"contribute.json"
|
||||
],
|
||||
"style": "bundle.css",
|
||||
"matrix_i18n_extra_translation_funcs": [
|
||||
"UserFriendlyError"
|
||||
],
|
||||
"scripts": {
|
||||
"i18n": "matrix-gen-i18n",
|
||||
"prunei18n": "matrix-prune-i18n",
|
||||
"diff-i18n": "cp src/i18n/strings/en_EN.json src/i18n/strings/en_EN_orig.json && matrix-gen-i18n && matrix-compare-i18n-files src/i18n/strings/en_EN_orig.json src/i18n/strings/en_EN.json",
|
||||
"i18n": "matrix-gen-i18n && yarn i18n:sort && yarn i18n:lint",
|
||||
"i18n:sort": "jq --sort-keys '.' src/i18n/strings/en_EN.json > src/i18n/strings/en_EN.json.tmp && mv src/i18n/strings/en_EN.json.tmp src/i18n/strings/en_EN.json",
|
||||
"i18n:lint": "prettier --write src/i18n/strings/ --ignore-path /dev/null",
|
||||
"i18n:diff": "cp src/i18n/strings/en_EN.json src/i18n/strings/en_EN_orig.json && yarn i18n && matrix-compare-i18n-files src/i18n/strings/en_EN_orig.json src/i18n/strings/en_EN.json",
|
||||
"clean": "rimraf lib webapp",
|
||||
"build": "yarn clean && yarn build:genfiles && yarn build:bundle",
|
||||
"build-stats": "yarn clean && yarn build:genfiles && yarn build:bundle-stats",
|
||||
"build:jitsi": "node scripts/build-jitsi.js",
|
||||
"build:res": "node scripts/copy-res.js",
|
||||
"build:jitsi": "ts-node scripts/build-jitsi.ts",
|
||||
"build:res": "ts-node scripts/copy-res.ts",
|
||||
"build:genfiles": "yarn build:res && yarn build:jitsi && yarn build:module_system",
|
||||
"build:modernizr": "modernizr -c .modernizr.json -d src/vector/modernizr.js",
|
||||
"build:bundle": "webpack --progress --bail --mode production",
|
||||
@@ -43,7 +47,7 @@
|
||||
"dist": "scripts/package.sh",
|
||||
"start": "yarn build:module_system && concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n res,element-js \"yarn start:res\" \"yarn start:js\"",
|
||||
"start:https": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n res,element-js \"yarn start:res\" \"yarn start:js --https\"",
|
||||
"start:res": "yarn build:jitsi && node scripts/copy-res.js -w",
|
||||
"start:res": "yarn build:jitsi && ts-node scripts/copy-res.ts -w",
|
||||
"start:js": "webpack-dev-server --output-filename=bundles/_dev_/[name].js --output-chunk-filename=bundles/_dev_/[name].js -w --mode development --disable-host-check --hot",
|
||||
"lint": "yarn lint:types && yarn lint:js && yarn lint:style",
|
||||
"lint:js": "yarn lint:js:src && yarn lint:js:module_system",
|
||||
@@ -58,24 +62,25 @@
|
||||
"lint:style": "stylelint \"res/css/**/*.pcss\"",
|
||||
"test": "jest",
|
||||
"coverage": "yarn test --coverage",
|
||||
"analyse:unused-exports": "node ./scripts/analyse_unused_exports.js"
|
||||
"analyse:unused-exports": "ts-node ./scripts/analyse_unused_exports.ts",
|
||||
"analyse:webpack-bundles": "webpack-bundle-analyzer webpack-stats.json webapp"
|
||||
},
|
||||
"resolutions": {
|
||||
"@types/react-dom": "17.0.19",
|
||||
"@types/react": "17.0.53"
|
||||
"@types/react": "17.0.58"
|
||||
},
|
||||
"dependencies": {
|
||||
"@matrix-org/olm": "https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.12.tgz",
|
||||
"@matrix-org/react-sdk-module-api": "^0.0.4",
|
||||
"@matrix-org/olm": "https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.14.tgz",
|
||||
"@matrix-org/react-sdk-module-api": "^2.1.0",
|
||||
"gfm.css": "^1.1.2",
|
||||
"jsrsasign": "^10.5.25",
|
||||
"katex": "^0.16.0",
|
||||
"matrix-js-sdk": "23.5.0",
|
||||
"matrix-react-sdk": "3.68.0",
|
||||
"matrix-widget-api": "^1.1.1",
|
||||
"lodash": "^4.17.21",
|
||||
"matrix-js-sdk": "github:matrix-org/matrix-js-sdk#develop",
|
||||
"matrix-react-sdk": "github:matrix-org/matrix-react-sdk#develop",
|
||||
"matrix-widget-api": "^1.3.1",
|
||||
"react": "17.0.2",
|
||||
"react-dom": "17.0.2",
|
||||
"sanitize-html": "^2.3.2",
|
||||
"ua-parser-js": "^1.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
@@ -84,6 +89,7 @@
|
||||
"@babel/eslint-plugin": "^7.12.10",
|
||||
"@babel/plugin-proposal-class-properties": "^7.12.1",
|
||||
"@babel/plugin-proposal-export-default-from": "^7.12.1",
|
||||
"@babel/plugin-proposal-logical-assignment-operators": "^7.20.7",
|
||||
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1",
|
||||
"@babel/plugin-proposal-numeric-separator": "^7.12.7",
|
||||
"@babel/plugin-proposal-object-rest-spread": "^7.12.1",
|
||||
@@ -97,17 +103,19 @@
|
||||
"@babel/runtime": "^7.12.5",
|
||||
"@casualbot/jest-sonar-reporter": "^2.2.5",
|
||||
"@principalstudio/html-webpack-inject-preload": "^1.2.7",
|
||||
"@sentry/webpack-plugin": "^1.18.1",
|
||||
"@sentry/webpack-plugin": "^2.0.0",
|
||||
"@svgr/webpack": "^5.5.0",
|
||||
"@testing-library/react": "^12.1.5",
|
||||
"@types/flux": "^3.1.9",
|
||||
"@types/jest": "^29.0.0",
|
||||
"@types/jitsi-meet": "^2.0.2",
|
||||
"@types/jsrsasign": "^10.5.4",
|
||||
"@types/loader-utils": "^2.0.4",
|
||||
"@types/lodash": "^4.14.197",
|
||||
"@types/modernizr": "^3.5.3",
|
||||
"@types/node": "^16",
|
||||
"@types/react": "17.0.53",
|
||||
"@types/node-fetch": "^2.6.4",
|
||||
"@types/react": "17.0.58",
|
||||
"@types/react-dom": "17.0.19",
|
||||
"@types/sanitize-html": "^2.3.1",
|
||||
"@types/ua-parser-js": "^0.7.36",
|
||||
"@typescript-eslint/eslint-plugin": "^5.45.0",
|
||||
"@typescript-eslint/parser": "^5.45.0",
|
||||
@@ -115,19 +123,19 @@
|
||||
"babel-jest": "^29.0.0",
|
||||
"babel-loader": "^8.2.2",
|
||||
"chokidar": "^3.5.1",
|
||||
"concurrently": "^7.0.0",
|
||||
"cpx": "^1.5.0",
|
||||
"concurrently": "^8.0.0",
|
||||
"cpx": "1.5.0",
|
||||
"css-loader": "^4",
|
||||
"dotenv": "^16.0.2",
|
||||
"eslint": "8.35.0",
|
||||
"eslint": "8.48.0",
|
||||
"eslint-config-google": "^0.14.0",
|
||||
"eslint-config-prettier": "^8.5.0",
|
||||
"eslint-plugin-deprecate": "^0.7.0",
|
||||
"eslint-config-prettier": "^9.0.0",
|
||||
"eslint-plugin-deprecate": "0.7.0",
|
||||
"eslint-plugin-import": "^2.26.0",
|
||||
"eslint-plugin-matrix-org": "^1.0.0",
|
||||
"eslint-plugin-react": "^7.28.0",
|
||||
"eslint-plugin-react-hooks": "^4.3.0",
|
||||
"eslint-plugin-unicorn": "^45.0.0",
|
||||
"eslint-plugin-unicorn": "^48.0.0",
|
||||
"extract-text-webpack-plugin": "^4.0.0-beta.0",
|
||||
"fake-indexeddb": "^4.0.0",
|
||||
"fetch-mock-jest": "^1.5.1",
|
||||
@@ -135,17 +143,17 @@
|
||||
"fs-extra": "^11.0.0",
|
||||
"html-webpack-plugin": "^4.5.2",
|
||||
"jest": "^29.0.0",
|
||||
"jest-canvas-mock": "^2.3.0",
|
||||
"jest-canvas-mock": "2.5.2",
|
||||
"jest-environment-jsdom": "^29.0.0",
|
||||
"jest-mock": "^29.0.0",
|
||||
"jest-raw-loader": "^1.0.1",
|
||||
"json-loader": "^0.5.7",
|
||||
"loader-utils": "^3.0.0",
|
||||
"matrix-mock-request": "^2.5.0",
|
||||
"matrix-web-i18n": "^1.3.0",
|
||||
"matrix-web-i18n": "^3.1.1",
|
||||
"mini-css-extract-plugin": "^1",
|
||||
"minimist": "^1.2.6",
|
||||
"mkdirp": "^2.0.0",
|
||||
"mkdirp": "^3.0.0",
|
||||
"modernizr": "^3.12.0",
|
||||
"node-fetch": "^2.6.7",
|
||||
"optimize-css-assets-webpack-plugin": "^6.0.0",
|
||||
@@ -159,69 +167,28 @@
|
||||
"postcss-preset-env": "^6.7.0",
|
||||
"postcss-scss": "^4.0.4",
|
||||
"postcss-simple-vars": "^5.0.2",
|
||||
"prettier": "2.8.4",
|
||||
"prettier": "2.8.8",
|
||||
"proxy-agent": "^6.3.0",
|
||||
"raw-loader": "^4.0.2",
|
||||
"rimraf": "^3.0.2",
|
||||
"semver": "^7.3.7",
|
||||
"simple-proxy-agent": "^1.1.0",
|
||||
"rimraf": "^5.0.0",
|
||||
"semver": "^7.5.2",
|
||||
"string-replace-loader": "3",
|
||||
"style-loader": "2",
|
||||
"stylelint": "^15.0.0",
|
||||
"stylelint-config-prettier": "^9.0.4",
|
||||
"stylelint-config-standard": "^30.0.0",
|
||||
"stylelint-scss": "^4.2.0",
|
||||
"stylelint": "^15.10.1",
|
||||
"stylelint-config-standard": "^34.0.0",
|
||||
"stylelint-scss": "^5.0.0",
|
||||
"terser-webpack-plugin": "^4.0.0",
|
||||
"ts-node": "^10.9.1",
|
||||
"ts-prune": "^0.10.3",
|
||||
"typescript": "4.9.5",
|
||||
"typescript": "5.1.6",
|
||||
"webpack": "^4.46.0",
|
||||
"webpack-bundle-analyzer": "^4.8.0",
|
||||
"webpack-cli": "^3.3.12",
|
||||
"webpack-dev-server": "^3.11.2",
|
||||
"worker-loader": "^3.0.0",
|
||||
"worklet-loader": "^2.0.0",
|
||||
"yaml": "^2.0.1"
|
||||
},
|
||||
"jest": {
|
||||
"testEnvironment": "jsdom",
|
||||
"testEnvironmentOptions": {
|
||||
"url": "http://localhost/"
|
||||
},
|
||||
"testMatch": [
|
||||
"<rootDir>/test/**/*-test.[tj]s?(x)"
|
||||
],
|
||||
"setupFiles": [
|
||||
"jest-canvas-mock"
|
||||
],
|
||||
"setupFilesAfterEnv": [
|
||||
"<rootDir>/node_modules/matrix-react-sdk/test/setupTests.js"
|
||||
],
|
||||
"moduleNameMapper": {
|
||||
"\\.(css|scss|pcss)$": "<rootDir>/__mocks__/cssMock.js",
|
||||
"\\.(gif|png|ttf|woff2)$": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/imageMock.js",
|
||||
"\\.svg$": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/svg.js",
|
||||
"\\$webapp/i18n/languages.json": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/languages.json",
|
||||
"^react$": "<rootDir>/node_modules/react",
|
||||
"^react-dom$": "<rootDir>/node_modules/react-dom",
|
||||
"^matrix-js-sdk$": "<rootDir>/node_modules/matrix-js-sdk/src",
|
||||
"^matrix-react-sdk$": "<rootDir>/node_modules/matrix-react-sdk/src",
|
||||
"decoderWorker\\.min\\.js": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/empty.js",
|
||||
"decoderWorker\\.min\\.wasm": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/empty.js",
|
||||
"waveWorker\\.min\\.js": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/empty.js",
|
||||
"context-filter-polyfill": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/empty.js",
|
||||
"FontManager.ts": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/FontManager.js",
|
||||
"workers/(.+)\\.worker\\.ts": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/workerMock.js",
|
||||
"^!!raw-loader!.*": "jest-raw-loader",
|
||||
"RecorderWorklet": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/empty.js"
|
||||
},
|
||||
"transformIgnorePatterns": [
|
||||
"/node_modules/(?!matrix-js-sdk).+$",
|
||||
"/node_modules/(?!matrix-react-sdk).+$"
|
||||
],
|
||||
"coverageReporters": [
|
||||
"text-summary",
|
||||
"lcov"
|
||||
],
|
||||
"testResultsProcessor": "@casualbot/jest-sonar-reporter"
|
||||
},
|
||||
"@casualbot/jest-sonar-reporter": {
|
||||
"outputDirectory": "coverage",
|
||||
"outputName": "jest-sonar-report.xml",
|
||||
|
||||
@@ -3,7 +3,12 @@
|
||||
"apps": [],
|
||||
"details": [
|
||||
{
|
||||
"appID": "7J4U792NQT.im.vector.app",
|
||||
"appIDs":[
|
||||
"7J4U792NQT.im.vector.app",
|
||||
"7J4U792NQT.io.element.elementx",
|
||||
"7J4U792NQT.io.element.elementx.nightly",
|
||||
"7J4U792NQT.io.element.elementx.pr"
|
||||
],
|
||||
"paths": [
|
||||
"*"
|
||||
]
|
||||
@@ -12,7 +17,10 @@
|
||||
},
|
||||
"webcredentials": {
|
||||
"apps": [
|
||||
"7J4U792NQT.im.vector.app"
|
||||
"7J4U792NQT.im.vector.app",
|
||||
"7J4U792NQT.io.element.elementx",
|
||||
"7J4U792NQT.io.element.elementx.nightly",
|
||||
"7J4U792NQT.io.element.elementx.pr"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -167,32 +167,26 @@ we don't have an account and should hide them. No account == no guest account ei
|
||||
|
||||
<div class="mx_Parent">
|
||||
<a href="https://element.io" target="_blank" rel="noopener">
|
||||
<img src="welcome/images/logo.svg" alt="" class="mx_Logo" />
|
||||
<img src="$logoUrl" alt="" class="mx_Logo" />
|
||||
</a>
|
||||
<h1 class="mx_Header_title">_t("Welcome to Element")</h1>
|
||||
<h1 class="mx_Header_title">_t("welcome_to_element")</h1>
|
||||
<!-- XXX: Our translations system isn't smart enough to recognize variables in the HTML, so we manually do it -->
|
||||
<h4 class="mx_Header_subtitle">_t("Decentralised, encrypted chat & collaboration powered by $matrixLogo")</h4>
|
||||
<h4 class="mx_Header_subtitle">_t("powered_by_matrix_with_logo")</h4>
|
||||
<div class="mx_ButtonGroup">
|
||||
<div class="mx_ButtonRow">
|
||||
<a href="#/login" class="mx_ButtonParent mx_ButtonSignIn mx_Button_iconSignIn">
|
||||
<div class="mx_ButtonLabel">_t("Sign In")</div>
|
||||
<div class="mx_ButtonLabel">_t("action|sign_in")</div>
|
||||
</a>
|
||||
<a href="#/register" class="mx_ButtonParent mx_ButtonCreateAccount mx_Button_iconCreateAccount">
|
||||
<div class="mx_ButtonLabel">_t("Create Account")</div>
|
||||
<div class="mx_ButtonLabel">_t("action|create_account")</div>
|
||||
</a>
|
||||
</div>
|
||||
<!-- The comments below are meant to be used by Ansible as a quick way
|
||||
to strip out the marked content when desired.
|
||||
See https://github.com/vector-im/element-web/issues/8622.
|
||||
TODO: Strip out these comments and rely on the guest flag -->
|
||||
<!-- BEGIN Ansible: Remove these lines when guest access is disabled -->
|
||||
<div class="mx_ButtonRow mx_WelcomePage_guestFunctions">
|
||||
<div>
|
||||
<a href="#/directory" class="mx_ButtonParent mx_SecondaryButton mx_Button_iconRoomDirectory">
|
||||
<div class="mx_ButtonLabel">_t("Explore rooms")</div>
|
||||
<div class="mx_ButtonLabel">_t("action|explore_rooms")</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<!-- END Ansible: Remove these lines when guest access is disabled -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
<svg width="200" height="200" viewBox="0 0 200 200" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M100 200C155.228 200 200 155.228 200 100C200 44.7715 155.228 0 100 0C44.7715 0 0 44.7715 0 100C0 155.228 44.7715 200 100 200Z" fill="#0DBD8B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M81.7169 46.5946C81.7169 42.5581 84.9959 39.2859 89.0408 39.2859C116.456 39.2859 138.681 61.4642 138.681 88.8225C138.681 92.859 135.401 96.1312 131.357 96.1312C127.312 96.1312 124.033 92.859 124.033 88.8225C124.033 69.5372 108.366 53.9033 89.0408 53.9033C84.9959 53.9033 81.7169 50.6311 81.7169 46.5946Z" fill="white"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M153.39 81.5137C157.435 81.5137 160.714 84.7859 160.714 88.8224C160.714 116.181 138.49 138.359 111.075 138.359C107.03 138.359 103.751 135.087 103.751 131.05C103.751 127.014 107.03 123.742 111.075 123.742C130.4 123.742 146.066 108.108 146.066 88.8224C146.066 84.7859 149.345 81.5137 153.39 81.5137Z" fill="white"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M118.398 153.405C118.398 157.442 115.119 160.714 111.074 160.714C83.6592 160.714 61.4347 138.536 61.4347 111.177C61.4347 107.141 64.7138 103.869 68.7587 103.869C72.8035 103.869 76.0826 107.141 76.0826 111.177C76.0826 130.463 91.7489 146.097 111.074 146.097C115.119 146.097 118.398 149.369 118.398 153.405Z" fill="white"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M46.6097 118.486C42.5648 118.486 39.2858 115.214 39.2858 111.178C39.2858 83.8193 61.5102 61.6409 88.9255 61.6409C92.9704 61.6409 96.2494 64.9132 96.2494 68.9497C96.2494 72.9862 92.9704 76.2584 88.9255 76.2584C69.6 76.2584 53.9337 91.8922 53.9337 111.178C53.9337 115.214 50.6546 118.486 46.6097 118.486Z" fill="white"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.7 KiB |
@@ -1,13 +1,12 @@
|
||||
#!/usr/bin/env node
|
||||
"use strict";
|
||||
|
||||
const fs = require("fs");
|
||||
const { exec } = require("node:child_process");
|
||||
import * as fs from "node:fs";
|
||||
import { exec } from "node:child_process";
|
||||
|
||||
const includeJSSDK = process.argv.includes("--include-js-sdk");
|
||||
const ignore = [];
|
||||
const ignore: string[] = [];
|
||||
|
||||
ignore.push(...Object.values(JSON.parse(fs.readFileSync(`${__dirname}/../components.json`))));
|
||||
ignore.push(...Object.values<string>(JSON.parse(fs.readFileSync(`${__dirname}/../components.json`, "utf-8"))));
|
||||
ignore.push("/index.ts");
|
||||
// We ignore js-sdk by default as it may export for other non element-web projects
|
||||
if (!includeJSSDK) ignore.push("matrix-js-sdk");
|
||||
@@ -31,7 +30,7 @@ exec(command, (error, stdout, stderr) => {
|
||||
// won't have an "/" character at the start, so we try to fix that for
|
||||
// better UX
|
||||
// TODO: This might break on Windows
|
||||
lines = lines.reduce((newLines, line) => {
|
||||
lines = lines.reduce<string[]>((newLines, line) => {
|
||||
if (!line.startsWith("/")) newLines.push("/" + line);
|
||||
else newLines.push(line);
|
||||
return newLines;
|
||||
@@ -3,28 +3,25 @@
|
||||
// due to file associations in Windows.
|
||||
// Sorry.
|
||||
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
const mkdirp = require("mkdirp");
|
||||
const fetch = require("node-fetch");
|
||||
const ProxyAgent = require("simple-proxy-agent");
|
||||
import * as fs from "node:fs";
|
||||
import * as path from "node:path";
|
||||
import { mkdirpSync } from "mkdirp";
|
||||
import fetch from "node-fetch";
|
||||
import { ProxyAgent } from "proxy-agent";
|
||||
|
||||
console.log("Making webapp directory");
|
||||
mkdirp.sync("webapp");
|
||||
mkdirpSync("webapp");
|
||||
|
||||
// curl -s https://meet.element.io/libs/external_api.min.js > ./webapp/jitsi_external_api.min.js
|
||||
console.log("Downloading Jitsi script");
|
||||
const fname = path.join("webapp", "jitsi_external_api.min.js");
|
||||
|
||||
const options = {};
|
||||
if (process.env.HTTPS_PROXY) {
|
||||
options.agent = new ProxyAgent(process.env.HTTPS_PROXY, { tunnel: true });
|
||||
}
|
||||
|
||||
fetch("https://meet.element.io/libs/external_api.min.js", options)
|
||||
fetch("https://meet.element.io/libs/external_api.min.js", {
|
||||
agent: new ProxyAgent(),
|
||||
})
|
||||
.then((res) => {
|
||||
const stream = fs.createWriteStream(fname);
|
||||
return new Promise((resolve, reject) => {
|
||||
return new Promise<void>((resolve, reject) => {
|
||||
res.body.pipe(stream);
|
||||
res.body.on("error", (err) => reject(err));
|
||||
res.body.on("finish", () => resolve());
|
||||
@@ -1 +0,0 @@
|
||||
../../matrix-react-sdk/scripts/check-i18n.pl
|
||||
@@ -1,293 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
const loaderUtils = require("loader-utils");
|
||||
|
||||
// copies the resources into the webapp directory.
|
||||
//
|
||||
|
||||
// Languages are listed manually so we can choose when to include
|
||||
// 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 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: "eo", label: "Esperanto" },
|
||||
{ value: "es", label: "Español" },
|
||||
{ value: "et", label: "Eesti" },
|
||||
{ value: "eu", label: "Euskara" },
|
||||
{ value: "fi", label: "Suomi" },
|
||||
{ value: "fr", label: "Français" },
|
||||
{ value: "gl", label: "Galego" },
|
||||
{ value: "he", label: "עברית" },
|
||||
{ value: "hi", label: "हिन्दी" },
|
||||
{ value: "hu", label: "Magyar" },
|
||||
{ value: "id", label: "Bahasa Indonesia" },
|
||||
{ value: "is", label: "íslenska" },
|
||||
{ value: "it", label: "Italiano" },
|
||||
{ value: "ja", label: "日本語" },
|
||||
{ value: "kab", label: "Taqbaylit" },
|
||||
{ value: "ko", label: "한국어" },
|
||||
{ value: "lo", label: "ລາວ" },
|
||||
{ value: "lt", label: "Lietuvių" },
|
||||
{ value: "lv", label: "Latviešu" },
|
||||
{ value: "nb_NO", label: "Norwegian Bokmål" },
|
||||
{ value: "nl", label: "Nederlands" },
|
||||
{ value: "nn", label: "Norsk Nynorsk" },
|
||||
{ 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: "sq", label: "Shqip" },
|
||||
{ value: "sr", label: "српски" },
|
||||
{ value: "sv", label: "Svenska" },
|
||||
{ value: "te", label: "తెలుగు" },
|
||||
{ value: "th", label: "ไทย" },
|
||||
{ value: "tr", label: "Türkçe" },
|
||||
{ value: "uk", label: "українська мова" },
|
||||
{ value: "vi", label: "Tiếng Việt" },
|
||||
{ value: "vls", label: "West-Vlaams" },
|
||||
{ value: "zh_Hans", label: "简体中文" }, // simplified chinese
|
||||
{ value: "zh_Hant", label: "繁體中文" }, // traditional chinese
|
||||
];
|
||||
|
||||
// cpx includes globbed parts of the filename in the destination, but excludes
|
||||
// common parents. Hence, "res/{a,b}/**": the output will be "dest/a/..." and
|
||||
// "dest/b/...".
|
||||
const COPY_LIST = [
|
||||
["res/apple-app-site-association", "webapp"],
|
||||
["res/manifest.json", "webapp"],
|
||||
["res/sw.js", "webapp"],
|
||||
["res/welcome.html", "webapp"],
|
||||
["res/welcome/**", "webapp/welcome"],
|
||||
["res/themes/**", "webapp/themes"],
|
||||
["res/vector-icons/**", "webapp/vector-icons"],
|
||||
["res/decoder-ring/**", "webapp/decoder-ring"],
|
||||
["node_modules/matrix-react-sdk/res/media/**", "webapp/media"],
|
||||
["node_modules/@matrix-org/olm/olm_legacy.js", "webapp", { directwatch: 1 }],
|
||||
["./config.json", "webapp", { directwatch: 1 }],
|
||||
["contribute.json", "webapp"],
|
||||
];
|
||||
|
||||
const parseArgs = require("minimist");
|
||||
const Cpx = require("cpx");
|
||||
const chokidar = require("chokidar");
|
||||
const fs = require("fs");
|
||||
const rimraf = require("rimraf");
|
||||
|
||||
const argv = parseArgs(process.argv.slice(2), {});
|
||||
|
||||
const watch = argv.w;
|
||||
const verbose = argv.v;
|
||||
|
||||
function errCheck(err) {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
// Check if webapp exists
|
||||
if (!fs.existsSync("webapp")) {
|
||||
fs.mkdirSync("webapp");
|
||||
}
|
||||
// Check if i18n exists
|
||||
if (!fs.existsSync("webapp/i18n/")) {
|
||||
fs.mkdirSync("webapp/i18n/");
|
||||
}
|
||||
|
||||
function next(i, err) {
|
||||
errCheck(err);
|
||||
|
||||
if (i >= COPY_LIST.length) {
|
||||
return;
|
||||
}
|
||||
|
||||
const ent = COPY_LIST[i];
|
||||
const source = ent[0];
|
||||
const dest = ent[1];
|
||||
const opts = ent[2] || {};
|
||||
let cpx = undefined;
|
||||
|
||||
if (!opts.lang) {
|
||||
cpx = new Cpx.Cpx(source, dest);
|
||||
}
|
||||
|
||||
if (verbose && cpx) {
|
||||
cpx.on("copy", (event) => {
|
||||
console.log(`Copied: ${event.srcPath} --> ${event.dstPath}`);
|
||||
});
|
||||
cpx.on("remove", (event) => {
|
||||
console.log(`Removed: ${event.path}`);
|
||||
});
|
||||
}
|
||||
|
||||
const cb = (err) => {
|
||||
next(i + 1, err);
|
||||
};
|
||||
|
||||
if (watch) {
|
||||
if (opts.directwatch) {
|
||||
// cpx -w creates a watcher for the parent of any files specified,
|
||||
// which in the case of config.json is '.', which inevitably takes
|
||||
// ages to crawl. So we create our own watcher on the files
|
||||
// instead.
|
||||
const copy = () => {
|
||||
cpx.copy(errCheck);
|
||||
};
|
||||
chokidar.watch(source).on("add", copy).on("change", copy).on("ready", cb).on("error", errCheck);
|
||||
} else {
|
||||
cpx.on("watch-ready", cb);
|
||||
cpx.on("watch-error", cb);
|
||||
cpx.watch();
|
||||
}
|
||||
} else {
|
||||
cpx.copy(cb);
|
||||
}
|
||||
}
|
||||
|
||||
function genLangFile(lang, dest) {
|
||||
const reactSdkFile = "node_modules/matrix-react-sdk/src/i18n/strings/" + lang + ".json";
|
||||
const riotWebFile = "src/i18n/strings/" + lang + ".json";
|
||||
|
||||
let translations = {};
|
||||
[reactSdkFile, riotWebFile].forEach(function (f) {
|
||||
if (fs.existsSync(f)) {
|
||||
try {
|
||||
Object.assign(translations, JSON.parse(fs.readFileSync(f).toString()));
|
||||
} catch (e) {
|
||||
console.error("Failed: " + f, e);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
translations = weblateToCounterpart(translations);
|
||||
|
||||
const json = JSON.stringify(translations, null, 4);
|
||||
const jsonBuffer = Buffer.from(json);
|
||||
const digest = loaderUtils.getHashDigest(jsonBuffer, null, null, 7);
|
||||
const filename = `${lang}.${digest}.json`;
|
||||
|
||||
fs.writeFileSync(dest + filename, json);
|
||||
if (verbose) {
|
||||
console.log("Generated language file: " + filename);
|
||||
}
|
||||
|
||||
return filename;
|
||||
}
|
||||
|
||||
function genLangList(langFileMap) {
|
||||
const languages = {};
|
||||
INCLUDE_LANGS.forEach(function (lang) {
|
||||
const normalizedLanguage = lang.value.toLowerCase().replace("_", "-");
|
||||
const languageParts = normalizedLanguage.split("-");
|
||||
if (languageParts.length == 2 && languageParts[0] == languageParts[1]) {
|
||||
languages[languageParts[0]] = { fileName: langFileMap[lang.value], label: lang.label };
|
||||
} else {
|
||||
languages[normalizedLanguage] = { fileName: langFileMap[lang.value], label: lang.label };
|
||||
}
|
||||
});
|
||||
fs.writeFile("webapp/i18n/languages.json", JSON.stringify(languages, null, 4), function (err) {
|
||||
if (err) {
|
||||
console.error("Copy Error occured: " + err);
|
||||
throw new Error("Failed to generate languages.json");
|
||||
}
|
||||
});
|
||||
if (verbose) {
|
||||
console.log("Generated languages.json");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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]] = {};
|
||||
} else if (typeof obj === "string") {
|
||||
// This is a transitional edge case if a string went from singular to pluralised and both still remain
|
||||
// in the translation json file. Use the singular translation as `other` and merge pluralisation atop.
|
||||
obj = outTrs[keyParts[0]] = {
|
||||
other: inTrs[key],
|
||||
};
|
||||
console.warn("Found entry in i18n file in both singular and pluralised form", keyParts[0]);
|
||||
}
|
||||
obj[keyParts[1]] = inTrs[key];
|
||||
} else {
|
||||
outTrs[key] = inTrs[key];
|
||||
}
|
||||
}
|
||||
|
||||
return outTrs;
|
||||
}
|
||||
|
||||
/**
|
||||
watch the input files for a given language,
|
||||
regenerate the file, adding its content-hashed filename to langFileMap
|
||||
and regenerating languages.json with the new filename
|
||||
*/
|
||||
function watchLanguage(lang, dest, langFileMap) {
|
||||
const reactSdkFile = "node_modules/matrix-react-sdk/src/i18n/strings/" + lang + ".json";
|
||||
const riotWebFile = "src/i18n/strings/" + lang + ".json";
|
||||
|
||||
// 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(() => {
|
||||
const filename = genLangFile(lang, dest);
|
||||
langFileMap[lang] = filename;
|
||||
genLangList(langFileMap);
|
||||
}, 500);
|
||||
};
|
||||
|
||||
[reactSdkFile, riotWebFile].forEach(function (f) {
|
||||
chokidar.watch(f).on("add", makeLang).on("change", makeLang).on("error", errCheck);
|
||||
});
|
||||
}
|
||||
|
||||
// language resources
|
||||
const I18N_DEST = "webapp/i18n/";
|
||||
const I18N_FILENAME_MAP = INCLUDE_LANGS.reduce((m, l) => {
|
||||
const filename = genLangFile(l.value, I18N_DEST);
|
||||
m[l.value] = filename;
|
||||
return m;
|
||||
}, {});
|
||||
genLangList(I18N_FILENAME_MAP);
|
||||
|
||||
if (watch) {
|
||||
INCLUDE_LANGS.forEach((l) => watchLanguage(l.value, I18N_DEST, I18N_FILENAME_MAP));
|
||||
}
|
||||
|
||||
// non-language resources
|
||||
next(0);
|
||||
203
scripts/copy-res.ts
Executable file
203
scripts/copy-res.ts
Executable file
@@ -0,0 +1,203 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
// copies the resources into the webapp directory.
|
||||
|
||||
import parseArgs from "minimist";
|
||||
import * as chokidar from "chokidar";
|
||||
import * as fs from "node:fs";
|
||||
import _ from "lodash";
|
||||
import { Cpx } from "cpx";
|
||||
import * as loaderUtils from "loader-utils";
|
||||
import { Translations } from "matrix-web-i18n";
|
||||
|
||||
const REACT_I18N_BASE_PATH = "node_modules/matrix-react-sdk/src/i18n/strings/";
|
||||
const I18N_BASE_PATH = "src/i18n/strings/";
|
||||
const INCLUDE_LANGS = [...new Set([...fs.readdirSync(I18N_BASE_PATH), ...fs.readdirSync(REACT_I18N_BASE_PATH)])]
|
||||
.filter((fn) => fn.endsWith(".json"))
|
||||
.map((f) => f.slice(0, -5));
|
||||
|
||||
// cpx includes globbed parts of the filename in the destination, but excludes
|
||||
// common parents. Hence, "res/{a,b}/**": the output will be "dest/a/..." and
|
||||
// "dest/b/...".
|
||||
const COPY_LIST: [
|
||||
sourceGlob: string,
|
||||
outputPath: string,
|
||||
opts?: {
|
||||
directwatch?: 1;
|
||||
},
|
||||
][] = [
|
||||
["res/apple-app-site-association", "webapp"],
|
||||
["res/manifest.json", "webapp"],
|
||||
["res/sw.js", "webapp"],
|
||||
["res/welcome.html", "webapp"],
|
||||
["res/welcome/**", "webapp/welcome"],
|
||||
["res/themes/**", "webapp/themes"],
|
||||
["res/vector-icons/**", "webapp/vector-icons"],
|
||||
["res/decoder-ring/**", "webapp/decoder-ring"],
|
||||
["node_modules/matrix-react-sdk/res/media/**", "webapp/media"],
|
||||
["node_modules/@matrix-org/olm/olm_legacy.js", "webapp", { directwatch: 1 }],
|
||||
["./config.json", "webapp", { directwatch: 1 }],
|
||||
["contribute.json", "webapp"],
|
||||
];
|
||||
const argv = parseArgs(process.argv.slice(2), {});
|
||||
|
||||
const watch = argv.w;
|
||||
const verbose = argv.v;
|
||||
|
||||
function errCheck(err?: Error): void {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
// Check if webapp exists
|
||||
if (!fs.existsSync("webapp")) {
|
||||
fs.mkdirSync("webapp");
|
||||
}
|
||||
// Check if i18n exists
|
||||
if (!fs.existsSync("webapp/i18n/")) {
|
||||
fs.mkdirSync("webapp/i18n/");
|
||||
}
|
||||
|
||||
function next(i: number, err?: Error): void {
|
||||
errCheck(err);
|
||||
|
||||
if (i >= COPY_LIST.length) {
|
||||
return;
|
||||
}
|
||||
|
||||
const ent = COPY_LIST[i];
|
||||
const source = ent[0];
|
||||
const dest = ent[1];
|
||||
const opts = ent[2] || {};
|
||||
const cpx = new Cpx(source, dest);
|
||||
|
||||
if (verbose) {
|
||||
cpx.on("copy", (event) => {
|
||||
console.log(`Copied: ${event.srcPath} --> ${event.dstPath}`);
|
||||
});
|
||||
cpx.on("remove", (event) => {
|
||||
console.log(`Removed: ${event.path}`);
|
||||
});
|
||||
}
|
||||
|
||||
const cb = (err?: Error): void => {
|
||||
next(i + 1, err);
|
||||
};
|
||||
|
||||
if (watch) {
|
||||
if (opts.directwatch) {
|
||||
// cpx -w creates a watcher for the parent of any files specified,
|
||||
// which in the case of config.json is '.', which inevitably takes
|
||||
// ages to crawl. So we create our own watcher on the files
|
||||
// instead.
|
||||
const copy = (): void => {
|
||||
cpx.copy(errCheck);
|
||||
};
|
||||
chokidar.watch(source).on("add", copy).on("change", copy).on("ready", cb).on("error", errCheck);
|
||||
} else {
|
||||
cpx.on("watch-ready", cb);
|
||||
cpx.on("watch-error", cb);
|
||||
cpx.watch();
|
||||
}
|
||||
} else {
|
||||
cpx.copy(cb);
|
||||
}
|
||||
}
|
||||
|
||||
function genLangFile(lang: string, dest: string): string {
|
||||
const reactSdkFile = REACT_I18N_BASE_PATH + lang + ".json";
|
||||
const riotWebFile = I18N_BASE_PATH + lang + ".json";
|
||||
|
||||
let translations: Translations = {};
|
||||
[reactSdkFile, riotWebFile].forEach(function (f) {
|
||||
if (fs.existsSync(f)) {
|
||||
try {
|
||||
translations = _.merge(translations, JSON.parse(fs.readFileSync(f).toString()));
|
||||
} catch (e) {
|
||||
console.error("Failed: " + f, e);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
const json = JSON.stringify(translations, null, 4);
|
||||
const jsonBuffer = Buffer.from(json);
|
||||
const digest = loaderUtils.getHashDigest(jsonBuffer, null, "hex", 7);
|
||||
const filename = `${lang}.${digest}.json`;
|
||||
|
||||
fs.writeFileSync(dest + filename, json);
|
||||
if (verbose) {
|
||||
console.log("Generated language file: " + filename);
|
||||
}
|
||||
|
||||
return filename;
|
||||
}
|
||||
|
||||
function genLangList(langFileMap: Record<string, string>): void {
|
||||
const languages: Record<string, string> = {};
|
||||
INCLUDE_LANGS.forEach(function (lang) {
|
||||
const normalizedLanguage = lang.toLowerCase().replace("_", "-");
|
||||
const languageParts = normalizedLanguage.split("-");
|
||||
if (languageParts.length == 2 && languageParts[0] == languageParts[1]) {
|
||||
languages[languageParts[0]] = langFileMap[lang];
|
||||
} else {
|
||||
languages[normalizedLanguage] = langFileMap[lang];
|
||||
}
|
||||
});
|
||||
fs.writeFile("webapp/i18n/languages.json", JSON.stringify(languages, null, 4), function (err) {
|
||||
if (err) {
|
||||
console.error("Copy Error occured: " + err.message);
|
||||
throw new Error("Failed to generate languages.json");
|
||||
}
|
||||
});
|
||||
if (verbose) {
|
||||
console.log("Generated languages.json");
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* watch the input files for a given language,
|
||||
* regenerate the file, adding its content-hashed filename to langFileMap
|
||||
* and regenerating languages.json with the new filename
|
||||
*/
|
||||
function watchLanguage(lang: string, dest: string, langFileMap: Record<string, string>): void {
|
||||
const reactSdkFile = REACT_I18N_BASE_PATH + lang + ".json";
|
||||
const riotWebFile = I18N_BASE_PATH + lang + ".json";
|
||||
|
||||
// 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: ReturnType<typeof setTimeout>;
|
||||
const makeLang = (): void => {
|
||||
if (makeLangDebouncer) {
|
||||
clearTimeout(makeLangDebouncer);
|
||||
}
|
||||
makeLangDebouncer = setTimeout(() => {
|
||||
const filename = genLangFile(lang, dest);
|
||||
langFileMap[lang] = filename;
|
||||
genLangList(langFileMap);
|
||||
}, 500);
|
||||
};
|
||||
|
||||
[reactSdkFile, riotWebFile].forEach(function (f) {
|
||||
chokidar.watch(f).on("add", makeLang).on("change", makeLang).on("error", errCheck);
|
||||
});
|
||||
}
|
||||
|
||||
// language resources
|
||||
const I18N_DEST = "webapp/i18n/";
|
||||
const I18N_FILENAME_MAP = INCLUDE_LANGS.reduce<Record<string, string>>((m, l) => {
|
||||
const filename = genLangFile(l, I18N_DEST);
|
||||
m[l] = filename;
|
||||
return m;
|
||||
}, {});
|
||||
genLangList(I18N_FILENAME_MAP);
|
||||
|
||||
if (watch) {
|
||||
INCLUDE_LANGS.forEach((l) => watchLanguage(l, I18N_DEST, I18N_FILENAME_MAP));
|
||||
}
|
||||
|
||||
// non-language resources
|
||||
next(0);
|
||||
@@ -77,7 +77,7 @@ dodep matrix-org matrix-js-sdk
|
||||
|
||||
pushd matrix-js-sdk
|
||||
yarn link
|
||||
yarn install --pure-lockfile
|
||||
yarn install --frozen-lockfile
|
||||
popd
|
||||
|
||||
yarn link matrix-js-sdk
|
||||
@@ -91,7 +91,7 @@ dodep matrix-org matrix-react-sdk
|
||||
pushd matrix-react-sdk
|
||||
yarn link
|
||||
yarn link matrix-js-sdk
|
||||
yarn install --pure-lockfile
|
||||
yarn install --frozen-lockfile
|
||||
popd
|
||||
|
||||
yarn link matrix-react-sdk
|
||||
|
||||
@@ -14,35 +14,38 @@ set -ex
|
||||
# for the primary repo (element-web in this case).
|
||||
|
||||
# Install dependencies, as we'll be using fetchdep.sh from matrix-react-sdk
|
||||
yarn install --pure-lockfile
|
||||
yarn install --frozen-lockfile
|
||||
|
||||
# Pass appropriate repo to fetchdep.sh
|
||||
export PR_ORG=vector-im
|
||||
export PR_REPO=element-web
|
||||
|
||||
# Set up the js-sdk first
|
||||
node_modules/matrix-react-sdk/scripts/fetchdep.sh matrix-org matrix-js-sdk
|
||||
node_modules/matrix-react-sdk/scripts/fetchdep.sh matrix-org matrix-js-sdk develop
|
||||
pushd matrix-js-sdk
|
||||
yarn link
|
||||
yarn install --pure-lockfile
|
||||
yarn install --frozen-lockfile
|
||||
popd
|
||||
|
||||
# Also set up matrix-analytics-events so we get the latest from
|
||||
# the main branch or a branch with matching name
|
||||
node_modules/matrix-react-sdk/scripts/fetchdep.sh matrix-org matrix-analytics-events main
|
||||
pushd matrix-analytics-events
|
||||
yarn link
|
||||
yarn install --pure-lockfile
|
||||
yarn build:ts
|
||||
popd
|
||||
# Also set up matrix-analytics-events for branch with matching name
|
||||
node_modules/matrix-react-sdk/scripts/fetchdep.sh matrix-org matrix-analytics-events
|
||||
# We don't pass a default branch so cloning may fail when we are not in a PR
|
||||
# This is expected as this project does not share a release cycle but we still branch match it
|
||||
if [ -d matrix-analytics-events ]; then
|
||||
pushd matrix-analytics-events
|
||||
yarn link
|
||||
yarn install --frozen-lockfile
|
||||
yarn build:ts
|
||||
popd
|
||||
fi
|
||||
|
||||
# Now set up the react-sdk
|
||||
node_modules/matrix-react-sdk/scripts/fetchdep.sh matrix-org matrix-react-sdk
|
||||
node_modules/matrix-react-sdk/scripts/fetchdep.sh matrix-org matrix-react-sdk develop
|
||||
pushd matrix-react-sdk
|
||||
yarn link
|
||||
yarn link matrix-js-sdk
|
||||
yarn link @matrix-org/analytics-events
|
||||
yarn install --pure-lockfile
|
||||
[ -d matrix-analytics-events ] && yarn link @matrix-org/analytics-events
|
||||
yarn install --frozen-lockfile
|
||||
popd
|
||||
|
||||
# Link the layers into element-web
|
||||
|
||||
@@ -1,116 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Converts an svg logo into the various image resources required by
|
||||
# the various platforms deployments.
|
||||
#
|
||||
# On debian-based systems you need these deps:
|
||||
# apt-get install xmlstarlet python3-cairosvg icnsutils
|
||||
|
||||
if [ $# != 1 ]
|
||||
then
|
||||
echo "Usage: $0 <svg file>"
|
||||
exit
|
||||
fi
|
||||
|
||||
set -ex
|
||||
|
||||
tmpdir=`mktemp -d 2>/dev/null || mktemp -d -t 'icontmp'`
|
||||
|
||||
for i in 1024 512 310 256 192 180 152 150 144 128 120 114 96 76 72 70 64 60 57 48 36 32 24 16
|
||||
do
|
||||
#convert -background none -density 1000 -resize $i -extent $i -gravity center "$1" "$tmpdir/$i.png"
|
||||
|
||||
# Above is the imagemagick command to render an svg to png. Unfortunately, its support for SVGs
|
||||
# with CSS isn't very good (with rsvg and even moreso the built in renderer) so we use cairosvg.
|
||||
# This can be installed with:
|
||||
# pip install cairosvg==1.0.22 # Version 2 doesn't support python 2
|
||||
# pip install tinycss
|
||||
# pip install cssselect # These are necessary for CSS support
|
||||
# You'll also need xmlstarlet from your favourite package manager
|
||||
#
|
||||
# Cairosvg doesn't suport rendering at a specific size (https://github.com/Kozea/CairoSVG/issues/83#issuecomment-215720176)
|
||||
# so we have to 'resize the svg' first (add width and height attributes to the svg element) to make it render at the
|
||||
# size we need.
|
||||
# XXX: This will break if the svg already has width and height attributes
|
||||
cp "$1" "$tmpdir/tmp.svg"
|
||||
xmlstarlet ed -N x="http://www.w3.org/2000/svg" --insert "/x:svg" --type attr -n width -v $i "$tmpdir/tmp.svg" > "$tmpdir/tmp2.svg"
|
||||
xmlstarlet ed -N x="http://www.w3.org/2000/svg" --insert "/x:svg" --type attr -n height -v $i "$tmpdir/tmp2.svg" > "$tmpdir/tmp3.svg"
|
||||
cairosvg -f png -o "$tmpdir/$i.png" "$tmpdir/tmp3.svg"
|
||||
rm "$tmpdir/tmp.svg" "$tmpdir/tmp2.svg" "$tmpdir/tmp3.svg"
|
||||
done
|
||||
|
||||
# one more for the non-square mstile
|
||||
cp "$1" "$tmpdir/tmp.svg"
|
||||
xmlstarlet ed -N x="http://www.w3.org/2000/svg" --insert "/x:svg" --type attr -n width -v 310 "$tmpdir/tmp.svg" > "$tmpdir/tmp2.svg"
|
||||
xmlstarlet ed -N x="http://www.w3.org/2000/svg" --insert "/x:svg" --type attr -n height -v 150 "$tmpdir/tmp2.svg" > "$tmpdir/tmp3.svg"
|
||||
cairosvg -f png -o "$tmpdir/310x150.png" "$tmpdir/tmp3.svg"
|
||||
rm "$tmpdir/tmp.svg" "$tmpdir/tmp2.svg" "$tmpdir/tmp3.svg"
|
||||
|
||||
mkdir "$tmpdir/Riot.iconset"
|
||||
cp "$tmpdir/16.png" "$tmpdir/Riot.iconset/icon_16x16.png"
|
||||
cp "$tmpdir/32.png" "$tmpdir/Riot.iconset/icon_16x16@2x.png"
|
||||
cp "$tmpdir/32.png" "$tmpdir/Riot.iconset/icon_32x32.png"
|
||||
cp "$tmpdir/64.png" "$tmpdir/Riot.iconset/icon_32x32@2x.png"
|
||||
cp "$tmpdir/128.png" "$tmpdir/Riot.iconset/icon_128x128.png"
|
||||
cp "$tmpdir/256.png" "$tmpdir/Riot.iconset/icon_128x128@2x.png"
|
||||
cp "$tmpdir/256.png" "$tmpdir/Riot.iconset/icon_256x256.png"
|
||||
cp "$tmpdir/512.png" "$tmpdir/Riot.iconset/icon_256x256@2x.png"
|
||||
cp "$tmpdir/512.png" "$tmpdir/Riot.iconset/icon_512x512.png"
|
||||
cp "$tmpdir/1024.png" "$tmpdir/Riot.iconset/icon_512x512@2x.png"
|
||||
|
||||
if [ -x "$(command -v iconutil)" ]; then
|
||||
# available on macos
|
||||
iconutil -c icns -o electron_app/build/icon.icns "$tmpdir/Riot.iconset"
|
||||
elif [ -x "$(command -v png2icns)" ]; then
|
||||
# available on linux
|
||||
# png2icns is more finicky about its input than iconutil
|
||||
# 1. it doesn't support a 64x64 (aka 32x32@2x)
|
||||
# 2. it doesn't like duplicates (128x128@2x == 256x256)
|
||||
rm "$tmpdir/Riot.iconset/icon_128x128@2x.png"
|
||||
rm "$tmpdir/Riot.iconset/icon_256x256@2x.png"
|
||||
rm "$tmpdir/Riot.iconset/icon_16x16@2x.png"
|
||||
rm "$tmpdir/Riot.iconset/icon_32x32@2x.png"
|
||||
png2icns electron_app/build/icon.icns "$tmpdir"/Riot.iconset/*png
|
||||
else
|
||||
echo "WARNING: Unsupported platform. Skipping icns build"
|
||||
fi
|
||||
|
||||
cp "$tmpdir/36.png" "res/vector-icons/android-chrome-36x36.png"
|
||||
cp "$tmpdir/48.png" "res/vector-icons/android-chrome-48x48.png"
|
||||
cp "$tmpdir/72.png" "res/vector-icons/android-chrome-72x72.png"
|
||||
cp "$tmpdir/96.png" "res/vector-icons/android-chrome-96x96.png"
|
||||
cp "$tmpdir/144.png" "res/vector-icons/android-chrome-144x144.png"
|
||||
cp "$tmpdir/192.png" "res/vector-icons/android-chrome-192x192.png"
|
||||
cp "$tmpdir/180.png" "res/vector-icons/apple-touch-icon.png"
|
||||
cp "$tmpdir/180.png" "res/vector-icons/apple-touch-icon-precomposed.png"
|
||||
cp "$tmpdir/57.png" "res/vector-icons/apple-touch-icon-57x57.png"
|
||||
cp "$tmpdir/60.png" "res/vector-icons/apple-touch-icon-60x60.png"
|
||||
cp "$tmpdir/72.png" "res/vector-icons/apple-touch-icon-72x72.png"
|
||||
cp "$tmpdir/76.png" "res/vector-icons/apple-touch-icon-76x76.png"
|
||||
cp "$tmpdir/114.png" "res/vector-icons/apple-touch-icon-114x114.png"
|
||||
cp "$tmpdir/120.png" "res/vector-icons/apple-touch-icon-120x120.png"
|
||||
cp "$tmpdir/144.png" "res/vector-icons/apple-touch-icon-144x144.png"
|
||||
cp "$tmpdir/152.png" "res/vector-icons/apple-touch-icon-152x152.png"
|
||||
cp "$tmpdir/180.png" "res/vector-icons/apple-touch-icon-180x180.png"
|
||||
cp "$tmpdir/16.png" "res/vector-icons/favicon-16x16.png"
|
||||
cp "$tmpdir/32.png" "res/vector-icons/favicon-32x32.png"
|
||||
cp "$tmpdir/96.png" "res/vector-icons/favicon-96x96.png"
|
||||
cp "$tmpdir/70.png" "res/vector-icons/mstile-70x70.png"
|
||||
cp "$tmpdir/144.png" "res/vector-icons/mstile-144x144.png"
|
||||
cp "$tmpdir/150.png" "res/vector-icons/mstile-150x150.png"
|
||||
cp "$tmpdir/310.png" "res/vector-icons/mstile-310x310.png"
|
||||
cp "$tmpdir/310x150.png" "res/vector-icons/mstile-310x150.png"
|
||||
cp "$tmpdir/180.png" "electron_app/img/riot.png"
|
||||
|
||||
convert "$tmpdir/16.png" "$tmpdir/32.png" "$tmpdir/64.png" "$tmpdir/128.png" "$tmpdir/256.png" "res/vector-icons/favicon.ico"
|
||||
|
||||
cp "res/vector-icons/favicon.ico" "electron_app/build/icon.ico"
|
||||
cp "res/vector-icons/favicon.ico" "electron_app/img/riot.ico"
|
||||
|
||||
# https://github.com/electron-userland/electron-builder/blob/3f97b86993d4ea5172e562b182230a194de0f621/src/targets/LinuxTargetHelper.ts#L127
|
||||
for i in 24 96 16 48 64 128 256 512
|
||||
do
|
||||
cp "$tmpdir/$i.png" "electron_app/build/icons/${i}x${i}.png"
|
||||
done
|
||||
|
||||
rm -r "$tmpdir"
|
||||
43
src/@types/cpx.d.ts
vendored
Normal file
43
src/@types/cpx.d.ts
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
Copyright 2023 The Matrix.org Foundation C.I.C.
|
||||
|
||||
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.
|
||||
*/
|
||||
|
||||
declare module "cpx" {
|
||||
export class Cpx {
|
||||
public constructor(source: string, outDir: string, options?: object);
|
||||
|
||||
public on(eventName: "copy", fn: (event: { srcPath: string; dstPath: string }) => void): void;
|
||||
public on(eventName: "remove", fn: (event: { path: string }) => void): void;
|
||||
public on(eventName: "watch-ready", fn: () => void): void;
|
||||
public on(eventName: "watch-error", fn: (error: Error) => void): void;
|
||||
|
||||
/**
|
||||
* Copy all files that matches `this.source` pattern to `this.outDir`.
|
||||
*
|
||||
* @param {function} [cb = null] - A callback function.
|
||||
* @returns {void}
|
||||
*/
|
||||
public copy(cb: Function | null): void;
|
||||
|
||||
/**
|
||||
* Copy all files that matches `this.source` pattern to `this.outDir`.
|
||||
* And watch changes in `this.base`, and copy only the file every time.
|
||||
*
|
||||
* @returns {void}
|
||||
* @throws {Error} This had been watching already.
|
||||
*/
|
||||
public watch(): void;
|
||||
}
|
||||
}
|
||||
9
src/@types/global.d.ts
vendored
9
src/@types/global.d.ts
vendored
@@ -32,7 +32,8 @@ type ElectronChannel =
|
||||
| "setBadgeCount"
|
||||
| "update-downloaded"
|
||||
| "userDownloadCompleted"
|
||||
| "userDownloadAction";
|
||||
| "userDownloadAction"
|
||||
| "openDesktopCapturerSourcePicker";
|
||||
|
||||
declare global {
|
||||
interface Window {
|
||||
@@ -54,12 +55,6 @@ declare global {
|
||||
on(channel: ElectronChannel, listener: (event: Event, ...args: any[]) => void): void;
|
||||
send(channel: ElectronChannel, ...args: any[]): void;
|
||||
}
|
||||
|
||||
interface Navigator {
|
||||
// PWA badging extensions https://w3c.github.io/badging/
|
||||
setAppBadge?(count: number): Promise<void>;
|
||||
clearAppBadge?(): Promise<void>;
|
||||
}
|
||||
}
|
||||
|
||||
// add method which is missing from the node typing
|
||||
|
||||
29
src/@types/jitsi-meet.d.ts
vendored
Normal file
29
src/@types/jitsi-meet.d.ts
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
Copyright 2023 The Matrix.org Foundation C.I.C.
|
||||
|
||||
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 "jitsi-meet";
|
||||
|
||||
declare module "jitsi-meet" {
|
||||
interface ExternalAPIEventCallbacks {
|
||||
errorOccurred: (e: { error: Error & { isFatal?: boolean } }) => void;
|
||||
}
|
||||
|
||||
interface JitsiMeetExternalAPI {
|
||||
executeCommand(command: "setTileView", value: boolean): void;
|
||||
}
|
||||
}
|
||||
|
||||
export as namespace Jitsi;
|
||||
28
src/@types/loader-utils.d.ts
vendored
Normal file
28
src/@types/loader-utils.d.ts
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
Copyright 2023 The Matrix.org Foundation C.I.C.
|
||||
|
||||
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 * as LoaderUtils from "loader-utils";
|
||||
|
||||
declare module "loader-utils" {
|
||||
export function getHashDigest(
|
||||
buffer: Buffer,
|
||||
hashType: null,
|
||||
digestType: LoaderUtils.DigestType,
|
||||
maxLength: number,
|
||||
): string;
|
||||
}
|
||||
|
||||
export as namespace Cpx;
|
||||
@@ -14,10 +14,11 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
import * as React from "react";
|
||||
import { _t } from "matrix-react-sdk/src/languageHandler";
|
||||
import React, { ReactNode } from "react";
|
||||
import SdkConfig from "matrix-react-sdk/src/SdkConfig";
|
||||
|
||||
import { _t } from "../../languageHandler";
|
||||
|
||||
// directly import the style here as this layer does not support rethemedex at this time so no matrix-react-sdk
|
||||
// PostCSS variables will be accessible.
|
||||
import "../../../res/css/structures/ErrorView.pcss";
|
||||
@@ -30,7 +31,7 @@ const CompatibilityView: React.FC<IProps> = ({ onAccept }) => {
|
||||
const brand = SdkConfig.get("brand");
|
||||
const mobileBuilds = SdkConfig.get("mobile_builds");
|
||||
|
||||
let ios = null;
|
||||
let ios: JSX.Element | undefined;
|
||||
const iosCustomUrl = mobileBuilds?.ios;
|
||||
if (iosCustomUrl !== null) {
|
||||
// could be undefined or a string
|
||||
@@ -42,6 +43,7 @@ const CompatibilityView: React.FC<IProps> = ({ onAccept }) => {
|
||||
<a
|
||||
href={iosCustomUrl || "https://apps.apple.com/app/vector/id1083446067"}
|
||||
target="_blank"
|
||||
rel="noreferrer noopener"
|
||||
className="mx_ClearDecoration"
|
||||
>
|
||||
<img height="48" src="themes/element/img/download/apple.svg" alt="Apple App Store" />
|
||||
@@ -63,6 +65,7 @@ const CompatibilityView: React.FC<IProps> = ({ onAccept }) => {
|
||||
<a
|
||||
href={andCustomUrl || "https://play.google.com/store/apps/details?id=im.vector.app"}
|
||||
target="_blank"
|
||||
rel="noreferrer noopener"
|
||||
className="mx_ClearDecoration"
|
||||
key="android"
|
||||
>
|
||||
@@ -76,6 +79,7 @@ const CompatibilityView: React.FC<IProps> = ({ onAccept }) => {
|
||||
<a
|
||||
href={fdroidCustomUrl || "https://f-droid.org/repository/browse/?fdid=im.vector.app"}
|
||||
target="_blank"
|
||||
rel="noreferrer noopener"
|
||||
className="mx_ClearDecoration"
|
||||
key="fdroid"
|
||||
>
|
||||
@@ -88,7 +92,7 @@ const CompatibilityView: React.FC<IProps> = ({ onAccept }) => {
|
||||
android = [];
|
||||
}
|
||||
|
||||
let mobileHeader = <h2 id="step2_heading">{_t("Use %(brand)s on mobile", { brand })}</h2>;
|
||||
let mobileHeader: ReactNode = <h2 id="step2_heading">{_t("use_brand_on_mobile", { brand })}</h2>;
|
||||
if (!android.length && !ios) {
|
||||
mobileHeader = null;
|
||||
}
|
||||
@@ -100,24 +104,17 @@ const CompatibilityView: React.FC<IProps> = ({ onAccept }) => {
|
||||
<span className="mx_HomePage_logo">
|
||||
<img height="42" src="themes/element/img/logos/element-logo.svg" alt="Element" />
|
||||
</span>
|
||||
<h1>{_t("Unsupported browser")}</h1>
|
||||
<h1>{_t("incompatible_browser|title")}</h1>
|
||||
</div>
|
||||
|
||||
<div className="mx_HomePage_col">
|
||||
<div className="mx_HomePage_row">
|
||||
<div>
|
||||
<h2 id="step1_heading">{_t("Your browser can't run %(brand)s", { brand })}</h2>
|
||||
<h2 id="step1_heading">{_t("incompatible_browser|summary", { brand })}</h2>
|
||||
<p>{_t("incompatible_browser|features", { brand })}</p>
|
||||
<p>
|
||||
{_t(
|
||||
"%(brand)s uses advanced browser features which aren't " +
|
||||
"supported by your current browser.",
|
||||
{ brand },
|
||||
)}
|
||||
</p>
|
||||
<p>
|
||||
{_t(
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, " +
|
||||
"or <safariLink>Safari</safariLink> for the best experience.",
|
||||
"incompatible_browser|browser_links",
|
||||
{},
|
||||
{
|
||||
chromeLink: (sub) => <a href="https://www.google.com/chrome">{sub}</a>,
|
||||
@@ -126,13 +123,8 @@ const CompatibilityView: React.FC<IProps> = ({ onAccept }) => {
|
||||
},
|
||||
)}
|
||||
</p>
|
||||
<p>
|
||||
{_t(
|
||||
"You can continue using your current browser, but some or all features may not work " +
|
||||
"and the look and feel of the application may be incorrect.",
|
||||
)}
|
||||
</p>
|
||||
<button onClick={onAccept}>{_t("I understand the risks and wish to continue")}</button>
|
||||
<p>{_t("incompatible_browser|feature_warning")}</p>
|
||||
<button onClick={onAccept}>{_t("incompatible_browser|continue_warning")}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -150,7 +142,7 @@ const CompatibilityView: React.FC<IProps> = ({ onAccept }) => {
|
||||
<div className="mx_HomePage_row mx_Center mx_Spacer">
|
||||
<p className="mx_Spacer">
|
||||
<a href="https://element.io" target="_blank" className="mx_FooterLink">
|
||||
{_t("Go to element.io")}
|
||||
{_t("go_to_element_io")}
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -15,7 +15,8 @@ limitations under the License.
|
||||
*/
|
||||
|
||||
import * as React from "react";
|
||||
import { _t } from "matrix-react-sdk/src/languageHandler";
|
||||
|
||||
import { _t } from "../../languageHandler";
|
||||
|
||||
// directly import the style here as this layer does not support rethemedex at this time so no matrix-react-sdk
|
||||
// PostCSS variables will be accessible.
|
||||
@@ -35,7 +36,7 @@ const ErrorView: React.FC<IProps> = ({ title, messages }) => {
|
||||
<span className="mx_HomePage_logo">
|
||||
<img height="42" src="themes/element/img/logos/element-logo.svg" alt="Element" />
|
||||
</span>
|
||||
<h1>{_t("Failed to start")}</h1>
|
||||
<h1>{_t("failed_to_start")}</h1>
|
||||
</div>
|
||||
<div className="mx_HomePage_col">
|
||||
<div className="mx_HomePage_row">
|
||||
@@ -48,7 +49,7 @@ const ErrorView: React.FC<IProps> = ({ title, messages }) => {
|
||||
<div className="mx_HomePage_row mx_Center mx_Spacer">
|
||||
<p className="mx_Spacer">
|
||||
<a href="https://element.io" target="_blank" className="mx_FooterLink">
|
||||
{_t("Go to element.io")}
|
||||
{_t("go_to_element_io")}
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -17,7 +17,8 @@ limitations under the License.
|
||||
|
||||
import React, { ReactElement } from "react";
|
||||
import SdkConfig from "matrix-react-sdk/src/SdkConfig";
|
||||
import { _t } from "matrix-react-sdk/src/languageHandler";
|
||||
|
||||
import { _t } from "../../../languageHandler";
|
||||
|
||||
const VectorAuthFooter = (): ReactElement => {
|
||||
const brandingConfig = SdkConfig.getObject("branding");
|
||||
@@ -27,7 +28,7 @@ const VectorAuthFooter = (): ReactElement => {
|
||||
{ text: "GitHub", url: "https://github.com/vector-im/element-web" },
|
||||
];
|
||||
|
||||
const authFooterLinks = [];
|
||||
const authFooterLinks: JSX.Element[] = [];
|
||||
for (const linkEntry of links) {
|
||||
authFooterLinks.push(
|
||||
<a href={linkEntry.url} key={linkEntry.text} target="_blank" rel="noreferrer noopener">
|
||||
@@ -40,7 +41,7 @@ const VectorAuthFooter = (): ReactElement => {
|
||||
<footer className="mx_AuthFooter" role="contentinfo">
|
||||
{authFooterLinks}
|
||||
<a href="https://matrix.org" target="_blank" rel="noreferrer noopener">
|
||||
{_t("Powered by Matrix")}
|
||||
{_t("powered_by_matrix")}
|
||||
</a>
|
||||
</footer>
|
||||
);
|
||||
|
||||
@@ -20,7 +20,7 @@ import SdkConfig from "matrix-react-sdk/src/SdkConfig";
|
||||
import VectorAuthFooter from "./VectorAuthFooter";
|
||||
|
||||
export default class VectorAuthPage extends React.PureComponent {
|
||||
private static welcomeBackgroundUrl;
|
||||
private static welcomeBackgroundUrl?: string;
|
||||
|
||||
// cache the url as a static to prevent it changing without refreshing
|
||||
private static getWelcomeBackgroundUrl(): string {
|
||||
|
||||
@@ -49,7 +49,7 @@ export default class Favicon {
|
||||
private readonly params: IParams;
|
||||
private readonly canvas: HTMLCanvasElement;
|
||||
private readonly baseImage: HTMLImageElement;
|
||||
private context: CanvasRenderingContext2D;
|
||||
private context!: CanvasRenderingContext2D;
|
||||
private icons: HTMLLinkElement[];
|
||||
|
||||
private isReady = false;
|
||||
@@ -72,14 +72,14 @@ export default class Favicon {
|
||||
// get height and width of the favicon
|
||||
this.canvas.height = this.baseImage.height > 0 ? this.baseImage.height : 32;
|
||||
this.canvas.width = this.baseImage.width > 0 ? this.baseImage.width : 32;
|
||||
this.context = this.canvas.getContext("2d");
|
||||
this.context = this.canvas.getContext("2d")!;
|
||||
this.ready();
|
||||
};
|
||||
this.baseImage.setAttribute("src", lastIcon.getAttribute("href"));
|
||||
this.baseImage.setAttribute("src", lastIcon.getAttribute("href")!);
|
||||
} else {
|
||||
this.canvas.height = this.baseImage.height = 32;
|
||||
this.canvas.width = this.baseImage.width = 32;
|
||||
this.context = this.canvas.getContext("2d");
|
||||
this.context = this.canvas.getContext("2d")!;
|
||||
this.ready();
|
||||
}
|
||||
}
|
||||
@@ -152,7 +152,7 @@ export default class Favicon {
|
||||
this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
|
||||
this.context.drawImage(this.baseImage, 0, 0, this.canvas.width, this.canvas.height);
|
||||
this.context.beginPath();
|
||||
const fontSize = Math.floor(opt.h * (opt.n > 99 ? 0.85 : 1)) + "px";
|
||||
const fontSize = Math.floor(opt.h * (typeof opt.n === "number" && opt.n > 99 ? 0.85 : 1)) + "px";
|
||||
this.context.font = `${params.fontWeight} ${fontSize} ${params.fontFamily}`;
|
||||
this.context.textAlign = "center";
|
||||
|
||||
@@ -239,7 +239,7 @@ export default class Favicon {
|
||||
const icons: HTMLLinkElement[] = [];
|
||||
const links = window.document.getElementsByTagName("head")[0].getElementsByTagName("link");
|
||||
for (const link of links) {
|
||||
if (/(^|\s)icon(\s|$)/i.test(link.getAttribute("rel"))) {
|
||||
if (link.hasAttribute("rel") && /(^|\s)icon(\s|$)/i.test(link.getAttribute("rel")!)) {
|
||||
icons.push(link);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
{
|
||||
"Dismiss": "أهمِل",
|
||||
"Unknown device": "جهاز مجهول",
|
||||
"Welcome to Element": "مرحبًا بك في Element",
|
||||
"Create Account": "أنشِئ حسابًا",
|
||||
"Explore rooms": "استكشِف الغرف",
|
||||
"Sign In": "لِج",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "الضبط غير صالح: يمكنك تحديد واحدًا من الآتي فقط: default_server_config أو default_server_name أو default_hs_url.",
|
||||
"Invalid configuration: no default server specified.": "الضبط غير صالح: لم تحدّد خادومًا مبدئيًا.",
|
||||
"Your Element is misconfigured": "لم يُضبط تطبيق Element كما ينبغي",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "يحتوي ضبط تطبيق Element على تنسيق JSON غير صالح. من فضلك صحّح المشكلة وأعِد تحميل الصفحة.",
|
||||
"The message from the parser is: %(message)s": "الرسالة القادمة من المحلّل: %(message)s",
|
||||
"Invalid JSON": "تنسيق JSON غير صالح",
|
||||
"Unable to load config file: please refresh the page to try again.": "تعذّر تحميل ملف الضبط: من فضلك أنعِش الصفحة لمعاودة المحاولة.",
|
||||
"Unexpected error preparing the app. See console for details.": "حدث عُطل غير متوقع أثناء تجهيز التطبيق. طالِع المِعراض للتفاصيل.",
|
||||
"Download Completed": "اكتمل التنزيل",
|
||||
"Open": "افتح",
|
||||
"Go to your browser to complete Sign In": "افتح المتصفح لإكمال الولوج",
|
||||
"Unsupported browser": "متصفح غير مدعوم",
|
||||
"Your browser can't run %(brand)s": "لا يمكن لمتصفحك تشغيل %(brand)s",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "يستعمل %(brand)s ميزات متقدمة في المتصفحات لا يدعمها متصفحك الحالي.",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "من فضلك ثبّت <chromeLink>كروم</chromeLink> أو <firefoxLink>فَيَرفُكس</firefoxLink> أو <safariLink>سفاري</safariLink> لأفضل تجربة.",
|
||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "يمكنك مواصل استعمال متصفحك الحالي ولكن قد لا تعمل بعض المزايا (أو كلها) وقد لا يظهر التطبيق كما ينبغي له أن يظهر.",
|
||||
"I understand the risks and wish to continue": "أفهم المخاطرة وأود المواصلة",
|
||||
"Go to element.io": "انتقل إلى element.io",
|
||||
"Failed to start": "فشل البدء",
|
||||
"Powered by Matrix": "تدعمه «ماترِكس»",
|
||||
"Use %(brand)s on mobile": "استعمل %(brand)s على المحمول",
|
||||
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "محادثة لامركزية، مشفرة & تعمل بواسطة $matrixLogo",
|
||||
"%(appName)s: %(browserName)s on %(osName)s": "%(appName)s: %(browserName)s في %(osName)s",
|
||||
"%(brand)s Desktop: %(platformName)s": "%(brand)s سطح المكتب %(platformName)s"
|
||||
}
|
||||
@@ -1,30 +0,0 @@
|
||||
{
|
||||
"Unknown device": "Naməlum qurğu",
|
||||
"Invalid JSON": "Yanlış JSON",
|
||||
"Sign In": "Daxil ol",
|
||||
"Create Account": "Hesab Aç",
|
||||
"Explore rooms": "Otaqları kəşf edin",
|
||||
"Unexpected error preparing the app. See console for details.": "Tətbiqin başladılmasında gözlənilməz xəta.Təfərrüatlar üçün konsola baxın.",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Yanlış konfiqurasiya: bunlardan yalnız birini təyin edin - default_server_config, default_server_name, və ya default_hs_url.",
|
||||
"Invalid configuration: no default server specified.": "Yanlış konfiqurasiya: standart server göstərilməyib.",
|
||||
"The message from the parser is: %(message)s": "Sözügedən mesaj: %(message)s",
|
||||
"Dismiss": "Nəzərə almayın",
|
||||
"Welcome to Element": "Element-ə xoş gəlmişsiniz",
|
||||
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "$matrixLogo tərəfindən dəstəklənən mərkəzləşdirilməmiş ,şifrələnmiş söhbət & əməkdaşlıq",
|
||||
"Failed to start": "Başlatmaq alınmadı",
|
||||
"Go to element.io": "element.io saytına keçin",
|
||||
"I understand the risks and wish to continue": "Mən riskləri başa düşürəm və davam etmək istəyirəm",
|
||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Siz cari brauzerinizdən istifadə etməyə davam edə bilərsiniz, lakin bəzi və ya bütün funksiyalar işləməyə və tətbiqin görünüşü yanlış ola bilər.",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Zəhmət olmasa quraşdırın<chromeLink> Chrome</chromeLink> ,<firefoxLink> Firefox</firefoxLink> , və ya<safariLink> Safari</safariLink> ən yaxşı təcrübə üçün.",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s cari brauzeriniz tərəfindən dəstəklənməyən təkmil brauzer funksiyalarından istifadə edir.",
|
||||
"Your browser can't run %(brand)s": "Brauzeriniz %(brand)s işlədə bilmir",
|
||||
"Unsupported browser": "Dəstəklənməyən brauzer",
|
||||
"Use %(brand)s on mobile": "Mobil telefonda %(brand)s istifadə edin",
|
||||
"Powered by Matrix": "Gücünü Matrix'dən alır",
|
||||
"Go to your browser to complete Sign In": "Girişi tamamlamaq üçün brauzerinizə keçin",
|
||||
"Open": "Aç",
|
||||
"Download Completed": "Yükləmə Tamamlandı",
|
||||
"Unable to load config file: please refresh the page to try again.": "Konfiqurasiya faylını yükləmək mümkün deyil: yenidən cəhd etmək üçün səhifəni yeniləyin.",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Element konfiqurasiyanızda yanlış JSON var. Problemi düzəldin və səhifəni yenidən yükləyin.",
|
||||
"Your Element is misconfigured": "Elementi yanlış konfiqurasiya edibsiniz"
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
{}
|
||||
@@ -1,3 +0,0 @@
|
||||
{
|
||||
"Dismiss": "Aдхіліць"
|
||||
}
|
||||
@@ -1,32 +1,38 @@
|
||||
{
|
||||
"Unknown device": "Непознато устройство",
|
||||
"Dismiss": "Затвори",
|
||||
"Welcome to Element": "Добре дошли в Element",
|
||||
"Sign In": "Вписване",
|
||||
"Create Account": "Създай профил",
|
||||
"Explore rooms": "Открий стаи",
|
||||
"Unexpected error preparing the app. See console for details.": "Неочаквана грешка при подготвянето на приложението. Вижте конзолата за подробности.",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Невалидна конфигурация: може да е указано само едно от: default_server_config, default_server_name, или default_hs_url.",
|
||||
"Invalid configuration: no default server specified.": "Невалидна конфигурация: не е указан сървър по подразбиране.",
|
||||
"The message from the parser is: %(message)s": "Грешката от парсъра е: %(message)s",
|
||||
"Invalid JSON": "Невалиден JSON",
|
||||
"Go to your browser to complete Sign In": "Отидете в браузъра за да завършите влизането",
|
||||
"Unable to load config file: please refresh the page to try again.": "Неуспешно зареждане на конфигурационния файл: презаредете страницата за да опитате пак.",
|
||||
"Unsupported browser": "Неподдържан браузър",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Инсталирайте <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink> или <safariLink>Safari</safariLink> за най-добра работа.",
|
||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Може да продължите да използвате сегашния си браузър, но някои или всички функции може да се окажат неработещи, или пък външния вид на приложението да изглежда неправилен.",
|
||||
"I understand the risks and wish to continue": "Разбирам рисковете и желая да продължа",
|
||||
"Go to element.io": "Отиди на element.io",
|
||||
"Failed to start": "Неуспешно стартиране",
|
||||
"Your Element is misconfigured": "Вашият Element не е конфигуриран правилно",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Вашата Element конфигурация съдържа невалиден JSON. Коригирайте проблема и презаредете страницата.",
|
||||
"Download Completed": "Свалянето завърши",
|
||||
"Open": "Отвори",
|
||||
"Your browser can't run %(brand)s": "Браузърът ви не може да изпълни %(brand)s",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s използва модерни функции на браузъра, които не се поддържат от Вашия.",
|
||||
"Powered by Matrix": "Базирано на Matrix",
|
||||
"Use %(brand)s on mobile": "Използвайте %(brand)s на мобилен телефон",
|
||||
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Децентрализиран, криптиран чат & сътрудничество, захранено от $matrixlogo",
|
||||
"%(appName)s: %(browserName)s on %(osName)s": "%(appName)s: %(browserName)s под %(osName)s",
|
||||
"%(brand)s Desktop: %(platformName)s": "%(brand)s Desktop: %(platformName)s"
|
||||
"action": {
|
||||
"create_account": "Създай профил",
|
||||
"dismiss": "Затвори",
|
||||
"explore_rooms": "Открий стаи",
|
||||
"open": "Отвори",
|
||||
"sign_in": "Вписване"
|
||||
},
|
||||
"auth": {
|
||||
"sso_complete_in_browser_dialog_title": "Отидете в браузъра за да завършите влизането"
|
||||
},
|
||||
"download_completed": "Свалянето завърши",
|
||||
"error": {
|
||||
"app_launch_unexpected_error": "Неочаквана грешка при подготвянето на приложението. Вижте конзолата за подробности.",
|
||||
"cannot_load_config": "Неуспешно зареждане на конфигурационния файл: презаредете страницата за да опитате пак.",
|
||||
"invalid_configuration_no_server": "Невалидна конфигурация: не е указан сървър по подразбиране.",
|
||||
"invalid_json": "Вашата Element конфигурация съдържа невалиден JSON. Коригирайте проблема и презаредете страницата.",
|
||||
"invalid_json_detail": "Грешката от парсъра е: %(message)s",
|
||||
"invalid_json_generic": "Невалиден JSON",
|
||||
"misconfigured": "Вашият Element не е конфигуриран правилно"
|
||||
},
|
||||
"failed_to_start": "Неуспешно стартиране",
|
||||
"go_to_element_io": "Отиди на element.io",
|
||||
"incompatible_browser": {
|
||||
"browser_links": "Инсталирайте <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink> или <safariLink>Safari</safariLink> за най-добра работа.",
|
||||
"continue_warning": "Разбирам рисковете и желая да продължа",
|
||||
"feature_warning": "Може да продължите да използвате сегашния си браузър, но някои или всички функции може да се окажат неработещи, или пък външния вид на приложението да изглежда неправилен.",
|
||||
"features": "%(brand)s използва модерни функции на браузъра, които не се поддържат от Вашия.",
|
||||
"summary": "Браузърът ви не може да изпълни %(brand)s",
|
||||
"title": "Неподдържан браузър"
|
||||
},
|
||||
"powered_by_matrix": "Базирано на Matrix",
|
||||
"powered_by_matrix_with_logo": "Децентрализиран, криптиран чат & сътрудничество, захранено от $matrixlogo",
|
||||
"unknown_device": "Непознато устройство",
|
||||
"use_brand_on_mobile": "Използвайте %(brand)s на мобилен телефон",
|
||||
"web_default_device_name": "%(appName)s: %(browserName)s под %(osName)s",
|
||||
"welcome_to_element": "Добре дошли в Element"
|
||||
}
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"Dismiss": "সরাও",
|
||||
"Open": "খোলা"
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
{
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "ভুল পছন্দসমূহ: এগয়লোর যেকোনো একটি কেবল নির্দিষ্ট করা যাবে default_server_config, default_server_name বা default_hs_url।"
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"Your Element is misconfigured": "আপনার এলিমেন্ট টি ভুল ভাবে কনফিগার করা হয়েছে",
|
||||
"Invalid configuration: no default server specified.": "ভুল কনফিগারেশনঃ কোনো মূল সার্ভার উল্লেখ করা হয়নি।",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "ভুল কনফিগারেশনঃ এদের মধ্যে কেবলমাত্র একটাই উল্লেখ করা যেতে পারেঃ default_server_config, default_server_name অথবা default_hs_url."
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
{
|
||||
"Open": "Digeriñ"
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
{
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Neispravna konfiguracija: navesti se samo može jedan od default_server_config, default_server_name ili default_hs_url.",
|
||||
"Invalid configuration: no default server specified.": "Neispravna konfiguracija: nije naveden zadani server.",
|
||||
"Your Element is misconfigured": "Vaš element je pogrešno konfiguriran",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Konfiguracija vašeg elementa sadrži nevažeći JSON. Ispravite problem i ponovo učitajte stranicu.",
|
||||
"The message from the parser is: %(message)s": "Poruka parsera je: %(message)s",
|
||||
"Invalid JSON": "Nevažeći JSON",
|
||||
"Unable to load config file: please refresh the page to try again.": "Nije moguće učitati konfiguracijsku datoteku: osvježite stranicu i pokušajte ponovo.",
|
||||
"Unexpected error preparing the app. See console for details.": "Neočekivana greška prilikom pripreme aplikacije. Pogledajte konzolu za detalje.",
|
||||
"Download Completed": "Preuzimanje završeno",
|
||||
"Open": "Otvori",
|
||||
"Dismiss": "Odbaci",
|
||||
"Go to your browser to complete Sign In": "Idite na svoj pretraživač da biste dovršili prijavu",
|
||||
"Unknown device": "Nepoznat uređaj",
|
||||
"Powered by Matrix": "Pokretano uz Matrix",
|
||||
"Unsupported browser": "Nepodržani pretraživač",
|
||||
"Your browser can't run %(brand)s": "Vaš pretraživač ne može pokretati %(brand)s",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s koristi napredne funkcije pretraživača koje vaš trenutni pretraživač ne podržava.",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Molimo instalirajte <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink> ili <safariLink>Safari</safariLink> za najbolje iskustvo.",
|
||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Možete nastaviti koristiti svoj trenutni pretraživač, ali neke ili sve funkcije možda neće raditi, a izgled i dojam aplikacije mogu biti neispravani.",
|
||||
"I understand the risks and wish to continue": "Razumijem rizike i želim nastaviti",
|
||||
"Go to element.io": "Idite na element.io",
|
||||
"Failed to start": "Pokretanje nije uspjelo",
|
||||
"Welcome to Element": "Dobrodošli u Element",
|
||||
"Sign In": "Prijavite se",
|
||||
"Create Account": "Otvori račun",
|
||||
"Explore rooms": "Istražite sobe",
|
||||
"Use %(brand)s on mobile": "Koristi %(brand)s na mobitelu"
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
{
|
||||
"Dismiss": "Omet",
|
||||
"Unknown device": "Dispositiu desconegut",
|
||||
"Welcome to Element": "Benvingut/da a Element",
|
||||
"Create Account": "Crea un compte",
|
||||
"Explore rooms": "Explora sales",
|
||||
"Sign In": "Inicia sessió",
|
||||
"Invalid configuration: no default server specified.": "Configuració invàlida: no s'ha especificat cap servidor predeterminat.",
|
||||
"Invalid JSON": "JSON invàlid",
|
||||
"Go to your browser to complete Sign In": "Vés al navegador per completar l'inici de sessió",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuració invàlida: només pots especificar una únic default_server_config, default_server_name, o default_hs_url.",
|
||||
"Your Element is misconfigured": "Element està mal configurat",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "La configuració d'Element conté un JSON invàlid. Soluciona el problema i actualitza la pàgina.",
|
||||
"The message from the parser is: %(message)s": "El missatge de l'analitzador és: %(message)s",
|
||||
"Unable to load config file: please refresh the page to try again.": "No s'ha pogut carregar el fitxer de configuració: actualitza la pàgina per tornar-ho a provar.",
|
||||
"Unexpected error preparing the app. See console for details.": "Error inesperat durant la preparació de l'aplicació. Consulta la consola pels a més detalls.",
|
||||
"Download Completed": "Baixada completada",
|
||||
"Open": "Obre",
|
||||
"Powered by Matrix": "Amb tecnologia de Matrix",
|
||||
"Unsupported browser": "Navegador no compatible",
|
||||
"Your browser can't run %(brand)s": "El teu navegador no pot executar %(brand)s",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s utilitza funcions del navegador avançades que no són compatibles amb el teu navegador actual.",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Instal·la <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, o <safariLink>Safari</safariLink> per obtenir la millor experiència.",
|
||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Pots continuar utilitzant el teu navegador actual, però algunes o totes les funcions podrien no funcionar i l'aspecte de l'aplicació podria ser incorrecte.",
|
||||
"I understand the risks and wish to continue": "Entenc els riscos i vull continuar",
|
||||
"Go to element.io": "Vés a element.io",
|
||||
"Failed to start": "Ha fallat l'inici",
|
||||
"Use %(brand)s on mobile": "Utilitza %(brand)s al mòbil"
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
{}
|
||||
@@ -1,32 +1,39 @@
|
||||
{
|
||||
"Welcome to Element": "Vítá vás Element",
|
||||
"Unknown device": "Neznámé zařízení",
|
||||
"Dismiss": "Zavřít",
|
||||
"Sign In": "Přihlásit se",
|
||||
"Create Account": "Vytvořit účet",
|
||||
"Explore rooms": "Procházet místnosti",
|
||||
"The message from the parser is: %(message)s": "Zpráva z parseru je: %(message)s",
|
||||
"Invalid JSON": "Neplatný JSON",
|
||||
"Unexpected error preparing the app. See console for details.": "Neočekávaná chyba při přípravě aplikace. Podrobnosti najdete v konzoli.",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Neplatná konfigurace: je možné specifikovat pouze jednu volbu z default_server_config, default_server_name, nebo default_hs_url.",
|
||||
"Invalid configuration: no default server specified.": "Neplatná konfigurace: není zadán výchozí server.",
|
||||
"Go to your browser to complete Sign In": "Přejděte do prohlížeče a dokončete přihlášení",
|
||||
"Your Element is misconfigured": "Váš Element je nesprávně nastaven",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Vaše konfigurace Elementu obsahuje nesprávná data JSON. Vyřešte prosím problém a načtěte znovu stránku.",
|
||||
"Unable to load config file: please refresh the page to try again.": "Nepodařilo se načíst konfigurační soubor: abyste to zkusili znovu, načtěte prosím znovu stránku.",
|
||||
"Download Completed": "Stahování dokončeno",
|
||||
"Open": "Otevřít",
|
||||
"Unsupported browser": "Nepodporovaný prohlížeč",
|
||||
"Your browser can't run %(brand)s": "Váš prohlížeč nedokáže spustit %(brand)s",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s využívá pokročilých funkcí prohlížeče, které ten váš nepodporuje.",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Pro nejlepší zážitek si prosím nainstalujte prohlížeč <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, nebo <safariLink>Safari</safariLink>.",
|
||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Můžete pokračovat v užívání vašeho současného prohlížeče, ale některé (nebo dokonce všechny) funkce nemusí fungovat a vzhled a chování aplikace nemusí být správné.",
|
||||
"I understand the risks and wish to continue": "Rozumím a přesto chci pokračovat",
|
||||
"Go to element.io": "Přejít na element.io",
|
||||
"Failed to start": "Nepovedlo se nastartovat",
|
||||
"Powered by Matrix": "Běží na Matrixu",
|
||||
"Use %(brand)s on mobile": "Používání %(brand)s v mobilních zařízeních",
|
||||
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Decentralizovaný, šifrovaný chat a spolupráce na platformě $matrixLogo",
|
||||
"%(appName)s: %(browserName)s on %(osName)s": "%(appName)s: %(browserName)s na %(osName)s",
|
||||
"%(brand)s Desktop: %(platformName)s": "%(brand)s Desktop: %(platformName)s"
|
||||
"action": {
|
||||
"create_account": "Vytvořit účet",
|
||||
"dismiss": "Zavřít",
|
||||
"explore_rooms": "Procházet místnosti",
|
||||
"open": "Otevřít",
|
||||
"sign_in": "Přihlásit se"
|
||||
},
|
||||
"auth": {
|
||||
"sso_complete_in_browser_dialog_title": "Přejděte do prohlížeče a dokončete přihlášení"
|
||||
},
|
||||
"download_completed": "Stahování dokončeno",
|
||||
"error": {
|
||||
"app_launch_unexpected_error": "Neočekávaná chyba při přípravě aplikace. Podrobnosti najdete v konzoli.",
|
||||
"cannot_load_config": "Nepodařilo se načíst konfigurační soubor: abyste to zkusili znovu, načtěte prosím znovu stránku.",
|
||||
"invalid_configuration_mixed_server": "Neplatná konfigurace: default_hs_url nelze použít spolu s default_server_name nebo default_server_config",
|
||||
"invalid_configuration_no_server": "Neplatná konfigurace: není zadán výchozí server.",
|
||||
"invalid_json": "Vaše konfigurace Elementu obsahuje nesprávná data JSON. Vyřešte prosím problém a načtěte znovu stránku.",
|
||||
"invalid_json_detail": "Zpráva z parseru je: %(message)s",
|
||||
"invalid_json_generic": "Neplatný JSON",
|
||||
"misconfigured": "Váš Element je nesprávně nastaven"
|
||||
},
|
||||
"failed_to_start": "Nepovedlo se nastartovat",
|
||||
"go_to_element_io": "Přejít na element.io",
|
||||
"incompatible_browser": {
|
||||
"browser_links": "Pro nejlepší zážitek si prosím nainstalujte prohlížeč <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, nebo <safariLink>Safari</safariLink>.",
|
||||
"continue_warning": "Rozumím a přesto chci pokračovat",
|
||||
"feature_warning": "Můžete pokračovat v užívání vašeho současného prohlížeče, ale některé (nebo dokonce všechny) funkce nemusí fungovat a vzhled a chování aplikace nemusí být správné.",
|
||||
"features": "%(brand)s využívá pokročilých funkcí prohlížeče, které ten váš nepodporuje.",
|
||||
"summary": "Váš prohlížeč nedokáže spustit %(brand)s",
|
||||
"title": "Nepodporovaný prohlížeč"
|
||||
},
|
||||
"powered_by_matrix": "Běží na Matrixu",
|
||||
"powered_by_matrix_with_logo": "Decentralizovaný, šifrovaný chat a spolupráce na platformě $matrixLogo",
|
||||
"unknown_device": "Neznámé zařízení",
|
||||
"use_brand_on_mobile": "Používání %(brand)s v mobilních zařízeních",
|
||||
"web_default_device_name": "%(appName)s: %(browserName)s na %(osName)s",
|
||||
"welcome_to_element": "Vítá vás Element"
|
||||
}
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
{
|
||||
"The message from the parser is: %(message)s": "Y neges gan y dosrannudd yn: %(message)s",
|
||||
"Invalid JSON": "JSON annilys",
|
||||
"Unexpected error preparing the app. See console for details.": "Gwall annisgwyl wrth baratoi'r app. Gweler y consol am fanylion.",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Gosodiad annilys: dim ond un o default_server_config, default_server_name, neu default_hs_url y gall ei nodi.",
|
||||
"Invalid configuration: no default server specified.": "Gosodiad annilys: ni nodwyd gweinydd diofyn.",
|
||||
"Unknown device": "Dyfais anhysbys",
|
||||
"Dismiss": "Wfftio",
|
||||
"Welcome to Element": "Croeso i Element",
|
||||
"Sign In": "Mewngofnodi",
|
||||
"Create Account": "Creu Cyfrif",
|
||||
"Explore rooms": "Archwilio Ystafelloedd",
|
||||
"Go to your browser to complete Sign In": "Ewch i'ch porwr i gwblhau Mewngofnodi"
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
{
|
||||
"Dismiss": "Afvis",
|
||||
"Unknown device": "Ukendt enhed",
|
||||
"Welcome to Element": "Velkommen til Element",
|
||||
"The message from the parser is: %(message)s": "Beskeden fra parseren er: %(message)s",
|
||||
"Invalid JSON": "Ugyldig JSON",
|
||||
"Unexpected error preparing the app. See console for details.": "Uventet fejl ved forberedelse af appen. Se konsollen for detaljer.",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Ugyldig konfiguration: kan kun angive en af default_server_config, default_server_name eller default_hs_url.",
|
||||
"Invalid configuration: no default server specified.": "Ugyldig konfiguration: Ingen standardserver er angivet.",
|
||||
"Sign In": "Log ind",
|
||||
"Create Account": "Opret brugerkonto",
|
||||
"Explore rooms": "Udforsk rum",
|
||||
"Unable to load config file: please refresh the page to try again.": "Ikke i stand til at indlæse konfigurationsfil: Genopfrisk venligst siden for at prøve igen.",
|
||||
"Go to your browser to complete Sign In": "Gå til din browser for at færdiggøre Log ind",
|
||||
"Go to element.io": "Gå til element.io",
|
||||
"I understand the risks and wish to continue": "Jeg forstår risikoen og ønsker at fortsætte",
|
||||
"Unsupported browser": "Browser ikke understøttet",
|
||||
"Open": "Åbn",
|
||||
"Download Completed": "Hentning færdig",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Din Element konfiguration indeholder ugyldig JSON. Løs venligst problemet og genindlæs siden.",
|
||||
"Your Element is misconfigured": "Dit Element er konfigureret forkert",
|
||||
"Your browser can't run %(brand)s": "Din browser kan ikke køre %(brand)s",
|
||||
"Powered by Matrix": "Drevet af Matrix",
|
||||
"Failed to start": "Opstart mislykkedes",
|
||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Du kan fortsætte med at bruge din nuværende browser, men du kan opleve at visse eller alle funktioner ikke vil fungere korrekt.",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Venligst installer <chromeLink>Chrome</chromeLink>,<firefoxLink>Firefox</firefoxLink> eller <safariLink>Safari</safariLink> for den bedste oplevelse.",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s bruger avanceret browser funktioner som ikke er understøttet af din nuværende browser.",
|
||||
"Use %(brand)s on mobile": "Brug %(brand)s på mobil",
|
||||
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Decentraliseret, krypteret chat & samarbejde drevet af $matrixLogo",
|
||||
"%(appName)s: %(browserName)s on %(osName)s": "%(appName)s: %(browserName)s på %(osName)s",
|
||||
"%(brand)s Desktop: %(platformName)s": "%(brand)s Desktop: %(platformName)s"
|
||||
}
|
||||
@@ -1,32 +1,39 @@
|
||||
{
|
||||
"Dismiss": "Ausblenden",
|
||||
"Unknown device": "Unbekanntes Gerät",
|
||||
"Welcome to Element": "Willkommen bei Element",
|
||||
"Sign In": "Anmelden",
|
||||
"Create Account": "Konto erstellen",
|
||||
"Explore rooms": "Räume erkunden",
|
||||
"Unexpected error preparing the app. See console for details.": "Unerwarteter Fehler bei der Vorbereitung der App; mehr Details in der Konsole.",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Ungültige Konfiguration: Es kann nur eine der Optionen default_server_config, default_server_name oder default_hs_url angegeben werden.",
|
||||
"Invalid configuration: no default server specified.": "Ungültige Konfiguration: Es wurde kein Standardserver angegeben.",
|
||||
"The message from the parser is: %(message)s": "Die Nachricht des Parsers ist: %(message)s",
|
||||
"Invalid JSON": "Ungültiges JSON",
|
||||
"Go to your browser to complete Sign In": "Gehe zu deinem Browser, um die Anmeldung abzuschließen",
|
||||
"Unable to load config file: please refresh the page to try again.": "Konfigurationsdatei kann nicht geladen werden: Bitte aktualisiere die Seite, um es erneut zu versuchen.",
|
||||
"Unsupported browser": "Nicht unterstützter Browser",
|
||||
"Go to element.io": "Gehe zu element.io",
|
||||
"Failed to start": "Start fehlgeschlagen",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Bitte installiere <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink> oder <safariLink>Safari</safariLink> für das beste Erlebnis.",
|
||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Du kannst deinen aktuellen Browser weiterhin verwenden. Es ist aber möglich, dass nicht alles richtig funktioniert oder das Aussehen der App inkorrekt ist.",
|
||||
"I understand the risks and wish to continue": "Ich verstehe die Risiken und möchte fortfahren",
|
||||
"Your Element is misconfigured": "Dein Element ist falsch konfiguriert",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Deine Element-Konfiguration enthält ungültiges JSON. Bitte korrigiere das Problem und lade die Seite neu.",
|
||||
"Download Completed": "Herunterladen fertiggestellt",
|
||||
"Open": "Öffnen",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s verwendet erweiterte Browserfunktionen, die von deinem Browser nicht unterstützt werden.",
|
||||
"Your browser can't run %(brand)s": "Dein Browser kann %(brand)s nicht ausführen",
|
||||
"Powered by Matrix": "Betrieben mit Matrix",
|
||||
"Use %(brand)s on mobile": "Verwende %(brand)s am Handy",
|
||||
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Dezentralisierter, verschlüsselter Chat & Zusammenarbeit unterstützt von $matrixLogo",
|
||||
"%(appName)s: %(browserName)s on %(osName)s": "%(appName)s: %(browserName)s auf %(osName)s",
|
||||
"%(brand)s Desktop: %(platformName)s": "%(brand)s Desktop: %(platformName)s"
|
||||
"action": {
|
||||
"create_account": "Konto erstellen",
|
||||
"dismiss": "Ausblenden",
|
||||
"explore_rooms": "Räume erkunden",
|
||||
"open": "Öffnen",
|
||||
"sign_in": "Anmelden"
|
||||
},
|
||||
"auth": {
|
||||
"sso_complete_in_browser_dialog_title": "Browser öffnen, um die Anmeldung abzuschließen"
|
||||
},
|
||||
"download_completed": "Herunterladen fertiggestellt",
|
||||
"error": {
|
||||
"app_launch_unexpected_error": "Unerwarteter Fehler bei der Vorbereitung der App; mehr Details in der Konsole.",
|
||||
"cannot_load_config": "Konfigurationsdatei kann nicht geladen werden: Bitte aktualisiere die Seite, um es erneut zu versuchen.",
|
||||
"invalid_configuration_mixed_server": "Ungültige Konfiguration: default_hs_url kann nicht zeitgleich mit default_server_name oder default_server_config festgelegt werden",
|
||||
"invalid_configuration_no_server": "Ungültige Konfiguration: Es wurde kein Standardserver angegeben.",
|
||||
"invalid_json": "Deine Element-Konfiguration enthält ungültiges JSON. Bitte korrigiere das Problem und lade die Seite neu.",
|
||||
"invalid_json_detail": "Die Nachricht des Parsers ist: %(message)s",
|
||||
"invalid_json_generic": "Ungültiges JSON",
|
||||
"misconfigured": "Dein Element ist falsch konfiguriert"
|
||||
},
|
||||
"failed_to_start": "Start fehlgeschlagen",
|
||||
"go_to_element_io": "Gehe zu element.io",
|
||||
"incompatible_browser": {
|
||||
"browser_links": "Bitte installiere <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink> oder <safariLink>Safari</safariLink> für das beste Erlebnis.",
|
||||
"continue_warning": "Ich verstehe die Risiken und möchte fortfahren",
|
||||
"feature_warning": "Du kannst deinen aktuellen Browser weiterhin verwenden. Es ist aber möglich, dass nicht alles richtig funktioniert oder das Aussehen der App inkorrekt ist.",
|
||||
"features": "%(brand)s verwendet erweiterte Browserfunktionen, die von deinem Browser nicht unterstützt werden.",
|
||||
"summary": "Dein Browser kann %(brand)s nicht ausführen",
|
||||
"title": "Nicht unterstützter Browser"
|
||||
},
|
||||
"powered_by_matrix": "Betrieben mit Matrix",
|
||||
"powered_by_matrix_with_logo": "Dezentralisierter, verschlüsselter Chat & Zusammenarbeit unterstützt von $matrixLogo",
|
||||
"unknown_device": "Unbekanntes Gerät",
|
||||
"use_brand_on_mobile": "Verwende %(brand)s am Handy",
|
||||
"web_default_device_name": "%(appName)s: %(browserName)s auf %(osName)s",
|
||||
"welcome_to_element": "Willkommen bei Element"
|
||||
}
|
||||
|
||||
@@ -1,30 +1,37 @@
|
||||
{
|
||||
"Dismiss": "Απόρριψη",
|
||||
"Unknown device": "Άγνωστη συσκευή",
|
||||
"Welcome to Element": "Καλώς ήλθατε στο Element",
|
||||
"Sign In": "Σύνδεση",
|
||||
"Create Account": "Δημιουργία Λογαριασμού",
|
||||
"The message from the parser is: %(message)s": "Το μήνυμα από τον αναλυτή είναι: %(message)s",
|
||||
"Invalid JSON": "Μη έγκυρο JSON",
|
||||
"Unexpected error preparing the app. See console for details.": "Απρόοπτο σφάλμα κατά την προετοιμασία της εφαρμογής. Δείτε το τερματικό για λεπτομέρειες.",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Μη έγκυρη ρύθμιση: δυνατότητα ορισμού μόνο ένα από τα default_server_config, default_server_name, ή default_hs_url.",
|
||||
"Invalid configuration: no default server specified.": "Μη έγκυρη ρύθμιση παραμέτρων: δεν έχει οριστεί προκαθορισμένος διακομιστής.",
|
||||
"Explore rooms": "Εξερευνήστε δωμάτια",
|
||||
"Open": "Άνοιγμα",
|
||||
"Go to your browser to complete Sign In": "Μεταβείτε στο πρόγραμμα περιήγησής σας για να ολοκληρώσετε τη σύνδεση",
|
||||
"Powered by Matrix": "Με την υποστήριξη του Matrix",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Παρακαλούμε εγκαταστήστε <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, ή <safariLink>Safari</safariLink> για καλύτερη εμπειρία χρήσης.",
|
||||
"Your Element is misconfigured": "Το Element σας δεν εχει ρυθμιστεί σωστά",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Η ρύθμιση του Element περιέχει μη έγκυρο JSON. Διορθώστε το πρόβλημα και φορτώστε ξανά τη σελίδα.",
|
||||
"Unable to load config file: please refresh the page to try again.": "Δεν είναι δυνατή η φόρτωση του αρχείου config: ανανεώστε τη σελίδα για να δοκιμάσετε ξανά.",
|
||||
"Download Completed": "Η λήψη ολοκληρώθηκε",
|
||||
"Unsupported browser": "Μη υποστηριζόμενο πρόγραμμα περιήγησης",
|
||||
"Your browser can't run %(brand)s": "Το πρόγραμμα περιήγησής σας δεν μπορεί να εκτελέσει %(brand)s",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s χρησιμοποιεί προηγμένες δυνατότητες προγράμματος περιήγησης που δεν υποστηρίζονται από το τρέχον πρόγραμμα περιήγησής σας.",
|
||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Μπορείτε να συνεχίσετε να χρησιμοποιείτε το τρέχον πρόγραμμα περιήγησής σας, αλλά ορισμένες ή όλες οι λειτουργίες ενδέχεται να μην λειτουργούν και η εμφάνιση και η αίσθηση της εφαρμογής ενδέχεται να είναι λανθασμένη.",
|
||||
"I understand the risks and wish to continue": "Κατανοώ τους κινδύνους και επιθυμώ να συνεχίσω",
|
||||
"Go to element.io": "Πήγαινε στο element.io",
|
||||
"Failed to start": "Αποτυχία έναρξης",
|
||||
"Use %(brand)s on mobile": "Χρήση %(brand)s σε κινητό",
|
||||
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Αποκεντρωμένη, κρυπτογραφημένη συνομιλία και συνεργασία χρησιμοποιώντας το $matrixLogo"
|
||||
"action": {
|
||||
"create_account": "Δημιουργία Λογαριασμού",
|
||||
"dismiss": "Απόρριψη",
|
||||
"explore_rooms": "Εξερευνήστε δωμάτια",
|
||||
"open": "Άνοιγμα",
|
||||
"sign_in": "Σύνδεση"
|
||||
},
|
||||
"auth": {
|
||||
"sso_complete_in_browser_dialog_title": "Μεταβείτε στο πρόγραμμα περιήγησής σας για να ολοκληρώσετε τη σύνδεση"
|
||||
},
|
||||
"download_completed": "Η λήψη ολοκληρώθηκε",
|
||||
"error": {
|
||||
"app_launch_unexpected_error": "Απρόοπτο σφάλμα κατά την προετοιμασία της εφαρμογής. Δείτε το τερματικό για λεπτομέρειες.",
|
||||
"cannot_load_config": "Δεν είναι δυνατή η φόρτωση του αρχείου config: ανανεώστε τη σελίδα για να δοκιμάσετε ξανά.",
|
||||
"invalid_configuration_no_server": "Μη έγκυρη ρύθμιση παραμέτρων: δεν έχει οριστεί προκαθορισμένος διακομιστής.",
|
||||
"invalid_json": "Η ρύθμιση του Element περιέχει μη έγκυρο JSON. Διορθώστε το πρόβλημα και φορτώστε ξανά τη σελίδα.",
|
||||
"invalid_json_detail": "Το μήνυμα από τον αναλυτή είναι: %(message)s",
|
||||
"invalid_json_generic": "Μη έγκυρο JSON",
|
||||
"misconfigured": "Το Element σας δεν εχει ρυθμιστεί σωστά"
|
||||
},
|
||||
"failed_to_start": "Αποτυχία έναρξης",
|
||||
"go_to_element_io": "Πήγαινε στο element.io",
|
||||
"incompatible_browser": {
|
||||
"browser_links": "Παρακαλούμε εγκαταστήστε <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, ή <safariLink>Safari</safariLink> για καλύτερη εμπειρία χρήσης.",
|
||||
"continue_warning": "Κατανοώ τους κινδύνους και επιθυμώ να συνεχίσω",
|
||||
"feature_warning": "Μπορείτε να συνεχίσετε να χρησιμοποιείτε το τρέχον πρόγραμμα περιήγησής σας, αλλά ορισμένες ή όλες οι λειτουργίες ενδέχεται να μην λειτουργούν και η εμφάνιση και η αίσθηση της εφαρμογής ενδέχεται να είναι λανθασμένη.",
|
||||
"features": "%(brand)s χρησιμοποιεί προηγμένες δυνατότητες προγράμματος περιήγησης που δεν υποστηρίζονται από το τρέχον πρόγραμμα περιήγησής σας.",
|
||||
"summary": "Το πρόγραμμα περιήγησής σας δεν μπορεί να εκτελέσει %(brand)s",
|
||||
"title": "Μη υποστηριζόμενο πρόγραμμα περιήγησης"
|
||||
},
|
||||
"powered_by_matrix": "Με την υποστήριξη του Matrix",
|
||||
"powered_by_matrix_with_logo": "Αποκεντρωμένη, κρυπτογραφημένη συνομιλία και συνεργασία χρησιμοποιώντας το $matrixLogo",
|
||||
"unknown_device": "Άγνωστη συσκευή",
|
||||
"use_brand_on_mobile": "Χρήση %(brand)s σε κινητό",
|
||||
"welcome_to_element": "Καλώς ήλθατε στο Element"
|
||||
}
|
||||
|
||||
@@ -1,32 +1,40 @@
|
||||
{
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.",
|
||||
"Invalid configuration: no default server specified.": "Invalid configuration: no default server specified.",
|
||||
"Your Element is misconfigured": "Your Element is misconfigured",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.",
|
||||
"The message from the parser is: %(message)s": "The message from the parser is: %(message)s",
|
||||
"Invalid JSON": "Invalid JSON",
|
||||
"Unable to load config file: please refresh the page to try again.": "Unable to load config file: please refresh the page to try again.",
|
||||
"Unexpected error preparing the app. See console for details.": "Unexpected error preparing the app. See console for details.",
|
||||
"Download Completed": "Download Completed",
|
||||
"Open": "Open",
|
||||
"Dismiss": "Dismiss",
|
||||
"%(brand)s Desktop: %(platformName)s": "%(brand)s Desktop: %(platformName)s",
|
||||
"Go to your browser to complete Sign In": "Go to your browser to complete Sign In",
|
||||
"Unknown device": "Unknown device",
|
||||
"%(appName)s: %(browserName)s on %(osName)s": "%(appName)s: %(browserName)s on %(osName)s",
|
||||
"Powered by Matrix": "Powered by Matrix",
|
||||
"Use %(brand)s on mobile": "Use %(brand)s on mobile",
|
||||
"Unsupported browser": "Unsupported browser",
|
||||
"Your browser can't run %(brand)s": "Your browser can't run %(brand)s",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s uses advanced browser features which aren't supported by your current browser.",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.",
|
||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.",
|
||||
"I understand the risks and wish to continue": "I understand the risks and wish to continue",
|
||||
"Go to element.io": "Go to element.io",
|
||||
"Failed to start": "Failed to start",
|
||||
"Welcome to Element": "Welcome to Element",
|
||||
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Decentralised, encrypted chat & collaboration powered by $matrixLogo",
|
||||
"Sign In": "Sign In",
|
||||
"Create Account": "Create Account",
|
||||
"Explore rooms": "Explore rooms"
|
||||
"action": {
|
||||
"create_account": "Create Account",
|
||||
"dismiss": "Dismiss",
|
||||
"explore_rooms": "Explore rooms",
|
||||
"open": "Open",
|
||||
"sign_in": "Sign in"
|
||||
},
|
||||
"auth": {
|
||||
"sso_complete_in_browser_dialog_title": "Go to your browser to complete Sign In"
|
||||
},
|
||||
"desktop_default_device_name": "%(brand)s Desktop: %(platformName)s",
|
||||
"download_completed": "Download Completed",
|
||||
"error": {
|
||||
"app_launch_unexpected_error": "Unexpected error preparing the app. See console for details.",
|
||||
"cannot_load_config": "Unable to load config file: please refresh the page to try again.",
|
||||
"invalid_configuration_mixed_server": "Invalid configuration: a default_hs_url can't be specified along with default_server_name or default_server_config",
|
||||
"invalid_configuration_no_server": "Invalid configuration: no default server specified.",
|
||||
"invalid_json": "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.",
|
||||
"invalid_json_detail": "The message from the parser is: %(message)s",
|
||||
"invalid_json_generic": "Invalid JSON",
|
||||
"misconfigured": "Your Element is misconfigured"
|
||||
},
|
||||
"failed_to_start": "Failed to start",
|
||||
"go_to_element_io": "Go to element.io",
|
||||
"incompatible_browser": {
|
||||
"browser_links": "Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.",
|
||||
"continue_warning": "I understand the risks and wish to continue",
|
||||
"feature_warning": "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.",
|
||||
"features": "%(brand)s uses advanced browser features which aren't supported by your current browser.",
|
||||
"summary": "Your browser can't run %(brand)s",
|
||||
"title": "Unsupported browser"
|
||||
},
|
||||
"powered_by_matrix": "Powered by Matrix",
|
||||
"powered_by_matrix_with_logo": "Decentralised, encrypted chat & collaboration powered by $matrixLogo",
|
||||
"unknown_device": "Unknown device",
|
||||
"use_brand_on_mobile": "Use %(brand)s on mobile",
|
||||
"web_default_device_name": "%(appName)s: %(browserName)s on %(osName)s",
|
||||
"welcome_to_element": "Welcome to Element"
|
||||
}
|
||||
|
||||
@@ -1,32 +1,5 @@
|
||||
{
|
||||
"Dismiss": "Dismiss",
|
||||
"Unknown device": "Unknown device",
|
||||
"Welcome to Element": "Welcome to Element",
|
||||
"Sign In": "Sign In",
|
||||
"Create Account": "Create Account",
|
||||
"Explore rooms": "Explore rooms",
|
||||
"The message from the parser is: %(message)s": "The message from the parser is: %(message)s",
|
||||
"Invalid JSON": "Invalid JSON",
|
||||
"Unexpected error preparing the app. See console for details.": "Unexpected error preparing the app. See console for details.",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.",
|
||||
"Invalid configuration: no default server specified.": "Invalid configuration: no default server specified.",
|
||||
"Failed to start": "Failed to start",
|
||||
"Go to element.io": "Go to element.io",
|
||||
"I understand the risks and wish to continue": "I understand the risks and wish to continue",
|
||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s uses advanced browser features which aren't supported by your current browser.",
|
||||
"Your browser can't run %(brand)s": "Your browser can't run %(brand)s",
|
||||
"Unsupported browser": "Unsupported browser",
|
||||
"Powered by Matrix": "Powered by Matrix",
|
||||
"Go to your browser to complete Sign In": "Go to your browser to complete Sign In",
|
||||
"Open": "Open",
|
||||
"Download Completed": "Download Completed",
|
||||
"Unable to load config file: please refresh the page to try again.": "Unable to load config file: please refresh the page to try again.",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.",
|
||||
"Your Element is misconfigured": "Your Element is misconfigured",
|
||||
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Decentralised, encrypted chat & collaboration powered by $matrixLogo",
|
||||
"Use %(brand)s on mobile": "Use %(brand)s on mobile",
|
||||
"%(appName)s: %(browserName)s on %(osName)s": "%(appName)s: %(browserName)s on %(osName)s",
|
||||
"%(brand)s Desktop: %(platformName)s": "%(brand)s Desktop: %(platformName)s"
|
||||
"action": {
|
||||
"sign_in": "Sign in"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,32 +1,39 @@
|
||||
{
|
||||
"Dismiss": "Rezigni",
|
||||
"Unknown device": "Nekonata aparato",
|
||||
"Welcome to Element": "Bonvenon al Element",
|
||||
"Sign In": "Ensaluti",
|
||||
"Create Account": "Krei konton",
|
||||
"Explore rooms": "Esplori ĉambrojn",
|
||||
"Unexpected error preparing the app. See console for details.": "Neatendita eraro okazis dum la preparado de la aplikaĵo. Rigardu la konzolon por detaloj.",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Nevalida agordo: vi povas specifi nur unu elekteblon el « default_server_config », « default_server_name », aŭ « default_hs_url ».",
|
||||
"Invalid configuration: no default server specified.": "Nevalida agordo: neniu implicita servilo estas specifita.",
|
||||
"The message from the parser is: %(message)s": "La mesaĝo el la analizilo estas: %(message)s",
|
||||
"Invalid JSON": "Nevalida JSON",
|
||||
"Go to your browser to complete Sign In": "Iru al via retumilo por finpretigi la ensaluton",
|
||||
"Unable to load config file: please refresh the page to try again.": "Ne povas enlegi agordan dosieron: bonvolu reprovi per aktualigo de la paĝo.",
|
||||
"Unsupported browser": "Nesubtenata retumilo",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Bonvolu instali retumilon <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, aŭ <safariLink>Safari</safariLink>, por la plej bona sperto.",
|
||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Vi povas daŭre uzi vian nunan foliumilon, sed iuj (eĉ ĉiuj) funkcioj eble ne funkciu, kaj la aspekto de la aplikaĵo eble ne estu ĝusta.",
|
||||
"I understand the risks and wish to continue": "Mi komprenas la riskon kaj volas pluiĝi",
|
||||
"Go to element.io": "Iri al element.io",
|
||||
"Failed to start": "Malsukcesis starti",
|
||||
"Download Completed": "Elŝuto finiĝis",
|
||||
"Open": "Malfermi",
|
||||
"Your Element is misconfigured": "Via Elemento estas misagordita",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Via agordaro de Elemento enhavas nevalidajn datumojn de JSON. Bonvolu korekti la problemon kaj aktualigi la paĝon.",
|
||||
"Your browser can't run %(brand)s": "Via retumilo ne povas ruli %(brand)s",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s uzas specialajn funkciojn de retumilo, kiujn via nuna retumilo ne subtenas.",
|
||||
"Powered by Matrix": "Povigata de Matrix",
|
||||
"Use %(brand)s on mobile": "Uzi %(brand)s poŝtelefone",
|
||||
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Malcentralizita kaj ĉifrita babilejo; kunlaboro danke al $matrixLogo",
|
||||
"%(appName)s: %(browserName)s on %(osName)s": "%(appName)s: %(browserName)s sur %(osName)s",
|
||||
"%(brand)s Desktop: %(platformName)s": "%(brand)s Labortablo: %(platformName)s"
|
||||
"action": {
|
||||
"create_account": "Krei konton",
|
||||
"dismiss": "Rezigni",
|
||||
"explore_rooms": "Esplori ĉambrojn",
|
||||
"open": "Malfermi",
|
||||
"sign_in": "Ensaluti"
|
||||
},
|
||||
"auth": {
|
||||
"sso_complete_in_browser_dialog_title": "Iru al via retumilo por finpretigi la ensaluton"
|
||||
},
|
||||
"desktop_default_device_name": "%(brand)s Labortablo: %(platformName)s",
|
||||
"download_completed": "Elŝuto finiĝis",
|
||||
"error": {
|
||||
"app_launch_unexpected_error": "Neatendita eraro okazis dum la preparado de la aplikaĵo. Rigardu la konzolon por detaloj.",
|
||||
"cannot_load_config": "Ne povas enlegi agordan dosieron: bonvolu reprovi per aktualigo de la paĝo.",
|
||||
"invalid_configuration_no_server": "Nevalida agordo: neniu implicita servilo estas specifita.",
|
||||
"invalid_json": "Via agordaro de Elemento enhavas nevalidajn datumojn de JSON. Bonvolu korekti la problemon kaj aktualigi la paĝon.",
|
||||
"invalid_json_detail": "La mesaĝo el la analizilo estas: %(message)s",
|
||||
"invalid_json_generic": "Nevalida JSON",
|
||||
"misconfigured": "Via Elemento estas misagordita"
|
||||
},
|
||||
"failed_to_start": "Malsukcesis starti",
|
||||
"go_to_element_io": "Iri al element.io",
|
||||
"incompatible_browser": {
|
||||
"browser_links": "Bonvolu instali retumilon <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, aŭ <safariLink>Safari</safariLink>, por la plej bona sperto.",
|
||||
"continue_warning": "Mi komprenas la riskon kaj volas pluiĝi",
|
||||
"feature_warning": "Vi povas daŭre uzi vian nunan foliumilon, sed iuj (eĉ ĉiuj) funkcioj eble ne funkciu, kaj la aspekto de la aplikaĵo eble ne estu ĝusta.",
|
||||
"features": "%(brand)s uzas specialajn funkciojn de retumilo, kiujn via nuna retumilo ne subtenas.",
|
||||
"summary": "Via retumilo ne povas ruli %(brand)s",
|
||||
"title": "Nesubtenata retumilo"
|
||||
},
|
||||
"powered_by_matrix": "Povigata de Matrix",
|
||||
"powered_by_matrix_with_logo": "Malcentralizita kaj ĉifrita babilejo; kunlaboro danke al $matrixLogo",
|
||||
"unknown_device": "Nekonata aparato",
|
||||
"use_brand_on_mobile": "Uzi %(brand)s poŝtelefone",
|
||||
"web_default_device_name": "%(appName)s: %(browserName)s sur %(osName)s",
|
||||
"welcome_to_element": "Bonvenon al Element"
|
||||
}
|
||||
|
||||
@@ -1,32 +1,39 @@
|
||||
{
|
||||
"Unknown device": "Dispositivo desconocido",
|
||||
"Dismiss": "Omitir",
|
||||
"Welcome to Element": "Te damos la bienvenida a Element",
|
||||
"Sign In": "Iniciar sesión",
|
||||
"Create Account": "Crear cuenta",
|
||||
"Explore rooms": "Explorar salas",
|
||||
"Unexpected error preparing the app. See console for details.": "Error inesperado preparando la aplicación. Ver la consola para más detalles.",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuración errónea: sólo puede especificar uno de default_server_config, default_server_name, o default_hs_url.",
|
||||
"Invalid configuration: no default server specified.": "Configuración errónea: no se ha especificado servidor.",
|
||||
"The message from the parser is: %(message)s": "El mensaje del parser es: %(message)s",
|
||||
"Invalid JSON": "JSON inválido",
|
||||
"Go to your browser to complete Sign In": "Abre tu navegador web para completar el registro",
|
||||
"Unable to load config file: please refresh the page to try again.": "No se ha podido cargar el archivo de configuración. Recarga la página para intentarlo otra vez.",
|
||||
"Unsupported browser": "Navegador no compatible",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Por favor, instale <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, o <safariLink>Safari</safariLink> para la mejor experiencia.",
|
||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Puedes seguir utilizando tu navegador actual, pero puede que algunas funcionalidades no estén disponibles o que algunas partes de la aplicación se muestren de forma incorrecta.",
|
||||
"I understand the risks and wish to continue": "Entiendo los riesgos y quiero continuar",
|
||||
"Go to element.io": "Ir a element.io",
|
||||
"Failed to start": "Fallo al iniciar",
|
||||
"Your Element is misconfigured": "Tu aplicación Element está mal configurada",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Tu configuración de Element contiene JSON inválido. Por favor corrígelo e inténtelo de nuevo.",
|
||||
"Download Completed": "Descarga completada",
|
||||
"Open": "Abrir",
|
||||
"Your browser can't run %(brand)s": "Tu navegador no es compatible con %(brand)s",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s usa funciones avanzadas que su navegador actual no soporta.",
|
||||
"Powered by Matrix": "Funciona con Matrix",
|
||||
"Use %(brand)s on mobile": "Usar %(brand)s en modo móvil",
|
||||
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Conversaciones y colaboración descentralizadas y cifradas gracias a $matrixLogo",
|
||||
"%(appName)s: %(browserName)s on %(osName)s": "%(appName)s: %(browserName)s en %(osName)s",
|
||||
"%(brand)s Desktop: %(platformName)s": "%(brand)s de escritorio: %(platformName)s"
|
||||
"action": {
|
||||
"create_account": "Crear cuenta",
|
||||
"dismiss": "Omitir",
|
||||
"explore_rooms": "Explorar salas",
|
||||
"open": "Abrir",
|
||||
"sign_in": "Iniciar sesión"
|
||||
},
|
||||
"auth": {
|
||||
"sso_complete_in_browser_dialog_title": "Abre tu navegador web para completar el registro"
|
||||
},
|
||||
"desktop_default_device_name": "%(brand)s de escritorio: %(platformName)s",
|
||||
"download_completed": "Descarga completada",
|
||||
"error": {
|
||||
"app_launch_unexpected_error": "Error inesperado preparando la aplicación. Ver la consola para más detalles.",
|
||||
"cannot_load_config": "No se ha podido cargar el archivo de configuración. Recarga la página para intentarlo otra vez.",
|
||||
"invalid_configuration_no_server": "Configuración errónea: no se ha especificado servidor.",
|
||||
"invalid_json": "Tu configuración de Element contiene JSON inválido. Por favor corrígelo e inténtelo de nuevo.",
|
||||
"invalid_json_detail": "El mensaje del parser es: %(message)s",
|
||||
"invalid_json_generic": "JSON inválido",
|
||||
"misconfigured": "Tu aplicación Element está mal configurada"
|
||||
},
|
||||
"failed_to_start": "Fallo al iniciar",
|
||||
"go_to_element_io": "Ir a element.io",
|
||||
"incompatible_browser": {
|
||||
"browser_links": "Por favor, instale <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, o <safariLink>Safari</safariLink> para la mejor experiencia.",
|
||||
"continue_warning": "Entiendo los riesgos y quiero continuar",
|
||||
"feature_warning": "Puedes seguir utilizando tu navegador actual, pero puede que algunas funcionalidades no estén disponibles o que algunas partes de la aplicación se muestren de forma incorrecta.",
|
||||
"features": "%(brand)s usa funciones avanzadas que su navegador actual no soporta.",
|
||||
"summary": "Tu navegador no es compatible con %(brand)s",
|
||||
"title": "Navegador no compatible"
|
||||
},
|
||||
"powered_by_matrix": "Funciona con Matrix",
|
||||
"powered_by_matrix_with_logo": "Conversaciones y colaboración descentralizadas y cifradas gracias a $matrixLogo",
|
||||
"unknown_device": "Dispositivo desconocido",
|
||||
"use_brand_on_mobile": "Usar %(brand)s en modo móvil",
|
||||
"web_default_device_name": "%(appName)s: %(browserName)s en %(osName)s",
|
||||
"welcome_to_element": "Te damos la bienvenida a Element"
|
||||
}
|
||||
|
||||
@@ -1,32 +1,39 @@
|
||||
{
|
||||
"The message from the parser is: %(message)s": "Sõnum parserist on: %(message)s",
|
||||
"Invalid JSON": "Vigane JSON",
|
||||
"Unknown device": "Tundmatu seade",
|
||||
"Invalid configuration: no default server specified.": "Vigane seadistus: vaikimisi server on määramata.",
|
||||
"Unable to load config file: please refresh the page to try again.": "Seadistuste faili laadimine ei õnnestunud: uuesti proovimiseks palun laadi leht uuesti.",
|
||||
"Unexpected error preparing the app. See console for details.": "Rakenduse ettevalmistamisel tekkis ootamatu viga. Täpsema teabe leiad konsoolist.",
|
||||
"Go to your browser to complete Sign In": "Sisselogimiseks ava oma brauser",
|
||||
"Dismiss": "Loobu",
|
||||
"Explore rooms": "Tutvu jututubadega",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Vigane seadistus. Sa võid määrata vaid ühe alljärgnevatest: default_server_config, default_server_name või default_hs_url.",
|
||||
"Welcome to Element": "Tere tulemast kasutama suhtlusrakendust Element",
|
||||
"Sign In": "Logi sisse",
|
||||
"Create Account": "Loo konto",
|
||||
"Unsupported browser": "Sellele brauserile puudub tugi",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Parima kasutuskogemuse jaoks palun paigalda <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink> või <safariLink>Safari</safariLink>.",
|
||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Sa võid jätkata praeguse brauseri kasutamist, kuid mõned või kõik funktsionaalsused ei pruugi toimida ning rakenduse välimus võib vigane olla.",
|
||||
"I understand the risks and wish to continue": "Ma mõistan riske ja soovin jätkata",
|
||||
"Go to element.io": "Mine element.io lehele",
|
||||
"Failed to start": "Käivitamine ei õnnestunud",
|
||||
"Download Completed": "Allalaadimine on lõpetatud",
|
||||
"Open": "Ava",
|
||||
"Your Element is misconfigured": "Sinu Element on valesti seadistatud",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Sinu Element'i seadistustes on vigased JSON-vormingus andmed. Palun paranda see viga ja laadi leht uuesti.",
|
||||
"Your browser can't run %(brand)s": "%(brand)s ei toimi sinu brauseris",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s kasutab mitmeid uusi brauseri-põhiseid tehnoloogiaid, mis ei ole veel sinu veebibrauseris toetatud.",
|
||||
"Powered by Matrix": "Põhineb Matrix'il",
|
||||
"Use %(brand)s on mobile": "Kasuta rakendust %(brand)s nutiseadmes",
|
||||
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Hajutatud ja krüpteeritud suhtlus- ning ühistöörakendus, mille aluseks on $matrixLogo",
|
||||
"%(appName)s: %(browserName)s on %(osName)s": "%(appName)s: %(browserName)s operatsioonisüsteemis %(osName)s",
|
||||
"%(brand)s Desktop: %(platformName)s": "%(brand)s Desktop: %(platformName)s"
|
||||
"action": {
|
||||
"create_account": "Loo konto",
|
||||
"dismiss": "Loobu",
|
||||
"explore_rooms": "Tutvu jututubadega",
|
||||
"open": "Ava",
|
||||
"sign_in": "Logi sisse"
|
||||
},
|
||||
"auth": {
|
||||
"sso_complete_in_browser_dialog_title": "Sisselogimiseks ava oma brauser"
|
||||
},
|
||||
"download_completed": "Allalaadimine on lõpetatud",
|
||||
"error": {
|
||||
"app_launch_unexpected_error": "Rakenduse ettevalmistamisel tekkis ootamatu viga. Täpsema teabe leiad konsoolist.",
|
||||
"cannot_load_config": "Seadistuste faili laadimine ei õnnestunud: uuesti proovimiseks palun laadi leht uuesti.",
|
||||
"invalid_configuration_mixed_server": "Vigane seadistus: default_hs_url ei saa olla määratud koos default_server_name või default_server_config tunnustega",
|
||||
"invalid_configuration_no_server": "Vigane seadistus: vaikimisi server on määramata.",
|
||||
"invalid_json": "Sinu Element'i seadistustes on vigased JSON-vormingus andmed. Palun paranda see viga ja laadi leht uuesti.",
|
||||
"invalid_json_detail": "Sõnum parserist on: %(message)s",
|
||||
"invalid_json_generic": "Vigane JSON",
|
||||
"misconfigured": "Sinu Element on valesti seadistatud"
|
||||
},
|
||||
"failed_to_start": "Käivitamine ei õnnestunud",
|
||||
"go_to_element_io": "Mine element.io lehele",
|
||||
"incompatible_browser": {
|
||||
"browser_links": "Parima kasutuskogemuse jaoks palun paigalda <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink> või <safariLink>Safari</safariLink>.",
|
||||
"continue_warning": "Ma mõistan riske ja soovin jätkata",
|
||||
"feature_warning": "Sa võid jätkata praeguse brauseri kasutamist, kuid mõned või kõik funktsionaalsused ei pruugi toimida ning rakenduse välimus võib vigane olla.",
|
||||
"features": "%(brand)s kasutab mitmeid uusi brauseri-põhiseid tehnoloogiaid, mis ei ole veel sinu veebibrauseris toetatud.",
|
||||
"summary": "%(brand)s ei toimi sinu brauseris",
|
||||
"title": "Sellele brauserile puudub tugi"
|
||||
},
|
||||
"powered_by_matrix": "Põhineb Matrix'il",
|
||||
"powered_by_matrix_with_logo": "Hajutatud ja krüpteeritud suhtlus- ning ühistöörakendus, mille aluseks on $matrixLogo",
|
||||
"unknown_device": "Tundmatu seade",
|
||||
"use_brand_on_mobile": "Kasuta rakendust %(brand)s nutiseadmes",
|
||||
"web_default_device_name": "%(appName)s: %(browserName)s operatsioonisüsteemis %(osName)s",
|
||||
"welcome_to_element": "Tere tulemast kasutama suhtlusrakendust Element"
|
||||
}
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
{
|
||||
"Dismiss": "Baztertu",
|
||||
"Unknown device": "Gailu ezezaguna",
|
||||
"Welcome to Element": "Ongi etorri Element mezularitzara",
|
||||
"Sign In": "Hasi saioa",
|
||||
"Create Account": "Sortu kontua",
|
||||
"Explore rooms": "Arakatu gelak",
|
||||
"Unexpected error preparing the app. See console for details.": "Ustekabeko errorea aplikazioa prestatzean. Ikusi xehetasunak kontsolan.",
|
||||
"Invalid configuration: no default server specified.": "Konfigurazio baliogabea: Ez da lehenetsitako zerbitzaririk zehaztu.",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Konfigurazio baliogabea: default_server_config, default_server_name, edo default_hs_url bat bakarra zehaztu daiteke.",
|
||||
"The message from the parser is: %(message)s": "Prozesatzailearen mezua hau da: %(message)s",
|
||||
"Invalid JSON": "JSON baliogabea",
|
||||
"Go to your browser to complete Sign In": "Joan zure nabigatzailera izena ematen bukatzeko",
|
||||
"Unable to load config file: please refresh the page to try again.": "Ezin izan da konfigurazio fitxategia kargatu: Saiatu orria birkargatzen.",
|
||||
"Unsupported browser": "Onartu gabeko nabigatzailea",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Instalatu <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, edo <safariLink>Safari</safariLink> esperientzia hobe baterako.",
|
||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Zure oraingo nabigatzailea erabiltzen jarraitu dezakezu, baina ezaugarri batzuk agian ez dute funtzionatuko eta itxura desegokia izan daiteke.",
|
||||
"I understand the risks and wish to continue": "Arriskuak ulertzen ditut eta jarraitu nahi dut",
|
||||
"Go to element.io": "Joan element.io gunera",
|
||||
"Failed to start": "Huts egin du abiatzean",
|
||||
"Your Element is misconfigured": "Zure Element ez dago ondo konfiguratuta",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Zure Element-en konfigurazioak JSON baliogabea dauka. Mesedez, konpondu arazoa eta birkargatu orria.",
|
||||
"Download Completed": "Deskarga burututa",
|
||||
"Open": "Ireki",
|
||||
"Your browser can't run %(brand)s": "Zure nabigatzaileak ezin du %(brand)s exekutatu",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s-(e)k zure oraingo nabigatzaile honek euskarririk ematen ez dien ezaugarri aurreratuak erabiltzen ditu.",
|
||||
"Powered by Matrix": "Matrixekin egina"
|
||||
}
|
||||
@@ -1,32 +1,39 @@
|
||||
{
|
||||
"Unknown device": "دستگاه ناشناخته",
|
||||
"Welcome to Element": "به Element خوشآمدید",
|
||||
"Dismiss": "نادیده بگیر",
|
||||
"Invalid JSON": "JSON اشتباه",
|
||||
"Go to your browser to complete Sign In": "برای تکمیل ورود به مرورگر خود بروید",
|
||||
"Sign In": "ورود",
|
||||
"Create Account": "ایجاد حساب کاربری",
|
||||
"Explore rooms": "جستجو در اتاق ها",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "پیکربندی نامعتبر: فقط میتوانید یکی از default_server_config، default_server_name یا default_hs_url را مشخص کنید.",
|
||||
"Invalid configuration: no default server specified.": "پیکربندی نامعتبر: سرور پیشفرض مشخص نشده است.",
|
||||
"Your Element is misconfigured": "Element شما پیکربندی نشده است",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "پیکربندی المنت شما شامل JSON نا معتبر است. لطفا مشکل را اصلاح کنید و صفحه را بارگذاری مجدد کنید.",
|
||||
"The message from the parser is: %(message)s": "پیام از طرف تجزیه کننده: %(message)s",
|
||||
"Unable to load config file: please refresh the page to try again.": "قادر به بارگذاری فایل پیکربندی نیست: لطفا برای تلاش مجدد صفحه را تازه کنید.",
|
||||
"Unexpected error preparing the app. See console for details.": "خطای غیر منتظره در آماده سازی برنامه. کنسول را برای جزئیات مشاهده کنید.",
|
||||
"Download Completed": "بارگیری کامل شد",
|
||||
"Open": "باز",
|
||||
"Unsupported browser": "مرورگر پشتبانی نمی شود",
|
||||
"Your browser can't run %(brand)s": "مرورگر شما نمی تواند %(brand)s را اجرا کند",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s از ویژگی های پیشرفته مرورگر استفاده می کند که در مرورگر فعلی شما پشتیبانی نمی شوند.",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "لطفا برای تجربه بهتر <chromeLink>کروم</chromeLink>، <firefoxLink>فایرفاکس</firefoxLink>، یا <safariLink>سافاری</safariLink> را نصب کنید.",
|
||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "شما می توانید با مرورگر فعلی خود ادامه دهید، اما ممکن است عملکرد تمامی یا برخی از قابلیت ها با اشکال روبرو شود و نمایش برنامه صحیح نباشد.",
|
||||
"I understand the risks and wish to continue": "از خطرات این کار آگاهم و مایلم که ادامه بدهم",
|
||||
"Go to element.io": "برو به element.io",
|
||||
"Failed to start": "خطا در شروع",
|
||||
"Powered by Matrix": "راه اندازی شده با استفاده از ماتریکس",
|
||||
"Use %(brand)s on mobile": "از %(brand)s گوشی استفاده کنید",
|
||||
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "همکاری چت غیرمتمرکز و رمزگذاری شده & توسعه یافته با استفاده از $matrixLogo",
|
||||
"%(appName)s: %(browserName)s on %(osName)s": "%(appName)s: %(browserName)s: روی %(osName)s",
|
||||
"%(brand)s Desktop: %(platformName)s": "%(brand)s دسکتاپ: %(platformName)s"
|
||||
"action": {
|
||||
"create_account": "ایجاد حساب کاربری",
|
||||
"dismiss": "نادیده بگیر",
|
||||
"explore_rooms": "جستجو در اتاق ها",
|
||||
"open": "باز",
|
||||
"sign_in": "ورود"
|
||||
},
|
||||
"auth": {
|
||||
"sso_complete_in_browser_dialog_title": "برای تکمیل ورود به مرورگر خود بروید"
|
||||
},
|
||||
"desktop_default_device_name": "%(brand)s دسکتاپ: %(platformName)s",
|
||||
"download_completed": "بارگیری کامل شد",
|
||||
"error": {
|
||||
"app_launch_unexpected_error": "خطای غیر منتظره در آماده سازی برنامه. کنسول را برای جزئیات مشاهده کنید.",
|
||||
"cannot_load_config": "قادر به بارگذاری فایل پیکربندی نیست: لطفا برای تلاش مجدد صفحه را تازه کنید.",
|
||||
"invalid_configuration_no_server": "پیکربندی نامعتبر: سرور پیشفرض مشخص نشده است.",
|
||||
"invalid_json": "پیکربندی المنت شما شامل JSON نا معتبر است. لطفا مشکل را اصلاح کنید و صفحه را بارگذاری مجدد کنید.",
|
||||
"invalid_json_detail": "پیام از طرف تجزیه کننده: %(message)s",
|
||||
"invalid_json_generic": "JSON اشتباه",
|
||||
"misconfigured": "Element شما پیکربندی نشده است"
|
||||
},
|
||||
"failed_to_start": "خطا در شروع",
|
||||
"go_to_element_io": "برو به element.io",
|
||||
"incompatible_browser": {
|
||||
"browser_links": "لطفا برای تجربه بهتر <chromeLink>کروم</chromeLink>، <firefoxLink>فایرفاکس</firefoxLink>، یا <safariLink>سافاری</safariLink> را نصب کنید.",
|
||||
"continue_warning": "از خطرات این کار آگاهم و مایلم که ادامه بدهم",
|
||||
"feature_warning": "شما می توانید با مرورگر فعلی خود ادامه دهید، اما ممکن است عملکرد تمامی یا برخی از قابلیت ها با اشکال روبرو شود و نمایش برنامه صحیح نباشد.",
|
||||
"features": "%(brand)s از ویژگی های پیشرفته مرورگر استفاده می کند که در مرورگر فعلی شما پشتیبانی نمی شوند.",
|
||||
"summary": "مرورگر شما نمی تواند %(brand)s را اجرا کند",
|
||||
"title": "مرورگر پشتبانی نمی شود"
|
||||
},
|
||||
"powered_by_matrix": "راه اندازی شده با استفاده از ماتریکس",
|
||||
"powered_by_matrix_with_logo": "همکاری چت غیرمتمرکز و رمزگذاری شده & توسعه یافته با استفاده از $matrixLogo",
|
||||
"unknown_device": "دستگاه ناشناخته",
|
||||
"use_brand_on_mobile": "از %(brand)s گوشی استفاده کنید",
|
||||
"web_default_device_name": "%(appName)s: %(browserName)s: روی %(osName)s",
|
||||
"welcome_to_element": "به Element خوشآمدید"
|
||||
}
|
||||
|
||||
@@ -1,32 +1,39 @@
|
||||
{
|
||||
"Dismiss": "Hylkää",
|
||||
"Unknown device": "Tuntematon laite",
|
||||
"Welcome to Element": "Tervetuloa Element-sovellukseen",
|
||||
"Sign In": "Kirjaudu",
|
||||
"Create Account": "Luo tili",
|
||||
"Explore rooms": "Selaa huoneita",
|
||||
"Unexpected error preparing the app. See console for details.": "Odottamaton virhe sovellusta valmisteltaessa. Katso konsolista lisätietoja.",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Virheellinen asetus. Vain yhden seuraavista voi määrittää: default_server_config, default_server_name, tai default_hs_url.",
|
||||
"Invalid configuration: no default server specified.": "Virheellinen asetus: oletuspalvelinta ei ole määritetty.",
|
||||
"The message from the parser is: %(message)s": "Viesti jäsentimeltä: %(message)s",
|
||||
"Invalid JSON": "Virheellinen JSON",
|
||||
"Unable to load config file: please refresh the page to try again.": "Asetustiedostoa ei voi ladata. Yritä uudelleen lataamalla sivu uudelleen.",
|
||||
"Go to your browser to complete Sign In": "Tee kirjautuminen loppuun selaimessasi",
|
||||
"Unsupported browser": "Selainta ei tueta",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Asenna <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink> tai <safariLink>Safari</safariLink>, jotta kaikki toimii parhaiten.",
|
||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Voit käyttää edelleen nykyistä selaintasi, mutta jotkut tai kaikki ominaisuudet eivät ehkä toimi ja sovelluksen ulkoasu voi olla virheellinen.",
|
||||
"I understand the risks and wish to continue": "Ymmärrän riskit ja haluan jatkaa",
|
||||
"Failed to start": "Käynnistys ei onnistunut",
|
||||
"Download Completed": "Lataus valmis",
|
||||
"Open": "Avaa",
|
||||
"Go to element.io": "Mene osoitteeseen riot.im",
|
||||
"Your Element is misconfigured": "Elementisi asetukset ovat pielessä",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Element-asetuksesi sisältävät epäkelpoa JSONia. Korjaa ongelma ja lataa sivu uudelleen.",
|
||||
"Powered by Matrix": "Moottorina Matrix",
|
||||
"Your browser can't run %(brand)s": "%(brand)s ei toimi selaimessasi",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s käyttää edistyneitä selaimen ominaisuuksia, joita nykyinen selaimesi ei tue.",
|
||||
"Use %(brand)s on mobile": "Käytä %(brand)sia mobiilisti",
|
||||
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Hajautettu, salattu keskustelu & yhteistyö, taustavoimana $matrixLogo",
|
||||
"%(appName)s: %(browserName)s on %(osName)s": "%(appName)s: %(browserName)s käyttöjärjestelmällä %(osName)s",
|
||||
"%(brand)s Desktop: %(platformName)s": "%(brand)sin työpöytäversio: %(platformName)s"
|
||||
"action": {
|
||||
"create_account": "Luo tili",
|
||||
"dismiss": "Hylkää",
|
||||
"explore_rooms": "Selaa huoneita",
|
||||
"open": "Avaa",
|
||||
"sign_in": "Kirjaudu"
|
||||
},
|
||||
"auth": {
|
||||
"sso_complete_in_browser_dialog_title": "Tee kirjautuminen loppuun selaimessasi"
|
||||
},
|
||||
"desktop_default_device_name": "%(brand)sin työpöytäversio: %(platformName)s",
|
||||
"download_completed": "Lataus valmis",
|
||||
"error": {
|
||||
"app_launch_unexpected_error": "Odottamaton virhe sovellusta valmisteltaessa. Katso konsolista lisätietoja.",
|
||||
"cannot_load_config": "Asetustiedostoa ei voi ladata. Yritä uudelleen lataamalla sivu uudelleen.",
|
||||
"invalid_configuration_no_server": "Virheellinen asetus: oletuspalvelinta ei ole määritetty.",
|
||||
"invalid_json": "Element-asetuksesi sisältävät epäkelpoa JSONia. Korjaa ongelma ja lataa sivu uudelleen.",
|
||||
"invalid_json_detail": "Viesti jäsentimeltä: %(message)s",
|
||||
"invalid_json_generic": "Virheellinen JSON",
|
||||
"misconfigured": "Elementisi asetukset ovat pielessä"
|
||||
},
|
||||
"failed_to_start": "Käynnistys ei onnistunut",
|
||||
"go_to_element_io": "Mene osoitteeseen riot.im",
|
||||
"incompatible_browser": {
|
||||
"browser_links": "Asenna <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink> tai <safariLink>Safari</safariLink>, jotta kaikki toimii parhaiten.",
|
||||
"continue_warning": "Ymmärrän riskit ja haluan jatkaa",
|
||||
"feature_warning": "Voit käyttää edelleen nykyistä selaintasi, mutta jotkut tai kaikki ominaisuudet eivät ehkä toimi ja sovelluksen ulkoasu voi olla virheellinen.",
|
||||
"features": "%(brand)s käyttää edistyneitä selaimen ominaisuuksia, joita nykyinen selaimesi ei tue.",
|
||||
"summary": "%(brand)s ei toimi selaimessasi",
|
||||
"title": "Selainta ei tueta"
|
||||
},
|
||||
"powered_by_matrix": "Moottorina Matrix",
|
||||
"powered_by_matrix_with_logo": "Hajautettu, salattu keskustelu & yhteistyö, taustavoimana $matrixLogo",
|
||||
"unknown_device": "Tuntematon laite",
|
||||
"use_brand_on_mobile": "Käytä %(brand)sia mobiilisti",
|
||||
"web_default_device_name": "%(appName)s: %(browserName)s käyttöjärjestelmällä %(osName)s",
|
||||
"welcome_to_element": "Tervetuloa Element-sovellukseen"
|
||||
}
|
||||
|
||||
@@ -1,32 +1,40 @@
|
||||
{
|
||||
"Dismiss": "Ignorer",
|
||||
"Unknown device": "Appareil inconnu",
|
||||
"Welcome to Element": "Bienvenue sur Element",
|
||||
"Sign In": "Se connecter",
|
||||
"Create Account": "Créer un compte",
|
||||
"Explore rooms": "Parcourir les salons",
|
||||
"Unexpected error preparing the app. See console for details.": "Une erreur inattendue est survenue pendant la préparation de l’application. Consultez la console pour avoir des détails.",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuration invalide : il ne faut spécifier qu’un des trois champs parmi default_server_config, default_server_name et default_hs_url.",
|
||||
"Invalid configuration: no default server specified.": "Configuration invalide : aucun serveur par défaut indiqué.",
|
||||
"The message from the parser is: %(message)s": "Le message de l’analyseur est : %(message)s",
|
||||
"Invalid JSON": "JSON non valide",
|
||||
"Go to your browser to complete Sign In": "Utilisez votre navigateur pour terminer la connexion",
|
||||
"Unable to load config file: please refresh the page to try again.": "Impossible de charger le fichier de configuration : rechargez la page pour réessayer.",
|
||||
"Unsupported browser": "Navigateur non pris en charge",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Veuillez installer <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink> ou <safariLink>Safari</safariLink> pour une expérience optimale.",
|
||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Vous pouvez continuer à utiliser votre navigateur actuel, mais vous risquez de trouver que certaines fonctionnalités et/ou l’apparence de l’application sont incorrectes.",
|
||||
"I understand the risks and wish to continue": "Je comprends les risques et souhaite continuer",
|
||||
"Go to element.io": "Aller vers element.io",
|
||||
"Failed to start": "Échec au démarrage",
|
||||
"Download Completed": "Téléchargement terminé",
|
||||
"Open": "Ouvrir",
|
||||
"Your Element is misconfigured": "Votre Element est mal configuré",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "La configuration de votre Element contient du JSON invalide. Veuillez corriger le problème et recharger la page.",
|
||||
"Your browser can't run %(brand)s": "Votre navigateur ne peut pas exécuter %(brand)s",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s nécessite des fonctionnalités avancées que votre navigateur actuel ne prend pas en charge.",
|
||||
"Powered by Matrix": "Propulsé par Matrix",
|
||||
"Use %(brand)s on mobile": "Utiliser %(brand)s sur téléphone",
|
||||
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Messagerie décentralisée, chiffrée & une collaboration alimentée par $matrixLogo",
|
||||
"%(appName)s: %(browserName)s on %(osName)s": "%(appName)s : %(browserName)s pour %(osName)s",
|
||||
"%(brand)s Desktop: %(platformName)s": "%(brand)s pour bureau : %(platformName)s"
|
||||
"action": {
|
||||
"create_account": "Créer un compte",
|
||||
"dismiss": "Ignorer",
|
||||
"explore_rooms": "Parcourir les salons",
|
||||
"open": "Ouvrir",
|
||||
"sign_in": "Se connecter"
|
||||
},
|
||||
"auth": {
|
||||
"sso_complete_in_browser_dialog_title": "Utilisez votre navigateur pour terminer la connexion"
|
||||
},
|
||||
"desktop_default_device_name": "%(brand)s pour bureau : %(platformName)s",
|
||||
"download_completed": "Téléchargement terminé",
|
||||
"error": {
|
||||
"app_launch_unexpected_error": "Une erreur inattendue est survenue pendant la préparation de l’application. Consultez la console pour avoir des détails.",
|
||||
"cannot_load_config": "Impossible de charger le fichier de configuration : rechargez la page pour réessayer.",
|
||||
"invalid_configuration_mixed_server": "Configuration invalide : default_hs_url ne peut pas être défini en même temps que default_server_name ou default_server_config",
|
||||
"invalid_configuration_no_server": "Configuration invalide : aucun serveur par défaut indiqué.",
|
||||
"invalid_json": "La configuration de votre Element contient du JSON invalide. Veuillez corriger le problème et recharger la page.",
|
||||
"invalid_json_detail": "Le message de l’analyseur est : %(message)s",
|
||||
"invalid_json_generic": "JSON non valide",
|
||||
"misconfigured": "Votre Element est mal configuré"
|
||||
},
|
||||
"failed_to_start": "Échec au démarrage",
|
||||
"go_to_element_io": "Aller vers element.io",
|
||||
"incompatible_browser": {
|
||||
"browser_links": "Veuillez installer <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink> ou <safariLink>Safari</safariLink> pour une expérience optimale.",
|
||||
"continue_warning": "Je comprends les risques et souhaite continuer",
|
||||
"feature_warning": "Vous pouvez continuer à utiliser votre navigateur actuel, mais vous risquez de trouver que certaines fonctionnalités et/ou l’apparence de l’application sont incorrectes.",
|
||||
"features": "%(brand)s nécessite des fonctionnalités avancées que votre navigateur actuel ne prend pas en charge.",
|
||||
"summary": "Votre navigateur ne peut pas exécuter %(brand)s",
|
||||
"title": "Navigateur non pris en charge"
|
||||
},
|
||||
"powered_by_matrix": "Propulsé par Matrix",
|
||||
"powered_by_matrix_with_logo": "Messagerie décentralisée, chiffrée & une collaboration alimentée par $matrixLogo",
|
||||
"unknown_device": "Appareil inconnu",
|
||||
"use_brand_on_mobile": "Utiliser %(brand)s sur téléphone",
|
||||
"web_default_device_name": "%(appName)s : %(browserName)s pour %(osName)s",
|
||||
"welcome_to_element": "Bienvenue sur Element"
|
||||
}
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
{
|
||||
"Sign In": "Oanmelde",
|
||||
"Failed to start": "Opstarten mislearre",
|
||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Jo kinne fierder gean mei jo eigen browser, mar guon funksjes kinne net wurkje en uterlik kin de applikaasje der ôfwikend útsjen.",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Graach <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, of<safariLink>Safari</safariLink> ynstallearje foar de beste ûnderfining.",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s brûkt avansearre browserfunksjes dy’t net stipe wurde troch de browser dy’t jo no brûke.",
|
||||
"Powered by Matrix": "Mooglik makke troch Matrix",
|
||||
"Unexpected error preparing the app. See console for details.": "Unferwachte flater by it klearmeitsjen fan de applikaasje. Sjoch yn de console foar details.",
|
||||
"The message from the parser is: %(message)s": "It berjocht fan de ferwurker is: %(message)s",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Jo Element-konfiguraasje hat ûnjildige JSON. Nei dat jo dit oplost ha, kin dizze side ferfarske wurde.",
|
||||
"Use %(brand)s on mobile": "Brûk %(brand)s op mobyl",
|
||||
"Go to your browser to complete Sign In": "Gean nei jo browser om it ynskriuwen te foltôgjen",
|
||||
"Download Completed": "Download foltôge",
|
||||
"Unable to load config file: please refresh the page to try again.": "Kin konfiguraasjebestân net lade: ferfarskje de side en probearje it nochris.",
|
||||
"Dismiss": "Slute",
|
||||
"Explore rooms": "Keamers ûntdekke",
|
||||
"Create Account": "Registrearje",
|
||||
"Welcome to Element": "Wolkom by Element",
|
||||
"I understand the risks and wish to continue": "Ik begryp de risiko's en wol graach fierder gean",
|
||||
"Go to element.io": "Gean nei element.io",
|
||||
"Your browser can't run %(brand)s": "Jo browser kin %(brand)s net útfiere",
|
||||
"Unsupported browser": "Net stipe browser",
|
||||
"Unknown device": "Unbekend apparaat",
|
||||
"Open": "Iepenje",
|
||||
"Invalid JSON": "Unjildige JSON",
|
||||
"Your Element is misconfigured": "Jo Element is net goed konfigurearre",
|
||||
"Invalid configuration: no default server specified.": "Unjildiche konfiguraasje: gjin standertserver selektearre.",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Unjildige konfiguraasje: kin allinnich kieze út default_server_config, default_server_name, as default_hs_url."
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
{
|
||||
"Unknown device": "Gléas nár aithníodh",
|
||||
"Dismiss": "Cuir uait",
|
||||
"Welcome to Element": "Fáilte romhat chuig Element",
|
||||
"Sign In": "Sínigh Isteach",
|
||||
"Create Account": "Déan cuntas a chruthú",
|
||||
"Explore rooms": "Breathnaigh thart ar na seomraí",
|
||||
"Your browser can't run %(brand)s": "Níl do bhrabhsálaí comhoiriúnach do %(brand)s",
|
||||
"Go to your browser to complete Sign In": "Oscail do bhrabhsálaí agus críochnaigh an clárú",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Coinníonn do chumraíocht JSON neamhbhailí. Ceartaigh an fadhb agus athlódáil an leathanach le do thoil.",
|
||||
"Your Element is misconfigured": "Níl do fheidhmchlár Element cumraithe i gceart",
|
||||
"Failed to start": "Theip chun tosú",
|
||||
"I understand the risks and wish to continue": "Tuigim na rioscaí agus ba mhaith liom lean ar aghaidh",
|
||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "An féidir leat úsáid do bhrabhsálaí reatha, ach nár oibrí roinnt nó gach gné agus nár thaispeántar an feidhmchlár i gceart.",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Suiteáil <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> chun an taithí is fearr a fháil.",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "Úsáideann %(brand)s gnéithe ardforbartha nach bhfuil ar fáil faoi do bhrabhsálaí reatha.",
|
||||
"Unsupported browser": "Brabhsálaí gan tacaíocht",
|
||||
"Unexpected error preparing the app. See console for details.": "Earráid nuair an feidhmchlár a hullmhú. Feic sa consól le haghaidh eolas.",
|
||||
"Unable to load config file: please refresh the page to try again.": "Ní féidir an comhad cumraíochta a lódáil. Athnuaigh an leathanach chun déanamh iarracht arís le do thoil.",
|
||||
"Download Completed": "Íoslódáil críochnaithe",
|
||||
"Invalid JSON": "JSON neamhbhailí",
|
||||
"The message from the parser is: %(message)s": "Is í an teachtaireacht as an parsálaí: %(message)s",
|
||||
"Invalid configuration: no default server specified.": "Cumraíocht neamhbhailí: Níl aon freastalaí réamhshocraithe a sonrú.",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Cumraíocht neamhbhailí: ní féidir ach ceann de default_server_config, default_server_name, nó default_hs_url a shonrú.",
|
||||
"Powered by Matrix": "Cumhachtaithe ag Matrix",
|
||||
"Go to element.io": "Téigh go element.io",
|
||||
"Open": "Oscail",
|
||||
"Use %(brand)s on mobile": "Úsáid %(brand)s ar guthán póca"
|
||||
}
|
||||
@@ -1,32 +1,39 @@
|
||||
{
|
||||
"Dismiss": "Rexeitar",
|
||||
"Unknown device": "Dispositivo descoñecido",
|
||||
"Welcome to Element": "Benvida/o a Element",
|
||||
"Sign In": "Acceder",
|
||||
"Create Account": "Crear conta",
|
||||
"Explore rooms": "Explorar salas",
|
||||
"The message from the parser is: %(message)s": "A mensaxe desde o intérprete é: %(message)s",
|
||||
"Invalid JSON": "JSON non válido",
|
||||
"Unexpected error preparing the app. See console for details.": "Fallo non agardado ao preparar a app. Detalles na consola.",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuración non válida: só se pode indicar un de default_server_config, default_server_name, ou default_hs_url.",
|
||||
"Invalid configuration: no default server specified.": "Configuración non válida: non se indicou servidor por defecto.",
|
||||
"Unable to load config file: please refresh the page to try again.": "Non se cargou o ficheiro de configuración: actualiza a páxina para reintentalo.",
|
||||
"Go to your browser to complete Sign In": "Abre o navegador para realizar a Conexión",
|
||||
"Unsupported browser": "Navegador non soportado",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Instala <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, ou <safariLink>Safari</safariLink> para ter unha mellor experiencia.",
|
||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Podes continuar co teu navegador, pero algunhas características poderían non funcionar e o aspecto da aplicación podería non ser o correcto.",
|
||||
"I understand the risks and wish to continue": "Entendo os riscos e desexo continuar",
|
||||
"Go to element.io": "Ir a element.io",
|
||||
"Failed to start": "Fallou o inicio",
|
||||
"Download Completed": "Descarga realizada",
|
||||
"Open": "Abrir",
|
||||
"Your Element is misconfigured": "Element non está ben configurado",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "A configuración de Element contén JSON non válido. Corrixe o problema e recarga a páxina.",
|
||||
"Your browser can't run %(brand)s": "O teu navegador non pode executar %(brand)s",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s utiliza características avanzadas do navegador que non están dispoñibles no teu navegador.",
|
||||
"Powered by Matrix": "Funciona grazas a Matrix",
|
||||
"Use %(brand)s on mobile": "Utiliza %(brand)s no móbil",
|
||||
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Conversas & colaboración descentralizadas e cifradas grazas a $matrixLogo",
|
||||
"%(appName)s: %(browserName)s on %(osName)s": "%(appName)s: %(browserName)s en %(osName)s",
|
||||
"%(brand)s Desktop: %(platformName)s": "%(brand)s para Escritorio: %(platformName)s"
|
||||
"action": {
|
||||
"create_account": "Crear conta",
|
||||
"dismiss": "Rexeitar",
|
||||
"explore_rooms": "Explorar salas",
|
||||
"open": "Abrir",
|
||||
"sign_in": "Acceder"
|
||||
},
|
||||
"auth": {
|
||||
"sso_complete_in_browser_dialog_title": "Abre o navegador para realizar a Conexión"
|
||||
},
|
||||
"desktop_default_device_name": "%(brand)s para Escritorio: %(platformName)s",
|
||||
"download_completed": "Descarga realizada",
|
||||
"error": {
|
||||
"app_launch_unexpected_error": "Fallo non agardado ao preparar a app. Detalles na consola.",
|
||||
"cannot_load_config": "Non se cargou o ficheiro de configuración: actualiza a páxina para reintentalo.",
|
||||
"invalid_configuration_no_server": "Configuración non válida: non se indicou servidor por defecto.",
|
||||
"invalid_json": "A configuración de Element contén JSON non válido. Corrixe o problema e recarga a páxina.",
|
||||
"invalid_json_detail": "A mensaxe desde o intérprete é: %(message)s",
|
||||
"invalid_json_generic": "JSON non válido",
|
||||
"misconfigured": "Element non está ben configurado"
|
||||
},
|
||||
"failed_to_start": "Fallou o inicio",
|
||||
"go_to_element_io": "Ir a element.io",
|
||||
"incompatible_browser": {
|
||||
"browser_links": "Instala <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, ou <safariLink>Safari</safariLink> para ter unha mellor experiencia.",
|
||||
"continue_warning": "Entendo os riscos e desexo continuar",
|
||||
"feature_warning": "Podes continuar co teu navegador, pero algunhas características poderían non funcionar e o aspecto da aplicación podería non ser o correcto.",
|
||||
"features": "%(brand)s utiliza características avanzadas do navegador que non están dispoñibles no teu navegador.",
|
||||
"summary": "O teu navegador non pode executar %(brand)s",
|
||||
"title": "Navegador non soportado"
|
||||
},
|
||||
"powered_by_matrix": "Funciona grazas a Matrix",
|
||||
"powered_by_matrix_with_logo": "Conversas & colaboración descentralizadas e cifradas grazas a $matrixLogo",
|
||||
"unknown_device": "Dispositivo descoñecido",
|
||||
"use_brand_on_mobile": "Utiliza %(brand)s no móbil",
|
||||
"web_default_device_name": "%(appName)s: %(browserName)s en %(osName)s",
|
||||
"welcome_to_element": "Benvida/o a Element"
|
||||
}
|
||||
|
||||
@@ -1,32 +1,39 @@
|
||||
{
|
||||
"Dismiss": "התעלם",
|
||||
"Unknown device": "מכשיר לא ידוע",
|
||||
"Welcome to Element": "ברוכים הבאים ל Element",
|
||||
"Invalid JSON": "JSON לא חוקי",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "תצורה שגויה: ניתן לציין רק אחד מהערכים הבאים, default_server_config, default_server_name, או default_hs_url.",
|
||||
"Invalid configuration: no default server specified.": "תצורה שגויה: לא צוין שרת ברירת מחדל.",
|
||||
"Go to your browser to complete Sign In": "עבור לדפדפן להמשך ההתחברות",
|
||||
"Explore rooms": "גלה חדרים",
|
||||
"Create Account": "משתמש חדש",
|
||||
"Sign In": "התחברות",
|
||||
"Open": "פתח",
|
||||
"Download Completed": "ההורדה הושלמה",
|
||||
"Unexpected error preparing the app. See console for details.": "שגיאה לא צפויה במהלך טעינת האפליקציה. ראו קונסול לפרטים נוספים.",
|
||||
"Unable to load config file: please refresh the page to try again.": "לא ניתן לטעון את קובץ ההגדרות: יש לרענן את הדף כדי לנסות שנית.",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "האלמנט מכיל הגדרת JSON שגויה, אנא תקנו את הבעיה ואתחלו את הדף.",
|
||||
"Your Element is misconfigured": "Element אינו מוגדר תקין",
|
||||
"Go to element.io": "חזור לאתר הראשי: element.io",
|
||||
"I understand the risks and wish to continue": "הסיכונים מובנים לי ואני מעוניינ/ת להמשיך",
|
||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "ניתן להמשיך ולהשתמש בדפדפן זה, אך ייתכן שחלק מן התכונות והמאפיינים לא יעבדו כשורה או ייראו כשגויים.",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "נא התקן את דפדפן <chromeLink>כרום</chromeLink>, <firefoxLink>פיירפוקס</firefoxLink> או <safariLink>סאפרי</safariLink> בשביל החוויה הטובה ביותר.",
|
||||
"Failed to start": "כשל בהעלאת התוכנה",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s משתמש בתכונות דפדפן מתקדמות שאינן נתמכות בדפדפן הנוכחי שלך.",
|
||||
"Your browser can't run %(brand)s": "הדפדפן שלך לא יכול להריץ %(brand)s",
|
||||
"Unsupported browser": "דפדפן לא נתמך",
|
||||
"Powered by Matrix": "מופעל על ידי מטריקס",
|
||||
"The message from the parser is: %(message)s": "ההודעה מהמנתח היא: %(message)s",
|
||||
"Use %(brand)s on mobile": "השתמש ב-%(brand)s במכשיר הנייד",
|
||||
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "צ'אט מבוזר ומוצפן & מופעל בשיתוף פעולה ע\"י $matrixLogo",
|
||||
"%(appName)s: %(browserName)s on %(osName)s": "%(appName)s: %(browserName)s עַל %(osName)s",
|
||||
"%(brand)s Desktop: %(platformName)s": "%(brand)s שולחן עבודה: %(platformName)s"
|
||||
"action": {
|
||||
"create_account": "משתמש חדש",
|
||||
"dismiss": "התעלם",
|
||||
"explore_rooms": "גלה חדרים",
|
||||
"open": "פתח",
|
||||
"sign_in": "התחברות"
|
||||
},
|
||||
"auth": {
|
||||
"sso_complete_in_browser_dialog_title": "עבור לדפדפן להמשך ההתחברות"
|
||||
},
|
||||
"desktop_default_device_name": "%(brand)s שולחן עבודה: %(platformName)s",
|
||||
"download_completed": "ההורדה הושלמה",
|
||||
"error": {
|
||||
"app_launch_unexpected_error": "שגיאה לא צפויה במהלך טעינת האפליקציה. ראו קונסול לפרטים נוספים.",
|
||||
"cannot_load_config": "לא ניתן לטעון את קובץ ההגדרות: יש לרענן את הדף כדי לנסות שנית.",
|
||||
"invalid_configuration_no_server": "תצורה שגויה: לא צוין שרת ברירת מחדל.",
|
||||
"invalid_json": "האלמנט מכיל הגדרת JSON שגויה, אנא תקנו את הבעיה ואתחלו את הדף.",
|
||||
"invalid_json_detail": "ההודעה מהמנתח היא: %(message)s",
|
||||
"invalid_json_generic": "JSON לא חוקי",
|
||||
"misconfigured": "Element אינו מוגדר תקין"
|
||||
},
|
||||
"failed_to_start": "כשל בהעלאת התוכנה",
|
||||
"go_to_element_io": "חזור לאתר הראשי: element.io",
|
||||
"incompatible_browser": {
|
||||
"browser_links": "נא התקן את דפדפן <chromeLink>כרום</chromeLink>, <firefoxLink>פיירפוקס</firefoxLink> או <safariLink>סאפרי</safariLink> בשביל החוויה הטובה ביותר.",
|
||||
"continue_warning": "הסיכונים מובנים לי ואני מעוניינ/ת להמשיך",
|
||||
"feature_warning": "ניתן להמשיך ולהשתמש בדפדפן זה, אך ייתכן שחלק מן התכונות והמאפיינים לא יעבדו כשורה או ייראו כשגויים.",
|
||||
"features": "%(brand)s משתמש בתכונות דפדפן מתקדמות שאינן נתמכות בדפדפן הנוכחי שלך.",
|
||||
"summary": "הדפדפן שלך לא יכול להריץ %(brand)s",
|
||||
"title": "דפדפן לא נתמך"
|
||||
},
|
||||
"powered_by_matrix": "מופעל על ידי מטריקס",
|
||||
"powered_by_matrix_with_logo": "צ'אט מבוזר ומוצפן & מופעל בשיתוף פעולה ע\"י $matrixLogo",
|
||||
"unknown_device": "מכשיר לא ידוע",
|
||||
"use_brand_on_mobile": "השתמש ב-%(brand)s במכשיר הנייד",
|
||||
"web_default_device_name": "%(appName)s: %(browserName)s עַל %(osName)s",
|
||||
"welcome_to_element": "ברוכים הבאים ל Element"
|
||||
}
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
{
|
||||
"Unknown device": "अज्ञात यन्त्र",
|
||||
"Dismiss": "खारिज",
|
||||
"Welcome to Element": "Element में आपका स्वागत है",
|
||||
"Sign In": "साइन करना",
|
||||
"Create Account": "खाता बनाएं",
|
||||
"Explore rooms": "रूम का अन्वेषण करें",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "अमान्य कॉन्फ़िगरेशन: केवल default_server_config, default_server_name, या default_hs_url में से कोई एक निर्दिष्ट कर सकता है।",
|
||||
"Failed to start": "प्रारंभ करने में विफल",
|
||||
"Go to element.io": "element.io पर जाएं",
|
||||
"I understand the risks and wish to continue": "मैं जोखिमों को समझता हूं और जारी रखना चाहता हूं",
|
||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "आप अपने वर्तमान ब्राउज़र का उपयोग जारी रख सकते हैं, लेकिन हो सकता है कि कुछ या सभी सुविधाएं काम न करें और एप्लिकेशन का रंगरूप गलत हो सकता है।",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "सर्वोत्तम अनुभव के लिए कृपया <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, या <safariLink>Safari</safariLink> इंस्टॉल करें।",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s उन्नत ब्राउज़र सुविधाओं का उपयोग करते हैं जो आपके वर्तमान ब्राउज़र द्वारा समर्थित नहीं हैं।",
|
||||
"Your browser can't run %(brand)s": "आपका ब्राउज़र %(brand)s को नहीं चला सकता",
|
||||
"Use %(brand)s on mobile": "मोबाइल पर %(brand)s का प्रयोग करें",
|
||||
"Unsupported browser": "असमर्थित ब्राउज़र",
|
||||
"Powered by Matrix": "मैट्रिक्स द्वारा संचालित",
|
||||
"Go to your browser to complete Sign In": "साइन इन पूरा करने के लिए अपने ब्राउज़र पर जाएं",
|
||||
"Open": "खुला",
|
||||
"Download Completed": "डाउनलोड सम्पन्न हुआ",
|
||||
"Unexpected error preparing the app. See console for details.": "ऐप्लिकेशन तैयार करने में अनपेक्षित गड़बड़ी हुई. विवरण के लिए कंसोल देखें।",
|
||||
"Unable to load config file: please refresh the page to try again.": "कॉन्फ़िग फ़ाइल लोड करने में असमर्थ: कृपया पुन: प्रयास करने के लिए पृष्ठ को रीफ़्रेश करें।",
|
||||
"Invalid JSON": "अमान्य JSON",
|
||||
"The message from the parser is: %(message)s": "पार्सर का संदेश है: %(message)s",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "आपके एलीमेंट कॉन्फ़िगरेशन में अमान्य JSON है. कृपया समस्या को ठीक करें और पृष्ठ को पुनः लोड करें।",
|
||||
"Your Element is misconfigured": "आपका तत्व गलत कॉन्फ़िगर किया गया है",
|
||||
"Invalid configuration: no default server specified.": "अमान्य कॉन्फ़िगरेशन: कोई डिफ़ॉल्ट सर्वर निर्दिष्ट नहीं है।"
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"Unknown device": "Nepoznati uređaj",
|
||||
"Dismiss": "Odbaci",
|
||||
"Welcome to Element": "Dobrodošli u Element"
|
||||
}
|
||||
@@ -1,32 +1,39 @@
|
||||
{
|
||||
"Dismiss": "Eltüntetés",
|
||||
"Unknown device": "Ismeretlen eszköz",
|
||||
"Welcome to Element": "Üdvözli az Element",
|
||||
"Sign In": "Bejelentkezés",
|
||||
"Create Account": "Fiók létrehozása",
|
||||
"Explore rooms": "Szobák felderítése",
|
||||
"Unexpected error preparing the app. See console for details.": "Váratlan hiba történt az alkalmazás előkészítésénél. A részletekért lásd a konzolt.",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Érvénytelen konfiguráció: ezek közül csak egyet lehet megadni: default_server_config, default_server_name és default_hs_url.",
|
||||
"Invalid configuration: no default server specified.": "Érvénytelen konfiguráció: nincs megadva alapértelmezett kiszolgáló.",
|
||||
"The message from the parser is: %(message)s": "A feldolgozó algoritmus üzenete: %(message)s",
|
||||
"Invalid JSON": "Érvénytelen JSON",
|
||||
"Go to your browser to complete Sign In": "A böngészőben fejezze be a bejelentkezést",
|
||||
"Unable to load config file: please refresh the page to try again.": "A konfigurációs fájlt nem sikerült betölteni: frissítse az oldalt és próbálja meg újra.",
|
||||
"Unsupported browser": "Nem támogatott böngésző",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "A legjobb élmény érdékében telepítsen <chromeLink>Chrome-ot</chromeLink>, <firefoxLink>Firefoxot</firefoxLink> vagy <safariLink>Safarit</safariLink>.",
|
||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Folytathatja a jelenlegi böngészőjével, de néhány vagy az összes funkció használhatatlan lehet, vagy hibák lehetnek az alkalmazás kinézetében és viselkedésében.",
|
||||
"I understand the risks and wish to continue": "Megértettem a kockázatot és folytatom",
|
||||
"Go to element.io": "Irány a element.io",
|
||||
"Failed to start": "Az indítás sikertelen",
|
||||
"Download Completed": "A letöltés befejeződött",
|
||||
"Open": "Megnyitás",
|
||||
"Your Element is misconfigured": "Az Element hibásan van beállítva",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Az Element érvénytelen JSON-t tartalmazó konfigurációval rendelkezik. Javítsa és töltse újra az oldalt.",
|
||||
"Your browser can't run %(brand)s": "A böngészője nem tudja futtatni ezt: %(brand)s",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "A(z) %(brand)s speciális böngészőfunkciókat használ, amelyeket a jelenlegi böngészője nem támogat.",
|
||||
"Powered by Matrix": "A gépházban: Matrix",
|
||||
"Use %(brand)s on mobile": "Mobilon használja ezt: %(brand)s",
|
||||
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Elosztott, titkosított csevegés és együttműködés ezzel: $matrixLogo",
|
||||
"%(appName)s: %(browserName)s on %(osName)s": "%(appName)s: (%(browserName)s itt: %(osName)s)",
|
||||
"%(brand)s Desktop: %(platformName)s": "Asztali %(brand)s: (%(platformName)s)"
|
||||
"action": {
|
||||
"create_account": "Fiók létrehozása",
|
||||
"dismiss": "Eltüntetés",
|
||||
"explore_rooms": "Szobák felderítése",
|
||||
"open": "Megnyitás",
|
||||
"sign_in": "Bejelentkezés"
|
||||
},
|
||||
"auth": {
|
||||
"sso_complete_in_browser_dialog_title": "A böngészőben fejezze be a bejelentkezést"
|
||||
},
|
||||
"desktop_default_device_name": "Asztali %(brand)s: (%(platformName)s)",
|
||||
"download_completed": "A letöltés befejeződött",
|
||||
"error": {
|
||||
"app_launch_unexpected_error": "Váratlan hiba történt az alkalmazás előkészítésénél. A részletekért lásd a konzolt.",
|
||||
"cannot_load_config": "A konfigurációs fájlt nem sikerült betölteni: frissítse az oldalt és próbálja meg újra.",
|
||||
"invalid_configuration_no_server": "Érvénytelen konfiguráció: nincs megadva alapértelmezett kiszolgáló.",
|
||||
"invalid_json": "Az Element érvénytelen JSON-t tartalmazó konfigurációval rendelkezik. Javítsa és töltse újra az oldalt.",
|
||||
"invalid_json_detail": "A feldolgozó algoritmus üzenete: %(message)s",
|
||||
"invalid_json_generic": "Érvénytelen JSON",
|
||||
"misconfigured": "Az Element hibásan van beállítva"
|
||||
},
|
||||
"failed_to_start": "Az indítás sikertelen",
|
||||
"go_to_element_io": "Irány a element.io",
|
||||
"incompatible_browser": {
|
||||
"browser_links": "A legjobb élmény érdékében telepítsen <chromeLink>Chrome-ot</chromeLink>, <firefoxLink>Firefoxot</firefoxLink> vagy <safariLink>Safarit</safariLink>.",
|
||||
"continue_warning": "Megértettem a kockázatot és folytatom",
|
||||
"feature_warning": "Folytathatja a jelenlegi böngészőjével, de néhány vagy az összes funkció használhatatlan lehet, vagy hibák lehetnek az alkalmazás kinézetében és viselkedésében.",
|
||||
"features": "A(z) %(brand)s speciális böngészőfunkciókat használ, amelyeket a jelenlegi böngészője nem támogat.",
|
||||
"summary": "A böngészője nem tudja futtatni ezt: %(brand)s",
|
||||
"title": "Nem támogatott böngésző"
|
||||
},
|
||||
"powered_by_matrix": "A gépházban: Matrix",
|
||||
"powered_by_matrix_with_logo": "Elosztott, titkosított csevegés és együttműködés ezzel: $matrixLogo",
|
||||
"unknown_device": "Ismeretlen eszköz",
|
||||
"use_brand_on_mobile": "Mobilon használja ezt: %(brand)s",
|
||||
"web_default_device_name": "%(appName)s: (%(browserName)s itt: %(osName)s)",
|
||||
"welcome_to_element": "Üdvözli az Element"
|
||||
}
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
{
|
||||
"Explore rooms": "Փնտրել սենյակներ",
|
||||
"Failed to start": "Չի ստացվում սկսել",
|
||||
"Use %(brand)s on mobile": "Օգտագործում է %(brand)s հեռախոսի վրա",
|
||||
"Unknown device": "Անծանոթ սարք",
|
||||
"Welcome to Element": "Բարի գալուստ Element",
|
||||
"Your browser can't run %(brand)s": "Ձեր բրաուզերը չի թողարկում %(brand)s",
|
||||
"Unsupported browser": "Չհամապատասխանող բրաուզեր",
|
||||
"Dismiss": "Հեռացնել",
|
||||
"Open": "Բացել",
|
||||
"Unable to load config file: please refresh the page to try again.": "Ֆայլի ներմուծման սխալ․ խնդրում ենք թարմացնել էջը և նորից փորձել։",
|
||||
"Invalid JSON": "Չաշխատող JSON",
|
||||
"Your Element is misconfigured": "Ձեր Element֊ը սխալ է կարգավորված",
|
||||
"Powered by Matrix": "Սնուցվում է Matrixի կողմից",
|
||||
"I understand the risks and wish to continue": "Ես գնահատում եմ ռիսկերն ու ցանկանում եմ շարունակել",
|
||||
"Create Account": "Ստեղծել օգտահաշիվ",
|
||||
"Sign In": "Մուտք գործել",
|
||||
"Go to element.io": "Այցելեք element.io",
|
||||
"Go to your browser to complete Sign In": "Հետ գնացեք բրաուզեր մուտք գործելն ավարտելու համար",
|
||||
"Download Completed": "Ներբեռնումն ավարտված է"
|
||||
}
|
||||
@@ -1,32 +1,39 @@
|
||||
{
|
||||
"Dismiss": "Abaikan",
|
||||
"Unknown device": "Perangkat tidak diketahui",
|
||||
"Welcome to Element": "Selamat datang di Element",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Konfigurasi Element Anda berisi JSON yang tidak absah. Mohon perbaiki masalahnya dan muat ulang laman ini.",
|
||||
"Invalid configuration: no default server specified.": "Konfigurasi tidak absah: server bawaan belum ditentukan.",
|
||||
"Explore rooms": "Jelajahi ruangan",
|
||||
"Create Account": "Buat Akun",
|
||||
"Go to your browser to complete Sign In": "Buka peramban Anda untuk menyelesaikan Sign In",
|
||||
"Sign In": "Masuk",
|
||||
"Failed to start": "Gagal untuk memulai",
|
||||
"Go to element.io": "Buka element.io",
|
||||
"I understand the risks and wish to continue": "Saya memahami risikonya dan ingin melanjutkan",
|
||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Anda dapat melanjutkan menggunakan peramban Anda saat ini, tetapi beberapa atau semua fitur mungkin tidak berfungsi dan tampilan serta nuansa aplikasi mungkin tidak benar.",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Silakan instal <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, atau <safariLink>Safari</safariLink> untuk pengalaman yang terbaik.",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s menggunakan fitur peramban tingkat lanjut yang tidak didukung oleh peramban Anda saat ini.",
|
||||
"Your browser can't run %(brand)s": "Peramban Anda tidak dapat menjalankan %(brand)s",
|
||||
"Unsupported browser": "Peramban tidak didukung",
|
||||
"Use %(brand)s on mobile": "Gunakan %(brand)s di ponsel",
|
||||
"Powered by Matrix": "Diberdayakan oleh Matrix",
|
||||
"Open": "Buka",
|
||||
"Download Completed": "Unduhan Selesai",
|
||||
"Unexpected error preparing the app. See console for details.": "Kesalahan tak terduga saat menyiapkan aplikasi. Lihat konsol untuk detail.",
|
||||
"Unable to load config file: please refresh the page to try again.": "Tidak dapat memuat file konfigurasi: mohon muat ulang laman ini untuk mencoba lagi.",
|
||||
"Invalid JSON": "JSON tidak absah",
|
||||
"The message from the parser is: %(message)s": "Pesan dari pengurai adalah: %(message)s",
|
||||
"Your Element is misconfigured": "Anda salah mengatur Element",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Konfigurasi tidak absah: hanya bisa menentukan satu dari default_server_config, default_server_name, atau default_hs_url.",
|
||||
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Obrolan & kolaborasi terdesentralisasi dan terenkripsi diberdayakan oleh $matrixLogo",
|
||||
"%(appName)s: %(browserName)s on %(osName)s": "%(appName)s: %(browserName)s di %(osName)s",
|
||||
"%(brand)s Desktop: %(platformName)s": "%(brand)s Desktop: %(platformName)s"
|
||||
"action": {
|
||||
"create_account": "Buat Akun",
|
||||
"dismiss": "Abaikan",
|
||||
"explore_rooms": "Jelajahi ruangan",
|
||||
"open": "Buka",
|
||||
"sign_in": "Masuk"
|
||||
},
|
||||
"auth": {
|
||||
"sso_complete_in_browser_dialog_title": "Buka peramban Anda untuk menyelesaikan Sign In"
|
||||
},
|
||||
"download_completed": "Unduhan Selesai",
|
||||
"error": {
|
||||
"app_launch_unexpected_error": "Kesalahan tak terduga saat menyiapkan aplikasi. Lihat konsol untuk detail.",
|
||||
"cannot_load_config": "Tidak dapat memuat file konfigurasi: mohon muat ulang laman ini untuk mencoba lagi.",
|
||||
"invalid_configuration_mixed_server": "Konfigurasi tidak valid: default_hs_url tidak dapat ditentukan bersama dengan default_server_name atau default_server_config",
|
||||
"invalid_configuration_no_server": "Konfigurasi tidak absah: server bawaan belum ditentukan.",
|
||||
"invalid_json": "Konfigurasi Element Anda berisi JSON yang tidak absah. Mohon perbaiki masalahnya dan muat ulang laman ini.",
|
||||
"invalid_json_detail": "Pesan dari pengurai adalah: %(message)s",
|
||||
"invalid_json_generic": "JSON tidak absah",
|
||||
"misconfigured": "Anda salah mengatur Element"
|
||||
},
|
||||
"failed_to_start": "Gagal untuk memulai",
|
||||
"go_to_element_io": "Buka element.io",
|
||||
"incompatible_browser": {
|
||||
"browser_links": "Silakan instal <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, atau <safariLink>Safari</safariLink> untuk pengalaman yang terbaik.",
|
||||
"continue_warning": "Saya memahami risikonya dan ingin melanjutkan",
|
||||
"feature_warning": "Anda dapat melanjutkan menggunakan peramban Anda saat ini, tetapi beberapa atau semua fitur mungkin tidak berfungsi dan tampilan serta nuansa aplikasi mungkin tidak benar.",
|
||||
"features": "%(brand)s menggunakan fitur peramban tingkat lanjut yang tidak didukung oleh peramban Anda saat ini.",
|
||||
"summary": "Peramban Anda tidak dapat menjalankan %(brand)s",
|
||||
"title": "Peramban tidak didukung"
|
||||
},
|
||||
"powered_by_matrix": "Diberdayakan oleh Matrix",
|
||||
"powered_by_matrix_with_logo": "Obrolan & kolaborasi terdesentralisasi dan terenkripsi diberdayakan oleh $matrixLogo",
|
||||
"unknown_device": "Perangkat tidak diketahui",
|
||||
"use_brand_on_mobile": "Gunakan %(brand)s di ponsel",
|
||||
"web_default_device_name": "%(appName)s: %(browserName)s di %(osName)s",
|
||||
"welcome_to_element": "Selamat datang di Element"
|
||||
}
|
||||
|
||||
@@ -1,32 +1,39 @@
|
||||
{
|
||||
"Welcome to Element": "Velkomin í Element",
|
||||
"Unknown device": "Óþekkt tæki",
|
||||
"Dismiss": "Hunsa",
|
||||
"Open": "Opna",
|
||||
"Unsupported browser": "Óstuddur vafri",
|
||||
"Your browser can't run %(brand)s": "Vafrinn þinn getur ekki keyrt %(brand)s",
|
||||
"Sign In": "Skrá inn",
|
||||
"Create Account": "Búa til notandaaðgang",
|
||||
"Explore rooms": "Kanna spjallrásir",
|
||||
"The message from the parser is: %(message)s": "Skilaboðið frá þáttaranum er %(message)s",
|
||||
"Invalid JSON": "Ógilt JSON",
|
||||
"Download Completed": "Niðurhali lokið",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Þú ættir að setja upp <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, eða <safariLink>Safari</safariLink> til að fá sem besta útkomu.",
|
||||
"I understand the risks and wish to continue": "Ég skil áhættuna og óska að halda áfram",
|
||||
"Go to element.io": "Fara á element.io",
|
||||
"Unexpected error preparing the app. See console for details.": "Óvænt villa við undirbúning forritsins. Sjá nánar á stjórnskjá.",
|
||||
"Failed to start": "Mistókst að ræsa",
|
||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Þú getur haldið áfram að nota núverandi vafra, en sumir eða allir eiginleikar virka mögulega ekki rétt, auk þess sem útlit og hegðun forritsins geta verið röng.",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s notar háþróaða vafraeiginleika sem eru ekki studdir af vafranum þínum.",
|
||||
"Powered by Matrix": "Keyrt með Matrix",
|
||||
"Go to your browser to complete Sign In": "Farðu í vafrann þinn til að ljúka innskráningu",
|
||||
"Unable to load config file: please refresh the page to try again.": "Ekki er hægt að hlaða stillingaskrána: endurnýjaðu síðuna til að reyna aftur.",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Element-stillingar þínar innihalda ógilt JSON. Leiðréttu vandamálið og endurlestu síðuna.",
|
||||
"Your Element is misconfigured": "Element-tilvikið þitt er rangt stillt",
|
||||
"Invalid configuration: no default server specified.": "Ógild uppsetning: enginn sjálfgefinn vefþjónn tilgreindur.",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Ógild uppsetning: getur aðeins tilgreint eitt af default_server_config, default_server_name eða default_hs_url.",
|
||||
"Use %(brand)s on mobile": "Nota %(brand)s í síma",
|
||||
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Dreifstýrt, dulritað spjall og samskipti keyrt með $matrixLogo",
|
||||
"%(appName)s: %(browserName)s on %(osName)s": "%(appName)s: %(browserName)s á %(osName)s",
|
||||
"%(brand)s Desktop: %(platformName)s": "%(brand)s borðtölvuútgáfa: %(platformName)s"
|
||||
"action": {
|
||||
"create_account": "Búa til notandaaðgang",
|
||||
"dismiss": "Hunsa",
|
||||
"explore_rooms": "Kanna spjallrásir",
|
||||
"open": "Opna",
|
||||
"sign_in": "Skrá inn"
|
||||
},
|
||||
"auth": {
|
||||
"sso_complete_in_browser_dialog_title": "Farðu í vafrann þinn til að ljúka innskráningu"
|
||||
},
|
||||
"desktop_default_device_name": "%(brand)s borðtölvuútgáfa: %(platformName)s",
|
||||
"download_completed": "Niðurhali lokið",
|
||||
"error": {
|
||||
"app_launch_unexpected_error": "Óvænt villa við undirbúning forritsins. Sjá nánar á stjórnskjá.",
|
||||
"cannot_load_config": "Ekki er hægt að hlaða stillingaskrána: endurnýjaðu síðuna til að reyna aftur.",
|
||||
"invalid_configuration_no_server": "Ógild uppsetning: enginn sjálfgefinn vefþjónn tilgreindur.",
|
||||
"invalid_json": "Element-stillingar þínar innihalda ógilt JSON. Leiðréttu vandamálið og endurlestu síðuna.",
|
||||
"invalid_json_detail": "Skilaboðið frá þáttaranum er %(message)s",
|
||||
"invalid_json_generic": "Ógilt JSON",
|
||||
"misconfigured": "Element-tilvikið þitt er rangt stillt"
|
||||
},
|
||||
"failed_to_start": "Mistókst að ræsa",
|
||||
"go_to_element_io": "Fara á element.io",
|
||||
"incompatible_browser": {
|
||||
"browser_links": "Þú ættir að setja upp <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, eða <safariLink>Safari</safariLink> til að fá sem besta útkomu.",
|
||||
"continue_warning": "Ég skil áhættuna og óska að halda áfram",
|
||||
"feature_warning": "Þú getur haldið áfram að nota núverandi vafra, en sumir eða allir eiginleikar virka mögulega ekki rétt, auk þess sem útlit og hegðun forritsins geta verið röng.",
|
||||
"features": "%(brand)s notar háþróaða vafraeiginleika sem eru ekki studdir af vafranum þínum.",
|
||||
"summary": "Vafrinn þinn getur ekki keyrt %(brand)s",
|
||||
"title": "Óstuddur vafri"
|
||||
},
|
||||
"powered_by_matrix": "Keyrt með Matrix",
|
||||
"powered_by_matrix_with_logo": "Dreifstýrt, dulritað spjall og samskipti keyrt með $matrixLogo",
|
||||
"unknown_device": "Óþekkt tæki",
|
||||
"use_brand_on_mobile": "Nota %(brand)s í síma",
|
||||
"web_default_device_name": "%(appName)s: %(browserName)s á %(osName)s",
|
||||
"welcome_to_element": "Velkomin í Element"
|
||||
}
|
||||
|
||||
@@ -1,32 +1,39 @@
|
||||
{
|
||||
"Dismiss": "Chiudi",
|
||||
"Unknown device": "Dispositivo sconosciuto",
|
||||
"Welcome to Element": "Benvenuti su Element",
|
||||
"Sign In": "Accedi",
|
||||
"Create Account": "Crea account",
|
||||
"Explore rooms": "Esplora stanze",
|
||||
"Unexpected error preparing the app. See console for details.": "Errore inaspettato preparando l'app. Vedi la console per i dettagli.",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configurazione non valida: specificare solo uno di default_server_config, default_server_name, o default_hs_url.",
|
||||
"Invalid configuration: no default server specified.": "Configurazione non valida: nessun server predefinito specificato.",
|
||||
"The message from the parser is: %(message)s": "Il messaggio dal parser è: %(message)s",
|
||||
"Invalid JSON": "JSON non valido",
|
||||
"Go to your browser to complete Sign In": "Vai nel tuo browser per completare l'accesso",
|
||||
"Unable to load config file: please refresh the page to try again.": "Impossibile caricare il file di configurazione: ricarica la pagina per riprovare.",
|
||||
"Unsupported browser": "Browser non supportato",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Installa <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, o <safariLink>Safari</safariLink> per una migliore esperienza.",
|
||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Puoi comunque usare il browser attuale, ma alcune o tutte le caratteristiche potrebbero non funzionare e l'aspetto dell'applicazione potrebbe essere sbagliato.",
|
||||
"I understand the risks and wish to continue": "Capisco i rischi e desidero continuare",
|
||||
"Go to element.io": "Vai su element.io",
|
||||
"Failed to start": "Avvio fallito",
|
||||
"Download Completed": "Scaricamento completato",
|
||||
"Open": "Apri",
|
||||
"Your Element is misconfigured": "Il tuo elemento è configurato male",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "La configurazione del tuo elemento contiene un JSON non valido. Correggi il problema e ricarica la pagina.",
|
||||
"Your browser can't run %(brand)s": "Il tuo browser non può eseguire %(brand)s",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s usa funzionalità avanzate del browser che non sono supportate dal tuo browser attuale.",
|
||||
"Powered by Matrix": "Offerto da Matrix",
|
||||
"Use %(brand)s on mobile": "Usa %(brand)s su mobile",
|
||||
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Chat e collaborazioni criptate e decentralizzate offerte da $matrixLogo",
|
||||
"%(appName)s: %(browserName)s on %(osName)s": "%(appName)s: %(browserName)s su %(osName)s",
|
||||
"%(brand)s Desktop: %(platformName)s": "%(brand)s Desktop: %(platformName)s"
|
||||
"action": {
|
||||
"create_account": "Crea account",
|
||||
"dismiss": "Chiudi",
|
||||
"explore_rooms": "Esplora stanze",
|
||||
"open": "Apri",
|
||||
"sign_in": "Accedi"
|
||||
},
|
||||
"auth": {
|
||||
"sso_complete_in_browser_dialog_title": "Vai nel tuo browser per completare l'accesso"
|
||||
},
|
||||
"download_completed": "Scaricamento completato",
|
||||
"error": {
|
||||
"app_launch_unexpected_error": "Errore inaspettato preparando l'app. Vedi la console per i dettagli.",
|
||||
"cannot_load_config": "Impossibile caricare il file di configurazione: ricarica la pagina per riprovare.",
|
||||
"invalid_configuration_mixed_server": "Configurazione non valida: default_hs_url non può essere specificato assieme a default_server_name o default_server_config",
|
||||
"invalid_configuration_no_server": "Configurazione non valida: nessun server predefinito specificato.",
|
||||
"invalid_json": "La configurazione del tuo elemento contiene un JSON non valido. Correggi il problema e ricarica la pagina.",
|
||||
"invalid_json_detail": "Il messaggio dal parser è: %(message)s",
|
||||
"invalid_json_generic": "JSON non valido",
|
||||
"misconfigured": "Il tuo elemento è configurato male"
|
||||
},
|
||||
"failed_to_start": "Avvio fallito",
|
||||
"go_to_element_io": "Vai su element.io",
|
||||
"incompatible_browser": {
|
||||
"browser_links": "Installa <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, o <safariLink>Safari</safariLink> per una migliore esperienza.",
|
||||
"continue_warning": "Capisco i rischi e desidero continuare",
|
||||
"feature_warning": "Puoi comunque usare il browser attuale, ma alcune o tutte le caratteristiche potrebbero non funzionare e l'aspetto dell'applicazione potrebbe essere sbagliato.",
|
||||
"features": "%(brand)s usa funzionalità avanzate del browser che non sono supportate dal tuo browser attuale.",
|
||||
"summary": "Il tuo browser non può eseguire %(brand)s",
|
||||
"title": "Browser non supportato"
|
||||
},
|
||||
"powered_by_matrix": "Offerto da Matrix",
|
||||
"powered_by_matrix_with_logo": "Chat e collaborazioni criptate e decentralizzate offerte da $matrixLogo",
|
||||
"unknown_device": "Dispositivo sconosciuto",
|
||||
"use_brand_on_mobile": "Usa %(brand)s su mobile",
|
||||
"web_default_device_name": "%(appName)s: %(browserName)s su %(osName)s",
|
||||
"welcome_to_element": "Benvenuti su Element"
|
||||
}
|
||||
|
||||
@@ -1,32 +1,38 @@
|
||||
{
|
||||
"Welcome to Element": "Elementにようこそ",
|
||||
"Unknown device": "不明な端末",
|
||||
"Dismiss": "閉じる",
|
||||
"Unexpected error preparing the app. See console for details.": "アプリケーションの準備中に予期しないエラーが発生しました。詳細はコンソールを参照してください。",
|
||||
"Invalid configuration: no default server specified.": "不正な設定:デフォルトのサーバーが設定されていません。",
|
||||
"Sign In": "サインイン",
|
||||
"Create Account": "アカウントを作成",
|
||||
"Explore rooms": "ルームを探す",
|
||||
"The message from the parser is: %(message)s": "パーサーのメッセージ:%(message)s",
|
||||
"Invalid JSON": "不正なJSON",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "不正な設定:default_server_config、default_server_name、またはdefault_hs_urlのいずれか一つのみを指定できます。",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "最高のユーザー体験を得るためには、<chromeLink>Chrome</chromeLink>か<firefoxLink>Firefox</firefoxLink>、もしくは<safariLink>Safari</safariLink>をインストールしてください。",
|
||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "現在のブラウザーを使い続けることもできますが、いくつか(もしくは全ての)機能が動作しなかったり、外観が崩れたりする可能性があります。",
|
||||
"I understand the risks and wish to continue": "リスクを理解して続行",
|
||||
"Unable to load config file: please refresh the page to try again.": "設定ファイルの読み込みに失敗しました:ページを再読み込みして、もう一度やり直してください。",
|
||||
"Download Completed": "ダウンロードが完了しました",
|
||||
"Open": "開く",
|
||||
"Go to your browser to complete Sign In": "ブラウザーに移動してサインインを完了してください",
|
||||
"Unsupported browser": "サポートされていないブラウザー",
|
||||
"Go to element.io": "element.ioへ移動",
|
||||
"Failed to start": "起動に失敗しました",
|
||||
"Your Element is misconfigured": "Elementの設定が誤っています",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Elementの設定ファイルに不正なJSONが含まれています。問題を修正してからページを再読み込みしてください。",
|
||||
"Your browser can't run %(brand)s": "このブラウザーでは%(brand)sが動きません",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)sはブラウザーの高度な機能を使う必要がありますが、このブラウザーではその機能がサポートされていないようです。",
|
||||
"Powered by Matrix": "Powered by Matrix",
|
||||
"Use %(brand)s on mobile": "携帯端末で%(brand)sを使用できます",
|
||||
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "$matrixLogo による、分散型で暗号化された会話とコラボレーション",
|
||||
"%(appName)s: %(browserName)s on %(osName)s": "%(appName)s: %(osName)sの%(browserName)s",
|
||||
"%(brand)s Desktop: %(platformName)s": "%(brand)sデスクトップ:%(platformName)s"
|
||||
"action": {
|
||||
"create_account": "アカウントを作成",
|
||||
"dismiss": "閉じる",
|
||||
"explore_rooms": "ルームを探す",
|
||||
"open": "開く",
|
||||
"sign_in": "サインイン"
|
||||
},
|
||||
"auth": {
|
||||
"sso_complete_in_browser_dialog_title": "ブラウザーに移動してサインインを完了してください"
|
||||
},
|
||||
"desktop_default_device_name": "%(brand)sデスクトップ:%(platformName)s",
|
||||
"download_completed": "ダウンロードが完了しました",
|
||||
"error": {
|
||||
"app_launch_unexpected_error": "アプリケーションの準備中に予期しないエラーが発生しました。詳細はコンソールを参照してください。",
|
||||
"cannot_load_config": "設定ファイルの読み込みに失敗しました:ページを再読み込みして、もう一度やり直してください。",
|
||||
"invalid_configuration_no_server": "不正な設定:デフォルトのサーバーが設定されていません。",
|
||||
"invalid_json": "Elementの設定ファイルに不正なJSONが含まれています。問題を修正してからページを再読み込みしてください。",
|
||||
"invalid_json_detail": "パーサーのメッセージ:%(message)s",
|
||||
"invalid_json_generic": "不正なJSON",
|
||||
"misconfigured": "Elementの設定が誤っています"
|
||||
},
|
||||
"failed_to_start": "起動に失敗しました",
|
||||
"go_to_element_io": "element.ioへ移動",
|
||||
"incompatible_browser": {
|
||||
"browser_links": "最高のユーザー体験を得るためには、<chromeLink>Chrome</chromeLink>か<firefoxLink>Firefox</firefoxLink>、もしくは<safariLink>Safari</safariLink>をインストールしてください。",
|
||||
"continue_warning": "リスクを理解して続行",
|
||||
"feature_warning": "現在のブラウザーを使い続けることもできますが、いくつか(もしくは全ての)機能が動作しなかったり、外観が崩れたりする可能性があります。",
|
||||
"features": "%(brand)sはブラウザーの高度な機能を使う必要がありますが、このブラウザーではその機能がサポートされていないようです。",
|
||||
"summary": "このブラウザーでは%(brand)sが動きません",
|
||||
"title": "サポートされていないブラウザー"
|
||||
},
|
||||
"powered_by_matrix_with_logo": "$matrixLogo による、分散型で暗号化された会話とコラボレーション",
|
||||
"unknown_device": "不明な端末",
|
||||
"use_brand_on_mobile": "携帯端末で%(brand)sを使用できます",
|
||||
"web_default_device_name": "%(appName)s: %(osName)sの%(browserName)s",
|
||||
"welcome_to_element": "Elementにようこそ"
|
||||
}
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
{
|
||||
"Unknown device": "se samtcise'u vau je na slabu",
|
||||
"Dismiss": "nu mipri",
|
||||
"Invalid JSON": ".i le veirdjeisano na drani",
|
||||
"Download Completed": ".i mo'u kibycpa",
|
||||
"Open": "nu viska",
|
||||
"Go to your browser to complete Sign In": ".i do ka'e pilno pa kibrbrauzero lo nu mo'u co'a jaspu",
|
||||
"Unsupported browser": ".i le kibrbrauzero na kakne",
|
||||
"Your browser can't run %(brand)s": ".i na ka'e pilno le kibrbrauzero lo nu pilno la'o zoi. %(brand)s .zoi",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": ".i la'o zoi. %(brand)s .zoi pilno pa na jai se kakne be le kibrbrauzero",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": ".i ko ci'erse'a <chromeLink>la .krom.</chromeLink> ja <firefoxLink>la .fairfoks.</firefoxLink> ja <safariLink>la .safaris.</safariLink>",
|
||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": ".i do ka'e za'o pilno le kibrbrauzero .i ku'i la'a spofu pa jo nai ro te pilno vau je na drani fa le jvinu",
|
||||
"I understand the risks and wish to continue": ".i mi jimpe le du'u ckape vau vau je za'o djica",
|
||||
"Go to element.io": "nu viska le se judri be zoi zoi. element.io .zoi",
|
||||
"Failed to start": ".i da nabmi fi lo nu co'a pilno",
|
||||
"Welcome to Element": ".i fi'i zo'e do pilno la .elyment.",
|
||||
"Sign In": "nu co'a jaspu",
|
||||
"Create Account": "nu pa re'u co'a jaspu",
|
||||
"Explore rooms": "nu facki le du'u ve zilbe'i",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": ".i le tcimi'e vreji na drani le ka jai do'e fai gi jo nai zoi zoi. default_server_config .zoi gi zoi zoi. default_server_name .zoi gi zoi zoi. default_hs_url .zoi cmene da",
|
||||
"Invalid configuration: no default server specified.": ".i le tcimi'e vreji na drani le ka jai do'e zmicu'a fo le ka samtcise'u",
|
||||
"Your Element is misconfigured": ".i le tcimi'e be la .elyment. be'o vreji na drani",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": ".i le tcimi'e be la .elyment. be'o vreji na drani le ka veirdjeisano .i gau ko drani je ba kibycpa le kibypapri",
|
||||
"The message from the parser is: %(message)s": ".i notci fi le genturfa'i fa zoi zoi. %(message)s .zoi",
|
||||
"Unable to load config file: please refresh the page to try again.": ".i da nabmi fi lo nu samymo'i le tcimi'e vreji .i ko ba zukte le ka kibycpa le kibypapri kei le ka troci",
|
||||
"Unexpected error preparing the app. See console for details.": ".i da nabmi fi lo nu co'a ka'e pilno le samtci .i ko tcidu le notci be fi le samymi'etci",
|
||||
"Powered by Matrix": ".i la .meitriks. cu jicmu"
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
{
|
||||
"Unknown device": "უცნობი მოწყობილობა",
|
||||
"Dismiss": "დახურვა",
|
||||
"Welcome to Element": "კეთილი იყოს თქვენი მობრძანება Element-ზე",
|
||||
"Explore rooms": "ოთახების დათავლიერება",
|
||||
"Failed to start": "ჩართვა ვერ მოხერხდა",
|
||||
"Use %(brand)s on mobile": "გამოიყენე %(brand)s-ი მობილურზე",
|
||||
"Unexpected error preparing the app. See console for details.": "მოულოდნელი ერორი აპლიკაციის შემზადებისას. იხილეთ კონსოლი დეტალებისთვის.",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "თქვენი Element-ის კონფიგურაცია შეიცავს მიუღებელ JSON-ს. გთხოვთ, გამოასწოროთ პრობლემა და გადატვირთოთ გვერდი.",
|
||||
"Sign In": "შესვლა",
|
||||
"Invalid configuration: no default server specified.": "არასწორი კონფიგურაცია: მთავარი სერვერი არ არის მითითებული.",
|
||||
"Create Account": "ანგარიშის შექმნა",
|
||||
"Go to element.io": "გადადი element.io-ზე",
|
||||
"I understand the risks and wish to continue": "მესმის რისკები და მსურს გაგრძელება",
|
||||
"Unsupported browser": "ბრაუზერი არ არის მხარდაჭერილი",
|
||||
"Your browser can't run %(brand)s": "შენ ბრაუზერს არ შეუძლია გაუშვას %(brand)s-ი",
|
||||
"Unable to load config file: please refresh the page to try again.": "კონფიგურაციის ფაილის ჩატვირთვა შეუძლებელია: გთხოვთ, განაახლოთ გვერდი ხელახლა საცდელად.",
|
||||
"Invalid JSON": "არასწორი JSON",
|
||||
"Your Element is misconfigured": "შენი Element-ი არასწორადაა კონფიგურირებული",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "გთხოვთ დააინსტალოთ <chromeLink>Chrome-ი</chromeLink>, <firefoxLink>Firefox-ი</firefoxLink>, ან <safariLink>Safari</safariLink> საუკეთესო გამოცდილებისთვის.",
|
||||
"Powered by Matrix": "უზრუნველყოფილია Matrix-ის მიერ",
|
||||
"Go to your browser to complete Sign In": "გადადით თქვენს ბრაუზერში შესვლის დასასრულებლად",
|
||||
"Open": "გახსნა",
|
||||
"Download Completed": "გადმოწერა დასრულებულია",
|
||||
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "დეცენტრალიზებული, დაშიფრული ჩატი & amp; $matrixLogo-ს მიერ შექმნილი თანამშრომლობა",
|
||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "შეგიძლიათ გააგრძელოთ თქვენი ამჟამინდელი ბრაუზერის გამოყენება, მაგრამ ზოგიერთი ან ყველა ფუნქცია შეიძლება არ იმუშაოს და აპლიკაციის გარეგნობა და შეგრძნება შეიძლება არასწორი იყოს.",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s იყენებს ბრაუზერის გაფართოებულ ფუნქციებს, რომლებიც არ არის მხარდაჭერილი თქვენი ამჟამინდელი ბრაუზერის მიერ.",
|
||||
"%(appName)s: %(browserName)s on %(osName)s": "%(appName)s: %(browserName)s %(osName)s-ზე",
|
||||
"%(brand)s Desktop: %(platformName)s": "%(brand)s სამუშაო მაგიდა: %(platformName)s",
|
||||
"The message from the parser is: %(message)s": "პარსერის შეტყობინებაა: %(message)s",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "არასწორი კონფიგურაცია: შეიძლება მიუთითოთ მხოლოდ ერთი default_server_config, default_server_name ან default_hs_url."
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
{
|
||||
"Invalid JSON": "JSON armeɣtu",
|
||||
"Go to your browser to complete Sign In": "Ddu ɣer iminig akken ad tkemleḍ ajerred",
|
||||
"Unknown device": "Ibenk arussin",
|
||||
"Create Account": "Rnu amiḍan",
|
||||
"Dismiss": "Agwi",
|
||||
"Sign In": "Kcem",
|
||||
"Explore rooms": "Snirem tixxamin",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Tawila d tarmeɣtut: mudd-d kan yiwen seg default_server_config, default_server_name, neɣ default_hs_url.",
|
||||
"Invalid configuration: no default server specified.": "Tawila d tarmeɣtut: ulac aqeddac amezwer i d-yettwafernen.",
|
||||
"The message from the parser is: %(message)s": "Izen n umaslaḍ d: %(message)s",
|
||||
"Unable to load config file: please refresh the page to try again.": "Yegguma ad d-yali ufaylu n twila: ma ulac aɣilif smiren asebter akken ad tεerḍeḍ tikkelt-nniḍen.",
|
||||
"Unexpected error preparing the app. See console for details.": "Tella-d tuccḍa lawan n uheyyi n usnas: Wali tadiwent i wugar telqeyt.",
|
||||
"Unsupported browser": "Ur yettusefrak ara yiminig",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Ma ulac aɣilif, sebded <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, neɣ<safariLink>Safari</safariLink> i tirmit igerrzen.",
|
||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Tzemreḍ ad tkemmleḍ deg useqdec n yiminig-ik(im) amiran, maca kra n tmahilin neɣ akk zemrent ur nteddu ara, rnu arwes n usnas yezmer ad d-iban d armeɣtu.",
|
||||
"I understand the risks and wish to continue": "Gziɣ ayen ara d-yeḍrun maca bɣiɣ ad kemmleɣ",
|
||||
"Go to element.io": "Ṛuḥ ɣer element.io",
|
||||
"Failed to start": "Asenker ur yeddi ara",
|
||||
"Welcome to Element": "Ansuf ɣer Element",
|
||||
"Your Element is misconfigured": "Aferdis-inek·inem ur yettuswel ara akken iwata",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Deg twila n uferdis-inek·inem yella JSON d arameɣtu. Ttxil-k·m seɣti ugur syen ales asali n usebter.",
|
||||
"Download Completed": "Asider yemmed",
|
||||
"Open": "Ldi",
|
||||
"Your browser can't run %(brand)s": "Iminig-inek·inem ur isselkan ara %(brand)s",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s isseqdac timahilin n yiminig leqqayen ur yessefrak ara yiminig-ik·im amiran.",
|
||||
"Powered by Matrix": "Iteddu s lmendad n Matrix",
|
||||
"Use %(brand)s on mobile": "Seqdec %(brand)s deg tiliɣri"
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user