Compare commits

..

315 Commits

Author SHA1 Message Date
RiotRobot
64e121741d v1.11.62 2024-03-26 17:08:56 +00:00
RiotRobot
a1397c1425 v1.11.62-rc.0 2024-03-19 16:10:46 +00:00
RiotRobot
1e6761d474 Merge branch 'master' into develop 2024-03-14 17:44:44 +00:00
RiotRobot
0820643e9d v1.11.61 2024-03-14 17:42:25 +00:00
dependabot[bot]
3d6ec70911 Bump ip from 2.0.0 to 2.0.1 (#1567)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-12 19:16:03 +00:00
RiotRobot
37bc6a0884 Merge branch 'master' into develop 2024-03-12 18:53:07 +00:00
RiotRobot
7d5c604769 v1.11.60 2024-03-12 18:52:23 +00:00
renovate[bot]
525d633d79 Update dependency electron to v29 (#1557)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-12 18:31:13 +00:00
renovate[bot]
7e1ef1ad5d Update electron-builder to v24.13.3 (#1560)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-07 11:52:50 +00:00
renovate[bot]
296e060990 Update dependency @playwright/test to v1.42.1 (#1555)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-05 16:42:39 +00:00
renovate[bot]
1382a36a0c Update definitelyTyped (#1482)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2024-03-05 16:30:02 +00:00
renovate[bot]
f3854377e4 Update tj-actions/changed-files digest to 800a282 (#1551)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-05 15:56:13 +00:00
renovate[bot]
b34f3d2323 Update all non-major dependencies (#1553)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2024-03-05 15:53:32 +00:00
renovate[bot]
43ae561920 Update docker/login-action digest to 5139682 (#1550)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-05 15:17:04 +00:00
renovate[bot]
aea99a2cc7 Update typescript-eslint monorepo to v7.1.0 (#1556)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-05 15:16:14 +00:00
renovate[bot]
2b86deb648 Update babel monorepo to v7.24.0 (#1554)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-05 15:15:28 +00:00
renovate[bot]
3460eb32e0 Update electron-builder to v24.13.2 (#1552)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-05 15:12:46 +00:00
RiotRobot
0811eec002 v1.11.60-rc.0 2024-03-05 14:34:45 +00:00
Michael Telatynski
d51299bbc9 Release automation improvements (#1541) 2024-03-05 09:57:44 +00:00
Michael Telatynski
421a666fe9 Prevent "Element" hardcoded in i18n files (#1545) 2024-02-29 13:02:44 +00:00
David Langley
65215ea6f4 Merge pull request #1547 from element-hq/langleyd/add_issues_to_new_triage_project
Add job to automate adding new issues to the new project
2024-02-29 12:49:53 +00:00
David Langley
bf4c866934 add job to automate adding new issues to the new project 2024-02-29 12:17:03 +00:00
Richard van der Hoff
d747a93b35 Merge pull request #1542 from element-hq/rav/tsdoc_in_pr_template
PR template: reminder to document your stuff
2024-02-28 14:18:03 +00:00
Richard van der Hoff
85f1b5c672 Merge branch 'develop' into rav/tsdoc_in_pr_template 2024-02-28 14:03:38 +00:00
Richard van der Hoff
14221734bd add full stops 2024-02-28 13:07:08 +00:00
Richard van der Hoff
0f700829ff PR template: reminder to document your stuff 2024-02-28 12:58:30 +00:00
RiotRobot
643f9effb9 Merge branch 'master' into develop 2024-02-27 13:18:00 +00:00
RiotRobot
56a4f7df41 v1.11.59 2024-02-27 13:17:28 +00:00
renovate[bot]
3b88449ba4 Update typescript-eslint monorepo to v7 (major) (#1533)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-22 09:14:11 +00:00
renovate[bot]
ea30e84bc6 Update dependency knip to v5 (#1532)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-22 09:13:57 +00:00
renovate[bot]
0c1f6dd8d6 Update docker (#1529)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-22 09:03:17 +00:00
renovate[bot]
c39e087cd4 Update electron-builder (#1530)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-21 20:14:39 +00:00
renovate[bot]
81075085d9 Update dependency eslint-plugin-unicorn to v51 (#1531)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-21 19:04:51 +00:00
renovate[bot]
6d4aebbea9 Update all non-major dependencies (#1484)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2024-02-21 18:42:09 +00:00
RiotRobot
84ce4d4f86 v1.11.59-rc.0 2024-02-21 18:33:15 +00:00
Michael Telatynski
4bcdf72184 Update setup-xvfb action to fix node16 deprecation warning (#1511) 2024-02-21 09:17:44 +00:00
Michael Telatynski
1366a553b2 Fix i18n json file paths (#1527) 2024-02-20 11:36:49 +00:00
Michael Telatynski
4851a32e23 Fix Native OIDC for Element Desktop (#1510) 2024-02-19 15:51:47 +00:00
Michael Telatynski
760099e226 Improve loading of JSON files to avoid implicit behaviours of Node require (#1519)
Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>
2024-02-19 15:22:40 +00:00
Michael Telatynski
742aeb32a3 Saner releases clean up (#1512) 2024-02-19 12:32:31 +00:00
Michael Telatynski
599b7b8e01 Update eSigner CKA (#1501) 2024-02-14 13:07:59 +00:00
RiotRobot
88bbb85aac Merge branch 'master' into develop 2024-02-13 15:15:56 +00:00
RiotRobot
17b085d64b v1.11.58 2024-02-13 15:15:15 +00:00
Michael Telatynski
7fdefaab7a Update variable-mapper to silence actions warnings (#1502) 2024-02-13 11:07:00 +00:00
RiotRobot
814f46c238 v1.11.58-rc.1 2024-02-06 16:04:08 +00:00
renovate[bot]
58fd8b2339 Update peter-evans/repository-dispatch action to v3 (#1487)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-02 17:41:10 +00:00
renovate[bot]
47f902dd50 Update dependency @playwright/test to v1.41.2 (#1483)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-02 17:37:29 +00:00
renovate[bot]
626e2cbbfc Update babel monorepo to v7.23.9 (#1481)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-02 17:34:16 +00:00
renovate[bot]
1f5ef2407e Update typescript-eslint monorepo to v6.20.0 (#1486)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-02 17:08:46 +00:00
renovate[bot]
1f60b70f15 Update electron-builder to v24.12.0 (#1485)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-02 17:05:50 +00:00
RiotRobot
496247d123 v1.11.58-rc.0 2024-02-02 16:34:49 +00:00
Michael Telatynski
613b83cbf7 Fix missing needs clause
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2024-02-02 16:23:54 +00:00
Michael Telatynski
2862a68f12 Revert "Use ELEMENT_BOT_TOKEN for release-drafter-workflow.yml"
This reverts commit 2e11c2a8a4.
2024-02-02 15:44:44 +00:00
Michael Telatynski
2e11c2a8a4 Use ELEMENT_BOT_TOKEN for release-drafter-workflow.yml
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2024-02-02 15:41:16 +00:00
Michael Telatynski
960984b619 Add waits for post-release steps for improved visibility (#1480) 2024-02-02 14:17:45 +00:00
Michael Telatynski
056bb21585 Reuse release-drafter-workflow from js-sdk (#1475) 2024-02-01 18:13:58 +00:00
Michael Telatynski
e4e44c4eaf Update Node version in Dockerfile to comply with engine minimum (#1473) 2024-01-31 16:19:53 +00:00
RiotRobot
ea4269a283 Merge branch 'master' into develop 2024-01-31 15:19:57 +00:00
RiotRobot
2727a22e2d v1.11.57 2024-01-31 15:19:23 +00:00
Michael Telatynski
d6bcbecab2 Update packaging.md 2024-01-31 14:30:28 +00:00
Michael Telatynski
f3694ae736 Update build_windows.yaml 2024-01-31 14:29:25 +00:00
R Midhun Suresh
443647c9af Merge pull request #1474 from element-hq/fix-broken-windows-build
Use powershell shell instead of pwsh
2024-01-31 19:33:46 +05:30
R Midhun Suresh
3f82adbebc Format 2024-01-31 19:15:14 +05:30
Michael Telatynski
15914b54d8 Switch to M1 runner for macOS builds (#1472) 2024-01-31 13:05:08 +00:00
R Midhun Suresh
b54bd8f3e0 Use powershell throughout 2024-01-31 18:16:51 +05:30
R Midhun Suresh
88d89dd81d Move to correct step 2024-01-31 18:03:56 +05:30
R Midhun Suresh
93524d34be Use powershell shell instead of pwsh 2024-01-31 18:00:03 +05:30
Michael Telatynski
07fe7ac647 Fix development issue on Windows (#1466) 2024-01-30 14:02:16 +00:00
Timo
18c4c9df93 Merge pull request #1413 from element-hq/toger5/force-ec-video-rooms
Force Element Call video rooms
2024-01-25 16:32:34 +01:00
Michael Telatynski
39736db9ce Fix stash debs deploy dry-run action 2024-01-25 15:16:46 +00:00
RiotRobot
bb32124ff1 v1.11.57-rc.1 2024-01-24 16:56:57 +00:00
Michael Telatynski
b6e805e100 Fix Github actions output getting cast to string causing spurious deploys
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2024-01-24 16:33:37 +00:00
Timo K
f04c1d86ad Force ec video rooms
Signed-off-by: Timo K <toger5@hotmail.de>
2024-01-24 14:50:22 +01:00
renovate[bot]
4990a49d40 Update all non-major dependencies (#1454)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2024-01-24 09:22:03 +00:00
renovate[bot]
f75ebb7763 Update tj-actions/changed-files action to v42 (#1458)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-23 21:28:39 +00:00
renovate[bot]
29ab7121f8 Update dependency @playwright/test to v1.41.1 (#1455)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-23 21:17:59 +00:00
renovate[bot]
ff89431141 Update tj-actions/changed-files digest to cbda684 (#1453)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-23 21:14:45 +00:00
renovate[bot]
7c86f9bed0 Update docker/metadata-action digest to dbef880 (#1452)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2024-01-23 20:11:43 +00:00
renovate[bot]
609e5ff236 Update typescript-eslint monorepo to v6.19.0 (#1456)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-23 20:05:34 +00:00
renovate[bot]
dd5b17b6a4 Update actions/cache action to v4 (#1457)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-23 20:03:17 +00:00
RiotRobot
9ca6cf916c v1.11.56-rc.0 2024-01-23 19:05:51 +00:00
ElementRobot
6ede562b3e Merge pull request #1449 from element-hq/actions/localazy-download
Localazy Download
2024-01-22 09:41:17 +01:00
t3chguy
891611078f [create-pull-request] automated change 2024-01-22 06:05:42 +00:00
RiotRobot
52ff21b5b5 Merge branch 'master' into develop 2024-01-19 14:24:32 +00:00
RiotRobot
3e18f441c4 Merge branch 'staging' 2024-01-19 14:23:53 +00:00
RiotRobot
7f9f0dba3a v1.11.55 2024-01-19 14:23:49 +00:00
Michael Telatynski
efde228da6 Add knip unused code & dependency analyser (#1441) 2024-01-18 10:10:51 +00:00
Michael Telatynski
ae187445af Run more of the deploy code for pre-releases (#1440) 2024-01-17 15:23:11 +00:00
renovate[bot]
bc4c4159dc Update all non-major dependencies (#1438)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2024-01-17 09:47:57 +00:00
renovate[bot]
ec3bb34e90 Update actions/upload-artifact action to v4 (#1439)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-17 09:32:54 +00:00
Michael Telatynski
2cae8e50f5 Update CHANGELOG.md 2024-01-16 21:28:50 +00:00
RiotRobot
69ea53502e Merge branch 'master' into develop 2024-01-16 21:11:28 +00:00
RiotRobot
8602637f74 Merge branch 'staging' 2024-01-16 21:10:46 +00:00
RiotRobot
738ef04871 v1.11.54 2024-01-16 21:10:42 +00:00
Michael Telatynski
857c623d48 Fix symlinks 2024-01-16 21:08:00 +00:00
RiotRobot
7ed5cb1cc9 Merge branch 'master' into develop 2024-01-16 20:09:25 +00:00
RiotRobot
82580d9da5 Merge branch 'staging' 2024-01-16 20:08:20 +00:00
RiotRobot
d9a0be604e v1.11.54 2024-01-16 20:08:15 +00:00
Michael Telatynski
094926f849 Fix release symlinks 2024-01-16 19:53:47 +00:00
RiotRobot
ac2da2f36b Merge branch 'master' into develop 2024-01-16 18:39:24 +00:00
RiotRobot
ae0916d7e4 Merge branch 'staging' 2024-01-16 18:38:40 +00:00
RiotRobot
1fccadd42e v1.11.54 2024-01-16 18:38:35 +00:00
Michael Telatynski
1964baad42 Update build_and_deploy.yaml 2024-01-16 18:26:19 +00:00
RiotRobot
7afdff63be Merge branch 'master' into develop 2024-01-16 18:19:22 +00:00
Michael Telatynski
90eed7b5d6 Fix release artifact symlinking 2024-01-16 18:18:41 +00:00
RiotRobot
27e59633a4 Merge branch 'master' into develop 2024-01-16 17:49:39 +00:00
RiotRobot
0be0d6629d v1.11.54 2024-01-16 17:48:50 +00:00
renovate[bot]
c4e697edd7 Update dependency playwright to v1.40.1 (#1242)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2024-01-11 18:49:20 +00:00
Michael Telatynski
ab7002e687 Update build_prepare.yaml 2024-01-11 12:03:55 +00:00
Michael Telatynski
de7e99edab Fix Element Nightly debian packaging (#1434) 2024-01-11 11:35:21 +00:00
renovate[bot]
d37e1af103 Update dependency electron to v28.1.3 (#1432)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-11 11:02:36 +00:00
renovate[bot]
4fb2add57a Update ilammy/msvc-dev-cmd digest to 1a76314 (#1420)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2024-01-10 01:10:54 +00:00
renovate[bot]
1968c406f5 Update electron-builder to v24.11.0 (#1431)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-10 01:10:48 +00:00
renovate[bot]
d39788e176 Update dependency @types/node to v16.18.70 (#1430)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-10 00:52:45 +00:00
renovate[bot]
0750b6f303 Update dependency eslint-plugin-unicorn to v50 (#1426)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-10 00:47:51 +00:00
renovate[bot]
e8cc78f7af Update babel monorepo to v7.23.7 (#1421)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-10 00:08:07 +00:00
renovate[bot]
eb293bbf85 Update tj-actions/changed-files action to v41 (#1427)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-10 00:05:12 +00:00
renovate[bot]
fdb24d7744 Update dependency @types/node to v16.18.69 (#1422)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-10 00:04:43 +00:00
renovate[bot]
5d5014904f Update typescript-eslint monorepo to v6.18.0 (#1425)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-10 00:04:04 +00:00
renovate[bot]
24d290178e Update dependency app-builder-lib to v24.10.0 (#1424)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-10 00:03:43 +00:00
renovate[bot]
8749fe0e33 Update all non-major dependencies (#1423)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-09 18:57:29 +00:00
RiotRobot
5c76ff351c v1.11.54-rc.0 2024-01-09 18:14:48 +00:00
Michael Telatynski
b479798f42 Burn Node-related Electron fuses as a proactive hardening measure (#1412)
Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>
Co-authored-by: Valere <valeref@matrix.org>
2024-01-09 15:56:04 +00:00
Michael Telatynski
69da4935b9 Switch to artifact-v4 and move packages.element.io packing to deploy workflow (#1411) 2024-01-08 12:40:59 +00:00
RiotRobot
5582461de4 Merge branch 'master' into develop 2024-01-04 14:54:55 +00:00
RiotRobot
afc22a15c3 v1.11.53 2024-01-04 14:54:09 +00:00
Michael Telatynski
927285ae54 Update build_windows.yaml 2024-01-04 09:19:22 +00:00
Michael Telatynski
6617b29028 Move electron-builder config to javascript file (#1402) 2024-01-03 16:29:48 +00:00
David Langley
a0045050f2 Merge pull request #1410 from element-hq/langleyd/update_team_names
Update teams names in CODEOWNERS
2024-01-03 11:23:59 +00:00
David Langley
b025c9f6f9 update teams names in CODEOWNERS 2024-01-03 11:06:39 +00:00
renovate[bot]
18eea3eb11 Update dependency detect-libc to v2 (#1407)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2024-01-02 18:15:58 +00:00
renovate[bot]
3bfe26a1f8 Update dependency prettier to v3 (#1405)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2024-01-02 18:12:16 +00:00
Michael Telatynski
29550847f9 Fix docker commands to work on ARM systems like macOS M1 (#1408) 2024-01-02 17:39:20 +00:00
renovate[bot]
5f722691e7 Update actions/setup-node action to v4 (#1404)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-02 17:37:20 +00:00
renovate[bot]
d8169dac6f Update typescript-eslint monorepo to v6 (major) (#1403)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-02 17:37:13 +00:00
renovate[bot]
b48524698f Update actions/checkout action to v4 (#1406)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-02 17:24:45 +00:00
Michael Telatynski
058bb09bf4 Revert "Upgrade to {upload,download}-artifact@v4 for better performance" (#1396) 2023-12-20 10:01:54 +00:00
Michael Telatynski
de503fa72c Upgrade to {upload,download}-artifact@v4 for better performance (#1390) 2023-12-19 16:12:07 +00:00
RiotRobot
0fdf55b171 Merge branch 'master' into develop 2023-12-19 16:05:49 +00:00
RiotRobot
10f11acfa8 v1.11.52 2023-12-19 16:05:06 +00:00
Michael Telatynski
610389244a Upgrade to glibc 2.28 in the Docker image for Node20 compatibility (#1391) 2023-12-18 15:38:42 +00:00
renovate[bot]
a7d44591aa Update all non-major dependencies (#1380)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2023-12-13 14:33:27 +00:00
ElementRobot
1501837960 Merge pull request #1370 from element-hq/actions/localazy-download
Localazy Download
2023-12-13 14:25:26 +00:00
Michael Telatynski
11051a1b9e Merge branch 'develop' into actions/localazy-download 2023-12-13 14:01:27 +00:00
David Langley
d194fbcd34 Merge pull request #1382 from element-hq/backport-1375-to-staging
Backport 1375 to staging
2023-12-13 13:38:57 +00:00
renovate[bot]
1e816ea626 Update tj-actions/changed-files digest to 9454999 (#1374)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2023-12-13 13:23:05 +00:00
renovate[bot]
6fe02e9bba Update dependency electron to v28 (#1381)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2023-12-13 13:22:47 +00:00
renovate[bot]
e877d1e624 Update definitelyTyped (#1334)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2023-12-13 13:21:21 +00:00
renovate[bot]
eddd869a87 Update dependency app-builder-lib to v24.9.4 (#1378)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2023-12-13 13:20:47 +00:00
renovate[bot]
fe6f382848 Update dependency typescript to v5.3.3 (#1379)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2023-12-13 13:20:02 +00:00
renovate[bot]
a2f97a4244 Update docker/metadata-action digest to 31cebac (#1373)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2023-12-13 13:17:14 +00:00
renovate[bot]
8df705b3e5 Update babel monorepo to v7.23.5 (#1376)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2023-12-13 13:16:16 +00:00
renovate[bot]
a1ad12a0a6 Update dependency @types/jest to v29.5.11 (#1377)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2023-12-13 13:15:27 +00:00
David Langley
788a4ca721 Merge pull request #1375 from element-hq/langleyd/update_org_in_workflows
Update org in workflows and scripts

(cherry picked from commit 9586a17faf)
2023-12-13 13:07:19 +00:00
David Langley
9586a17faf Merge pull request #1375 from element-hq/langleyd/update_org_in_workflows
Update org in workflows and scripts
2023-12-13 12:44:31 +00:00
David Langley
07eb156555 Update org is workflows and scripts 2023-12-13 10:02:45 +00:00
t3chguy
13c5d378e4 [create-pull-request] automated change 2023-12-13 06:05:18 +00:00
RiotRobot
79c4b6f7e7 v1.11.52-rc.0 2023-12-12 17:09:53 +00:00
David Langley
066c5c9d93 Merge pull request #1369 from element-hq/langleyd/update_org_in_codeowners
Update org to element-hq in CODEOWNERS
2023-12-12 11:33:01 +00:00
David Langley
e51337ce0c update org to element-hq 2023-12-11 20:23:27 +00:00
RiotRobot
58da1477de Merge branch 'master' into develop 2023-12-05 14:27:44 +00:00
RiotRobot
eebea8b839 v1.11.51 2023-12-05 14:26:51 +00:00
Johannes Marbach
1b3bafa2a4 Merge pull request #1360 from vector-im/Johennes-patch-1 2023-11-30 16:08:17 +01:00
Johannes Marbach
e413b05d74 Activate automatic label sync 2023-11-30 15:46:31 +01:00
Johannes Marbach
cde2357ea1 Merge pull request #1359 from vector-im/Johennes-patch-1 2023-11-30 15:44:55 +01:00
Johannes Marbach
4bdbc3abc6 Remove space 2023-11-30 14:33:39 +01:00
Johannes Marbach
a75d7ec7ae Add missing labels 2023-11-30 14:33:06 +01:00
Johannes Marbach
71149f368c Merge pull request #1358 from vector-im/johannes/label-sync 2023-11-30 13:56:54 +01:00
Johannes Marbach
92298641ac Set up label sync for testing 2023-11-29 13:17:14 +01:00
ElementRobot
5b7f230d20 Merge pull request #1356 from vector-im/actions/localazy-download
Localazy Download
2023-11-29 07:25:21 +01:00
t3chguy
d148e0dda2 [create-pull-request] automated change 2023-11-29 06:05:11 +00:00
renovate[bot]
68f3344000 Update all non-major dependencies (#1352)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-28 19:17:43 +00:00
renovate[bot]
66375e5182 Update dependency typescript to v5.3.2 (#1354)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-28 18:33:07 +00:00
renovate[bot]
b72f8f1223 Update dependency @types/jest to v29.5.10 (#1353)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-28 18:31:05 +00:00
renovate[bot]
419e4eea86 Update docker (#1349)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-28 18:30:38 +00:00
renovate[bot]
110f9118b7 Update electron-builder to v24.9.1 (#1355)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-28 18:30:05 +00:00
renovate[bot]
20810f0248 Update tj-actions/changed-files digest to da093c1 (#1351)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-28 18:28:22 +00:00
RiotRobot
eda328d8fb v1.11.51-rc.0 2023-11-28 17:41:21 +00:00
Johannes Marbach
dc4b04af2d Merge pull request #1347 from vector-im/johannes/release-make 2023-11-24 15:54:40 +01:00
Johannes Marbach
70167d42f4 Adapt to renaming of release-action workflow 2023-11-24 15:33:55 +01:00
Michael Telatynski
268e61ec5a Update build_and_deploy.yaml 2023-11-23 08:21:09 +00:00
Johannes Marbach
b7cc0cf5f2 Merge pull request #1344 from vector-im/johannes/action-validator 2023-11-22 16:36:08 +01:00
Johannes Marbach
b0fa486d97 Set up CI to lint workflows with action-validator 2023-11-22 16:13:47 +01:00
Michael Telatynski
ea22bcf1eb Simplify reprepro using new composite action (#1320) 2023-11-22 08:31:25 +00:00
Michael Telatynski
06df6e97fe Update CHANGELOG.md 2023-11-21 12:32:28 +00:00
RiotRobot
41ce1c4ceb Merge branch 'master' into develop 2023-11-21 11:49:47 +00:00
RiotRobot
9a7ac5166e Merge branch 'staging' 2023-11-21 11:49:08 +00:00
RiotRobot
6ef4c62fb1 v1.11.50 2023-11-21 11:49:03 +00:00
Michael Telatynski
de59ed995a Update release-gitflow.yml 2023-11-21 11:35:12 +00:00
Michael Telatynski
699282c34a Add documentation around releases (#1341) 2023-11-21 08:38:14 +00:00
ElementRobot
be2639aeb8 Merge pull request #1340 from vector-im/actions/localazy-download
Localazy Download
2023-11-17 07:25:06 +01:00
t3chguy
0ad43a64f5 [create-pull-request] automated change 2023-11-17 06:05:17 +00:00
Michael Telatynski
95186da047 Run Localazy Download on a schedule 3 times a week instead of during release process (#1326) 2023-11-16 09:48:10 +00:00
renovate[bot]
376efe46cc Update dependency @types/jest to v29.5.8 (#1335)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2023-11-15 23:12:03 +00:00
renovate[bot]
07cbe8f033 Update all non-major dependencies (#1332)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2023-11-15 23:09:07 +00:00
renovate[bot]
9c762b9ec0 Update babel monorepo to v7.23.3 (#1333)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2023-11-15 23:06:16 +00:00
renovate[bot]
8b7a39155f Update dependency app-builder-lib to v24.8.1 (#1336)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-15 22:34:54 +00:00
renovate[bot]
da46964e69 Update tj-actions/changed-files digest to 25ef392 (#1331)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-15 22:27:28 +00:00
RiotRobot
509c0c5678 v1.11.50-rc.1 2023-11-14 16:57:06 +00:00
RiotRobot
cdf3ce8fd6 v1.11.50-rc.0 2023-11-14 16:29:15 +00:00
Michael Telatynski
421919d146 Explicitly specify secrets
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2023-11-14 16:27:31 +01:00
Michael Telatynski
473e8068dc Update release-drafter.yml 2023-11-14 14:43:43 +00:00
Michael Telatynski
7c65dbf549 New release automations (#1318) 2023-11-14 10:54:42 +00:00
Michael Telatynski
7bf2fbb0ac Update build_macos.yaml 2023-11-13 12:09:18 +00:00
Michael Telatynski
b4d90bafae Update build_macos.yaml 2023-11-13 12:04:39 +00:00
Michael Telatynski
b2b7bcb5af Workaround for macos-latest switching to Python 3.12 (#1328) 2023-11-13 12:03:37 +00:00
ElementRobot
7e10269009 Merge branch 'master' into develop 2023-11-13 10:38:10 +00:00
ElementRobot
145b58611a v1.11.49 2023-11-13 10:38:02 +00:00
ElementRobot
a200cc402d Prepare changelog for v1.11.49 2023-11-13 10:38:02 +00:00
Michael Telatynski
24dc38d99d Remove unused dependency (#1323) 2023-11-13 09:44:09 +00:00
Michael Telatynski
53902c0fd6 Update CODEOWNERS 2023-11-13 09:20:52 +00:00
ElementRobot
b8e0e26a30 Merge branch 'master' into develop 2023-11-07 15:31:08 +00:00
ElementRobot
a5ce2c122f v1.11.48 2023-11-07 15:31:01 +00:00
ElementRobot
860385d8b8 Prepare changelog for v1.11.48 2023-11-07 15:31:01 +00:00
Johannes Marbach
572b3b6b05 Merge pull request #1312 from vector-im/Johennes-patch-1 2023-11-07 10:48:43 +01:00
Johannes Marbach
afe8956123 Inherit secrets 2023-11-07 09:40:04 +01:00
Johannes Marbach
655af71613 Forward ELEMENT_BOT_TOKEN when calling workflow 2023-11-06 15:54:28 +01:00
Johannes Marbach
cb3cb91c2b Merge pull request #1295 from vector-im/Johennes-patch-1 2023-11-06 14:56:01 +01:00
Johannes Marbach
8b363f300f Merge branch 'develop' into Johennes-patch-1 2023-11-06 14:22:45 +01:00
Johannes Marbach
4a7258cc87 Call workflow from element-web 2023-11-06 14:14:19 +01:00
renovate[bot]
7214c7e48e Update definitelyTyped (#1300)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-01 09:28:10 +00:00
renovate[bot]
cc6e1fefae Update dependency app-builder-lib to v24.8.0 (#1303)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-01 08:38:46 +00:00
renovate[bot]
e4f60fce10 Update docker (#1298)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-01 08:36:54 +00:00
renovate[bot]
0cc6e2aeb1 Update all non-major dependencies (#1302)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-01 08:36:48 +00:00
renovate[bot]
d3c5c736f8 Update tj-actions/changed-files digest to 4052680 (#1299)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-01 08:34:40 +00:00
renovate[bot]
a8deae3950 Update tj-actions/changed-files action to v40 (#1306)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2023-10-31 18:56:25 +00:00
renovate[bot]
06200aa663 Update dependency eslint-plugin-unicorn to v49 (#1305)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-31 18:40:08 +00:00
renovate[bot]
fefc92d513 Update dependency @types/jest to v29.5.6 (#1301)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-31 18:20:03 +00:00
ElementRobot
fb11841070 v1.11.48-rc.1 2023-10-31 15:23:58 +00:00
ElementRobot
09d4815d8a Prepare changelog for v1.11.48-rc.1 2023-10-31 15:23:58 +00:00
Johannes Marbach
51dda630d1 Create triage-labelled.yml
This copies https://github.com/vector-im/element-web/blob/develop/.github/workflows/triage-labelled.yml as I believe we want the same label automation in both repositories.
2023-10-27 16:24:30 +02:00
Michael Telatynski
e330d0c3e7 Fix edge cases around macos draggability (#1291) 2023-10-25 10:10:52 +01:00
ElementRobot
6637923701 Merge branch 'master' into develop 2023-10-24 15:49:09 +01:00
ElementRobot
a9003d1abd v1.11.47 2023-10-24 15:49:01 +01:00
ElementRobot
8c4b9e9f41 Prepare changelog for v1.11.47 2023-10-24 15:49:00 +01:00
Michael Telatynski
ade277af89 Delete .github/workflows/upgrade_dependencies.yml 2023-10-24 00:48:04 +01:00
Michael Telatynski
ca0a48196c Fix Nightly builds not bailing on failure (#1289) 2023-10-23 12:04:58 +01:00
renovate[bot]
203ce96d0b Lock file maintenance (#1224)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-18 10:49:38 +00:00
renovate[bot]
dac155ebe7 Update all non-major dependencies (#1253)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2023-10-17 20:14:44 +01:00
renovate[bot]
05527b784c Update dependency typescript to v5.2.2 (#1243)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2023-10-17 17:43:01 +01:00
renovate[bot]
850eccca79 Update docker/build-push-action digest to fdf7f43 (#1282)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2023-10-17 17:10:50 +01:00
renovate[bot]
777277163b Update dependency electron to v27 (#1283)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-17 17:10:40 +01:00
renovate[bot]
88788b42a5 Update tj-actions/changed-files digest to 95690f9 (#1260)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-17 15:14:46 +00:00
renovate[bot]
4a92992c26 Update dependency app-builder-lib to v24.7.0 (#1263)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-17 16:11:03 +01:00
renovate[bot]
5142d4aefd Update babel monorepo to v7.23.2 (#1262)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-17 16:10:55 +01:00
renovate[bot]
68b289d779 Update definitelyTyped (#1261)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-17 16:09:59 +01:00
ElementRobot
6198190095 v1.11.47-rc.1 2023-10-17 15:47:14 +01:00
ElementRobot
02080bbe2e Prepare changelog for v1.11.47-rc.1 2023-10-17 15:47:13 +01:00
ElementRobot
71738c3dfc [create-pull-request] automated change (#1281)
Co-authored-by: t3chguy <t3chguy@users.noreply.github.com>
2023-10-17 15:05:22 +01:00
Michael Telatynski
9890109ebf Update localazy_upload.yaml 2023-10-17 10:48:32 +01:00
Michael Telatynski
da9d9e1730 Allow overwriting app.element.io when popping out widgets (#1277) 2023-10-16 14:20:58 +01:00
Michael Telatynski
2738dca96f Write mdbook summary (#1273) 2023-10-16 08:40:15 +01:00
Robin
485fee3a77 Merge pull request #1274 from robintown/element-call-url
Update the Element Call unstable URL
2023-10-13 12:53:36 -04:00
Robin
9d63ba5d41 Update the Element Call unstable URL
We've switched from Netlify to an in-house Kubernetes deployment with a new URL.
2023-10-13 12:21:49 -04:00
Germain
507fd77b21 Implement macos title bar negative space (#1272) 2023-10-12 15:14:21 +01:00
RiotRobot
ecf8a2814b v1.11.46 2023-10-10 09:41:17 +01:00
RiotRobot
3758623283 Prepare changelog for v1.11.46 2023-10-10 09:41:16 +01:00
RiotRobot
1bfaa948a0 v1.11.46-rc.2 2023-10-03 15:06:17 +01:00
RiotRobot
2e6a85a239 Prepare changelog for v1.11.46-rc.2 2023-10-03 15:06:17 +01:00
Andy Balaam
f563d8c4cd Bump matrix-web-i18n to 3.1.3 for KEY_SEPARATOR (#1259) 2023-10-03 15:03:02 +01:00
RiotRobot
a2e800e301 v1.11.46-rc.1 2023-10-03 12:17:51 +01:00
RiotRobot
49b87dfb53 Prepare changelog for v1.11.46-rc.1 2023-10-03 12:17:50 +01:00
RiotRobot
00c27c4475 Merge branch 'master' into develop 2023-09-29 11:45:30 +01:00
RiotRobot
0f268891cd v1.11.45 2023-09-29 11:45:16 +01:00
RiotRobot
7377787b2f Prepare changelog for v1.11.45 2023-09-29 11:45:15 +01:00
ElementRobot
696e7d2652 Bump electron to 26.2.4 (#1254) (#1255)
(cherry picked from commit 3eb32d9ff3)

Co-authored-by: Andy Balaam <andy.balaam@matrix.org>
2023-09-29 11:06:58 +01:00
Andy Balaam
3eb32d9ff3 Bump electron to 26.2.4 (#1254) 2023-09-29 09:15:27 +00:00
RiotRobot
14b264e353 Merge branch 'master' into develop 2023-09-26 14:17:21 +01:00
RiotRobot
089810ec60 v1.11.44 2023-09-26 14:17:07 +01:00
RiotRobot
9afcaf54fc Prepare changelog for v1.11.44 2023-09-26 14:17:06 +01:00
renovate[bot]
fdc230ff17 Update jest to v29.5.5 (#1240)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-22 01:28:21 +00:00
renovate[bot]
0af8b8e420 Update definitelyTyped (#1237)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-22 01:06:16 +00:00
renovate[bot]
565c662b25 Update babel monorepo to v7.22.20 (#1238)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-22 01:00:45 +00:00
renovate[bot]
173e658b3c Update docker (#1235)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-22 01:23:17 +01:00
renovate[bot]
2f901cab6a Update tj-actions/changed-files digest to 4196030 (#1236)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-22 01:22:53 +01:00
renovate[bot]
59069c316f Update dependency app-builder-lib to v24.6.5 (#1239)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-22 01:21:42 +01:00
renovate[bot]
d73e3b0f0c Update all non-major dependencies (#1241)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-22 01:20:45 +01:00
RiotRobot
422bb150c9 v1.11.44-rc.1 2023-09-19 12:58:45 +01:00
RiotRobot
b6daedae89 Prepare changelog for v1.11.44-rc.1 2023-09-19 12:58:44 +01:00
Johannes Marbach
bcfc057879 Merge pull request #1231 from vector-im/johannes/undefault-new-room-header 2023-09-18 16:09:44 +02:00
Johannes Marbach
d3b84266a4 Turn off new room header by default 2023-09-18 09:52:39 +02:00
Johannes Marbach
94a0347946 Merge pull request #1194 from vector-im/germain-gg/room-ui-develop 2023-09-15 15:43:51 +02:00
RiotRobot
c87e72c4a1 Merge branch 'master' into develop 2023-09-15 12:25:42 +01:00
RiotRobot
ac1acc1591 v1.11.43 2023-09-15 12:24:35 +01:00
RiotRobot
0bd8a1720e Prepare changelog for v1.11.43 2023-09-15 12:24:34 +01:00
RiotRobot
58f2f99ca4 Update yarn.lock for changed dependencies 2023-09-15 12:22:14 +01:00
Andy Balaam
5e56cd59ef upgrade electron to 26.2.1 to fix CVE-2023-4863 (#1226) (#1228)
Signed-off-by: lauren n. liberda <lauren@selfisekai.rocks>
(cherry picked from commit ca43ab8a6f)

Co-authored-by: lauren n. liberda <msgh@selfisekai.rocks>
2023-09-15 12:01:56 +01:00
lauren n. liberda
ca43ab8a6f upgrade electron to 26.2.1 to fix CVE-2023-4863 (#1226)
Signed-off-by: lauren n. liberda <lauren@selfisekai.rocks>
2023-09-15 10:01:48 +01:00
Johannes Marbach
ece7240345 Merge branch 'develop' into germain-gg/room-ui-develop 2023-09-15 09:10:50 +02:00
Michael Telatynski
f45f83f0f5 Improve edge cases around macOS drag handles (#1219)
* Allow dragging macOS window by area around mx_UserMenu

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Fix context menus overlapping drag regions being unclickable

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Fix captcha overlapping drag region being unclickable

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Expand drag handle on top left user menu surround

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

---------

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2023-09-14 08:55:11 +01:00
RiotRobot
1905e4759b Merge branch 'master' into develop 2023-09-13 13:05:23 +01:00
RiotRobot
4278447157 v1.11.42 2023-09-13 13:05:09 +01:00
RiotRobot
e840ba55c1 Prepare changelog for v1.11.42 2023-09-13 13:05:08 +01:00
ElementRobot
4ec7d29488 Merge branch 'master' into develop 2023-09-12 17:23:47 +01:00
renovate[bot]
624d941950 Update tj-actions/changed-files digest to 6ee9cdc (#1204)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-12 03:17:38 +00:00
Michael Telatynski
e5e0a4cdbb Update localazy.json 2023-09-08 10:45:20 +01:00
ElementRobot
9d15a270e2 Merge pull request #1214 from vector-im/actions/localazy-download
Localazy Download
2023-09-08 11:36:09 +02:00
t3chguy
889e7cfa0c [create-pull-request] automated change 2023-09-08 09:08:41 +00:00
Michael Telatynski
b67270d324 Update package.json 2023-09-08 09:54:25 +01:00
Michael Telatynski
a99b30f839 Consolidate de.json into de_DE.json
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2023-09-08 09:40:47 +01:00
renovate[bot]
a094a06465 Update dependency electron to v26.2.0 (#1212)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-07 08:14:41 +00:00
renovate[bot]
1f43456984 Update dependency electron-builder-squirrel-windows to v24.6.4 (#1181)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-06 20:39:19 +01:00
Michael Telatynski
8edaf46557 Update backport.yml 2023-09-06 18:13:03 +01:00
renovate[bot]
3549d38cfd Lock file maintenance (#1210)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2023-09-06 18:10:31 +01:00
Michael Telatynski
383377493c Localazy Download 2023-09-06 18:08:25 +01:00
renovate[bot]
37bf22b92c Update peter-evans/repository-dispatch digest to bf47d10 (#1203)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2023-09-06 13:41:51 +01:00
renovate[bot]
ac40e365e5 Update definitelyTyped (#1206)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-06 09:47:24 +00:00
renovate[bot]
42c45a51ca Update tj-actions/changed-files action to v39 (#1209)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-06 09:47:19 +00:00
renovate[bot]
dc780491c8 Update babel monorepo (#1205)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-06 10:45:07 +01:00
renovate[bot]
2d102bdc19 Update docker (#1202)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-06 10:43:22 +01:00
renovate[bot]
2b1e88f16e Update electron-builder to v24.6.4 (#1207)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-05 20:24:52 +00:00
renovate[bot]
9b83e2d515 Update dependency pacote to v17 (#1184)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2023-09-05 21:23:00 +01:00
renovate[bot]
7c13a58b51 Update jest to v29.6.4 (#1180)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-05 17:01:44 +00:00
Michael Telatynski
86832a1793 Migrate translations to keys and switch to Localazy (#1198) 2023-09-05 17:09:47 +01:00
Germain
d7c4e9b74a Enable new room UI by default on nightly 2023-08-31 22:32:12 +01:00
115 changed files with 9370 additions and 9543 deletions

View File

@@ -2,11 +2,11 @@ module.exports = {
plugins: ["matrix-org"],
extends: [".eslintrc.js"],
parserOptions: {
project: ["test/tsconfig.json"],
project: ["playwright/tsconfig.json"],
},
overrides: [
{
files: ["test/**/*.ts"],
files: ["playwright/**/*.ts"],
extends: ["plugin:matrix-org/typescript"],
rules: {
// Things we do that break the ideal style

9
.github/CODEOWNERS vendored
View File

@@ -1,4 +1,5 @@
* @vector-im/element-web
/.github/workflows/** @vector-im/element-web-app-team
/package.json @vector-im/element-web-app-team
/yarn.lock @vector-im/element-web-app-team
* @element-hq/element-web-reviewers
/.github/workflows/** @element-hq/element-web-team
/package.json @element-hq/element-web-team
/yarn.lock @element-hq/element-web-team
/src/i18n/strings

View File

@@ -2,12 +2,7 @@
## Checklist
- [ ] Ensure your code works with manual testing
- [ ] Linter and other CI checks pass
- [ ] Sign-off given on the changes (see [CONTRIBUTING.md](https://github.com/vector-im/element-desktop/blob/develop/CONTRIBUTING.md))
<!--
If you would like to specify text for the changelog entry other than your PR title, add the following:
Notes: Add super cool feature
-->
- [ ] Ensure your code works with manual testing.
- [ ] New or updated `public`/`exported` symbols have accurate [TSDoc](https://tsdoc.org/) documentation.
- [ ] Linter and other CI checks pass.
- [ ] Sign-off given on the changes (see [CONTRIBUTING.md](https://github.com/vector-im/element-desktop/blob/develop/CONTRIBUTING.md)).

31
.github/labels.yml vendored Normal file
View File

@@ -0,0 +1,31 @@
- name: "A-Install"
color: "72A447"
- name: "A-Seshat"
color: "8262BE"
- name: "A-Update"
color: "17BE67"
- name: "Story"
description: "A change to the product that generates user value on its own. Unit of delivery."
color: "0BAC47"
- name: "X-Breaking-Change"
color: "ff7979"
- name: "Z-Arch"
color: "D601BE"
- name: "Z-ARM"
color: "5DEC5B"
- name: "Z-Flatpak"
color: "0CA856"
- name: "Z-Linux"
color: "7B4A9C"
- name: "Z-macOS"
color: "500605"
- name: "Z-Official"
color: "1D2B20"
- name: "Z-Snap"
color: "29CD95"
- name: "Z-Suse"
color: "79D07B"
- name: "Z-Wayland"
color: "94C519"
- name: "Z-Windows"
color: "0632DE"

1
.github/release-drafter.yml vendored Normal file
View File

@@ -0,0 +1 @@
_extends: element-hq/element-web

View File

@@ -23,7 +23,7 @@ jobs:
)
)
steps:
- uses: tibdex/backport@7005ef85c4562bc23b0e9b4a9940d5922f439750
- 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

View File

@@ -48,6 +48,7 @@ jobs:
config: element.io/${{ inputs.mode || (github.event_name == 'release' && 'release') || 'nightly' }}
version: ${{ (inputs.mode != 'release' && github.event_name != 'release') && 'develop' || '' }}
nightly: ${{ inputs.mode != 'release' && github.event_name != 'release' }}
deploy: ${{ inputs.deploy || (github.event_name != 'workflow_dispatch' && github.event.release.prerelease != true) }}
secrets:
CF_R2_ACCESS_KEY_ID: ${{ secrets.CF_R2_ACCESS_KEY_ID }}
CF_R2_TOKEN: ${{ secrets.CF_R2_TOKEN }}
@@ -58,12 +59,11 @@ jobs:
name: Windows ${{ matrix.arch }}
strategy:
matrix:
arch: [x86, x64]
arch: [ia32, x64]
uses: ./.github/workflows/build_windows.yaml
secrets: inherit
with:
sign: true
deploy-mode: true
arch: ${{ matrix.arch }}
version: ${{ needs.prepare.outputs.nightly-version }}
@@ -75,67 +75,120 @@ jobs:
secrets: inherit
with:
sign: true
deploy-mode: true
base-url: https://packages.element.io/${{ needs.prepare.outputs.packages-dir }}
version: ${{ needs.prepare.outputs.nightly-version }}
# We do not put these calls into deploy-mode as we do not want it to add to the packages.element.io artifact
# We ship this build via reprepro only
linux:
if: github.event_name != 'workflow_dispatch' || inputs.linux
needs: prepare
name: Linux ${{ matrix.arch }} (sqlcipher system)
name: Linux ${{ matrix.arch }} (sqlcipher ${{ matrix.sqlcipher }})
strategy:
matrix:
arch: [amd64, arm64]
sqlcipher: [system, static]
exclude:
- arch: arm64
sqlcipher: static
uses: ./.github/workflows/build_linux.yaml
with:
arch: ${{ matrix.arch }}
config: ${{ needs.prepare.outputs.config }}
sqlcipher: system
sqlcipher: ${{ matrix.sqlcipher }}
version: ${{ needs.prepare.outputs.nightly-version }}
# We ship the static build via static tarball only
linux_static:
if: github.event_name != 'workflow_dispatch' || inputs.linux
needs: prepare
name: Linux (sqlcipher static)
uses: ./.github/workflows/build_linux.yaml
with:
arch: amd64
deploy-mode: true
config: ${{ needs.prepare.outputs.config }}
sqlcipher: static
version: ${{ needs.prepare.outputs.nightly-version }}
# This deploy job only handles Windows, macOS & linux_static as those are stateless and static.
# Linux will be deployed via reprepro after it, but we list it as a dependency to abort if it fails.
deploy:
needs:
- prepare
- macos
- linux
- linux_static
- windows
runs-on: ubuntu-latest
name: Deploy
if: |
(
github.event_name != 'workflow_dispatch' &&
github.event.release.prerelease != true
) || (
always() && !failure() && !cancelled() && inputs.deploy &&
(inputs.macos || inputs.windows || inputs.linux)
)
environment: packages.element.io
name: ${{ needs.prepare.outputs.deploy == 'true' && 'Deploy' || 'Deploy (dry-run)' }}
if: always() && !failure() && !cancelled()
environment: ${{ needs.prepare.outputs.deploy == 'true' && 'packages.element.io' || '' }}
steps:
- name: Download artifacts
uses: actions/download-artifact@v3
uses: actions/download-artifact@v4
- name: Prepare artifacts for deployment
run: |
# Windows
for arch in x64 ia32 arm64
do
if [ -d "win-$arch" ]; then
mkdir -p packages.element.io/{install,update}/win32/$arch
mv win-$arch/squirrel-windows*/*.exe "packages.element.io/install/win32/$arch/"
mv win-$arch/squirrel-windows*/*.nupkg "packages.element.io/update/win32/$arch/"
mv win-$arch/squirrel-windows*/RELEASES "packages.element.io/update/win32/$arch/"
fi
done
# macOS
if [ -d macos ]; then
mkdir -p packages.element.io/{install,update}/macos
mv macos/*.dmg packages.element.io/install/macos/
mv macos/*-mac.zip packages.element.io/update/macos/
mv macos/*.json packages.element.io/update/macos/
fi
# Linux
if [ -d linux-amd64-sqlcipher-static ]; then
mkdir -p packages.element.io/install/linux/glibc-x86-64
mv linux-amd64-sqlcipher-static/*.tar.gz packages.element.io/install/linux/glibc-x86-64
fi
# We don't wish to store the installer for every nightly ever, so we only keep the latest
- name: "[Nightly] Strip version from installer file"
if: needs.prepare.outputs.nightly-version != ''
run: |
# Windows
for arch in x64 ia32 arm64
do
[ -d "win-$arch" ] && mv packages.element.io/install/win32/$arch/{*,"Element Nightly Setup"}.exe
done
# macOS
[ -d macos ] && mv packages.element.io/install/macos/{*,"Element Nightly"}.dmg
# Linux
[ -d linux-amd64-sqlcipher-static ] && mv packages.element.io/install/linux/glibc-x86-64/{*,element-desktop-nightly}.tar.gz
- name: "[Release] Prepare release latest symlink"
if: needs.prepare.outputs.nightly-version == ''
run: |
# Windows
for arch in x64 ia32 arm64
do
if [ -d "win-$arch" ]; then
pushd packages.element.io/install/win32/$arch
ln -s "$(find . -type f -iname "*.exe" | xargs -0 -n1 -- basename)" "Element Setup.exe"
popd
fi
done
# macOS
if [ -d macos ]; then
pushd packages.element.io/install/macos
ln -s "$(find . -type f -iname "*.dmg" | xargs -0 -n1 -- basename)" "Element.dmg"
popd
fi
# Linux
if [ -d linux-amd64-sqlcipher-static ]; then
pushd packages.element.io/install/linux/glibc-x86-64
ln -s "$(find . -type f -iname "*.tar.gz" | xargs -0 -n1 -- basename)" "element-desktop.tar.gz"
popd
fi
- name: Stash packages.element.io
if: needs.prepare.outputs.deploy == 'false'
uses: actions/upload-artifact@v4
with:
name: packages.element.io
path: packages.element.io
- name: Deploy artifacts
if: needs.prepare.outputs.deploy == 'true'
run: |
aws s3 cp --recursive packages.element.io/ s3://$R2_BUCKET/$DEPLOYMENT_DIR --endpoint-url $R2_URL --region auto
env:
@@ -145,29 +198,47 @@ jobs:
DEPLOYMENT_DIR: ${{ needs.prepare.outputs.packages-dir }}
- name: Notify packages.element.io of new files
uses: peter-evans/repository-dispatch@26b39ed245ab8f31526069329e112ab2fb224588 # v2
if: needs.prepare.outputs.deploy == 'true'
uses: peter-evans/repository-dispatch@ff45666b9427631e3450c54a1bcbee4d9ff4d7c0 # v3
with:
token: ${{ secrets.ELEMENT_BOT_TOKEN }}
repository: vector-im/packages.element.io
repository: element-hq/packages.element.io
event-type: packages-index
reprepro:
needs:
- linux
# We queue this after the other deploy stage as we want to abort if that fails
- deploy
name: Run reprepro ${{ matrix.arch }}
strategy:
matrix:
arch: [amd64, arm64]
if: |
(
github.event_name != 'workflow_dispatch' &&
github.event.release.prerelease != true
) || (
always() && !failure() && !cancelled() && inputs.deploy && inputs.linux
)
uses: ./.github/workflows/reprepro.yaml
secrets: inherit
with:
artifact-name: linux-${{ matrix.arch }}-sqlcipher-system
- name: Find debs
id: deb
if: needs.linux.result == 'success'
run: |
for arch in amd64 arm64
do
echo "$arch=$(ls linux-$arch-sqlcipher-system/*.deb | tail -n1)" >> $GITHUB_OUTPUT
done
- name: Stash debs
if: needs.prepare.outputs.deploy == 'false' && needs.linux.result == 'success'
uses: actions/upload-artifact@v4
with:
name: debs
path: |
${{ steps.deb.outputs.amd64 }}
${{ steps.deb.outputs.arm64 }}
- name: Publish amd64 deb to packages.element.io
uses: element-hq/packages.element.io@master
if: needs.prepare.outputs.deploy == 'true' && needs.linux.result == 'success'
with:
file: ${{ steps.deb.outputs.amd64 }}
github-token: ${{ secrets.ELEMENT_BOT_TOKEN }}
bucket-api: ${{ vars.CF_R2_S3_API }}
bucket-key-id: ${{ secrets.CF_R2_ACCESS_KEY_ID }}
bucket-access-key: ${{ secrets.CF_R2_TOKEN }}
- name: Publish arm64 deb to packages.element.io
uses: element-hq/packages.element.io@master
if: needs.prepare.outputs.deploy == 'true' && needs.linux.result == 'success'
with:
file: ${{ steps.deb.outputs.arm64 }}
github-token: ${{ secrets.ELEMENT_BOT_TOKEN }}
bucket-api: ${{ vars.CF_R2_S3_API }}
bucket-key-id: ${{ secrets.CF_R2_ACCESS_KEY_ID }}
bucket-access-key: ${{ secrets.CF_R2_TOKEN }}

View File

@@ -19,7 +19,7 @@ jobs:
uses: ./.github/workflows/build_windows.yaml
strategy:
matrix:
arch: [x64, x86]
arch: [x64, ia32]
with:
arch: ${{ matrix.arch }}
@@ -37,17 +37,17 @@ jobs:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}-dockerbuild-pr
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: "Get modified files"
id: changed_files
uses: tj-actions/changed-files@2f7246cb26e8bb6709b6cbfc1fec7febfe82e96a # v38
uses: tj-actions/changed-files@800a2825992141ddde1a8bca8ad394cec34d3188 # v42
with:
files: |
dockerbuild/*
dockerbuild/**
- name: Log in to the Container registry
if: steps.changed_files.outputs.any_modified == 'true'
uses: docker/login-action@cf8514a65188af1d4f94f8c28a7a4153af1088ce
uses: docker/login-action@5139682d94efc37792e6b54386b5b470a68a4737
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
@@ -63,7 +63,7 @@ jobs:
- name: Build and push Docker image
if: steps.changed_files.outputs.any_modified == 'true'
uses: docker/build-push-action@9311bf5263ae5b36f3ec67aff768790c6e2344ad
uses: docker/build-push-action@4a13e500e55cf31b7a5d59a38ab2040ab0f42f56 # v5
with:
context: dockerbuild
push: true
@@ -106,21 +106,26 @@ jobs:
- name: macOS Universal
os: macos
artifact: macos
executable: "/Volumes/Element/Element.app/Contents/MacOS/Element"
prepare_cmd: "hdiutil attach ./dist/*.dmg -mountpoint /Volumes/Element"
executable: "/Users/runner/Applications/Element.app/Contents/MacOS/Element"
# We need to mount the DMG and copy the app to the Applications folder as a mounted DMG is
# read-only and thus would not allow us to override the fuses as is required for Playwright.
prepare_cmd: |
hdiutil attach ./dist/*.dmg -mountpoint /Volumes/Element &&
rsync -a /Volumes/Element/Element.app ~/Applications/ &&
hdiutil detach /Volumes/Element
- name: "Linux (amd64) (sqlcipher: system)"
os: ubuntu
artifact: linux-amd64-sqlcipher-system
executable: "element-desktop"
executable: "/opt/Element/element-desktop"
prepare_cmd: "sudo apt install ./dist/*.deb"
- name: "Linux (amd64) (sqlcipher: static)"
os: ubuntu
artifact: linux-amd64-sqlcipher-static
executable: "element-desktop"
executable: "/opt/Element/element-desktop"
prepare_cmd: "sudo apt install ./dist/*.deb"
- name: Windows (x86)
os: windows
artifact: win-x86
artifact: win-ia32
executable: "./dist/win-ia32-unpacked/Element.exe"
- name: Windows (x64)
os: windows
@@ -129,16 +134,17 @@ jobs:
name: Test ${{ matrix.name }}
runs-on: ${{ matrix.os }}-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/setup-node@v3
- uses: actions/setup-node@v4
with:
node-version-file: package.json
cache: "yarn"
- name: Install Deps
run: "yarn install --frozen-lockfile"
- uses: actions/download-artifact@v3
- uses: actions/download-artifact@v4
with:
name: ${{ matrix.artifact }}
path: dist
@@ -147,18 +153,27 @@ jobs:
run: ${{ matrix.prepare_cmd }}
if: matrix.prepare_cmd
# We previously disabled the `EnableNodeCliInspectArguments` fuse, but Playwright requires
# it to be enabled to test Electron apps, so turn it back on.
- name: Set EnableNodeCliInspectArguments fuse enabled
run: $RUN_AS npx @electron/fuses write --app ${{ matrix.executable }} EnableNodeCliInspectArguments=on
shell: bash
env:
# We need sudo on Linux as it is installed in /opt/
RUN_AS: ${{ runner.os == 'Linux' && 'sudo' || '' }}
- name: Run tests
uses: coactions/setup-xvfb@b6b4fcfb9f5a895edadc3bc76318fae0ac17c8b3 # v1
uses: coactions/setup-xvfb@6b00cf1889f4e1d5a48635647013c0508128ee1a
timeout-minutes: 5
with:
run: "yarn test"
run: "yarn test ${{ runner.os != 'Linux' && '--ignore-snapshots' || '' }}"
env:
ELEMENT_DESKTOP_EXECUTABLE: ${{ matrix.executable }}
- name: Upload Artifacts
uses: actions/upload-artifact@v3
- name: Upload HTML report
if: always()
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.artifact }}
path: test_artifacts
retention-days: 1
name: ${{ matrix.artifact }}-test
path: playwright/html-report
retention-days: 14

View File

@@ -20,24 +20,20 @@ on:
type: string
required: true
description: "How to link sqlcipher, one of 'system' | 'static'"
deploy-mode:
type: boolean
required: false
description: "Whether to arrange artifacts in the arrangement needed for deployment, skipping unrelated ones"
docker-image:
type: string
required: false
description: "The docker image to use for the build, defaults to ghcr.io/vector-im/element-desktop-dockerbuild"
description: "The docker image to use for the build, defaults to ghcr.io/element-hq/element-desktop-dockerbuild"
jobs:
build:
runs-on: ubuntu-latest
container:
image: ${{ inputs.docker-image || format('ghcr.io/vector-im/element-desktop-dockerbuild:{0}', github.ref_name == 'master' && 'master' || 'develop') }}
image: ${{ inputs.docker-image || format('ghcr.io/element-hq/element-desktop-dockerbuild:{0}', github.ref_name == 'master' && 'master' || 'develop') }}
defaults:
run:
shell: bash
steps:
- uses: kanga333/variable-mapper@master
- uses: nbucic/variable-mapper@0673f6891a0619ba7c002ecfed0f9f4f39017b6f
id: config
with:
key: "${{ inputs.arch }}"
@@ -55,22 +51,23 @@ jobs:
}
}
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/download-artifact@v3
- uses: actions/download-artifact@v4
with:
name: webapp
- name: Cache .hak
id: cache
uses: actions/cache@v3
uses: actions/cache@v4
with:
key: ${{ runner.os }}-${{ inputs.docker-image || github.ref_name }}-${{ inputs.sqlcipher }}-${{ inputs.arch }}-${{ hashFiles('hakHash', 'electronVersion') }}
path: |
./.hak
- uses: actions/setup-node@v3
- uses: actions/setup-node@v4
with:
node-version-file: package.json
cache: "yarn"
env:
# Workaround for https://github.com/actions/setup-node/issues/317
@@ -91,12 +88,9 @@ jobs:
if: steps.cache.outputs.cache-hit != 'true' && inputs.arch == 'arm64'
run: |
set -x
sed -i 's/deb http/deb [arch=amd64] http/g' /etc/apt/sources.list
echo "deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ bionic main multiverse restricted universe" | tee -a /etc/apt/sources.list
echo "deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ bionic-updates main multiverse restricted universe" | tee -a /etc/apt/sources.list
dpkg --add-architecture arm64
apt-get -qq update
apt-get -qq install --no-install-recommends crossbuild-essential-arm64 libsqlcipher-dev:arm64 libssl-dev:arm64 libsecret-1-dev:arm64 libgnome-keyring-dev:arm64
apt-get -qq install --no-install-recommends crossbuild-essential-arm64 libsqlcipher-dev:arm64 libssl-dev:arm64 libsecret-1-dev:arm64
rustup target add aarch64-unknown-linux-gnu
mv dockerbuild/aarch64/.cargo .
cat dockerbuild/aarch64/.env >> $GITHUB_ENV
@@ -106,24 +100,19 @@ jobs:
run: "yarn build:native --target ${{ steps.config.outputs.target }}"
- name: "[Nightly] Resolve version"
id: nightly
if: inputs.version != ''
run: |
echo "config-args=--nightly '${{ inputs.version }}'" >> $GITHUB_OUTPUT
echo "ED_NIGHTLY=${{ inputs.version }}" >> $GITHUB_ENV
- name: Generate debian files and arguments
id: debian
run: |
if [ -f changelog.Debian ]; then
echo "config-args=--deb-changelog changelog.Debian" >> $GITHUB_OUTPUT
echo "ED_DEBIAN_CHANGELOG=changelog.Debian" >> $GITHUB_ENV
fi
- name: Build App
run: |
npx ts-node scripts/generate-builder-config.ts \
${{ steps.nightly.outputs.config-args }} \
${{ steps.debian.outputs.config-args }}
yarn build --publish never -l --config electron-builder.json ${{ steps.config.outputs.build-args }}
yarn build --publish never -l ${{ steps.config.outputs.build-args }}
- name: Check native libraries
run: |
@@ -151,39 +140,11 @@ jobs:
env:
ARCH: ${{ steps.config.outputs.arch }}
- name: Stash deb package
if: inputs.deploy-mode
uses: actions/upload-artifact@v3
with:
name: linux-sqlcipher-${{ inputs.sqlcipher }}-deb
path: dist/*.deb
retention-days: 1
- name: Prepare artifacts for deployment
if: inputs.deploy-mode
run: |
mv dist _dist
mkdir -p "dist/install/linux/glibc-x86-64/"
mv _dist/*.tar.gz "dist/install/linux/glibc-x86-64"
# We don't wish to store the tarball for every nightly ever, so we only keep the latest
- name: "[Nightly] Strip version from tarball"
if: inputs.deploy-mode && inputs.version != ''
run: |
mv dist/install/linux/glibc-x86-64/*.tar.gz "dist/install/linux/glibc-x86-64/element-desktop-nightly.tar.gz"
- name: "[Release] Prepare release latest symlink"
if: inputs.deploy-mode && inputs.version == ''
shell: bash
run: |
ln -s "$(find . -type f -iname "*.tar.gz" | xargs -0 -n1 -- basename)" "element-desktop.tar.gz"
working-directory: "dist/install/linux/glibc-x86-64"
# We exclude *-unpacked as it loses permissions and the tarball contains it with correct permissions
- name: Upload Artifacts
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: ${{ inputs.deploy-mode && 'packages.element.io' || format('linux-{0}-sqlcipher-{1}', inputs.arch, inputs.sqlcipher) }}
name: linux-${{ inputs.arch }}-sqlcipher-${{ inputs.sqlcipher }}
path: |
dist
!dist/*-unpacked/**

View File

@@ -23,28 +23,24 @@ on:
type: string
required: false
description: "Whether to sign & notarise the build, requires 'packages.element.io' environment"
deploy-mode:
type: boolean
required: false
description: "Whether to arrange artifacts in the arrangement needed for deployment, skipping unrelated ones"
base-url:
type: string
required: false
description: "The URL to which the output will be deployed, required if deploy-mode is enabled."
description: "The URL to which the output will be deployed."
jobs:
build:
runs-on: macos-latest
runs-on: macos-14 # M1
environment: ${{ inputs.sign && 'packages.element.io' || '' }}
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/download-artifact@v3
- uses: actions/download-artifact@v4
with:
name: webapp
- name: Cache .hak
id: cache
uses: actions/cache@v3
uses: actions/cache@v4
with:
key: ${{ runner.os }}-${{ hashFiles('hakHash', 'electronVersion') }}
path: |
@@ -56,9 +52,16 @@ jobs:
rustup toolchain install stable --profile minimal --no-self-update
rustup default stable
rustup target add aarch64-apple-darwin
rustup target add x86_64-apple-darwin
- uses: actions/setup-node@v3
# M1 macos-14 comes without Python preinstalled
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- uses: actions/setup-node@v4
with:
node-version-file: package.json
cache: "yarn"
# Does not need branch matching as only analyses this layer
@@ -67,21 +70,23 @@ jobs:
- name: Build Natives
if: steps.cache.outputs.cache-hit != 'true'
run: "yarn build:native:universal"
run: |
# Python 3.12 drops distutils which keytar relies on
pip3 install setuptools
yarn build:native:universal
- name: "[Nightly] Resolve version"
id: nightly
if: inputs.version != ''
run: |
echo "config-args=--nightly '${{ inputs.version }}'" >> $GITHUB_OUTPUT
echo "ED_NIGHTLY=${{ inputs.version }}" >> $GITHUB_ENV
# We split these because electron-builder gets upset if we set CSC_LINK even to an empty string
- name: "[Signed] Build App"
if: inputs.sign != ''
run: |
scripts/generate-builder-config.ts ${{ steps.nightly.outputs.config-args }} --notarytool-team-id='${{ secrets.APPLE_TEAM_ID }}'
yarn build:universal --publish never --config electron-builder.json
yarn build:universal --publish never
env:
ED_NOTARYTOOL_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
CSC_KEY_PASSWORD: ${{ secrets.APPLE_CSC_KEY_PASSWORD }}
@@ -90,27 +95,21 @@ jobs:
- name: Check app was signed & notarised successfully
if: inputs.sign != ''
run: |
hdiutil attach dist/*.dmg
codesign -dv --verbose=4 /Volumes/Element*/*.app
spctl -a -vvv -t install /Volumes/Element*/*.app
hdiutil detach /Volumes/Element*
hdiutil attach dist/*.dmg -mountpoint /Volumes/Element
codesign -dv --verbose=4 /Volumes/Element/*.app
spctl -a -vvv -t install /Volumes/Element/*.app
hdiutil detach /Volumes/Element
- name: "[Unsigned] Build App"
if: inputs.sign == ''
run: |
scripts/generate-builder-config.ts ${{ steps.nightly.outputs.config-args }}
yarn build:universal --publish never --config electron-builder.json
yarn build:universal --publish never
env:
CSC_IDENTITY_AUTO_DISCOVERY: false
- name: Prepare artifacts for deployment
if: inputs.deploy-mode
- name: Generate releases.json
if: inputs.base-url
run: |
mv dist _dist
mkdir -p dist/install/macos dist/update/macos
mv _dist/*-mac.zip dist/update/macos/
mv _dist/*.dmg dist/install/macos/
PKG_JSON_VERSION=$(cat package.json | jq -r .version)
LATEST=$(find dist -type f -iname "*-mac.zip" | xargs -0 -n1 -- basename)
# Encode spaces in the URL as Squirrel.Mac complains about bad JSON otherwise
@@ -127,30 +126,18 @@ jobs:
},
}],
}
' > dist/update/macos/releases.json
' > dist/releases.json
jq -n --arg url "$URL" '
{ url: $url }
' > dist/update/macos/releases-legacy.json
' > dist/releases-legacy.json
env:
VERSION: ${{ inputs.version }}
# We don't wish to store the installer for every nightly ever, so we only keep the latest
- name: "[Nightly] Strip version from installer file"
if: inputs.deploy-mode && inputs.version != ''
run: |
mv dist/install/macos/*.dmg "dist/install/macos/Element Nightly.dmg"
- name: "[Release] Prepare release latest symlink"
if: inputs.deploy-mode && inputs.version == ''
run: |
ln -s "$(find . -type f -iname "*.dmg" | xargs -0 -n1 -- basename)" "Element.dmg"
working-directory: "dist/install/macos"
# We exclude mac-universal as the unpacked app takes forever to upload and zip and dmg already contain it
# We exclude mac-universal as the unpacked app takes forever to upload and zip and dmg already contains it
- name: Upload Artifacts
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: ${{ inputs.deploy-mode && 'packages.element.io' || 'macos' }}
name: macos
path: |
dist
!dist/mac-universal/**

View File

@@ -15,6 +15,11 @@ on:
required: false
default: false
description: "Whether the build is a Nightly and to calculate the version strings new builds should use"
deploy:
type: boolean
required: false
default: false
description: "Whether the build should be deployed to production"
secrets:
# Required if `nightly` is set
CF_R2_ACCESS_KEY_ID:
@@ -29,10 +34,13 @@ on:
packages-dir:
description: "The directory non-deb packages for this run should live in within packages.element.io"
value: ${{ inputs.nightly && 'nightly' || 'desktop' }}
# This is just a simple pass-through of the input to simplify reuse of complex inline conditions
# These are just simple pass-throughs of the input to simplify reuse of complex inline conditions
config:
description: "The relative path to the config file for this run"
value: ${{ inputs.config }}
deploy:
description: "The relative path to the config file for this run"
value: ${{ inputs.deploy }}
jobs:
prepare:
name: Prepare
@@ -41,10 +49,11 @@ jobs:
outputs:
nightly-version: ${{ steps.versions.outputs.nightly }}
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/setup-node@v3
- uses: actions/setup-node@v4
with:
node-version-file: package.json
cache: "yarn"
- name: Install Deps
@@ -74,6 +83,7 @@ jobs:
# Pick the greatest one
VERSION=$(cat VERSIONS | sort -uf | tail -n1)
echo "Found latest nightly version $VERSION"
# Increment it
echo "nightly=$(scripts/generate-nightly-version.ts --latest $VERSION)" >> $GITHUB_OUTPUT
env:
@@ -124,11 +134,11 @@ jobs:
echo "| Component | Version |" >> $GITHUB_STEP_SUMMARY
echo "| ----------- | ------- |" >> $GITHUB_STEP_SUMMARY
echo "| Bundle Hash | $BUNDLE_HASH |" >> $GITHUB_STEP_SUMMARY
echo "| Element Web | [$WEB_VERSION](https://github.com/vector-im/element-web/commit/$WEB_VERSION) |" >> $GITHUB_STEP_SUMMARY
echo "| Element Web | [$WEB_VERSION](https://github.com/element-hq/element-web/commit/$WEB_VERSION) |" >> $GITHUB_STEP_SUMMARY
echo "| React SDK | [$REACT_VERSION](https://github.com/matrix-org/matrix-react-sdk/commit/$REACT_VERSION) |" >> $GITHUB_STEP_SUMMARY
echo "| JS SDK | [$JS_VERSION](https://github.com/matrix-org/matrix-js-sdk/commit/$JS_VERSION) |" >> $GITHUB_STEP_SUMMARY
- uses: actions/upload-artifact@v3
- uses: actions/upload-artifact@v4
with:
name: webapp
retention-days: 1

View File

@@ -1,6 +1,11 @@
# This workflow relies on actions/cache to store the hak dependency artifacts as they take a long time to build
# Due to this extra care must be taken to only ever run all build_* scripts against the same branch to ensure
# the correct cache scoping, and additional care must be taken to not run untrusted actions on the develop branch.
# window-latest by default uses the pwsh shell which breaks codeSigningCert in the workflow
defaults:
run:
shell: powershell
on:
workflow_call:
secrets:
@@ -14,7 +19,7 @@ on:
arch:
type: string
required: true
description: "The architecture to build for, one of 'x64' | 'x86' | 'arm64'"
description: "The architecture to build for, one of 'x64' | 'ia32' | 'arm64'"
version:
type: string
required: false
@@ -23,10 +28,6 @@ on:
type: string
required: false
description: "Whether to sign & notarise the build, requires 'packages.element.io' environment"
deploy-mode:
type: boolean
required: false
description: "Whether to arrange artifacts in the arrangement needed for deployment, skipping unrelated ones"
jobs:
build:
runs-on: windows-latest
@@ -34,7 +35,7 @@ jobs:
env:
SIGNTOOL_PATH: "C:/Program Files (x86)/Windows Kits/10/bin/10.0.22000.0/x86/signtool.exe"
steps:
- uses: kanga333/variable-mapper@3681b75f5c6c00162721168fb91ab74925eaebcb
- uses: nbucic/variable-mapper@0673f6891a0619ba7c002ecfed0f9f4f39017b6f
id: config
with:
key: "${{ inputs.arch }}"
@@ -42,38 +43,36 @@ jobs:
map: |
{
"x64": {
"target": "x86_64-pc-windows-msvc",
"dir": "x64"
"target": "x86_64-pc-windows-msvc"
},
"arm64": {
"target": "aarch64-pc-windows-msvc",
"build-args": "--arm64",
"arch": "amd64_arm64",
"dir": "arm64"
"arch": "amd64_arm64"
},
"x86": {
"ia32": {
"target": "i686-pc-windows-msvc",
"build-args": "--ia32",
"dir": "ia32"
"arch": "x86"
}
}
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/download-artifact@v3
- uses: actions/download-artifact@v4
with:
name: webapp
- name: Cache .hak
id: cache
uses: actions/cache@v3
uses: actions/cache@v4
with:
key: ${{ runner.os }}-${{ inputs.arch }}-${{ hashFiles('hakHash', 'electronVersion') }}
path: |
./.hak
- name: Set up build tools
uses: ilammy/msvc-dev-cmd@cec98b9d092141f74527d0afa6feb2af698cfe89
uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1.13.0
with:
arch: ${{ steps.config.outputs.arch || inputs.arch }}
@@ -100,8 +99,9 @@ jobs:
rustup default stable
rustup target add ${{ steps.config.outputs.target }}
- uses: actions/setup-node@v3
- uses: actions/setup-node@v4
with:
node-version-file: package.json
cache: "yarn"
# Does not need branch matching as only analyses this layer
@@ -115,13 +115,14 @@ jobs:
yarn build:native --target ${{ steps.config.outputs.target }}
- name: Install and configure eSigner CKA
id: esigner
if: inputs.sign
run: |
Set-StrictMode -Version 'Latest'
# Download
Invoke-WebRequest -OutFile eSigner_CKA.exe "https://packages.element.io/tools/SSL.COM%20eSigner%20CKA_1.0.4-build-20230221_signed.exe"
# Download, extract, and rename
Invoke-WebRequest -OutFile eSigner_CKA.zip "$env:ESIGNER_URL"
Expand-Archive -Path eSigner_CKA.zip -DestinationPath .
Get-ChildItem -Path * -Include "*_build_*.exe" | Rename-Item -NewName eSigner_CKA.exe
# Install
New-Item -ItemType Directory -Force -Path "$env:INSTALL_DIR"
@@ -144,61 +145,37 @@ jobs:
# Extract thumbprint and subject name
$Thumbprint = $CodeSigningCert.Thumbprint
$SubjectName = ($CodeSigningCert.Subject -replace ", ?", "`n" | ConvertFrom-StringData).CN
echo "config-args=--signtool-thumbprint '$Thumbprint' --signtool-subject-name '$SubjectName'" >> $env:GITHUB_OUTPUT
echo "ED_SIGNTOOL_THUMBPRINT=$Thumbprint" >> $env:GITHUB_ENV
echo "ED_SIGNTOOL_SUBJECT_NAME=$SubjectName" >> $env:GITHUB_ENV
env:
ESIGNER_URL: https://github.com/SSLcom/eSignerCKA/releases/download/v1.0.6/SSL.COM-eSigner-CKA_1.0.6.zip
INSTALL_DIR: C:\Users\runneradmin\eSignerCKA
MASTER_KEY_FILE: C:\Users\runneradmin\eSignerCKA\master.key
- name: "[Nightly] Resolve version"
id: nightly
if: inputs.version != ''
shell: bash
run: |
echo "config-args=--nightly '${{ inputs.version }}'" >> $GITHUB_OUTPUT
echo "ED_NIGHTLY=${{ inputs.version }}" >> $GITHUB_ENV
# XXX: For whatever reason if we use `yarn build ...` it freezes, but splitting it into parts it is fine
- run: yarn run build:ts
- run: yarn run build:res
- name: Build App
run: |
yarn ts-node scripts/generate-builder-config.ts ${{ steps.nightly.outputs.config-args }} ${{ steps.esigner.outputs.config-args }}
yarn build --publish never -w --config electron-builder.json ${{ steps.config.outputs.build-args }}
yarn electron-builder --publish never -w ${{ steps.config.outputs.build-args }}
- name: Check app was signed successfully
if: inputs.sign != ''
run: |
. "$env:SIGNTOOL_PATH" verify /pa (get-item ./dist/squirrel-windows*/*.exe)
- name: Prepare artifacts for deployment
if: inputs.deploy-mode
shell: bash
run: |
mv dist _dist
mkdir -p "dist/install/win32/$DIR/msi" "dist/update/win32/$DIR"
mv _dist/squirrel-windows*/*.exe "dist/install/win32/$DIR"
mv _dist/squirrel-windows*/*.nupkg "dist/update/win32/$DIR/"
mv _dist/squirrel-windows*/RELEASES "dist/update/win32/$DIR/"
# mv _dist/*.msi "dist/install/win32/$DIR/msi/"
env:
DIR: ${{ steps.config.outputs.dir }}
# We don't wish to store the installer for every nightly ever, so we only keep the latest
- name: "[Nightly] Strip version from installer file"
if: inputs.deploy-mode && inputs.version != ''
shell: bash
run: |
mv dist/install/win32/$DIR/*.exe "dist/install/win32/$DIR/Element Nightly Setup.exe"
# mv dist/install/win32/$DIR/msi/*.msi "dist/install/win32/$DIR/msi/Element Nightly Setup.msi"
env:
DIR: ${{ steps.config.outputs.dir }}
- name: "[Release] Prepare release latest symlink"
if: inputs.deploy-mode && inputs.version == ''
shell: bash
run: |
ln -s "$(find . -type f -iname "*.exe" | xargs -0 -n1 -- basename)" "Element Setup.exe"
working-directory: "dist/install/win32/${{ steps.config.outputs.dir }}"
- name: Upload Artifacts
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: ${{ inputs.deploy-mode && 'packages.element.io' || format('win-{0}', inputs.arch) }}
path: dist
name: win-${{ inputs.arch }}
path: |
dist
retention-days: 1

View File

@@ -17,10 +17,10 @@ jobs:
contents: read
packages: write
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Log in to the Container registry
uses: docker/login-action@cf8514a65188af1d4f94f8c28a7a4153af1088ce
uses: docker/login-action@5139682d94efc37792e6b54386b5b470a68a4737
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
@@ -28,14 +28,14 @@ jobs:
- name: Extract metadata for Docker
id: meta
uses: docker/metadata-action@0f8c876bafbf5dbce05c36682ec68e9a0274a48a
uses: docker/metadata-action@8e5442c4ef9f78752691e2d8f8d19755c6f78e81 # v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=ref,event=branch
- name: Build and push Docker image
uses: docker/build-push-action@9311bf5263ae5b36f3ec67aff768790c6e2344ad
uses: docker/build-push-action@4a13e500e55cf31b7a5d59a38ab2040ab0f42f56 # v5
with:
context: dockerbuild
push: true

View File

@@ -0,0 +1,10 @@
name: Localazy Download
on:
workflow_dispatch: {}
schedule:
- cron: "0 6 * * 1,3,5" # Every Monday, Wednesday and Friday at 6am UTC
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
View File

@@ -0,0 +1,11 @@
name: Localazy Upload
on:
push:
branches: [develop]
paths:
- "src/i18n/strings/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 }}

13
.github/workflows/release-drafter.yml vendored Normal file
View File

@@ -0,0 +1,13 @@
name: Release Drafter
on:
push:
branches: [staging]
workflow_dispatch: {}
repository_dispatch:
types: [upstream-release-notify]
concurrency: ${{ github.workflow }}
jobs:
draft:
uses: matrix-org/matrix-js-sdk/.github/workflows/release-drafter-workflow.yml@develop
with:
include-changes: element-hq/element-web~$VERSION

11
.github/workflows/release-gitflow.yml vendored Normal file
View File

@@ -0,0 +1,11 @@
# Gitflow merge-back master->develop
name: Merge master -> develop
on:
push:
branches: [master]
concurrency: ${{ github.repository }}-${{ github.workflow }}
jobs:
merge:
uses: matrix-org/matrix-js-sdk/.github/workflows/release-gitflow.yml@develop
secrets:
ELEMENT_BOT_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}

39
.github/workflows/release.yml vendored Normal file
View File

@@ -0,0 +1,39 @@
name: Release Process
on:
workflow_dispatch:
inputs:
mode:
description: What type of release
required: true
default: rc
type: choice
options:
- rc
- final
concurrency: ${{ github.workflow }}
jobs:
release:
uses: matrix-org/matrix-js-sdk/.github/workflows/release-make.yml@develop
secrets:
ELEMENT_BOT_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }}
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
with:
final: ${{ inputs.mode == 'final' }}
include-changes: element-hq/element-web@$VERSION
gpg-fingerprint: ${{ vars.GPG_FINGERPRINT }}
expected-asset-count: 1
check:
name: Post release checks
needs: release
runs-on: ubuntu-latest
steps:
- name: Wait for desktop packaging
uses: t3chguy/wait-on-check-action@18541021811b56544d90e0f073401c2b99e249d6 # fork
with:
ref: master
repo-token: ${{ secrets.GITHUB_TOKEN }}
wait-interval: 10
check-name: Deploy
allowed-conclusions: success

View File

@@ -1,49 +0,0 @@
on:
workflow_call:
inputs:
artifact-name:
type: string
required: true
description: "The name of the artifact containing the deb to include"
secrets:
ELEMENT_BOT_TOKEN:
required: true
CF_R2_ACCESS_KEY_ID:
required: true
CF_R2_TOKEN:
required: true
# Protect reprepro database using concurrency
concurrency: reprepro
jobs:
reprepro:
name: Deploy debian package
environment: packages.element.io
runs-on: ubuntu-latest
env:
R2_INCOMING_BUCKET: ${{ vars.R2_INCOMING_BUCKET }}
R2_URL: ${{ vars.CF_R2_S3_API }}
steps:
- name: Download artifact
uses: actions/download-artifact@v3
with:
name: ${{ inputs.artifact-name }}
path: dist
- name: Upload incoming deb
id: upload
run: |
deb="$(ls *.deb | tail -n1)"
echo "incoming=$deb" >> $GITHUB_OUTPUT
aws s3 cp "$deb" "s3://$R2_INCOMING_BUCKET" --endpoint-url "$R2_URL" --region auto
working-directory: dist
env:
AWS_ACCESS_KEY_ID: ${{ secrets.CF_R2_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.CF_R2_TOKEN }}
- name: Notify packages.element.io of incoming deb
uses: peter-evans/repository-dispatch@26b39ed245ab8f31526069329e112ab2fb224588 # v2
with:
token: ${{ secrets.ELEMENT_BOT_TOKEN }}
repository: vector-im/packages.element.io
event-type: reprepro-incoming
client-payload: '{"incoming": "${{ steps.upload.outputs.incoming }}"}'

View File

@@ -8,10 +8,11 @@ jobs:
name: "Typescript Syntax Check"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/setup-node@v3
- uses: actions/setup-node@v4
with:
node-version-file: package.json
cache: "yarn"
# Does not need branch matching as only analyses this layer
@@ -23,16 +24,19 @@ jobs:
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
with:
hardcoded-words: "Element"
js_lint:
name: "ESLint"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/setup-node@v3
- uses: actions/setup-node@v4
with:
node-version-file: package.json
cache: "yarn"
# Does not need branch matching as only analyses this layer
@@ -41,3 +45,38 @@ jobs:
- name: Run Linter
run: "yarn run lint:js"
workflow_lint:
name: "Workflow Lint"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: package.json
cache: "yarn"
# Does not need branch matching as only analyses this layer
- name: Install Deps
run: "yarn install --frozen-lockfile"
- name: Run Linter
run: "yarn lint:workflows"
analyse_dead_code:
name: "Analyse Dead Code"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: package.json
cache: "yarn"
- name: Install Deps
run: "yarn install --frozen-lockfile"
- name: Run linter
run: "yarn run lint:knip"

21
.github/workflows/sync-labels.yml vendored Normal file
View File

@@ -0,0 +1,21 @@
name: Sync labels
on:
workflow_dispatch: {}
schedule:
- cron: "0 2 * * *" # 2am every day
push:
branches:
- develop
paths:
- .github/labels.yml
jobs:
sync-labels:
uses: element-hq/element-meta/.github/workflows/sync-labels.yml@develop
with:
LABELS: |
element-hq/element-web
.github/labels.yml
DELETE: true
WET: true
secrets:
ELEMENT_BOT_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}

14
.github/workflows/triage-incoming.yml vendored Normal file
View File

@@ -0,0 +1,14 @@
name: Move new issues into Issue triage board
on:
issues:
types: [opened]
jobs:
automate-project-columns-next:
runs-on: ubuntu-latest
steps:
- uses: actions/add-to-project@main
with:
project-url: https://github.com/orgs/element-hq/projects/120
github-token: ${{ secrets.ELEMENT_BOT_TOKEN }}

10
.github/workflows/triage-labelled.yml vendored Normal file
View File

@@ -0,0 +1,10 @@
name: Move labelled issues to correct projects
on:
issues:
types: [labeled]
jobs:
call-triage-labelled:
uses: element-hq/element-web/.github/workflows/triage-labelled.yml@develop
secrets: inherit

View File

@@ -1,8 +0,0 @@
name: Upgrade Dependencies
on:
workflow_dispatch: {}
jobs:
upgrade:
uses: matrix-org/matrix-js-sdk/.github/workflows/upgrade_dependencies.yml@develop
secrets:
ELEMENT_BOT_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}

View File

@@ -8,6 +8,8 @@
/CHANGELOG.md
/package-lock.json
/yarn.lock
/playwright/html-report
/playwright/test-results
**/.idea
.vscode

View File

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
![Build](https://github.com/vector-im/element-desktop/actions/workflows/build.yaml/badge.svg)
![Static Analysis](https://github.com/vector-im/element-desktop/actions/workflows/static_analysis.yaml/badge.svg)
[![Weblate](https://translate.element.io/widgets/element-desktop/-/element-desktop/svg-badge.svg)](https://translate.element.io/engage/element-desktop/)
[![Localazy](https://img.shields.io/endpoint?url=https%3A%2F%2Fconnect.localazy.com%2Fstatus%2Felement-web%2Fdata%3Fcontent%3Dall%26title%3Dlocalazy%26logo%3Dtrue)](https://localazy.com/p/element-web)
[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=element-desktop&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=element-desktop)
[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=element-desktop&metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=element-desktop)
[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=element-desktop&metric=bugs)](https://sonarcloud.io/summary/new_code?id=element-desktop)
@@ -149,8 +149,6 @@ To add a new translation, head to the [translating doc](https://github.com/vecto
For a developer guide, see the [translating dev doc](https://github.com/vector-im/element-web/blob/develop/docs/translating-dev.md).
[<img src="https://translate.element.io/widgets/element-desktop/-/multi-auto.svg" alt="translationsstatus" width="340">](https://translate.element.io/engage/element-desktop/?utm_source=widget)
# Report bugs & give feedback
If you run into any bugs or have feedback you'd like to share, please let us know on GitHub.

View File

@@ -1,5 +1,5 @@
# Docker image to facilitate building Element Desktop with native bits using a glibc version with broader compatibility
FROM buildpack-deps:bionic-curl
FROM buildpack-deps:buster-curl
ENV DEBIAN_FRONTEND noninteractive
@@ -11,9 +11,9 @@ RUN apt-get -qq update && apt-get -qq dist-upgrade && \
# python for node-gyp
# rpm is required for FPM to build rpm package
# tclsh is required for building SQLite as part of SQLCipher
# libsecret-1-dev and libgnome-keyring-dev are required even for prebuild keytar
# libsecret-1-dev is required even for prebuild keytar
apt-get -qq install --no-install-recommends qtbase5-dev bsdtar build-essential autoconf libssl-dev gcc-multilib g++-multilib lzip rpm python libcurl4 git git-lfs ssh unzip tcl \
libsecret-1-dev libgnome-keyring-dev \
libsecret-1-dev \
libopenjp2-tools \
# Used by github actions \
jq grep file \
@@ -34,13 +34,11 @@ ENV LC_ALL C.UTF-8
ENV DEBUG_COLORS true
ENV FORCE_COLOR true
ENV NODE_VERSION 16.18.1
ENV NODE_VERSION 18.19.0
# this package is used for snapcraft and we should not clear apt list - to avoid apt-get update during snap build
RUN curl --proto "=https" -L https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.gz | tar xz -C /usr/local --strip-components=1 && \
unlink /usr/local/CHANGELOG.md && unlink /usr/local/LICENSE && unlink /usr/local/README.md && \
# https://github.com/npm/npm/issues/4531
npm config set unsafe-perm true
unlink /usr/local/CHANGELOG.md && unlink /usr/local/LICENSE && unlink /usr/local/README.md
ENV RUSTUP_HOME=/usr/local/rustup \
CARGO_HOME=/usr/local/cargo \

17
docs/SUMMARY.md Normal file
View File

@@ -0,0 +1,17 @@
# Summary
- [Introduction](../README.md)
# Build
- [Native Node modules](native-node-modules.md)
- [Windows requirements](windows-requirements.md)
# Distribution
- [Updates](updates.md)
- [Packaging](packaging.md)
# Setup
- [Config](config.md)

15
docs/config.md Normal file
View File

@@ -0,0 +1,15 @@
# Configuration
All Element Web options documented [here](https://github.com/vector-im/element-web/blob/develop/docs/config.md) can be used as well as the following:
---
The app contains a configuration file specified at build time using [these instructions](https://github.com/vector-im/element-desktop/#config).
This config can be overwritten by the end using by creating a `config.json` file at the paths described [here](https://github.com/vector-im/element-desktop/#user-specified-configjson).
After changing the config, the app will need to be exited fully (including via the task tray) and re-started.
---
1. `update_base_url`: Specifies the URL of the update server, see [document](https://github.com/vector-im/element-desktop/blob/develop/docs/updates.md).
2. `web_base_url`: Specifies the Element Web URL when performing actions such as popout widget. Defaults to `https://app.element.io/`.

55
docs/packaging.md Normal file
View File

@@ -0,0 +1,55 @@
## Packaging nightlies
Element Desktop nightly builds are build automatically by the [Github Actions workflow](https://github.com/vector-im/element-desktop/blob/develop/.github/workflows/build_and_deploy.yaml).
The schedule is currently set for once a day at 9am UTC. It will deploy to packages.element.io upon completion.
## Triggering a manual nightly build
Simply go to https://github.com/vector-im/element-desktop/actions/workflows/build_and_deploy.yaml
1. Click `Run workflow`
1. Feel free to make changes to the checkboxes depending on the circumstances
1. Click the green `Run workflow`
## Packaging releases
**Don't do this for RCs! We don't build Element Desktop for RCs.**
For releasing Element Desktop, we assume the following prerequisites:
- a tag of `element-desktop` repo with the Element Desktop version to be released set in `package.json`.
- an Element Web tarball published to GitHub with a matching version number.
**Both of these are done automatically when you run the release automation.**
The packaging is kicked off automagically for you when a Github Release for Element Desktop is published.
### More detail on the github actions
We moved to Github Actions for the following reasons:
1. Removing single point of failure
2. Improving reliability
3. Unblocking the packaging on a single individual
4. Improving parallelism
The Windows builds are signed by SSL.com using their Cloud Key Adapter for eSigner.
This allows us to use Microsoft's signtool to interface with eSigner and send them a hash of the exe along with
credentials in exchange for a signed certificate which we attach onto all the relevant files.
The Apple builds are signed using standard code signing means and then notarised to appease GateKeeper.
The Linux builds are distributed via a signed reprepro repository.
The packages.element.io site is a public Cloudflare R2 bucket which is deployed to solely from Github Actions.
The main bucket in R2 is `packages-element-io` which is a direct mapping of packages.element.io,
we have a workflow which generates the index.html files there to imitate a public index which Cloudflare does not currently support.
The reprepro database lives in `packages-element-io-db`.
There is an additional pair of buckets of same name but appended with `-test` which can be used for testing,
these land on https://packages-element-io-test.element.io/.
### Debian/Ubuntu Distributions
We used to add a new distribution to match each Debian and Ubuntu release. As of April 2020, we have created a `default` distribution that everyone can use (since the packages have never differed by distribution anyway).
The distribution configuration lives in https://github.com/vector-im/packages.element.io/blob/master/debian/conf/distributions as a canonical source.

View File

@@ -1,6 +1,5 @@
# Windows
## Requirements to build native modules
We rely on Github Actions `windows-latest` plus a few extra utilities as per [the workflow](https://github.com/vector-im/element-desktop/blob/develop/.github/workflows/build_windows.yaml).

215
electron-builder.js Normal file
View File

@@ -0,0 +1,215 @@
const os = require("os");
const fs = require("fs");
const path = require("path");
const Arch = require("electron-builder").Arch;
const { flipFuses, FuseVersion, FuseV1Options } = require("@electron/fuses");
// Typescript conversion blocked on https://github.com/electron-userland/electron-builder/issues/7775
/**
* This script has different outputs depending on your os platform.
*
* On Windows:
* Prefixes the nightly version with `0.0.1-nightly.` as it breaks if it is not semver
* Passes $ED_SIGNTOOL_THUMBPRINT and $ED_SIGNTOOL_SUBJECT_NAME to
* build.win.signingHashAlgorithms and build.win.certificateSubjectName respectively if specified.
*
* On macOS:
* Passes $ED_NOTARYTOOL_TEAM_ID to build.mac.notarize.notarize if specified
*
* On Linux:
* Replaces spaces in the product name with dashes as spaces in paths can cause issues
* Removes libsqlcipher0 recommended dependency if env SQLCIPHER_BUNDLED is asserted.
* Passes $ED_DEBIAN_CHANGELOG to build.deb.fpm if specified
*/
const NIGHTLY_APP_ID = "im.riot.nightly";
const NIGHTLY_DEB_NAME = "element-nightly";
const pkg = JSON.parse(fs.readFileSync("package.json", "utf8"));
/**
* @type {import('electron-builder').Configuration}
* @see https://www.electron.build/configuration/configuration
*/
const config = {
appId: "im.riot.app",
asarUnpack: "**/*.node",
afterPack: async (context) => {
if (context.electronPlatformName !== "darwin" || context.arch === Arch.universal) {
// Burn in electron fuses for proactive security hardening.
// On macOS, we only do this for the universal package, as the constituent arm64 and amd64 packages are embedded within.
const ext = {
darwin: ".app",
win32: ".exe",
linux: "",
}[context.electronPlatformName];
let executableName = context.packager.appInfo.productFilename;
if (context.electronPlatformName === "linux") {
// Linux uses the package name as the executable name
executableName = context.packager.appInfo.name;
}
const electronBinaryPath = path.join(context.appOutDir, `${executableName}${ext}`);
console.log(`Flipping fuses for: ${electronBinaryPath}`);
await flipFuses(electronBinaryPath, {
version: FuseVersion.V1,
resetAdHocDarwinSignature: context.electronPlatformName === "darwin" && context.arch === Arch.universal,
[FuseV1Options.EnableCookieEncryption]: true,
[FuseV1Options.OnlyLoadAppFromAsar]: true,
[FuseV1Options.RunAsNode]: false,
[FuseV1Options.EnableNodeOptionsEnvironmentVariable]: false,
[FuseV1Options.EnableNodeCliInspectArguments]: false,
// Mac app crashes on arm for us when `LoadBrowserProcessSpecificV8Snapshot` is enabled
[FuseV1Options.LoadBrowserProcessSpecificV8Snapshot]: false,
// https://github.com/electron/fuses/issues/7
[FuseV1Options.EnableEmbeddedAsarIntegrityValidation]: false,
});
}
},
files: [
"package.json",
{
from: ".hak/hakModules",
to: "node_modules",
},
"lib/**",
],
extraResources: [
{
from: "res/img",
to: "img",
},
"webapp.asar",
],
extraMetadata: {
name: pkg.name,
productName: pkg.productName,
description: pkg.description,
},
linux: {
target: ["tar.gz", "deb"],
category: "Network;InstantMessaging;Chat",
maintainer: "support@element.io",
icon: "build/icons",
desktop: {
MimeType: "x-scheme-handler/element",
},
},
deb: {
packageCategory: "net",
depends: [
"libgtk-3-0",
"libnotify4",
"libnss3",
"libxss1",
"libxtst6",
"xdg-utils",
"libatspi2.0-0",
"libuuid1",
"libsecret-1-0",
"libasound2",
"libgbm1",
],
recommends: ["libsqlcipher0", "element-io-archive-keyring"],
fpm: [
"--deb-field",
"Replaces: riot-desktop (<< 1.7.0), riot-web (<< 1.7.0)",
"--deb-field",
"Breaks: riot-desktop (<< 1.7.0), riot-web (<< 1.7.0)",
],
},
mac: {
category: "public.app-category.social-networking",
darkModeSupport: true,
hardenedRuntime: true,
gatekeeperAssess: true,
entitlements: "./build/entitlements.mac.plist",
icon: "build/icons/icon.icns",
},
win: {
target: ["squirrel"],
signingHashAlgorithms: ["sha256"],
icon: "build/icons/icon.ico",
},
directories: {
output: "dist",
},
protocols: [
{
name: "element",
schemes: ["element"],
},
],
};
/**
* Allow specifying windows signing cert via env vars
* @param {string} process.env.ED_SIGNTOOL_SUBJECT_NAME
* @param {string} process.env.ED_SIGNTOOL_THUMBPRINT
*/
if (process.env.ED_SIGNTOOL_SUBJECT_NAME && process.env.ED_SIGNTOOL_THUMBPRINT) {
config.win.certificateSubjectName = process.env.ED_SIGNTOOL_SUBJECT_NAME;
config.win.certificateSha1 = process.env.ED_SIGNTOOL_THUMBPRINT;
}
/**
* Allow specifying macOS notary team id via env var
* @param {string} process.env.ED_NOTARYTOOL_TEAM_ID
*/
if (process.env.ED_NOTARYTOOL_TEAM_ID) {
config.mac.notarize = {
teamId: process.env.ED_NOTARYTOOL_TEAM_ID,
};
}
/**
* Allow specifying nightly version via env var
* @param {string} process.env.ED_NIGHTLY
*/
if (process.env.ED_NIGHTLY) {
config.deb.fpm = []; // Clear the fpm as the breaks deb fields don't apply to nightly
config.appId = NIGHTLY_APP_ID;
config.extraMetadata.productName += " Nightly";
config.extraMetadata.name += "-nightly";
config.extraMetadata.description += " (nightly unstable build)";
config.deb.fpm.push("--name", NIGHTLY_DEB_NAME);
let version = process.env.ED_NIGHTLY;
if (os.platform() === "win32") {
// The windows packager relies on parsing this as semver, so we have to make it look like one.
// This will give our update packages really stupid names, but we probably can't change that either
// because squirrel windows parses them for the version too. We don't really care: nobody sees them.
// We just give the installer a static name, so you'll just see this in the 'about' dialog.
// Turns out if you use 0.0.0 here it makes Squirrel windows crash, so we use 0.0.1.
version = "0.0.1-nightly." + version;
}
config.extraMetadata.version = version;
}
if (os.platform() === "linux") {
// Electron crashes on debian if there's a space in the path.
// https://github.com/vector-im/element-web/issues/13171
config.extraMetadata.productName = config.extraMetadata.productName.replace(/ /g, "-");
/**
* Allow specifying deb changelog via env var
* @param {string} process.env.ED_DEB_CHANGELOG
*/
if (process.env.ED_DEBIAN_CHANGELOG) {
config.deb.fpm.push(`--deb-changelog=${process.env.ED_DEBIAN_CHANGELOG}`);
}
if (process.env.SQLCIPHER_BUNDLED) {
// Remove sqlcipher dependency when using bundled
config.deb.recommends = config.deb.recommends?.filter((d) => d !== "libsqlcipher0");
}
}
exports.default = config;

View File

@@ -50,10 +50,11 @@
"privacy_policy_url": "https://element.io/cookie-policy",
"features": {
"feature_spotlight": true,
"feature_video_rooms": true
"feature_video_rooms": true,
"feature_element_call_video_rooms": true
},
"element_call": {
"url": "https://element-call-livekit.netlify.app"
"url": "https://call.element.dev"
},
"map_style_url": "https://api.maptiler.com/maps/streets/style.json?key=fU3vlMsMn4Jb6dnEIFsx"
}

View File

@@ -28,16 +28,12 @@ export default async function (hakEnv: HakEnv, moduleInfo: DependencyInfo): Prom
console.log("Running yarn install");
await new Promise<void>((resolve, reject) => {
const proc = childProcess.spawn(
"yarn" + (hakEnv.isWin() ? ".cmd" : ""),
["install"],
{
cwd: moduleInfo.moduleBuildDir,
env,
shell: true,
stdio: "inherit",
},
);
const proc = childProcess.spawn("yarn" + (hakEnv.isWin() ? ".cmd" : ""), ["install"], {
cwd: moduleInfo.moduleBuildDir,
env,
shell: true,
stdio: "inherit",
});
proc.on("exit", (code) => {
code ? reject(code) : resolve();
});
@@ -47,16 +43,12 @@ export default async function (hakEnv: HakEnv, moduleInfo: DependencyInfo): Prom
console.log("Running yarn build");
await new Promise<void>((resolve, reject) => {
const proc = childProcess.spawn(
"yarn" + (hakEnv.isWin() ? ".cmd" : ""),
["run", buildTarget],
{
cwd: moduleInfo.moduleBuildDir,
env,
shell: true,
stdio: "inherit",
},
);
const proc = childProcess.spawn("yarn" + (hakEnv.isWin() ? ".cmd" : ""), ["run", buildTarget], {
cwd: moduleInfo.moduleBuildDir,
env,
shell: true,
stdio: "inherit",
});
proc.on("exit", (code) => {
code ? reject(code) : resolve();
});

16
knip.ts Normal file
View File

@@ -0,0 +1,16 @@
import { KnipConfig } from "knip";
export default {
entry: ["src/electron-main.ts", "src/preload.ts", "electron-builder.js", ".eslintrc-*.js", "scripts/**", "hak/**"],
project: ["**/*.{js,ts}"],
ignoreDependencies: [
// Brought in via hak scripts
"keytar",
"matrix-seshat",
// Needed by `electron-builder`
"electron-builder-squirrel-windows",
// Required for `action-validator`
"@action-validator/*",
],
ignoreBinaries: ["jq", "scripts/in-docker.sh"],
} satisfies KnipConfig;

37
localazy.json Normal file
View 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-desktop.json",
"lang": "inherited"
},
{
"group": "existing",
"pattern": "src/i18n/strings/*.json",
"file": "element-desktop.json",
"excludes": ["src/i18n/strings/en_EN.json"],
"lang": "${autodetectLang}"
}
]
},
"download": {
"files": [
{
"conditions": "equals: ${file}, element-desktop.json",
"output": "src/i18n/strings/${langLsrUnderscore}.json"
}
],
"includeSourceLang": "${includeSourceLang|false}",
"langAliases": {
"en": "en-EN"
}
}
}

View File

@@ -2,7 +2,7 @@
"name": "element-desktop",
"productName": "Element",
"main": "lib/electron-main.js",
"version": "1.11.41",
"version": "1.11.62",
"description": "A feature-rich client for Matrix.org",
"author": "Element",
"homepage": "https://element.io",
@@ -13,32 +13,35 @@
"license": "Apache-2.0",
"files": [],
"engines": {
"node": ">=16.0.0"
"node": ">=18.0.0"
},
"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 --log-level=silent --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",
"mkdirs": "mkdirp packages deploys",
"fetch": "yarn run mkdirs && ts-node scripts/fetch-package.ts",
"asar-webapp": "asar p webapp webapp.asar",
"start": "yarn run build:ts && yarn run build:res && electron .",
"lint": "yarn lint:types && yarn lint:js",
"lint:js": "yarn lint:js:src && yarn lint:js:test && yarn lint:js:scripts && yarn lint:js:hak",
"lint": "yarn lint:types && yarn lint:js && yarn lint:workflows",
"lint:js": "yarn lint:js:src && yarn lint:js:test && yarn lint:js:scripts && yarn lint:js:hak && prettier --check .",
"lint:js:src": "eslint --max-warnings 0 src",
"lint:js:test": "eslint --max-warnings 0 --config .eslintrc-test.js test",
"lint:js:test": "eslint --max-warnings 0 --config .eslintrc-test.js playwright",
"lint:js:scripts": "eslint --max-warnings 0 --config .eslintrc-scripts.js scripts",
"lint:js:hak": "eslint --max-warnings 0 --config .eslintrc-hak.js hak",
"lint:js-fix": "yarn lint:js-fix:src &&yarn lint:js-fix:test && yarn lint:js-fix:scripts && yarn lint:js-fix:hak",
"lint:js-fix": "yarn lint:js-fix:src &&yarn lint:js-fix:test && yarn lint:js-fix:scripts && yarn lint:js-fix:hak && prettier --log-level=warn --write .",
"lint:js-fix:src": "eslint --fix --max-warnings 0 src",
"lint:js-fix:test": "eslint --fix --max-warnings 0 --config .eslintrc-test.js test",
"lint:js-fix:test": "eslint --fix --max-warnings 0 --config .eslintrc-test.js playwright",
"lint:js-fix:scripts": "eslint --fix --max-warnings 0 --config .eslintrc-scripts.js scripts",
"lint:js-fix:hak": "eslint --fix --max-warnings 0 --config .eslintrc-hak.js hak",
"lint:types": "yarn lint:types:src && yarn lint:types:test && yarn lint:types:scripts && yarn lint:types:hak",
"lint:types:src": "tsc --noEmit",
"lint:types:test": "tsc --noEmit -p test/tsconfig.json",
"lint:types:test": "tsc --noEmit -p playwright/tsconfig.json",
"lint:types:scripts": "tsc --noEmit -p scripts/tsconfig.json",
"lint:types:hak": "tsc --noEmit -p hak/tsconfig.json",
"lint:workflows": "find .github/workflows -type f \\( -iname '*.yaml' -o -iname '*.yml' \\) | xargs -I {} sh -c 'echo \"Linting {}\"; action-validator \"{}\"'",
"lint:knip": "knip",
"build:native": "yarn run hak",
"build:native:universal": "yarn run hak --target x86_64-apple-darwin fetchandbuild && yarn run hak --target aarch64-apple-darwin fetchandbuild && yarn run hak --target x86_64-apple-darwin --target aarch64-apple-darwin copyandlink",
"build:32": "yarn run build:ts && yarn run build:res && electron-builder --ia32",
@@ -47,13 +50,16 @@
"build": "yarn run build:ts && yarn run build:res && electron-builder",
"build:ts": "tsc",
"build:res": "ts-node scripts/copy-res.ts",
"docker:setup": "docker build -t element-desktop-dockerbuild dockerbuild",
"docker:setup": "docker build --platform linux/amd64 -t element-desktop-dockerbuild dockerbuild",
"docker:build:native": "scripts/in-docker.sh yarn run hak",
"docker:build": "scripts/in-docker.sh yarn run build",
"docker:install": "scripts/in-docker.sh yarn install",
"clean": "rimraf webapp.asar dist packages deploys lib",
"hak": "ts-node scripts/hak/index.ts",
"test": "jest"
"test": "playwright test",
"test:open": "yarn test --ui",
"test:screenshots:build": "docker build playwright -t element-desktop-playwright --platform linux/amd64",
"test:screenshots:run": "docker run --rm --network host -v $(pwd):/work/element-desktop -v /var/run/docker.sock:/var/run/docker.sock --platform linux/amd64 -it element-desktop-playwright"
},
"dependencies": {
"@sentry/electron": "^4.3.0",
@@ -68,145 +74,55 @@
"uuid": "^9.0.0"
},
"devDependencies": {
"@action-validator/cli": "^0.6.0",
"@action-validator/core": "^0.6.0",
"@babel/core": "^7.18.10",
"@babel/preset-env": "^7.18.10",
"@babel/preset-typescript": "^7.18.6",
"@electron/asar": "^3.2.3",
"@electron/notarize": "^2.0.0",
"@electron/fuses": "^1.7.0",
"@playwright/test": "1.42.1",
"@types/auto-launch": "^5.0.1",
"@types/counterpart": "^0.18.1",
"@types/detect-libc": "^1.0.0",
"@types/jest": "^29.0.0",
"@types/minimist": "^1.2.1",
"@types/mkdirp": "^1.0.2",
"@types/node": "16.18.41",
"@types/node": "18.19.21",
"@types/pacote": "^11.1.1",
"@types/tar": "^6.1.3",
"@types/uuid": "^9.0.2",
"@typescript-eslint/eslint-plugin": "^5.42.0",
"@typescript-eslint/parser": "^5.42.0",
"allchange": "^1.0.6",
"app-builder-lib": "24.6.3",
"babel-jest": "^29.0.0",
"@typescript-eslint/eslint-plugin": "^7.0.0",
"@typescript-eslint/parser": "^7.0.0",
"app-builder-lib": "24.13.3",
"chokidar": "^3.5.2",
"detect-libc": "^1.0.3",
"electron": "^26.0.0",
"electron-builder": "24.6.3",
"electron-builder-squirrel-windows": "24.6.3",
"detect-libc": "^2.0.0",
"electron": "^29.0.0",
"electron-builder": "24.13.3",
"electron-builder-squirrel-windows": "24.13.3",
"electron-devtools-installer": "^3.2.0",
"eslint": "^8.26.0",
"eslint-config-google": "^0.14.0",
"eslint-config-prettier": "^9.0.0",
"eslint-plugin-import": "^2.25.4",
"eslint-plugin-matrix-org": "^1.0.0",
"eslint-plugin-unicorn": "^48.0.0",
"expect-playwright": "^0.8.0",
"eslint-plugin-unicorn": "^51.0.0",
"find-npm-prefix": "^1.0.2",
"fs-extra": "^11.0.0",
"glob": "^10.0.0",
"jest": "^29.0.0",
"matrix-web-i18n": "^2.0.0",
"knip": "^5.0.0",
"matrix-web-i18n": "^3.2.1",
"mkdirp": "^3.0.0",
"node-pre-gyp": "^0.17.0",
"pacote": "^15.0.0",
"playwright": "^1.25.0",
"prettier": "^2.8.1",
"pacote": "^17.0.0",
"prettier": "^3.0.0",
"rimraf": "^5.0.0",
"tar": "^6.1.2",
"ts-jest": "^29.0.0",
"ts-node": "^10.9.1",
"typescript": "5.1.6"
"typescript": "5.3.3"
},
"hakDependencies": {
"matrix-seshat": "^3.0.1",
"keytar": "^7.9.0"
},
"resolutions": {
"@types/node": "16.18.41"
},
"build": {
"appId": "im.riot.app",
"asarUnpack": "**/*.node",
"files": [
"package.json",
{
"from": ".hak/hakModules",
"to": "node_modules"
},
"lib/**"
],
"extraResources": [
{
"from": "res/img",
"to": "img"
},
"webapp.asar"
],
"linux": {
"target": [
"tar.gz",
"deb"
],
"category": "Network;InstantMessaging;Chat",
"maintainer": "support@element.io",
"icon": "build/icons"
},
"deb": {
"packageCategory": "net",
"depends": [
"libgtk-3-0",
"libnotify4",
"libnss3",
"libxss1",
"libxtst6",
"xdg-utils",
"libatspi2.0-0",
"libuuid1",
"libsecret-1-0",
"libasound2",
"libgbm1"
],
"recommends": [
"libsqlcipher0",
"element-io-archive-keyring"
]
},
"mac": {
"category": "public.app-category.social-networking",
"darkModeSupport": true,
"hardenedRuntime": true,
"gatekeeperAssess": true,
"entitlements": "./build/entitlements.mac.plist",
"icon": "build/icons/icon.icns"
},
"win": {
"target": [
"squirrel"
],
"signingHashAlgorithms": [
"sha256"
],
"icon": "build/icons/icon.ico"
},
"directories": {
"output": "dist"
},
"protocols": [
{
"name": "element",
"schemes": [
"element"
]
}
]
},
"jest": {
"testEnvironment": "node",
"testMatch": [
"<rootDir>/test/**/*-test.[jt]s?(x)"
],
"setupFilesAfterEnv": [
"expect-playwright"
]
"@types/node": "18.19.21"
}
}

33
playwright.config.ts Normal file
View File

@@ -0,0 +1,33 @@
/*
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 { defineConfig } from "@playwright/test";
export default defineConfig({
use: {
viewport: { width: 1280, height: 720 },
video: "retain-on-failure",
trace: "on-first-retry",
},
testDir: "playwright/e2e",
outputDir: "playwright/test-results",
workers: 1,
retries: process.env.CI ? 2 : 0,
reporter: [["html", { outputFolder: "playwright/html-report" }]],
snapshotDir: "playwright/snapshots",
snapshotPathTemplate: "{snapshotDir}/{testFilePath}/{arg}-{platform}{ext}",
timeout: 10 * 1000,
});

5
playwright/.gitignore vendored Normal file
View File

@@ -0,0 +1,5 @@
/test-results/
/html-report/
# Only commit snapshots from Linux
/snapshots/**/*.png
!/snapshots/**/*-linux.png

10
playwright/Dockerfile Normal file
View File

@@ -0,0 +1,10 @@
FROM mcr.microsoft.com/playwright:v1.42.1-jammy
WORKDIR /work/element-desktop
RUN apt-get update && apt-get -y install xvfb
USER 1000:1000
COPY docker-entrypoint.sh /opt/docker-entrypoint.sh
ENTRYPOINT ["bash", "/opt/docker-entrypoint.sh"]

View File

@@ -0,0 +1,11 @@
#!/bin/bash
set -e
echo "Starting Xvfb"
Xvfb :99 -ac &
sleep 2
export DISPLAY=:99
npx playwright test --update-snapshots --reporter line $1

View File

@@ -0,0 +1,27 @@
/*
Copyright 2022 - 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 { test, expect } from "../../element-desktop-test";
test.describe("App launch", () => {
test.slow();
test("should launch and render the welcome view successfully", async ({ page }) => {
await page.locator("#matrixchat").waitFor();
await page.locator(".mx_Welcome").waitFor();
await expect(page).toHaveURL("vector://vector/webapp/#/welcome");
await expect(page).toHaveScreenshot();
});
});

View File

@@ -0,0 +1,60 @@
/*
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 { _electron as electron, test as base, expect as baseExpect, type ElectronApplication } from "@playwright/test";
import fs from "node:fs/promises";
import path from "node:path";
import os from "node:os";
export const test = base.extend<{ app: ElectronApplication; tmpDir: string }>({
// eslint-disable-next-line no-empty-pattern
tmpDir: async ({}, use) => {
const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "element-desktop-tests-"));
console.log("Using temp profile directory: ", tmpDir);
await use(tmpDir);
await fs.rm(tmpDir, { recursive: true });
},
app: async ({ tmpDir }, use) => {
const args = ["--profile-dir", tmpDir];
const executablePath = process.env["ELEMENT_DESKTOP_EXECUTABLE"];
if (!executablePath) {
// Unpackaged mode testing
args.unshift(path.join(__dirname, "..", "lib", "electron-main.js"));
}
const app = await electron.launch({
env: process.env,
executablePath,
args,
});
app.process().stdout.pipe(process.stdout);
app.process().stderr.pipe(process.stderr);
await app.firstWindow();
await use(app);
},
page: async ({ app }, use) => {
const window = await app.firstWindow();
await use(window);
await app.close().catch((e) => {
console.error(e);
});
},
});
export const expect = baseExpect;

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

11
playwright/tsconfig.json Normal file
View File

@@ -0,0 +1,11 @@
{
"compilerOptions": {
"resolveJsonModule": true,
"moduleResolution": "node",
"esModuleInterop": true,
"target": "es2017",
"module": "es2022",
"lib": ["ESNext", "es2021", "dom"]
},
"include": ["**/*.ts"]
}

View File

@@ -1,9 +0,0 @@
#!/bin/bash
#
# Script to perform a release of element-desktop.
set -e
cd "$(dirname "$0")"
./node_modules/matrix-js-sdk/release.sh "$@"

View File

@@ -12,7 +12,7 @@ import riotDesktopPackageJson from "../package.json";
import { setPackageVersion } from "./set-version";
const PUB_KEY_URL = "https://packages.riot.im/element-release-key.asc";
const PACKAGE_URL_PREFIX = "https://github.com/vector-im/element-web/releases/download/";
const PACKAGE_URL_PREFIX = "https://github.com/element-hq/element-web/releases/download/";
const DEVELOP_TGZ_URL = "https://develop.element.io/develop.tar.gz";
const ASAR_PATH = "webapp.asar";

View File

@@ -1,129 +0,0 @@
#!/usr/bin/env -S npx ts-node
/**
* Script to generate electron-builder.json config files for builds which don't match package.json, e.g. nightlies
* This script has different outputs depending on your os platform.
*
* On Windows:
* Prefixes the nightly version with `0.0.1-nightly.` as it breaks if it is not semver
*
* On macOS:
* Passes --notarytool-team-id to build.mac.notarize.notarize if specified
*
* On Linux:
* Replaces spaces in the product name with dashes as spaces in paths can cause issues
* Passes --deb-custom-control to build.deb.fpm if specified
* Removes libsqlcipher0 recommended dependency if env SQLCIPHER_BUNDLED is asserted.
*/
import parseArgs from "minimist";
import fsProm from "fs/promises";
import * as os from "os";
import { Configuration } from "app-builder-lib";
const ELECTRON_BUILDER_CFG_FILE = "electron-builder.json";
const NIGHTLY_APP_ID = "im.riot.nightly";
const NIGHTLY_APP_NAME = "element-desktop-nightly";
const NIGHTLY_DEB_NAME = "element-nightly";
const argv = parseArgs<{
"nightly"?: string;
"signtool-thumbprint"?: string;
"signtool-subject-name"?: string;
"notarytool-team-id"?: string;
"deb-changelog"?: string;
}>(process.argv.slice(2), {
string: ["nightly", "deb-changelog", "signtool-thumbprint", "signtool-subject-name", "notarytool-team-id"],
});
type DeepWriteable<T> = { -readonly [P in keyof T]: DeepWriteable<T[P]> };
interface PackageBuild extends DeepWriteable<Omit<Configuration, "extraMetadata">> {
extraMetadata?: {
productName?: string;
name?: string;
version?: string;
description?: string;
};
}
interface Package {
build: PackageBuild;
productName: string;
description: string;
}
async function main(): Promise<number | void> {
// Electron builder doesn't overlay with the config in package.json, so load it here
const pkg: Package = JSON.parse(await fsProm.readFile("package.json", "utf8"));
const cfg: PackageBuild = {
...pkg.build,
extraMetadata: {
productName: pkg.productName,
description: pkg.description,
},
};
if (!cfg.deb!.fpm) cfg.deb!.fpm = [];
if (argv.nightly) {
cfg.appId = NIGHTLY_APP_ID;
cfg.extraMetadata!.productName += " Nightly";
cfg.extraMetadata!.name = NIGHTLY_APP_NAME;
cfg.extraMetadata!.description += " (nightly unstable build)";
cfg.deb!.fpm!.push("--name", NIGHTLY_DEB_NAME);
let version = argv.nightly;
if (os.platform() === "win32") {
// The windows packager relies on parsing this as semver, so we have to make it look like one.
// This will give our update packages really stupid names, but we probably can't change that either
// because squirrel windows parses them for the version too. We don't really care: nobody sees them.
// We just give the installer a static name, so you'll just see this in the 'about' dialog.
// Turns out if you use 0.0.0 here it makes Squirrel windows crash, so we use 0.0.1.
version = "0.0.1-nightly." + version;
}
cfg.extraMetadata!.version = version;
} else {
cfg.deb!.fpm!.push("--deb-field", "Replaces: riot-desktop (<< 1.7.0), riot-web (<< 1.7.0)");
cfg.deb!.fpm!.push("--deb-field", "Breaks: riot-desktop (<< 1.7.0), riot-web (<< 1.7.0)");
}
if (argv["signtool-thumbprint"] && argv["signtool-subject-name"]) {
cfg.win!.certificateSubjectName = argv["signtool-subject-name"];
cfg.win!.certificateSha1 = argv["signtool-thumbprint"];
}
if (argv["notarytool-team-id"]) {
cfg.mac!.notarize = {
teamId: argv["notarytool-team-id"],
};
}
if (os.platform() === "linux") {
// Electron crashes on debian if there's a space in the path.
// https://github.com/vector-im/element-web/issues/13171
cfg.extraMetadata!.productName = cfg.extraMetadata!.productName!.replace(/ /g, "-");
if (argv["deb-changelog"]) {
cfg.deb!.fpm!.push(`--deb-changelog=${argv["deb-changelog"]}`);
}
if (process.env.SQLCIPHER_BUNDLED) {
// Remove sqlcipher dependency when using bundled
cfg.deb!.recommends = cfg.deb!.recommends?.filter((d) => d !== "libsqlcipher0");
}
}
await fsProm.writeFile(ELECTRON_BUILDER_CFG_FILE, JSON.stringify(cfg, null, 4));
}
main()
.then((ret) => {
process.exit(ret!);
})
.catch((e) => {
console.error(e);
process.exit(1);
});

View File

@@ -41,7 +41,10 @@ export default class HakEnv {
public runtimeVersion?: string;
public dotHakDir: string;
public constructor(public readonly projectRoot: string, targetId: TargetId | null) {
public constructor(
public readonly projectRoot: string,
targetId: TargetId | null,
) {
const target = targetId ? TARGETS[targetId] : getHost();
if (!target) {

View File

@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import { GLIBC, MUSL, family as processLibC } from "detect-libc";
import { GLIBC, MUSL, familySync as processLibC } from "detect-libc";
// We borrow Rust's target naming scheme as a way of expressing all target
// details in a single string.
@@ -61,7 +61,7 @@ export type WindowsTarget = Target & {
export type LinuxTarget = Target & {
platform: "linux";
libC: typeof processLibC;
libC: typeof GLIBC | typeof MUSL;
};
export type UniversalTarget = Target & {
@@ -212,7 +212,7 @@ export function getHost(): Target | undefined {
(target) =>
target.platform === process.platform &&
target.arch === process.arch &&
(process.platform !== "linux" || (target as LinuxTarget).libC === processLibC),
(process.platform !== "linux" || (target as LinuxTarget).libC === processLibC()),
);
}

View File

@@ -11,6 +11,7 @@ fi
# Taken from https://www.electron.build/multi-platform-build#docker
# Pass through any vars prefixed with INDOCKER_, removing the prefix
docker run --rm -ti \
--platform linux/amd64 \
--env-file <(env | grep -E '^INDOCKER_' | sed -e 's/^INDOCKER_//') \
--env ELECTRON_CACHE="/root/.cache/electron" \
--env ELECTRON_BUILDER_CACHE="/root/.cache/electron-builder" \

View File

@@ -41,6 +41,7 @@ import { getProfileFromDeeplink, protocolInit } from "./protocol";
import { _t, AppLocalization } from "./language-helper";
import { setDisplayMediaCallback } from "./displayMediaCallback";
import { setupMacosTitleBar } from "./macos-titlebar";
import { loadJsonFile } from "./utils";
const argv = minimist(process.argv, {
alias: { help: "h" },
@@ -143,8 +144,7 @@ async function loadConfig(): Promise<void> {
const asarPath = await getAsarPath();
try {
// eslint-disable-next-line @typescript-eslint/no-var-requires
global.vectorConfig = require(asarPath + "config.json");
global.vectorConfig = loadJsonFile(asarPath, "config.json");
} catch (e) {
// it would be nice to check the error code here and bail if the config
// is unparsable, but we get MODULE_NOT_FOUND in the case of a missing
@@ -155,8 +155,7 @@ async function loadConfig(): Promise<void> {
try {
// Load local config and use it to override values from the one baked with the build
// eslint-disable-next-line @typescript-eslint/no-var-requires
const localConfig = require(path.join(app.getPath("userData"), "config.json"));
const localConfig = loadJsonFile(app.getPath("userData"), "config.json");
// If the local config has a homeserver defined, don't use the homeserver from the build
// config. This is to avoid a problem where Riot thinks there are multiple homeservers
@@ -165,10 +164,13 @@ async function loadConfig(): Promise<void> {
// Rip out all the homeserver options from the vector config
global.vectorConfig = Object.keys(global.vectorConfig)
.filter((k) => !homeserverProps.includes(<any>k))
.reduce((obj, key) => {
obj[key] = global.vectorConfig[key];
return obj;
}, {} as Omit<Partial<(typeof global)["vectorConfig"]>, keyof typeof homeserverProps>);
.reduce(
(obj, key) => {
obj[key] = global.vectorConfig[key];
return obj;
},
{} as Omit<Partial<(typeof global)["vectorConfig"]>, keyof typeof homeserverProps>,
);
}
global.vectorConfig = Object.assign(global.vectorConfig, localConfig);
@@ -260,7 +262,8 @@ global.appQuitting = false;
const exitShortcuts: Array<(input: Input, platform: string) => boolean> = [
(input, platform): boolean => platform !== "darwin" && input.alt && input.key.toUpperCase() === "F4",
(input, platform): boolean => platform !== "darwin" && input.control && input.key.toUpperCase() === "Q",
(input, platform): boolean => platform === "darwin" && input.meta && !input.control && input.key.toUpperCase() === "Q",
(input, platform): boolean =>
platform === "darwin" && input.meta && !input.control && input.key.toUpperCase() === "Q",
];
const warnBeforeExit = (event: Event, input: Input): void => {
@@ -273,12 +276,12 @@ const warnBeforeExit = (event: Event, input: Input): void => {
dialog.showMessageBoxSync(global.mainWindow, {
type: "question",
buttons: [
_t("Cancel"),
_t("Close %(brand)s", {
_t("action|cancel"),
_t("action|close_brand", {
brand: global.vectorConfig.brand || "Element",
}),
],
message: _t("Are you sure you want to quit?"),
message: _t("confirm_quit"),
defaultId: 1,
cancelId: 0,
}) === 0;

View File

@@ -1,46 +0,0 @@
{
"File": "ملف",
"Close": "أغلِق",
"Actual Size": "المقاس الفعلي",
"View": "منظور",
"Select All": "حدّد الكل",
"Delete": "احذف",
"Copy": "انسخ",
"Edit": "تحرير",
"Cancel": "ألغِ",
"Bring All to Front": "ضَع الكل في المقدّمة",
"Speech": "نطق",
"Add to dictionary": "أضِف إلى القاموس",
"The image failed to save": "فشل حفظ الصورة",
"Failed to save image": "فشل حفظ الصورة",
"Save image as...": "احفظ الصورة كَ‍...",
"Copy link address": "انسخ عنوان الرابط",
"Copy email address": "انسخ عنوان البريد الإلكتروني",
"Copy image": "انسخ الصورة",
"Zoom": "تقريب",
"Stop Speaking": "أوقِف النطق",
"Start Speaking": "ابدأ النطق",
"Unhide": "اعرض",
"Hide Others": "أخفِ البقية",
"Hide": "أخفِ",
"Services": "الخدمات",
"About": "عن",
"Help": "مساعدة",
"Minimize": "صغّر",
"Window": "نافذة",
"Toggle Developer Tools": "فعّل/عطّل أدوات المطوّرين",
"Toggle Full Screen": "فعّل/عطّل ملء الشاشة",
"Preferences": "التفضيلات",
"Zoom In": "قرّب",
"Zoom Out": "بعّد",
"Paste and Match Style": "ألصِق وطابِق النمط",
"Paste": "ألصِق",
"Cut": "قصّ",
"Redo": "أعِد",
"Undo": "تراجَع",
"Quit": "غادِر",
"Show/Hide": "اعرض/أخفِ",
"Are you sure you want to quit?": "أمتأكّد من الإغلاق؟",
"Copy image address": "انسخ عنوان (رابط) الصورة",
"Close %(brand)s": "اغلاق %(brand)s"
}

View File

@@ -1 +0,0 @@
{}

View File

@@ -1,44 +0,0 @@
{
"Add to dictionary": "Дадаць у слоўнік",
"The image failed to save": "Не атрымалася захаваць малюнак",
"Failed to save image": "Не атрымалася захаваць малюнак",
"Save image as...": "Захаваць малюнак як...",
"Copy link address": "Скапіраваць спасылку",
"Copy email address": "Скапіраваць адрас пошты",
"Copy image": "Скапіраваць малюнак",
"File": "Файл",
"Bring All to Front": "Вынесці ўсё наперад",
"Zoom": "Маштаб",
"Stop Speaking": "Перастаць гаварыць",
"Start Speaking": "Гаварыць",
"Speech": "Голас",
"Unhide": "Паказаць",
"Hide Others": "Схаваць іншыя",
"Hide": "Схаваць",
"Services": "Сервісы",
"About": "Аб праграме",
"Help": "Даведка",
"Close": "Зачыніць",
"Minimize": "Згарнуць",
"Window": "Акно",
"Toggle Developer Tools": "Пераключэнне інструментаў распрацоўніка",
"Toggle Full Screen": "Пераключэнне на ўвесь экран",
"Preferences": "Параметры",
"Zoom Out": "Паменшыць",
"Zoom In": "Павялічыць",
"Actual Size": "Фактычны Памер",
"View": "Прагляд",
"Select All": "Выбраць усё",
"Delete": "Выдаліць",
"Paste and Match Style": "Уставіць і супаставіць стыль",
"Paste": "Уставіць",
"Copy": "Капіяваць",
"Cut": "Выразаць",
"Redo": "Паўтарыць",
"Undo": "Адмяніць",
"Edit": "Змяніць",
"Quit": "Выйсці",
"Show/Hide": "Паказаць / схаваць",
"Are you sure you want to quit?": "Вы ўпэўненыя, што хочаце выйсці?",
"Cancel": "Адмена"
}

View File

@@ -1,45 +0,0 @@
{
"Add to dictionary": "Добави към речника",
"The image failed to save": "Изображението не успя да се запази",
"Failed to save image": "Неуспешно запазване на изображението",
"Save image as...": "Запази изображението като...",
"Copy link address": "Копирай линка",
"Copy image address": "Копирай адреса на изображението",
"Copy email address": "Копирай имейл адрес",
"Copy image": "Копирай изображение",
"File": "Файл",
"Bring All to Front": "Покажи всички най-отгоре",
"Zoom": "Мащабирай",
"Stop Speaking": "Спри да говориш",
"Start Speaking": "Започни да говориш",
"Speech": "Говор",
"Unhide": "Покажи",
"Hide Others": "Скрий Останалите",
"Hide": "Скрий",
"Services": "Услуги",
"About": "Относно",
"Help": "Помощ",
"Close": "Затвори",
"Minimize": "Минимизирай",
"Window": "Прозорец",
"Toggle Developer Tools": "Превключи инструментите за разработчици",
"Toggle Full Screen": "Превключи на Цял екран",
"Preferences": "Предпочитания",
"Zoom Out": "Намали",
"Zoom In": "Увеличи",
"Actual Size": "Действителен Размер",
"View": "Преглед",
"Select All": "Избери Всичко",
"Delete": "Изтрий",
"Paste and Match Style": "Постави и Използвай текущия стил",
"Paste": "Постави",
"Copy": "Копирай",
"Cut": "Изрежи",
"Redo": "Върни",
"Undo": "Отмени",
"Edit": "Редактирай",
"Quit": "Напусни",
"Show/Hide": "Покажи/Скрий",
"Are you sure you want to quit?": "Сигурен ли си че искаш да напуснеш?",
"Cancel": "Отказ"
}

View File

@@ -1,45 +0,0 @@
{
"Are you sure you want to quit?": "তুমি কি আসলেই বের হতে চাও?",
"Cancel": "বাতিল",
"Save image as...": "ছবি সংরক্ষণের ধরন...",
"Failed to save image": "ছবি সংরক্ষণ ব্যর্থ",
"The image failed to save": "ছবি সংরক্ষণ ব্যর্থ",
"Add to dictionary": "অভিধানে যোগ করি",
"Copy link address": "সংযোগের ঠিকানা অনুলিপি করো",
"Copy image address": "ছবির ঠিকানা অনুলিপি করো",
"Copy email address": "ইমেইল ঠিকানা অনুলিপি করো",
"Copy image": "ছবি অনুলিপি করো",
"File": "নথি",
"Bring All to Front": "সবকিছু সামনে আনো",
"Zoom": "বড় করা",
"Stop Speaking": "কথা বন্ধ করো",
"Start Speaking": "কথা শুরু করো",
"Speech": "বাচন",
"Unhide": "দেখাও",
"Hide Others": "অন্যগুলো লুকাও",
"Hide": "লুকাও",
"Services": "সেবা",
"About": "আমাদের সম্পর্কে",
"Help": "সাহায্য",
"Close": "বন্ধ",
"Minimize": "সংকোচন",
"Window": "জানালা",
"Toggle Developer Tools": "ডেভেলপার সরঞ্জামাদি",
"Toggle Full Screen": "পূর্ণ পর্দা করো/বের হও",
"Preferences": "পছন্দসমূহ",
"Zoom Out": "ছোট করো",
"Zoom In": "বড়ো করো",
"Actual Size": "আসল আকার",
"View": "দেখো",
"Select All": "সব নির্বাচন",
"Delete": "অপসারণ",
"Paste and Match Style": "লেপন ও একই ধরনে",
"Paste": "লেপন",
"Copy": "অনুলিপি",
"Cut": "কাটো",
"Redo": "পুন",
"Undo": "ফিরত",
"Edit": "সম্পাদনা",
"Quit": "প্রস্থান",
"Show/Hide": "দেখাও/লুকাও"
}

View File

@@ -1,44 +0,0 @@
{
"Add to dictionary": "Afegeix al diccionari",
"The image failed to save": "S'ha fallat en desar la imatge",
"Failed to save image": "S'ha fallat en desar la imatge",
"Save image as...": "Anomena i desa la imatge...",
"Copy link address": "Copia l'adreça de l'enllaç",
"Copy email address": "Copia l'adreça de correu electrònic",
"Copy image": "Copia la imatge",
"File": "Fitxer",
"Bring All to Front": "Porta-ho tot al davant",
"Zoom": "Escala",
"Stop Speaking": "Para la veu",
"Start Speaking": "Comença la veu",
"Speech": "Veu",
"Unhide": "Deixa d'amagar",
"Hide Others": "Amaga les altres",
"Hide": "Amaga",
"Services": "Serveis",
"About": "Quant a",
"Help": "Ajuda",
"Close": "Tanca",
"Minimize": "Minimitza",
"Window": "Finestra",
"Toggle Developer Tools": "Commuta les eines per a desenvolupadors",
"Toggle Full Screen": "Commuta la pantalla completa",
"Preferences": "Preferències",
"Zoom Out": "Allunya",
"Zoom In": "Apropia",
"Actual Size": "Mida real",
"View": "Visualitza",
"Select All": "Selecciona-ho tot",
"Delete": "Suprimeix",
"Paste and Match Style": "Enganxa i fes coincidir l'estil",
"Paste": "Enganxa",
"Copy": "Copia",
"Cut": "Retalla",
"Redo": "Refés",
"Undo": "Desfés",
"Edit": "Edita",
"Quit": "Surt",
"Show/Hide": "Mostra/Amaga",
"Are you sure you want to quit?": "Esteu segur que voleu sortir?",
"Cancel": "Cancel·la"
}

View File

@@ -1,47 +1,63 @@
{
"Add to dictionary": "Přidat do slovníku",
"Failed to save image": "Chyba při ukládání obrázku",
"The image failed to save": "Obrázek se nepodařilo uložit",
"Save image as...": "Uložit obrázek jako...",
"Copy link address": "Kopírovat adresu odkazu",
"Copy image address": "Kopírovat adresu obrázku",
"Copy email address": "Kopírovat e-mailovou adresu",
"Copy image": "Kopírovat obrázek",
"File": "Soubor",
"Bring All to Front": "Přenést vše do popředí",
"Zoom": "Lupa",
"Stop Speaking": "Zastavit nahrávání hlasu",
"Start Speaking": "Spustit nahrávání hlasu",
"Speech": "Řeč",
"Unhide": "Zrušit skrytí",
"Hide Others": "Skrýt ostatní",
"Hide": "Skrýt",
"Services": "Služby",
"About": "O aplikaci",
"Help": "Nápověda",
"Close": "Zavřít",
"Minimize": "Minimalizovat",
"Window": "Okno",
"Toggle Developer Tools": "Přepnout zobrazení nástrojů pro vývojáře",
"Toggle Full Screen": "Přepnout zobrazení celé obrazovky",
"Preferences": "Předvolby",
"Zoom Out": "Oddálit",
"Zoom In": "Přiblížit",
"Actual Size": "Aktuální velikost",
"View": "Zobrazit",
"Select All": "Vybrat vše",
"Delete": "Smazat",
"Paste and Match Style": "Vložit a přizpůsobit styl",
"Paste": "Vložit",
"Copy": "Kopírovat",
"Cut": "Vyjmout",
"Redo": "Znovu",
"Undo": "Zpět",
"Edit": "Úpravy",
"Quit": "Ukončit",
"Show/Hide": "Zobrazit/Skrýt",
"Are you sure you want to quit?": "Opravdu chcete ukončit aplikaci?",
"Close %(brand)s": "Zavřít %(brand)s",
"Cancel": "Zrušit",
"%(brand)s Help": "%(brand)s nápověda"
"action": {
"cancel": "Storno",
"close": "Zavřít",
"close_brand": "Zavřít %(brand)s",
"copy": "Zkopírovat",
"cut": "Vyjmout",
"delete": "Smazat",
"edit": "Upravit",
"minimise": "Minimalizovat",
"paste": "Vložit",
"paste_match_style": "Vložit a přizpůsobit styl",
"quit": "Ukončit",
"redo": "Znovu",
"select_all": "Vybrat vše",
"show_hide": "Zobrazit/Skrýt",
"undo": "Zpět",
"zoom_in": "Přiblížit",
"zoom_out": "Oddálit"
},
"common": {
"about": "O",
"brand_help": "%(brand)s nápověda",
"help": "Nápověda",
"preferences": "Předvolby"
},
"confirm_quit": "Opravdu chcete ukončit aplikaci?",
"edit_menu": {
"speech": "Řeč",
"speech_start_speaking": "Spustit nahrávání hlasu",
"speech_stop_speaking": "Zastavit nahrávání hlasu"
},
"file_menu": {
"label": "Soubor"
},
"menu": {
"hide": "Skrýt",
"hide_others": "Skrýt ostatní",
"services": "Služby",
"unhide": "Zrušit skrytí"
},
"right_click_menu": {
"add_to_dictionary": "Přidat do slovníku",
"copy_email": "Kopírovat e-mailovou adresu",
"copy_image": "Kopírovat obrázek",
"copy_image_url": "Kopírovat adresu obrázku",
"copy_link_url": "Kopírovat adresu odkazu",
"save_image_as": "Uložit obrázek jako...",
"save_image_as_error_description": "Obrázek se nepodařilo uložit",
"save_image_as_error_title": "Chyba při ukládání obrázku"
},
"view_menu": {
"actual_size": "Aktuální velikost",
"toggle_developer_tools": "Přepnout zobrazení nástrojů pro vývojáře",
"toggle_full_screen": "Přepnout zobrazení celé obrazovky",
"view": "Zobrazit"
},
"window_menu": {
"bring_all_to_front": "Přenést vše do popředí",
"label": "Okno",
"zoom": "Lupa"
}
}

View File

@@ -1,47 +0,0 @@
{
"Speech": "Sprache",
"Paste and Match Style": "Einfügen und Formatierung beibehalten",
"Stop Speaking": "Aufnahme beenden",
"Start Speaking": "Aufnahme starten",
"Services": "Dienste",
"Are you sure you want to quit?": "Wirklich beenden?",
"Add to dictionary": "Wörterbuch hinzufügen",
"The image failed to save": "Das Bild konnte nicht gespeichert werden",
"Failed to save image": "Bild kann nicht gespeichert werden",
"Save image as...": "Bild speichern unter...",
"Copy link address": "Link-Adresse kopieren",
"Copy email address": "Email-Adresse kopieren",
"Copy image": "Bild kopieren",
"File": "Datei",
"Bring All to Front": "Alles in den Vordergrund",
"Zoom": "Zoom",
"Unhide": "Wieder anzeigen",
"Hide Others": "Andere verstecken",
"Hide": "Verstecken",
"About": "Über",
"Help": "Hilfe",
"Close": "Schließen",
"Minimize": "Minimieren",
"Window": "Fenster",
"Toggle Developer Tools": "Developer-Tools an/aus",
"Toggle Full Screen": "Vollbildschirm an/aus",
"Preferences": "Einstellungen",
"Zoom Out": "Verkleinern",
"Zoom In": "Vergrößern",
"Actual Size": "Tatsächliche Größe",
"View": "Ansicht",
"Select All": "Alles auswählen",
"Delete": "Löschen",
"Paste": "Einfügen",
"Copy": "Kopieren",
"Cut": "Ausschneiden",
"Redo": "Wiederherstellen",
"Undo": "Rückgängig",
"Edit": "Bearbeiten",
"Quit": "Beenden",
"Show/Hide": "Anzeigen/Ausblenden",
"Cancel": "Abbrechen",
"Copy image address": "Bild-Adresse kopieren",
"Close %(brand)s": "%(brand)s schließen",
"%(brand)s Help": "%(brand)s Hilfe"
}

View File

@@ -0,0 +1,63 @@
{
"action": {
"cancel": "Abbrechen",
"close": "Schließen",
"close_brand": "%(brand)s schließen",
"copy": "Kopieren",
"cut": "Ausschneiden",
"delete": "Löschen",
"edit": "Bearbeiten",
"minimise": "Minimieren",
"paste": "Einfügen",
"paste_match_style": "Einfügen und Formatierung beibehalten",
"quit": "Beenden",
"redo": "Wiederherstellen",
"select_all": "Alles auswählen",
"show_hide": "Anzeigen/Ausblenden",
"undo": "Rückgängig",
"zoom_in": "Vergrößern",
"zoom_out": "Verkleinern"
},
"common": {
"about": "Über",
"brand_help": "%(brand)s Hilfe",
"help": "Hilfe",
"preferences": "Einstellungen"
},
"confirm_quit": "Wirklich beenden?",
"edit_menu": {
"speech": "Sprache",
"speech_start_speaking": "Aufnahme starten",
"speech_stop_speaking": "Aufnahme beenden"
},
"file_menu": {
"label": "Datei"
},
"menu": {
"hide": "Verstecken",
"hide_others": "Andere verstecken",
"services": "Dienste",
"unhide": "Wieder anzeigen"
},
"right_click_menu": {
"add_to_dictionary": "Wörterbuch hinzufügen",
"copy_email": "Email-Adresse kopieren",
"copy_image": "Bild kopieren",
"copy_image_url": "Bild-Adresse kopieren",
"copy_link_url": "Link-Adresse kopieren",
"save_image_as": "Bild speichern unter...",
"save_image_as_error_description": "Das Bild konnte nicht gespeichert werden",
"save_image_as_error_title": "Bild kann nicht gespeichert werden"
},
"view_menu": {
"actual_size": "Tatsächliche Größe",
"toggle_developer_tools": "Developer-Tools an/aus",
"toggle_full_screen": "Vollbildschirm an/aus",
"view": "Ansicht"
},
"window_menu": {
"bring_all_to_front": "Alles in den Vordergrund",
"label": "Fenster",
"zoom": "Zoomen"
}
}

View File

@@ -1,47 +1,63 @@
{
"Are you sure you want to quit?": "Είστε βέβαιος ότι θέλετε να εγκαταλείψετε;",
"Zoom": "Ζουμ",
"Unhide": "Εμφάνιση",
"Window": "Παράθυρο",
"Toggle Developer Tools": "Άνοιγμα Εργαλείων Προγραμματιστή",
"Toggle Full Screen": "Εναλλαγή σε Πλήρη Οθόνη",
"Copy email address": "Αντιγραφή διεύθυνσης email",
"File": "Αρχείο",
"Bring All to Front": "Μεταφορά Όλων στο Προσκήνιο",
"Stop Speaking": "Τερματίστε να μιλάτε",
"Start Speaking": "Ξεκινήστε να μιλάτε",
"Speech": "Ομιλία",
"Hide Others": "Απόκρυψη Άλλων",
"Hide": "Απόκρυψη",
"Services": "Υπηρεσίες",
"About": "Σχετικά με",
"Help": "Βοήθεια",
"Close": "Κλείσιμο",
"Minimize": "Ελαχιστοποίηση",
"Preferences": "Προτιμήσεις",
"Zoom Out": μίκρυνση",
"Zoom In": "Μεγέθυνση",
"Actual Size": "Πραγματικό Μέγεθος",
"View": "Προβολή",
"Select All": "Επιλογή Όλων",
"Delete": "Διαγραφή",
"Paste and Match Style": "Επικόλληση και Ταίριασμα Στυλ",
"Paste": "Επικόλληση",
"Copy": "Αντιγραφή",
"Cut": "Αποκοπή",
"Redo": "Επανάληψη",
"Undo": "Αναίρεση",
"Edit": "Επεξεργασία",
"Quit": "Κλείσιμο",
"Show/Hide": "Eμφάνιση/Απόκρυψη",
"Cancel": "Ακύρωση",
"Add to dictionary": "Προσθήκη στο λεξικό",
"The image failed to save": "Η αποθήκευση της εικόνας απέτυχε",
"Failed to save image": "Αποτυχία αποθήκευσης εικόνας",
"Save image as...": "Αποθήκευση εικόνας ως...",
"Copy link address": "Αντιγραφή διεύθυνσης συνδέσμου",
"Copy image address": "Αντιγραφή διεύθυνσης εικόνας",
"Copy image": "Αντιγραφή εικόνας",
"Close %(brand)s": "Κλείσιμο %(brand)s",
"%(brand)s Help": "%(brand)s Υποστήριξη"
"action": {
"cancel": "Ακύρωση",
"close": "Κλείσιμο",
"close_brand": "Κλείσιμο %(brand)s",
"copy": "Αντιγραφή",
"cut": "Αποκοπή",
"delete": "Διαγραφή",
"edit": "Επεξεργασία",
"minimise": "Ελαχιστοποίηση",
"paste": "Επικόλληση",
"paste_match_style": "Επικόλληση και Ταίριασμα Στυλ",
"quit": "Κλείσιμο",
"redo": "Επανάληψη",
"select_all": "Επιλογή Όλων",
"show_hide": "Eμφάνιση/Απόκρυψη",
"undo": "Αναίρεση",
"zoom_in": "Μεγέθυνση",
"zoom_out": "Σμίκρυνση"
},
"common": {
"about": χετικά με",
"brand_help": "%(brand)s Υποστήριξη",
"help": "Βοήθεια",
"preferences": "Προτιμήσεις"
},
"confirm_quit": "Είστε βέβαιος ότι θέλετε να εγκαταλείψετε;",
"edit_menu": {
"speech": "Ομιλία",
"speech_start_speaking": "Ξεκινήστε να μιλάτε",
"speech_stop_speaking": "Τερματίστε να μιλάτε"
},
"file_menu": {
"label": "Αρχείο"
},
"menu": {
"hide": "Απόκρυψη",
"hide_others": "Απόκρυψη Άλλων",
"services": "Υπηρεσίες",
"unhide": "Εμφάνιση"
},
"right_click_menu": {
"add_to_dictionary": "Προσθήκη στο λεξικό",
"copy_email": "Αντιγραφή διεύθυνσης email",
"copy_image": "Αντιγραφή εικόνας",
"copy_image_url": "Αντιγραφή διεύθυνσης εικόνας",
"copy_link_url": "Αντιγραφή διεύθυνσης συνδέσμου",
"save_image_as": "Αποθήκευση εικόνας ως...",
"save_image_as_error_description": "Η αποθήκευση της εικόνας απέτυχε",
"save_image_as_error_title": "Αποτυχία αποθήκευσης εικόνας"
},
"view_menu": {
"actual_size": "Πραγματικό Μέγεθος",
"toggle_developer_tools": "Άνοιγμα Εργαλείων Προγραμματιστή",
"toggle_full_screen": "Εναλλαγή σε Πλήρη Οθόνη",
"view": "Προβολή"
},
"window_menu": {
"bring_all_to_front": "Μεταφορά Όλων στο Προσκήνιο",
"label": "Παράθυρο",
"zoom": "Ζουμ"
}
}

View File

@@ -1,47 +1,63 @@
{
"Cancel": "Cancel",
"Close %(brand)s": "Close %(brand)s",
"Are you sure you want to quit?": "Are you sure you want to quit?",
"Show/Hide": "Show/Hide",
"Quit": "Quit",
"Edit": "Edit",
"Undo": "Undo",
"Redo": "Redo",
"Cut": "Cut",
"Copy": "Copy",
"Paste": "Paste",
"Paste and Match Style": "Paste and Match Style",
"Delete": "Delete",
"Select All": "Select All",
"View": "View",
"Actual Size": "Actual Size",
"Zoom In": "Zoom In",
"Zoom Out": "Zoom Out",
"Preferences": "Preferences",
"Toggle Full Screen": "Toggle Full Screen",
"Toggle Developer Tools": "Toggle Developer Tools",
"Window": "Window",
"Minimize": "Minimize",
"Close": "Close",
"Help": "Help",
"%(brand)s Help": "%(brand)s Help",
"About": "About",
"Services": "Services",
"Hide": "Hide",
"Hide Others": "Hide Others",
"Unhide": "Unhide",
"Speech": "Speech",
"Start Speaking": "Start Speaking",
"Stop Speaking": "Stop Speaking",
"Zoom": "Zoom",
"Bring All to Front": "Bring All to Front",
"File": "File",
"Copy image": "Copy image",
"Copy email address": "Copy email address",
"Copy image address": "Copy image address",
"Copy link address": "Copy link address",
"Save image as...": "Save image as...",
"Failed to save image": "Failed to save image",
"The image failed to save": "The image failed to save",
"Add to dictionary": "Add to dictionary"
"action": {
"cancel": "Cancel",
"close": "Close",
"close_brand": "Close %(brand)s",
"copy": "Copy",
"cut": "Cut",
"delete": "Delete",
"edit": "Edit",
"minimise": "Minimize",
"paste": "Paste",
"paste_match_style": "Paste and Match Style",
"quit": "Quit",
"redo": "Redo",
"select_all": "Select All",
"show_hide": "Show/Hide",
"undo": "Undo",
"zoom_in": "Zoom In",
"zoom_out": "Zoom Out"
},
"common": {
"about": "About",
"brand_help": "%(brand)s Help",
"help": "Help",
"preferences": "Preferences"
},
"confirm_quit": "Are you sure you want to quit?",
"edit_menu": {
"speech": "Speech",
"speech_start_speaking": "Start Speaking",
"speech_stop_speaking": "Stop Speaking"
},
"file_menu": {
"label": "File"
},
"menu": {
"hide": "Hide",
"hide_others": "Hide Others",
"services": "Services",
"unhide": "Unhide"
},
"right_click_menu": {
"add_to_dictionary": "Add to dictionary",
"copy_email": "Copy email address",
"copy_image": "Copy image",
"copy_image_url": "Copy image address",
"copy_link_url": "Copy link address",
"save_image_as": "Save image as...",
"save_image_as_error_description": "The image failed to save",
"save_image_as_error_title": "Failed to save image"
},
"view_menu": {
"actual_size": "Actual Size",
"toggle_developer_tools": "Toggle Developer Tools",
"toggle_full_screen": "Toggle Full Screen",
"view": "View"
},
"window_menu": {
"bring_all_to_front": "Bring All to Front",
"label": "Window",
"zoom": "Zoom"
}
}

View File

@@ -1,44 +0,0 @@
{
"Close": "Close",
"Add to dictionary": "Add to dictionary",
"The image failed to save": "The image failed to save",
"Failed to save image": "Failed to save image",
"Save image as...": "Save image as...",
"Copy link address": "Copy link address",
"Copy email address": "Copy email address",
"Copy image": "Copy image",
"File": "File",
"Bring All to Front": "Bring All to Front",
"Zoom": "Zoom",
"Stop Speaking": "Stop Speaking",
"Start Speaking": "Start Speaking",
"Speech": "Speech",
"Unhide": "Unhide",
"Hide Others": "Hide Others",
"Hide": "Hide",
"Services": "Services",
"About": "About",
"Help": "Help",
"Minimize": "Minimize",
"Window": "Window",
"Toggle Developer Tools": "Toggle Developer Tools",
"Toggle Full Screen": "Toggle Full Screen",
"Preferences": "Preferences",
"Zoom Out": "Zoom Out",
"Zoom In": "Zoom In",
"Actual Size": "Actual Size",
"View": "View",
"Select All": "Select All",
"Delete": "Delete",
"Paste and Match Style": "Paste and Match Style",
"Paste": "Paste",
"Copy": "Copy",
"Cut": "Cut",
"Redo": "Redo",
"Undo": "Undo",
"Edit": "Edit",
"Quit": "Quit",
"Show/Hide": "Show/Hide",
"Are you sure you want to quit?": "Are you sure you want to quit?",
"Cancel": "Cancel"
}

View File

@@ -1,33 +1,50 @@
{
"The image failed to save": "La bildo malsukcesis elŝutiĝi",
"Failed to save image": "Malsukcesis elŝuti bildon",
"Stop Speaking": "Ĉesi Paroli",
"Start Speaking": "Ekparoli",
"Unhide": "Malkaŝi",
"Hide Others": "Kaŝi Aliajn",
"Hide": "Kaŝi",
"About": "Informilo",
"Help": "Helpo",
"Toggle Developer Tools": "Baskuligi Programistajn Ilojn",
"Preferences": "Preferoj",
"View": "Vidi",
"Delete": "Forigi",
"Redo": "Refari",
"Undo": "Malfari",
"Edit": "Redakti",
"Show/Hide": "Montri/Kaŝi",
"Cancel": "Nuligi",
"Copy link address": "Kopiu ligilon de la bildo",
"Copy image address": "Kopiu adreson de la bildo",
"Copy email address": "Kopiu retadreson",
"Copy image": "Kopiu bildon",
"File": "Dosiero",
"Minimize": "Minimumigi",
"Window": "Fenestro",
"Select All": "Elekti Ĉiujn",
"Paste": "Enmeti",
"Copy": "Kopiu",
"Cut": "Tranĉi",
"Are you sure you want to quit?": "Ĉu vi certas, ke vi volas ĉesi?",
"Close %(brand)s": "Fermu %(brand)s"
"action": {
"cancel": "Nuligi",
"close": "Fermi",
"close_brand": "Fermu %(brand)s",
"copy": "Kopii",
"cut": "Tranĉi",
"delete": "Forigi",
"edit": "Redakti",
"minimise": "Minimumigi",
"paste": "Enmeti",
"redo": "Refari",
"select_all": "Elekti Ĉiujn",
"show_hide": "Montri/Kaŝi",
"undo": "Malfari"
},
"common": {
"about": "Prio",
"help": "Helpo",
"preferences": "Agordoj"
},
"confirm_quit": "Ĉu vi certas, ke vi volas ĉesi?",
"edit_menu": {
"speech_start_speaking": "Ekparoli",
"speech_stop_speaking": "Ĉesi Paroli"
},
"file_menu": {
"label": "Dosiero"
},
"menu": {
"hide": "Kaŝi",
"hide_others": "Kaŝi Aliajn",
"unhide": "Malkaŝi"
},
"right_click_menu": {
"copy_email": "Kopiu retadreson",
"copy_image": "Kopiu bildon",
"copy_image_url": "Kopiu adreson de la bildo",
"copy_link_url": "Kopiu ligilon de la bildo",
"save_image_as_error_description": "La bildo malsukcesis elŝutiĝi",
"save_image_as_error_title": "Malsukcesis elŝuti bildon"
},
"view_menu": {
"toggle_developer_tools": "Baskuligi Programistajn Ilojn",
"view": "Vidi"
},
"window_menu": {
"label": "Fenestro"
}
}

View File

@@ -1,47 +1,62 @@
{
"Add to dictionary": "Añadir al diccionario",
"The image failed to save": "La imagen no se ha podido guardar",
"Failed to save image": "No se ha podido guardar la imagen",
"Save image as...": "Guardar imagen como...",
"Copy link address": "Copiar dirección de enlace",
"Copy email address": "Copiar dirección de correo",
"Copy image": "Copiar imagen",
"File": "Archivo",
"Bring All to Front": "Traer todas al primer plano",
"Zoom": "Zoom",
"Start Speaking": "Empezar a hablar",
"Stop Speaking": "Parar de hablar",
"Speech": "Dictado",
"Unhide": "Mostrar",
"Hide Others": "Ocultar otros",
"Hide": "Ocultar",
"Services": "Servicios",
"About": "Acerca de",
"Help": "Ayuda",
"Close": "Cerrar",
"Minimize": "Minimizar",
"Window": "Ventana",
"Toggle Developer Tools": "Abrir/cerrar herramientas de desarrollo",
"Toggle Full Screen": "Entrar/salir de pantalla completa",
"Preferences": "Preferencias",
"Zoom Out": "Alejar",
"Zoom In": "Acercar",
"Actual Size": "Tamaño real",
"View": "Ver",
"Select All": "Seleccionar todo",
"Delete": "Eliminar",
"Paste and Match Style": "Pegar manteniendo estilo",
"Paste": "Pegar",
"Copy": "Copiar",
"Cut": "Cortar",
"Redo": "Rehacer",
"Undo": "Deshacer",
"Edit": "Editar",
"Quit": "Salir",
"Show/Hide": "Ver/Ocultar",
"Are you sure you want to quit?": "¿Quieres salir?",
"Cancel": "Cancelar",
"Copy image address": "Copiar dirección de la imagen",
"Close %(brand)s": "Cerrar %(brand)s",
"%(brand)s Help": "Ayuda sobre %(brand)s"
"action": {
"cancel": "Cancelar",
"close": "Cerrar",
"close_brand": "Cerrar %(brand)s",
"copy": "Copiar",
"cut": "Cortar",
"delete": "Borrar",
"edit": "Editar",
"minimise": "Minimizar",
"paste": "Pegar",
"paste_match_style": "Pegar manteniendo estilo",
"quit": "Salir",
"redo": "Rehacer",
"select_all": "Seleccionar todo",
"show_hide": "Ver/Ocultar",
"undo": "Deshacer",
"zoom_in": "Acercar",
"zoom_out": "Alejar"
},
"common": {
"about": "Acerca de",
"brand_help": "Ayuda sobre %(brand)s",
"help": "Ayuda",
"preferences": "Preferencias"
},
"confirm_quit": "¿Quieres salir?",
"edit_menu": {
"speech": "Dictado",
"speech_start_speaking": "Empezar a hablar",
"speech_stop_speaking": "Parar de hablar"
},
"file_menu": {
"label": "Archivo"
},
"menu": {
"hide": "Ocultar",
"hide_others": "Ocultar otros",
"services": "Servicios",
"unhide": "Mostrar"
},
"right_click_menu": {
"add_to_dictionary": "Añadir al diccionario",
"copy_email": "Copiar dirección de correo",
"copy_image": "Copiar imagen",
"copy_image_url": "Copiar dirección de la imagen",
"copy_link_url": "Copiar dirección de enlace",
"save_image_as": "Guardar imagen como...",
"save_image_as_error_description": "La imagen no se ha podido guardar",
"save_image_as_error_title": "No se ha podido guardar la imagen"
},
"view_menu": {
"actual_size": "Tamaño real",
"toggle_developer_tools": "Abrir/cerrar herramientas de desarrollo",
"toggle_full_screen": "Entrar/salir de pantalla completa",
"view": "Ver"
},
"window_menu": {
"bring_all_to_front": "Traer todas al primer plano",
"label": "Ventana"
}
}

View File

@@ -1,47 +1,63 @@
{
"About": "Rakenduse teave",
"The image failed to save": "Seda pilti ei õnnestunud salvestada",
"Add to dictionary": "Lisa sõnastikku",
"Failed to save image": "Pildi salvestamine ei õnnestunud",
"Save image as...": "Salvesta pilt kui...",
"Copy link address": "Kopeeri lingi aadress",
"Copy email address": "Kopeeri e-posti aadress",
"Copy image": "Kopeeri pilt",
"File": "Fail",
"Bring All to Front": "Too kõik esiplaanile",
"Zoom": "Suumi",
"Stop Speaking": "Lõpeta rääkimine",
"Start Speaking": "Alusta rääkimist",
"Speech": "Kõne",
"Unhide": "Näita uuesti",
"Hide Others": "Peida muud",
"Hide": "Peida",
"Services": "Teenused",
"Help": "Abiteave",
"Close": "Sulge",
"Minimize": "Vähenda",
"Window": "Aken",
"Toggle Developer Tools": "Arendaja töövahendid sisse/välja",
"Toggle Full Screen": "Täisekraanivaade sisse/välja",
"Preferences": "Seadistused",
"Zoom Out": "Vähenda",
"Zoom In": "Suurenda",
"Actual Size": "Näita tavasuuruses",
"View": "Vaata",
"Select All": "Vali kõik",
"Delete": "Kustuta",
"Paste and Match Style": "Aseta kasutades sama stiili",
"Paste": "Aseta",
"Copy": "Kopeeri",
"Cut": "Lõika",
"Redo": "Tee uuesti",
"Undo": "Võta tagasi",
"Edit": "Muuda",
"Quit": "Välju",
"Show/Hide": "Näita/peida",
"Are you sure you want to quit?": "Kas sa kindlasti soovid rakendusest väljuda?",
"Cancel": "Tühista",
"Copy image address": "Kopeeri pildi aadress",
"Close %(brand)s": "Sulge %(brand)s",
"%(brand)s Help": "%(brand)s abiteave"
"action": {
"cancel": "Loobu",
"close": "Sulge",
"close_brand": "Sulge %(brand)s",
"copy": "Kopeeri",
"cut": "Lõika",
"delete": "Kustuta",
"edit": "Muuda",
"minimise": "Vähenda",
"paste": "Aseta",
"paste_match_style": "Aseta kasutades sama stiili",
"quit": "Välju",
"redo": "Tee uuesti",
"select_all": "Vali kõik",
"show_hide": "Näita/peida",
"undo": "Võta tagasi",
"zoom_in": "Suurenda",
"zoom_out": "Vähenda"
},
"common": {
"about": "Rakenduse teave",
"brand_help": "%(brand)s abiteave",
"help": "Abiteave",
"preferences": "Eelistused"
},
"confirm_quit": "Kas sa kindlasti soovid rakendusest väljuda?",
"edit_menu": {
"speech": "Kõne",
"speech_start_speaking": "Alusta rääkimist",
"speech_stop_speaking": "Lõpeta rääkimine"
},
"file_menu": {
"label": "Fail"
},
"menu": {
"hide": "Peida",
"hide_others": "Peida muud",
"services": "Teenused",
"unhide": "Näita uuesti"
},
"right_click_menu": {
"add_to_dictionary": "Lisa sõnastikku",
"copy_email": "Kopeeri e-posti aadress",
"copy_image": "Kopeeri pilt",
"copy_image_url": "Kopeeri pildi aadress",
"copy_link_url": "Kopeeri lingi aadress",
"save_image_as": "Salvesta pilt kui...",
"save_image_as_error_description": "Seda pilti ei õnnestunud salvestada",
"save_image_as_error_title": "Pildi salvestamine ei õnnestunud"
},
"view_menu": {
"actual_size": "Näita tavasuuruses",
"toggle_developer_tools": "Arendaja töövahendid sisse/välja",
"toggle_full_screen": "Täisekraanivaade sisse/välja",
"view": "Näita"
},
"window_menu": {
"bring_all_to_front": "Too kõik esiplaanile",
"label": "Aken",
"zoom": "Suumi"
}
}

View File

@@ -1,46 +1,63 @@
{
"Paste and Match Style": "جای‌گذاری و تطبیق سَبک",
"Add to dictionary": "افزودن به لغت‌نامه",
"The image failed to save": "تصویر ذخیره نشد",
"Failed to save image": "ذخیرهٔ تصویر شکست خورد",
"Save image as...": "ذخیرهٔ تصویر به عنوان...",
"Copy link address": "رونوشت نشانی پیوند",
"Copy image address": "رونوشت نشانی تصویر",
"Copy email address": "رونوشت نشانی رایانامه",
"Copy image": "رونوشت تصویر",
"File": "پرونده",
"Bring All to Front": "همه را به جلو بیاورید",
"Zoom": "بزرگنمایی",
"Speech": "صحبت کردن",
"Stop Speaking": "صحبت کردن را تمام کنید",
"Start Speaking": "صحبت کردن را شروع کنید",
"Unhide": "آشکار",
"Hide Others": "پنهان کردن دیگران",
"Hide": "پنهان",
"Services": "خدمات",
"About": "درباره",
"Help": "راهنما",
"Close": "بستن",
"Minimize": "کمینه",
"Window": "پنجره",
"Toggle Developer Tools": "تغییر وضعیت ابزارهای توسعه‌دهنده",
"Toggle Full Screen": "تغییر وضعیت تمام‌صفحه",
"Preferences": "ترجیحات",
"Zoom Out": "بزرگنمایی به خارج",
"Zoom In": "بزرگنمایی به داخل",
"Actual Size": "اندازهٔ واقعی",
"View": "دیدن",
"Select All": "گزینش همه",
"Delete": "حذف",
"Paste": "جای‌گذاری",
"Copy": "رونوشت",
"Cut": "برش",
"Redo": "انجام دوباره",
"Undo": "بازگردانی",
"Edit": "ویرایش",
"Quit": "خروج",
"Show/Hide": "نمایش/پنهان",
"Are you sure you want to quit?": "آیا مطمئنید که می‌خواهید خارج شوید؟",
"Cancel": "لغو",
"Close %(brand)s": "بستن %(brand)s"
"action": {
"cancel": "لغو",
"close": "بستن",
"close_brand": "بستن %(brand)s",
"copy": "رونوشت",
"cut": "برش",
"delete": "پاک‌کردن",
"edit": "ویرایش",
"minimise": "کمینه",
"paste": "جای‌گذاری",
"paste_match_style": "جای‌گذاری و تطبیق سَبک",
"quit": "خروج",
"redo": "انجام دوباره",
"select_all": "گزینش همه",
"show_hide": "نمایش/پنهان",
"undo": "بازگردانی",
"zoom_in": "بزرگنمایی به داخل",
"zoom_out": "بزرگنمایی به خارج"
},
"common": {
"about": "درباره",
"brand_help": "کمک %(brand)s",
"help": "راهنما",
"preferences": "ترجیحات"
},
"confirm_quit": "آیا مطمئنید که می‌خواهید خارج شوید؟",
"edit_menu": {
"speech": "صحبت کردن",
"speech_start_speaking": "صحبت کردن را شروع کنید",
"speech_stop_speaking": "صحبت کردن را تمام کنید"
},
"file_menu": {
"label": "پرونده"
},
"menu": {
"hide": "پنهان",
"hide_others": "پنهان کردن دیگران",
"services": "خدمات",
"unhide": "آشکار"
},
"right_click_menu": {
"add_to_dictionary": "افزودن به لغت‌نامه",
"copy_email": "رونوشت نشانی رایانامه",
"copy_image": "رونوشت تصویر",
"copy_image_url": "رونوشت نشانی تصویر",
"copy_link_url": "رونوشت نشانی پیوند",
"save_image_as": "ذخیرهٔ تصویر به عنوان...",
"save_image_as_error_description": "تصویر ذخیره نشد",
"save_image_as_error_title": "ذخیرهٔ تصویر شکست خورد"
},
"view_menu": {
"actual_size": "اندازهٔ واقعی",
"toggle_developer_tools": "تغییر وضعیت ابزارهای توسعه‌دهنده",
"toggle_full_screen": "تغییر وضعیت تمام‌صفحه",
"view": "مشاهده"
},
"window_menu": {
"bring_all_to_front": "همه را به جلو بیاورید",
"label": "پنجره",
"zoom": "بزرگنمایی"
}
}

View File

@@ -1,46 +1,62 @@
{
"Paste": "Liitä",
"Paste and Match Style": "Liitä ja sovita tyyli",
"Add to dictionary": "Lisää sanakirjaan",
"The image failed to save": "Kuvan tallennus epäonnistui",
"Failed to save image": "Kuvan tallennus epäonnistui",
"Save image as...": "Tallenna kuva nimellä...",
"Copy link address": "Kopioi linkin osoite",
"Copy email address": "Kopioi sähköpostiosoite",
"Copy image": "Kopioi kuva",
"File": "Tiedosto",
"Bring All to Front": "Tuo kaikki eteen",
"Zoom": "Suurennus",
"Stop Speaking": "Lopeta puhe",
"Start Speaking": "Aloita puhe",
"Speech": "Puhe",
"Unhide": "Palauta näkyviin",
"Hide Others": "Piilota muut",
"Hide": "Piilota",
"Services": "Palvelut",
"About": "Tietoja",
"Help": "Apua",
"Close": "Sulje",
"Minimize": "Pienennä",
"Window": "Ikkuna",
"Toggle Developer Tools": "Näytä tai piilota kehittäjätyökalut",
"Toggle Full Screen": "Vaihda koko näytön tilaa",
"Preferences": "Asetukset",
"Zoom Out": "Pienennä",
"Zoom In": "Suurenna",
"Actual Size": "Alkuperäinen koko",
"View": "Näytä",
"Select All": "Valitse kaikki",
"Delete": "Poista",
"Copy": "Kopioi",
"Cut": "Leikkaa",
"Redo": "Tee uudestaan",
"Undo": "Peru",
"Edit": "Muokkaa",
"Quit": "Lopeta",
"Show/Hide": "Näytä/piilota",
"Are you sure you want to quit?": "Haluatko varmasti poistua?",
"Cancel": "Peruuta",
"Copy image address": "Kopioi kuvan osoite",
"Close %(brand)s": "Sulje %(brand)s"
"action": {
"cancel": "Peruuta",
"close": "Sulje",
"close_brand": "Sulje %(brand)s",
"copy": "Kopioi",
"cut": "Leikkaa",
"delete": "Poista",
"edit": "Muokkaa",
"minimise": "Pienennä",
"paste": "Liitä",
"paste_match_style": "Liitä ja sovita tyyli",
"quit": "Lopeta",
"redo": "Tee uudestaan",
"select_all": "Valitse kaikki",
"show_hide": "Näytä/piilota",
"undo": "Peru",
"zoom_in": "Suurenna",
"zoom_out": "Pienennä"
},
"common": {
"about": "Tietoa",
"help": "Ohje",
"preferences": "Valinnat"
},
"confirm_quit": "Haluatko varmasti poistua?",
"edit_menu": {
"speech": "Puhe",
"speech_start_speaking": "Aloita puhe",
"speech_stop_speaking": "Lopeta puhe"
},
"file_menu": {
"label": "Tiedosto"
},
"menu": {
"hide": "Piilota",
"hide_others": "Piilota muut",
"services": "Palvelut",
"unhide": "Palauta näkyviin"
},
"right_click_menu": {
"add_to_dictionary": "Lisää sanakirjaan",
"copy_email": "Kopioi sähköpostiosoite",
"copy_image": "Kopioi kuva",
"copy_image_url": "Kopioi kuvan osoite",
"copy_link_url": "Kopioi linkin osoite",
"save_image_as": "Tallenna kuva nimellä...",
"save_image_as_error_description": "Kuvan tallennus epäonnistui",
"save_image_as_error_title": "Kuvan tallennus epäonnistui"
},
"view_menu": {
"actual_size": "Alkuperäinen koko",
"toggle_developer_tools": "Näytä tai piilota kehittäjätyökalut",
"toggle_full_screen": "Vaihda koko näytön tilaa",
"view": "Näytä"
},
"window_menu": {
"bring_all_to_front": "Tuo kaikki eteen",
"label": "Ikkuna",
"zoom": "Suurennus"
}
}

View File

@@ -1,47 +1,63 @@
{
"Undo": "Annuler",
"Edit": "Modifier",
"Quit": "Quitter",
"Show/Hide": "Afficher/Masquer",
"Are you sure you want to quit?": "Êtes-vous sûr de vouloir quitter ?",
"Cancel": "Annuler",
"Unhide": "Dé-masquer",
"Hide Others": "Masquer les autres",
"Hide": "Masquer",
"Services": "Services",
"About": "À propos",
"Help": "Aide",
"Close": "Fermer",
"Minimize": "Minimiser",
"Window": "Fenêtre",
"Toggle Developer Tools": "Basculer les outils de développement",
"Toggle Full Screen": "Basculer le plein écran",
"Preferences": "Préférences",
"Zoom Out": "Dé-zoomer",
"Zoom In": "Zoomer",
"Actual Size": "Taille réelle",
"View": "Afficher",
"Select All": "Tout sélectionner",
"Delete": "Supprimer",
"Paste and Match Style": "Copier avec le style de destination",
"Paste": "Coller",
"Copy": "Copier",
"Cut": "Couper",
"Speech": "Dictée",
"Add to dictionary": "Ajouter au dictionnaire",
"The image failed to save": "Limage na pas pu être sauvegardée",
"Failed to save image": "Échec de la sauvegarde de limage",
"Save image as...": "Enregistrer limage sous…",
"Copy link address": "Copier ladresse du lien",
"Copy email address": "Copier ladresse e-mail",
"Copy image": "Copier limage",
"File": "Fichier",
"Bring All to Front": "Tout amener au premier plan",
"Zoom": "Zoom",
"Stop Speaking": "Arrêter la dictée",
"Start Speaking": "Commencer la dictée",
"Copy image address": "Copier l'adresse de l'image",
"Redo": "Refaire",
"Close %(brand)s": "Fermer %(brand)s",
"%(brand)s Help": "Aide de %(brand)s"
"action": {
"cancel": "Annuler",
"close": "Fermer",
"close_brand": "Fermer %(brand)s",
"copy": "Copier",
"cut": "Couper",
"delete": "Supprimer",
"edit": "Modifier",
"minimise": "Minimiser",
"paste": "Coller",
"paste_match_style": "Copier avec le style de destination",
"quit": "Quitter",
"redo": "Refaire",
"select_all": "Tout sélectionner",
"show_hide": "Afficher/Masquer",
"undo": "Annuler",
"zoom_in": "Zoomer",
"zoom_out": "Dé-zoomer"
},
"common": {
"about": "À propos",
"brand_help": "Aide de %(brand)s",
"help": "Aide",
"preferences": "Préférences"
},
"confirm_quit": "Êtes-vous sûr de vouloir quitter ?",
"edit_menu": {
"speech": "Dictée",
"speech_start_speaking": "Commencer la dictée",
"speech_stop_speaking": "Arrêter la dictée"
},
"file_menu": {
"label": "Fichier"
},
"menu": {
"hide": "Masquer",
"hide_others": "Masquer les autres",
"services": "Services",
"unhide": "Dé-masquer"
},
"right_click_menu": {
"add_to_dictionary": "Ajouter au dictionnaire",
"copy_email": "Copier ladresse e-mail",
"copy_image": "Copier limage",
"copy_image_url": "Copier l'adresse de l'image",
"copy_link_url": "Copier ladresse du lien",
"save_image_as": "Enregistrer limage sous…",
"save_image_as_error_description": "Limage na pas pu être sauvegardée",
"save_image_as_error_title": "Échec de la sauvegarde de limage"
},
"view_menu": {
"actual_size": "Taille réelle",
"toggle_developer_tools": "Basculer les outils de développement",
"toggle_full_screen": "Basculer le plein écran",
"view": "Afficher"
},
"window_menu": {
"bring_all_to_front": "Tout amener au premier plan",
"label": "Fenêtre",
"zoom": "Zoom"
}
}

View File

@@ -1,44 +0,0 @@
{
"Copy image": "Ofbylding kopiearje",
"Speech": "Spraak",
"View": "Byld",
"Paste and Match Style": "Plakke en lit stilen oerienkomme",
"Add to dictionary": "Oan wurdlist tafoegje",
"The image failed to save": "It is net slagge de ôfbylding te bewarjen",
"Failed to save image": "Ofbylding bewarjen mislearre",
"Save image as...": "Ofbylding bewarje as…",
"Copy link address": "Keppeling kopiearje",
"Copy email address": "E-mailadres kopiearje",
"File": "Bestân",
"Bring All to Front": "Alles nei foaren bringe",
"Zoom": "Zoom",
"Stop Speaking": "Stopje mei praten",
"Start Speaking": "Begjin mei praten",
"Unhide": "Wer toane",
"Hide Others": "Oare ferbergje",
"Hide": "Ferbergje",
"Services": "Tsjinsten",
"About": "Oer",
"Help": "Help",
"Close": "Slute",
"Minimize": "Minimalisearje",
"Window": "Finster",
"Toggle Developer Tools": "Untwikkelersark yn-/útskeakelje",
"Toggle Full Screen": "Folslein skerm yn-/útskeakelje",
"Preferences": "Foarkarren",
"Zoom Out": "Utzoome",
"Zoom In": "Ynzoome",
"Actual Size": "Werklike grutte",
"Select All": "Alles selektearje",
"Delete": "Fuortsmite",
"Paste": "Plakke",
"Copy": "Kopiearje",
"Cut": "Knippe",
"Redo": "Opnij útfiere",
"Undo": "Ungedien meitsje",
"Edit": "Bewurkje",
"Quit": "Ofslute",
"Show/Hide": "Toane/Ferbergje",
"Are you sure you want to quit?": "Binne jo der wis fan dat jo ôfslute wolle?",
"Cancel": "Annulearje"
}

View File

@@ -1,44 +1,60 @@
{
"Add to dictionary": "Engadir ao dicionario",
"The image failed to save": "Non se gardou a imaxe",
"Failed to save image": "Fallou o gardado da imaxe",
"Save image as...": "Gardar imaxe como...",
"Copy link address": "Copiar enderezo da ligazón",
"Copy email address": "Copiar enderezo de email",
"Copy image": "Copiar imaxe",
"File": "Ficheiro",
"Bring All to Front": "Traer todo á fronte",
"Zoom": "Aumento",
"Stop Speaking": "Deixa de falar",
"Start Speaking": "Comeza a falar",
"Speech": "Falar",
"Unhide": "Desagochar",
"Hide Others": "Agochar outras",
"Hide": "Agochar",
"Services": "Servizos",
"About": "Acerca de",
"Help": "Axuda",
"Close": "Pechar",
"Minimize": "Minimizar",
"Window": "Ventá",
"Toggle Developer Tools": "Activar ferramentas de desenvolvemento",
"Toggle Full Screen": "Activar pantalla completa",
"Preferences": "Preferencias",
"Zoom Out": "Diminuir",
"Zoom In": "Aumentar",
"Actual Size": "Tamaño real",
"View": "Ver",
"Select All": "Elexir todo",
"Delete": "Eliminar",
"Paste and Match Style": "Pegar e imitar estilo",
"Paste": "Pegar",
"Copy": "Copiar",
"Cut": "Cortar",
"Redo": "Refacer",
"Undo": "Desfacer",
"Edit": "Editar",
"Quit": "Saír",
"Show/Hide": "Mostrar/Agochar",
"Are you sure you want to quit?": "Tes a certeza de que queres saír?",
"Cancel": "Cancelar"
"action": {
"cancel": "Cancelar",
"close": "Pechar",
"copy": "Copiar",
"cut": "Cortar",
"delete": "Eliminar",
"edit": "Editar",
"minimise": "Minimizar",
"paste": "Pegar",
"paste_match_style": "Pegar e imitar estilo",
"quit": "Saír",
"redo": "Refacer",
"select_all": "Elexir todo",
"show_hide": "Mostrar/Agochar",
"undo": "Desfacer",
"zoom_in": "Aumentar",
"zoom_out": "Diminuir"
},
"common": {
"about": "Acerca de",
"help": "Axuda",
"preferences": "Preferencias"
},
"confirm_quit": "Tes a certeza de que queres saír?",
"edit_menu": {
"speech": "Falar",
"speech_start_speaking": "Comeza a falar",
"speech_stop_speaking": "Deixa de falar"
},
"file_menu": {
"label": "Ficheiro"
},
"menu": {
"hide": "Agochar",
"hide_others": "Agochar outras",
"services": "Servizos",
"unhide": "Desagochar"
},
"right_click_menu": {
"add_to_dictionary": "Engadir ao dicionario",
"copy_email": "Copiar enderezo de email",
"copy_image": "Copiar imaxe",
"copy_link_url": "Copiar enderezo da ligazón",
"save_image_as": "Gardar imaxe como...",
"save_image_as_error_description": "Non se gardou a imaxe",
"save_image_as_error_title": "Fallou o gardado da imaxe"
},
"view_menu": {
"actual_size": "Tamaño real",
"toggle_developer_tools": "Activar ferramentas de desenvolvemento",
"toggle_full_screen": "Activar pantalla completa",
"view": "Vista"
},
"window_menu": {
"bring_all_to_front": "Traer todo á fronte",
"label": "Ventá",
"zoom": "Aumento"
}
}

View File

@@ -1,45 +1,61 @@
{
"Actual Size": "גודל ממשי",
"Add to dictionary": "הוסף למילון",
"The image failed to save": "שמירת התמונה נכשלה",
"Failed to save image": "נכשל בשמירת התמונה",
"Save image as...": "שמור תמונה בשם...",
"Copy link address": "העתק קישור",
"Copy email address": "העתק כתובת אימייל",
"Copy image": "העתק תמונה",
"File": ובץ",
"Bring All to Front": "הבא הכל לחזית",
"Zoom": "גודל תצוגה",
"Stop Speaking": "הפסק לדבר",
"Start Speaking": "התחל לדבר",
"Speech": "דיבור",
"Unhide": "בטל הסתרה",
"Hide Others": "הסתר אחרים",
"Hide": סתר",
"Services": "שרותים",
"About": "אודות",
"Help": "עזרה",
"Close": "סגור",
"Minimize": "מזער",
"Window": "חלון",
"Toggle Developer Tools": "הפעל כלי מפתחים",
"Toggle Full Screen": "הפעל מצב מסך מלא",
"Preferences": "העדפות",
"Zoom Out": "התרחק",
"Zoom In": "התקרב",
"View": "צפה",
"Select All": "בחר הכל",
"Delete": "מחק",
"Paste": "הדבק",
"Copy": "העתק",
"Cut": "גזור",
"Undo": "בטל ביצוע",
"Redo": "בצע שוב",
"Edit": "עריכה",
"Quit": "יציאה",
"Show/Hide": "הצג\\הסתר",
"Are you sure you want to quit?": "האם אתה בטוח שברצונך לצאת?",
"Cancel": "ביטול",
"Paste and Match Style": "הדבק והתאם סגנון",
"Copy image address": "העתקת כתובת התמונה"
"action": {
"cancel": "ביטול",
"close": "סגור",
"copy": "העתק",
"cut": "גזור",
"delete": "מחק",
"edit": "ערוך",
"minimise": "מזער",
"paste": "הדבק",
"paste_match_style": "הדבק והתאם סגנון",
"quit": "יציאה",
"redo": "בצע שוב",
"select_all": "בחר הכל",
"show_hide": "הצג\\הסתר",
"undo": "בטל ביצוע",
"zoom_in": "התקרב",
"zoom_out": "התרחק"
},
"common": {
"about": "אודות",
"help": "עזרה",
"preferences": "העדפות"
},
"confirm_quit": "האם אתה בטוח שברצונך לצאת?",
"edit_menu": {
"speech": "דיבור",
"speech_start_speaking": "התחל לדבר",
"speech_stop_speaking": "הפסק לדבר"
},
"file_menu": {
"label": "קובץ"
},
"menu": {
"hide": "הסתר",
"hide_others": "הסתר אחרים",
"services": "שרותים",
"unhide": "בטל הסתרה"
},
"right_click_menu": {
"add_to_dictionary": "הוסף למילון",
"copy_email": "העתק כתובת אימייל",
"copy_image": "העתק תמונה",
"copy_image_url": "העתקת כתובת התמונה",
"copy_link_url": "העתק קישור",
"save_image_as": "שמור תמונה בשם...",
"save_image_as_error_description": "שמירת התמונה נכשלה",
"save_image_as_error_title": "נכשל בשמירת התמונה"
},
"view_menu": {
"actual_size": "גודל ממשי",
"toggle_developer_tools": "הפעל כלי מפתחים",
"toggle_full_screen": "הפעל מצב מסך מלא",
"view": "צפה"
},
"window_menu": {
"bring_all_to_front": "הבא הכל לחזית",
"label": "חלון",
"zoom": "גודל תצוגה"
}
}

View File

@@ -1,12 +0,0 @@
{
"Paste": "Zalijepiti",
"Copy": "Kopirati",
"Cut": "Izrezati",
"Redo": "Preurediti",
"Undo": "Poništi",
"Edit": "Uredi",
"Quit": "Prestati",
"Show/Hide": "Pokaži/sakrij",
"Are you sure you want to quit?": "Jesi li siguran da želiš odustati?",
"Cancel": "Otkazati"
}

View File

@@ -1,46 +1,63 @@
{
"Add to dictionary": "Hozzáadás a szótárhoz",
"The image failed to save": "A kép mentése sikertelen",
"Failed to save image": "Kép mentése sikertelen",
"Save image as...": "Kép mentése másként...",
"Copy link address": "Hivatkozás másolása",
"Copy email address": "E-mail cím másolása",
"Copy image": "Kép másolása",
"File": "Fájl",
"Bring All to Front": "Mindent előtérbe hoz",
"Zoom": "Nagyítás",
"Stop Speaking": "Fejezze be a beszédet",
"Start Speaking": "Kezdjen beszélni",
"Speech": "Beszéd",
"Unhide": "Felfed",
"Hide Others": "Minden mást eltakar",
"Hide": "Eltakar",
"Services": "Szolgáltatás",
"About": "Névjegy",
"Help": "Segítség",
"Close": "Bezár",
"Minimize": "Lecsukás",
"Window": "Ablak",
"Toggle Developer Tools": "Fejlesztői eszközök",
"Toggle Full Screen": "Teljes képernyő",
"Preferences": "Beállítások",
"Zoom Out": "Kicsinyít",
"Zoom In": "Nagyít",
"Actual Size": "Jelenlegi méret",
"View": "Nézet",
"Select All": "Összes kijelölése",
"Delete": "Töröl",
"Paste and Match Style": "Beillesztés formázással",
"Paste": "Beillesztés",
"Copy": "Másol",
"Cut": "Kivág",
"Redo": "Újra",
"Undo": "Visszavon",
"Edit": "Szerkeszt",
"Quit": "Kilép",
"Show/Hide": "Megmutat/Elrejt",
"Are you sure you want to quit?": "Biztos, hogy kilép?",
"Cancel": "Mégsem",
"Copy image address": "Kép címének másolása",
"Close %(brand)s": "%(brand)s bezárása"
"action": {
"cancel": "Mégse",
"close": "Bezárás",
"close_brand": "%(brand)s bezárása",
"copy": "Másolás",
"cut": "Kivágás",
"delete": "Törlés",
"edit": "Szerkesztés",
"minimise": "Lecsukás",
"paste": "Beillesztés",
"paste_match_style": "Beillesztés formázással",
"quit": "Kilépés",
"redo": "Újra",
"select_all": "Összes kijelölése",
"show_hide": "Megjelenítés/elrejtés",
"undo": "Visszavonás",
"zoom_in": "Nagyítás",
"zoom_out": "Kicsinyítés"
},
"common": {
"about": "Névjegy",
"brand_help": "%(brand)s Súgó",
"help": "Súgó",
"preferences": "Beállítások"
},
"confirm_quit": "Biztos, hogy kilép?",
"edit_menu": {
"speech": "Beszéd",
"speech_start_speaking": "Kezdjen beszélni",
"speech_stop_speaking": "Fejezze be a beszédet"
},
"file_menu": {
"label": "Fájl"
},
"menu": {
"hide": "Elrejtés",
"hide_others": "Mások elrejtése",
"services": "Szolgáltatás",
"unhide": "Felfedés"
},
"right_click_menu": {
"add_to_dictionary": "Hozzáadás a szótárhoz",
"copy_email": "E-mail-cím másolása",
"copy_image": "Kép másolása",
"copy_image_url": "Kép címének másolása",
"copy_link_url": "Hivatkozás másolása",
"save_image_as": "Kép mentése másként…",
"save_image_as_error_description": "A kép mentése sikertelen",
"save_image_as_error_title": "Kép mentése sikertelen"
},
"view_menu": {
"actual_size": "Jelenlegi méret",
"toggle_developer_tools": "Fejlesztői eszközök",
"toggle_full_screen": "Teljes képernyő",
"view": "Megtekintés"
},
"window_menu": {
"bring_all_to_front": "Mindent előtérbe hoz",
"label": "Ablak",
"zoom": "Nagyítás"
}
}

View File

@@ -1,47 +1,63 @@
{
"Add to dictionary": "Tambah ke kamus",
"The image failed to save": "Gambar gagal disimpan",
"Failed to save image": "Gagal menyimpan gambar",
"Save image as...": "Simpan gambar sebagai...",
"Copy link address": "Salin alamat tautan",
"Copy email address": "Salin surel",
"Copy image": "Salin gambar",
"File": "File",
"Hide Others": "Sembunyikan yang Lain",
"Bring All to Front": "Bawa Semua ke Depan",
"Zoom": "Perbesar",
"Stop Speaking": "Berhenti Berbicara",
"Start Speaking": "Mulai Berbicara",
"Speech": "Dikte",
"Unhide": "Tampilkan",
"Hide": "Sembunyikan",
"Services": "Layanan",
"About": "Tentang",
"Help": "Bantuan",
"Close": "Tutup",
"Minimize": "Minimalkan",
"Window": "Jendela",
"Toggle Developer Tools": "Beralih Alat Pengembang",
"Toggle Full Screen": "Beralih Layar Penuh",
"Preferences": "Pengaturan",
"Zoom Out": "Perkecil",
"Zoom In": "Perbesar",
"Cut": "Potong",
"Redo": "Ulangi",
"Undo": "Urungkan",
"Actual Size": "Ukuran Sebenarnya",
"View": "Tampilan",
"Select All": "Pilih Semua",
"Delete": "Hapus",
"Paste and Match Style": "Tempel dan Cocokkan Gaya",
"Paste": "Tempel",
"Copy": "Salin",
"Edit": "Edit",
"Quit": "Keluar",
"Show/Hide": "Tampilkan/Sembunyikan",
"Are you sure you want to quit?": "Apakah Anda yakin ingin keluar?",
"Cancel": "Batal",
"Copy image address": "Salin alamat gambar",
"Close %(brand)s": "Tutuo %(brand)s",
"%(brand)s Help": "Bantuan %(brand)s"
"action": {
"cancel": "Batalkan",
"close": "Tutup",
"close_brand": "Tutuo %(brand)s",
"copy": "Salin",
"cut": "Potong",
"delete": "Hapus",
"edit": "Sunting",
"minimise": "Minimalkan",
"paste": "Tempel",
"paste_match_style": "Tempel dan Cocokkan Gaya",
"quit": "Keluar",
"redo": "Ulangi",
"select_all": "Pilih Semua",
"show_hide": "Tampilkan/Sembunyikan",
"undo": "Urungkan",
"zoom_in": "Perbesar",
"zoom_out": "Perkecil"
},
"common": {
"about": "Tentang",
"brand_help": "Bantuan %(brand)s",
"help": "Bantuan",
"preferences": "Preferensi"
},
"confirm_quit": "Apakah Anda yakin ingin keluar?",
"edit_menu": {
"speech": "Dikte",
"speech_start_speaking": "Mulai Berbicara",
"speech_stop_speaking": "Berhenti Berbicara"
},
"file_menu": {
"label": "Berkas"
},
"menu": {
"hide": "Sembunyikan",
"hide_others": "Sembunyikan yang Lain",
"services": "Layanan",
"unhide": "Tampilkan"
},
"right_click_menu": {
"add_to_dictionary": "Tambah ke kamus",
"copy_email": "Salin surel",
"copy_image": "Salin gambar",
"copy_image_url": "Salin alamat gambar",
"copy_link_url": "Salin alamat tautan",
"save_image_as": "Simpan gambar sebagai...",
"save_image_as_error_description": "Gambar gagal disimpan",
"save_image_as_error_title": "Gagal menyimpan gambar"
},
"view_menu": {
"actual_size": "Ukuran Sebenarnya",
"toggle_developer_tools": "Beralih Alat Pengembang",
"toggle_full_screen": "Beralih Layar Penuh",
"view": "Tampilan"
},
"window_menu": {
"bring_all_to_front": "Bawa Semua ke Depan",
"label": "Jendela",
"zoom": "Perbesar"
}
}

View File

@@ -1,46 +1,62 @@
{
"Add to dictionary": "Bæta við orðasafn",
"The image failed to save": "Myndina var ekki hægt að vista",
"Failed to save image": "Mistókst að vista mynd",
"Save image as...": "Vista mynd sem...",
"Copy link address": "Afrita vistfang tengils",
"Copy email address": "Afrita tölvupóstfang",
"Copy image": "Afrita mynd",
"File": "Skrá",
"Bring All to Front": "Setja allt fremst",
"Zoom": "Stærð",
"Stop Speaking": "Hætta tali",
"Start Speaking": "Byrja tal",
"Speech": "Tal",
"Unhide": "Birta",
"Hide Others": "Fela aðra",
"Hide": "Fela",
"Services": "Þjónustur",
"About": "Um hugbúnaðinn",
"Help": "Hjálp",
"Close": "Loka",
"Minimize": "Lágmarka",
"Window": "Gluggi",
"Toggle Developer Tools": "Víxla forritunarverkfærum af/á",
"Toggle Full Screen": "Víxla fullum skjá af/á",
"Preferences": "Stillingar",
"Zoom Out": "Minnka",
"Zoom In": "Stækka",
"Actual Size": "Raunstærð",
"View": "Skoða",
"Select All": "Velja allt",
"Delete": "Eyða",
"Paste and Match Style": "Líma og samsvara stíl",
"Paste": "Líma",
"Copy": "Afrita",
"Cut": "Klippa",
"Redo": "Endurgera",
"Undo": "Afturkalla",
"Edit": "Breyta",
"Quit": "Hætta",
"Show/Hide": "Sýna/Fela",
"Are you sure you want to quit?": "Ertu viss um að þú viljir hætta?",
"Cancel": "Hætta við",
"Copy image address": "Afrita slóð myndar",
"Close %(brand)s": "Loka %(brand)s"
"action": {
"cancel": "Hætta við",
"close": "Loka",
"close_brand": "Loka %(brand)s",
"copy": "Afrita",
"cut": "Klippa",
"delete": "Eyða",
"edit": "Breyta",
"minimise": "Lágmarka",
"paste": "Líma",
"paste_match_style": "Líma og samsvara stíl",
"quit": "Hætta",
"redo": "Endurgera",
"select_all": "Velja allt",
"show_hide": "Sýna/Fela",
"undo": "Afturkalla",
"zoom_in": "Stækka",
"zoom_out": "Minnka"
},
"common": {
"about": "Um hugbúnaðinn",
"help": "Hjálp",
"preferences": "Stillingar"
},
"confirm_quit": "Ertu viss um að þú viljir hætta?",
"edit_menu": {
"speech": "Tal",
"speech_start_speaking": "Byrja tal",
"speech_stop_speaking": "Hætta tali"
},
"file_menu": {
"label": "Skrá"
},
"menu": {
"hide": "Fela",
"hide_others": "Fela aðra",
"services": "Þjónustur",
"unhide": "Birta"
},
"right_click_menu": {
"add_to_dictionary": "Bæta við orðasafn",
"copy_email": "Afrita tölvupóstfang",
"copy_image": "Afrita mynd",
"copy_image_url": "Afrita slóð myndar",
"copy_link_url": "Afrita vistfang tengils",
"save_image_as": "Vista mynd sem...",
"save_image_as_error_description": "Myndina var ekki hægt að vista",
"save_image_as_error_title": "Mistókst að vista mynd"
},
"view_menu": {
"actual_size": "Raunstærð",
"toggle_developer_tools": "Víxla forritunarverkfærum af/á",
"toggle_full_screen": "Víxla fullum skjá af/á",
"view": "Skoða"
},
"window_menu": {
"bring_all_to_front": "Setja allt fremst",
"label": "Gluggi",
"zoom": "Stærð"
}
}

View File

@@ -1,47 +1,63 @@
{
"Add to dictionary": "Aggiungi al dizionario",
"The image failed to save": "Non è stato possibile salvare l'immagine",
"Failed to save image": "Salvataggio immagine fallito",
"Save image as...": "Salva immagine come...",
"Copy link address": "Copia indirizzo collegamento",
"Copy email address": "Copia indirizzo email",
"Copy image": "Copia immagine",
"File": "File",
"Bring All to Front": "Porta tutto in primo piano",
"Zoom": "Zoom",
"Start Speaking": "Inizia a parlare",
"Unhide": "Mostra",
"Hide Others": "Nascondi gli altri",
"Hide": "Nascondi",
"Services": "Servizi",
"About": "Informazioni su",
"Help": "Aiuto",
"Close": "Chiudi",
"Minimize": "Riduci",
"Window": "Finestra",
"Toggle Developer Tools": "Attiva strumenti per sviluppatori",
"Toggle Full Screen": "Passa a schermo intero",
"Preferences": "Preferenze",
"Zoom Out": "Rimpicciolisci",
"Zoom In": "Ingrandisci",
"Actual Size": "Dimensione effettiva",
"View": "Vedi",
"Select All": "Seleziona tutto",
"Delete": "Elimina",
"Paste and Match Style": "Incolla e adegua lo stile",
"Paste": "Incolla",
"Copy": "Copia",
"Cut": "Taglia",
"Redo": "Ripeti",
"Undo": "Annulla",
"Edit": "Modifica",
"Quit": "Esci",
"Show/Hide": "Mostra/Nascondi",
"Are you sure you want to quit?": "Vuoi veramente uscire?",
"Cancel": "Annulla",
"Stop Speaking": "Smetti di parlare",
"Speech": "Dettatura",
"Copy image address": "Copia indirizzo immagine",
"Close %(brand)s": "Chiudi %(brand)s",
"%(brand)s Help": "Aiuto per %(brand)s"
"action": {
"cancel": "Annulla",
"close": "Chiudi",
"close_brand": "Chiudi %(brand)s",
"copy": "Copia",
"cut": "Taglia",
"delete": "Elimina",
"edit": "Modifica",
"minimise": "Riduci",
"paste": "Incolla",
"paste_match_style": "Incolla e adegua lo stile",
"quit": "Esci",
"redo": "Ripeti",
"select_all": "Seleziona tutto",
"show_hide": "Mostra/Nascondi",
"undo": "Annulla",
"zoom_in": "Ingrandisci",
"zoom_out": "Rimpicciolisci"
},
"common": {
"about": "Informazioni su",
"brand_help": "Aiuto per %(brand)s",
"help": "Aiuto",
"preferences": "Preferenze"
},
"confirm_quit": "Vuoi veramente uscire?",
"edit_menu": {
"speech": "Dettatura",
"speech_start_speaking": "Inizia a parlare",
"speech_stop_speaking": "Smetti di parlare"
},
"file_menu": {
"label": "File"
},
"menu": {
"hide": "Nascondi",
"hide_others": "Nascondi gli altri",
"services": "Servizi",
"unhide": "Mostra"
},
"right_click_menu": {
"add_to_dictionary": "Aggiungi al dizionario",
"copy_email": "Copia indirizzo email",
"copy_image": "Copia immagine",
"copy_image_url": "Copia indirizzo immagine",
"copy_link_url": "Copia indirizzo collegamento",
"save_image_as": "Salva immagine come...",
"save_image_as_error_description": "Non è stato possibile salvare l'immagine",
"save_image_as_error_title": "Salvataggio immagine fallito"
},
"view_menu": {
"actual_size": "Dimensione effettiva",
"toggle_developer_tools": "Attiva strumenti per sviluppatori",
"toggle_full_screen": "Passa a schermo intero",
"view": "Vedi"
},
"window_menu": {
"bring_all_to_front": "Porta tutto in primo piano",
"label": "Finestra",
"zoom": "Ingrandisci"
}
}

View File

@@ -1,46 +1,62 @@
{
"Close %(brand)s": "%(brand)sを閉じる",
"Bring All to Front": "全てを前面に表示",
"The image failed to save": "画像の保存に失敗しました",
"Unhide": "再表示",
"Actual Size": "等倍",
"Paste and Match Style": "スタイルを保持して貼り付け",
"Add to dictionary": "辞書に追加",
"Failed to save image": "画像の保存に失敗",
"Save image as...": "画像を保存",
"Speech": "スピーチ",
"Stop Speaking": "録音を停止",
"Start Speaking": "録音を開始",
"Toggle Developer Tools": "開発者ツールを切り替える",
"Toggle Full Screen": "全画面表示を切り替える",
"Redo": "やり直す",
"Undo": "取り消す",
"Minimize": "最小化",
"Window": "ウィンドウ",
"Preferences": "環境設定",
"Zoom Out": "縮小",
"Zoom In": "拡大",
"Copy link address": "リンクのアドレスをコピー",
"Copy image address": "画像のアドレスをコピー",
"Copy email address": "メールアドレスをコピー",
"Copy image": "画像をコピー",
"File": "ファイル",
"Zoom": "ズーム",
"Hide Others": "他を非表示",
"Hide": "非表示",
"Services": "サービス",
"About": "概要",
"Help": "ヘルプ",
"Close": "閉じる",
"View": "表示",
"Select All": "全て選択",
"Delete": "削除",
"Paste": "貼り付け",
"Copy": "コピー",
"Cut": "切り取り",
"Edit": "編集",
"Quit": "終了",
"Are you sure you want to quit?": "終了してよろしいですか?",
"Show/Hide": "表示/非表示",
"Cancel": "キャンセル"
"action": {
"cancel": "キャンセル",
"close": "閉じる",
"close_brand": "%(brand)sを閉じる",
"copy": "コピー",
"cut": "切り取り",
"delete": "削除",
"edit": "編集",
"minimise": "最小化",
"paste": "貼り付け",
"paste_match_style": "スタイルを保持して貼り付け",
"quit": "終了",
"redo": "やり直す",
"select_all": "全て選択",
"show_hide": "表示/非表示",
"undo": "取り消す",
"zoom_in": "拡大",
"zoom_out": "縮小"
},
"common": {
"about": "概要",
"help": "ヘルプ",
"preferences": "環境設定"
},
"confirm_quit": "終了してよろしいですか?",
"edit_menu": {
"speech": "スピーチ",
"speech_start_speaking": "録音を開始",
"speech_stop_speaking": "録音を停止"
},
"file_menu": {
"label": "ファイル"
},
"menu": {
"hide": "非表示",
"hide_others": "他を非表示",
"services": "サービス",
"unhide": "再表示"
},
"right_click_menu": {
"add_to_dictionary": "辞書に追加",
"copy_email": "メールアドレスをコピー",
"copy_image": "画像をコピー",
"copy_image_url": "画像のアドレスをコピー",
"copy_link_url": "リンクのアドレスをコピー",
"save_image_as": "画像を保存",
"save_image_as_error_description": "画像の保存に失敗しました",
"save_image_as_error_title": "画像の保存に失敗"
},
"view_menu": {
"actual_size": "等倍",
"toggle_developer_tools": "開発者ツールを切り替える",
"toggle_full_screen": "全画面表示を切り替える",
"view": "表示"
},
"window_menu": {
"bring_all_to_front": "全てを前面に表示",
"label": "ウィンドウ",
"zoom": "ズーム"
}
}

View File

@@ -1,24 +0,0 @@
{
"File": "파일",
"Copy email address": "이메일 주소 복사",
"Paste": "붙여넣기",
"Hide": "숨기기",
"Preferences": "환경설정",
"Undo": "실행 취소",
"Edit": "수정",
"Quit": "종료",
"Delete": "삭제",
"Cancel": "취소",
"Are you sure you want to quit?": "종료하시겠습니까?",
"Show/Hide": "보이기/숨기기",
"Redo": "되돌리기",
"Cut": "잘라내기",
"Copy": "복사하기",
"View": "보기",
"Actual Size": "실제 크기",
"Zoom In": "확대",
"Zoom Out": "축소",
"Close %(brand)s": "%(brand)s 닫기",
"Paste and Match Style": "붙여넣고 스타일 일치",
"Select All": "전체 선택"
}

View File

@@ -1,45 +1,61 @@
{
"Toggle Developer Tools": "ສະຫຼັບໄປໜ້າເຄື່ອງມືພັດທະນາ",
"Add to dictionary": "ເພີ່ມເຂົ້າໄປວັດຈະນານຸກົມ",
"The image failed to save": "ຮູບພາບບໍ່ສາມາດບັດທຶກໄດ້",
"Failed to save image": "ການບັນທຶກຮູບພາບບໍ່ສຳເລັດ",
"Save image as...": "ບັນທຶກຮູບພາບເປັນ...",
"Copy link address": "ສຳເນົາທີ່ຢູ່ລິ້ງ",
"Copy image address": "ສຳເນົາທີ່ຢູ່ຮູບພາບ",
"Copy email address": "ສຳເນົາທີ່ຢູ່ເມວ",
"Copy image": "ສຳເນົາຮູບ",
"File": "ຟາຍ",
"Bring All to Front": "ເອົາທັງໝົດມາທາງໜ້າ",
"Zoom": "ຊູມ",
"Stop Speaking": "ເຊົາສົນທະນາ",
"Start Speaking": "ເລີ່ມສົນທະນາ",
"Speech": "ຄຳກ່າວ",
"Unhide": "ໂຊຄືນ",
"Hide Others": "ເຊື່ອງອັນອື່ນ",
"Hide": "ເຊື່ອງ",
"Services": "ບໍລິການ",
"About": "ກ່ຽວກັບ",
"Help": "ຊ່ວຍເຫຼືອ",
"Close": "ປິດ",
"Minimize": "ຫຍໍ້ນ້ອຍ",
"Window": "ປ່ອງຢ້ຽມ",
"Toggle Full Screen": "ສະຫຼັບເຕັມຈໍ",
"Preferences": "ການຕັ້ງຄ່າ",
"Zoom Out": "ຊູມອອກ",
"Zoom In": "ຊູມເຂົ້າ",
"Actual Size": "ຂະໜາດຕົວຈິງ",
"View": "ເບິ່ງ",
"Select All": "ເລືອກທັງໝົດ",
"Delete": "ລຶບ",
"Paste and Match Style": "ກັອບມາໃສ່ ແລະໃຫ້ສະຕາຍຕົງກັນ",
"Paste": "ກັອບມາໃສ່",
"Copy": "ສຳເນົາ",
"Cut": "ຕັດ",
"Redo": "ລຶ້ມຄືນ",
"Undo": "ຮື້ຄືນ",
"Edit": "ແກ້ໄຂ",
"Quit": "ຍົກເລີກ",
"Show/Hide": "ສະແດງ/ເຊື່ອງ",
"Are you sure you want to quit?": "ທ່ານຕ້ອງການປິດແທ້ບໍ່?",
"Cancel": "ຍົກເລີກ"
"action": {
"cancel": "ຍົກເລີກ",
"close": "ປິດ",
"copy": "ສຳເນົາ",
"cut": "ຕັດ",
"delete": "ລຶບ",
"edit": "ແກ້ໄຂ",
"minimise": "ຫຍໍ້ນ້ອຍ",
"paste": "ກັອບມາໃສ່",
"paste_match_style": "ກັອບມາໃສ່ ແລະໃຫ້ສະຕາຍຕົງກັນ",
"quit": "ຍົກເລີກ",
"redo": "ລຶ້ມຄືນ",
"select_all": "ເລືອກທັງໝົດ",
"show_hide": "ສະແດງ/ເຊື່ອງ",
"undo": "ຮື້ຄືນ",
"zoom_in": "ຊູມເຂົ້າ",
"zoom_out": "ຊູມອອກ"
},
"common": {
"about": "ກ່ຽວກັບ",
"help": "ຊ່ວຍເຫຼືອ",
"preferences": "ການຕັ້ງຄ່າ"
},
"confirm_quit": "ທ່ານຕ້ອງການປິດແທ້ບໍ່?",
"edit_menu": {
"speech": "ຄຳກ່າ",
"speech_start_speaking": "ເລີ່ມສົນທະນາ",
"speech_stop_speaking": "ເຊົາສົນທະນາ"
},
"file_menu": {
"label": "ຟາຍ"
},
"menu": {
"hide": "ເຊື່ອງ",
"hide_others": "ເຊື່ອງອັນອື່ນ",
"services": "ບໍລິການ",
"unhide": "ໂຊຄືນ"
},
"right_click_menu": {
"add_to_dictionary": "ເພີ່ມເຂົ້າໄປວັດຈະນານຸກົມ",
"copy_email": "ສຳເນົາທີ່ຢູ່ເມວ",
"copy_image": "ສຳເນົາຮູບ",
"copy_image_url": "ສຳເນົາທີ່ຢູ່ຮູບພາບ",
"copy_link_url": "ສຳເນົາທີ່ຢູ່ລິ້ງ",
"save_image_as": "ບັນທຶກຮູບພາບເປັນ...",
"save_image_as_error_description": "ຮູບພາບບໍ່ສາມາດບັດທຶກໄດ້",
"save_image_as_error_title": "ການບັນທຶກຮູບພາບບໍ່ສຳເລັດ"
},
"view_menu": {
"actual_size": "ຂະໜາດຕົວຈິງ",
"toggle_developer_tools": "ສະຫຼັບໄປໜ້າເຄື່ອງມືພັດທະນາ",
"toggle_full_screen": "ສະຫຼັບເຕັມຈໍ",
"view": "ເບິ່ງ"
},
"window_menu": {
"bring_all_to_front": "ເອົາທັງໝົດມາທາງໜ້າ",
"label": "ປ່ອງຢ້ຽມ",
"zoom": "ຊູມ"
}
}

View File

@@ -1,46 +1,62 @@
{
"Failed to save image": "Nepavyko įrašyti paveikslėlio",
"Save image as...": "Įrašyti paveikslėlį kaip...",
"Copy image address": "Kopijuoti paveikslėlio adresą",
"Copy image": "Kopijuoti paveikslėlį",
"The image failed to save": "Paveikslėlio nepavyko išsaugoti",
"Bring All to Front": "Viską iškelti į priekį",
"Speech": "Kalba",
"Actual Size": "Tikrasis dydis",
"Toggle Developer Tools": "Perjungti kūrėjo įrankius",
"Toggle Full Screen": "Perjungti viso ekrano režimą",
"Paste and Match Style": "Įklijuoti ir suderinti stilių",
"Redo": "Sugrąžinti veiksmą",
"Undo": "Atšaukti veiksmą",
"Select All": "Pasirinkti visus",
"Delete": "Ištrinti",
"Paste": "Įklijuoti",
"Copy": "Kopijuoti",
"Cut": "Iškirpti",
"Add to dictionary": "Pridėti prie žodyno",
"Copy link address": "Kopijuoti nuorodos adresą",
"Copy email address": "Kopijuoti el. pašto adresą",
"File": "Failas",
"Zoom": "Priartinti",
"Stop Speaking": "Nustoti kalbėti",
"Start Speaking": "Pradėti kalbėti",
"Unhide": "Nebeslėpti",
"Hide Others": "Slėpti kitus",
"Hide": "Slėpti",
"Services": "Paslaugos",
"About": "Apie",
"Help": "Pagalba",
"Close": "Uždaryti",
"Minimize": "Sumažinti",
"Window": "Langas",
"Preferences": "Nuostatos",
"Zoom Out": "Atitolinti",
"Zoom In": "Priartinti",
"View": "Peržiūrėti",
"Edit": "Redaguoti",
"Quit": "Išeiti",
"Show/Hide": "Rodyti/Slėpti",
"Are you sure you want to quit?": "Ar tikrai norite išeiti?",
"Cancel": "Atšaukti",
"Close %(brand)s": "Uždaryti %(brand)s"
"action": {
"cancel": "Atšaukti",
"close": "Uždaryti",
"close_brand": "Uždaryti %(brand)s",
"copy": "Kopijuoti",
"cut": "Iškirpti",
"delete": "Ištrinti",
"edit": "Koreguoti",
"minimise": "Sumažinti",
"paste": "Įklijuoti",
"paste_match_style": "Įklijuoti ir suderinti stilių",
"quit": "Išeiti",
"redo": "Sugrąžinti veiksmą",
"select_all": "Pasirinkti visus",
"show_hide": "Rodyti/Slėpti",
"undo": "Atšaukti veiksmą",
"zoom_in": "Priartinti",
"zoom_out": "Atitolinti"
},
"common": {
"about": "Apie",
"help": "Pagalba",
"preferences": "Nuostatos"
},
"confirm_quit": "Ar tikrai norite išeiti?",
"edit_menu": {
"speech": "Kalba",
"speech_start_speaking": "Pradėti kalbėti",
"speech_stop_speaking": "Nustoti kalbėti"
},
"file_menu": {
"label": "Failas"
},
"menu": {
"hide": "Slėpti",
"hide_others": "Slėpti kitus",
"services": "Paslaugos",
"unhide": "Nebeslėpti"
},
"right_click_menu": {
"add_to_dictionary": "Pridėti prie žodyno",
"copy_email": "Kopijuoti el. pašto adresą",
"copy_image": "Kopijuoti paveikslėlį",
"copy_image_url": "Kopijuoti paveikslėlio adresą",
"copy_link_url": "Kopijuoti nuorodos adresą",
"save_image_as": "Įrašyti paveikslėlį kaip...",
"save_image_as_error_description": "Paveikslėlio nepavyko išsaugoti",
"save_image_as_error_title": "Nepavyko įrašyti paveikslėlio"
},
"view_menu": {
"actual_size": "Tikrasis dydis",
"toggle_developer_tools": "Perjungti kūrėjo įrankius",
"toggle_full_screen": "Perjungti viso ekrano režimą",
"view": "Žiūrėti"
},
"window_menu": {
"bring_all_to_front": "Viską iškelti į priekį",
"label": "Langas",
"zoom": "Priartinti"
}
}

View File

@@ -1,47 +0,0 @@
{
"Start Speaking": "Uzsākt runāšanu",
"Add to dictionary": "Pievienot vārdnīcai",
"The image failed to save": "Attēlu neizdevās saglabāt",
"Failed to save image": "Neizdevās saglabāt attēlu",
"Save image as...": "Saglabāt attēlu kā...",
"Copy link address": "Ievietot saites adresi starpliktuvē",
"Copy email address": "Ievietot e-pasta adresi starpliktuvē",
"Copy image": "Ievietot attēlu starpliktuvē",
"File": "Datne",
"Bring All to Front": "Iznest visu priekšplānā",
"Zoom": "Tālummaiņa",
"Stop Speaking": "Pārtraukt runāšanu",
"Speech": "Runa",
"Unhide": "Rādīt",
"Hide Others": "Paslēpt citus",
"Hide": "Paslēpt",
"Services": "Pakalpojumi",
"About": "Par",
"Help": "Palīdzība",
"Close": "Aizvērt",
"Minimize": "Samazināt",
"Window": "Logs",
"Toggle Developer Tools": "Pārslēgt izstrādātāja rīkus",
"Toggle Full Screen": "Pārslēgt pilnekrānu",
"Preferences": "Iestatījumi",
"Zoom Out": "Tālināt",
"Zoom In": "Tuvināt",
"Actual Size": "Īstais izmērs",
"View": "Skats",
"Select All": "Atzīmēt visu",
"Delete": "Izdzēst",
"Paste and Match Style": "Ielīmēt un pielāgot stilu",
"Paste": "Ielīmēt",
"Copy": "Ievietot starpliktuvē",
"Cut": "Izgriezt",
"Redo": "Atatsaukt",
"Undo": "Atsaukt",
"Edit": "Labot",
"Quit": "Iziet",
"Show/Hide": "Parādīt/paslēpt",
"Are you sure you want to quit?": "Vai tiešām iziet?",
"Cancel": "Atcelt",
"Copy image address": "Ievietot attēla adresi starpliktuvē",
"Close %(brand)s": "Aizvērt %(brand)s",
"%(brand)s Help": "%(brand)s palīdzība"
}

View File

@@ -1,37 +0,0 @@
{
"Toggle Developer Tools": "Veksle Utvikleralternativer",
"Add to dictionary": "Legg til i ordbok",
"The image failed to save": "Bildet kunne ikke lagres",
"Failed to save image": "Kunne ikke lagre bildet",
"Save image as...": "Lagre bildet som...",
"Copy email address": "Kopier e-postadressen",
"Copy image": "Kopier bildet",
"File": "Fil",
"Stop Speaking": "Slutt å snakke",
"Start Speaking": "Begynn å snakke",
"Speech": "Tale",
"Hide": "Skjul",
"About": "Om",
"Help": "Hjelp",
"Close": "Lukk",
"Minimize": "Minimere",
"Window": "Vindu",
"Zoom Out": "Zoom ut",
"Zoom In": "Zoom inn",
"Actual Size": "Faktisk størrelse",
"View": "Se",
"Select All": "Velg alle",
"Delete": "Slett",
"Paste": "Lim inn",
"Copy": "Kopier",
"Undo": "Angre",
"Edit": "Rediger",
"Quit": "Avslutt",
"Show/Hide": "Vis/Skjul",
"Are you sure you want to quit?": "Er du sikker på at du vil slutte?",
"Cancel": "Avbryt",
"Services": "Tjenester",
"Hide Others": "Skjul Andre",
"Bring All to Front": "Flytt Alt Frem",
"Toggle Full Screen": "Veksle Fullskjerm"
}

View File

@@ -1,46 +1,60 @@
{
"Add to dictionary": "Aan woordenboek toevoegen",
"The image failed to save": "De afbeelding opslaan is mislukt",
"Failed to save image": "Afbeelding opslaan is mislukt",
"Save image as...": "Afbeelding opslaan als...",
"Copy link address": "Link kopiëren",
"Copy email address": "E-mailadres kopiëren",
"Copy image": "Afbeelding kopiëren",
"File": "Bestand",
"Bring All to Front": "Alles naar voren brengen",
"Zoom": "Zoom",
"Stop Speaking": "Stop met praten",
"Start Speaking": "Begin met praten",
"Speech": "Spraak",
"Unhide": "Weer laten zien",
"Hide Others": "Anderen verbergen",
"Hide": "Verbergen",
"Services": "Diensten",
"About": "Over",
"Help": "Help",
"Close": "Sluiten",
"Minimize": "Minimaliseren",
"Window": "Venster",
"Toggle Developer Tools": "Developer Tools wisselen",
"Toggle Full Screen": "Volledig scherm wisselen",
"Preferences": "Voorkeuren",
"Zoom Out": "Uitzoomen",
"Zoom In": "Inzoomen",
"Actual Size": "Werkelijke grootte",
"View": "Bekijken",
"Select All": "Alles selecteren",
"Delete": "Verwijderen",
"Paste and Match Style": "Plakken zonder stijl",
"Paste": "Plakken",
"Copy": "Kopiëren",
"Cut": "Knippen",
"Redo": "Opnieuw doen",
"Undo": "Ongedaan maken",
"Edit": "Bewerken",
"Quit": "Sluiten",
"Show/Hide": "Tonen/Verbergen",
"Are you sure you want to quit?": "Weet u zeker dat u wilt stoppen?",
"Cancel": "Annuleren",
"Copy image address": "Kopieer afbeeldingsadres",
"Close %(brand)s": "Sluit %(brand)s"
"action": {
"cancel": "Annuleren",
"close": "Sluiten",
"close_brand": "Sluit %(brand)s",
"copy": "Kopiëren",
"cut": "Knippen",
"delete": "Verwijderen",
"edit": "Bewerken",
"minimise": "Minimaliseren",
"paste": "Plakken",
"paste_match_style": "Plakken zonder stijl",
"quit": "Sluiten",
"redo": "Opnieuw doen",
"select_all": "Alles selecteren",
"show_hide": "Tonen/Verbergen",
"undo": "Ongedaan maken",
"zoom_in": "Inzoomen",
"zoom_out": "Uitzoomen"
},
"common": {
"about": "Over",
"preferences": "Voorkeuren"
},
"confirm_quit": "Weet u zeker dat u wilt stoppen?",
"edit_menu": {
"speech": "Spraak",
"speech_start_speaking": "Begin met praten",
"speech_stop_speaking": "Stop met praten"
},
"file_menu": {
"label": "Bestand"
},
"menu": {
"hide": "Verbergen",
"hide_others": "Anderen verbergen",
"services": "Diensten",
"unhide": "Weer laten zien"
},
"right_click_menu": {
"add_to_dictionary": "Aan woordenboek toevoegen",
"copy_email": "E-mailadres kopiëren",
"copy_image": "Afbeelding kopiëren",
"copy_image_url": "Kopieer afbeeldingsadres",
"copy_link_url": "Link kopiëren",
"save_image_as": "Afbeelding opslaan als...",
"save_image_as_error_description": "De afbeelding opslaan is mislukt",
"save_image_as_error_title": "Afbeelding opslaan is mislukt"
},
"view_menu": {
"actual_size": "Werkelijke grootte",
"toggle_developer_tools": "Developer Tools wisselen",
"toggle_full_screen": "Volledig scherm wisselen",
"view": "Bekijken"
},
"window_menu": {
"bring_all_to_front": "Alles naar voren brengen",
"label": "Venster"
}
}

View File

@@ -1,46 +0,0 @@
{
"The image failed to save": "Biletet vart ikkje lagra",
"Paste and Match Style": "Lim inn og tilpass stil",
"Redo": "Gjer om",
"Undo": "Angre",
"Are you sure you want to quit?": "Er du sikker på at du vil avslutta?",
"Add to dictionary": "Legg til i ordlista",
"Failed to save image": "Klarte ikkje å lagra biletet",
"Save image as...": "Lagre bilete som…",
"Copy link address": "Kopier lenkjeadresse",
"Copy email address": "Kopier e-postadresse",
"Copy image": "Kopier bilete",
"File": "Fil",
"Bring All to Front": "Plasser lengst fram",
"Zoom": "Zoom",
"Stop Speaking": "Stopp snakka",
"Start Speaking": "Byrja snakka",
"Speech": "Tale",
"Unhide": "Ikkje gøym",
"Hide Others": "Gøym andre",
"Hide": "Gøym",
"Services": "Tenester",
"About": "Om",
"Help": "Hjelp",
"Close": "Lat att",
"Minimize": "Minimer",
"Window": "Vindauga",
"Toggle Developer Tools": "Developer Tools av/på",
"Toggle Full Screen": "Fullskjerm av/på",
"Preferences": "Innstillingar",
"Zoom Out": "Zoom ut",
"Zoom In": "Zoom inn",
"Actual Size": "Faktisk storleik",
"View": "Vis",
"Select All": "Marker alt",
"Delete": "Slett",
"Paste": "Lim inn",
"Copy": "Lim inn",
"Cut": "Klipp ut",
"Edit": "Rediger",
"Quit": "Avslutt",
"Show/Hide": "Vis/Gøym",
"Cancel": "Avbryt",
"Copy image address": "Kopier bildeadresse",
"Close %(brand)s": "Lukk %(brand)s"
}

View File

@@ -1,47 +1,63 @@
{
"Bring All to Front": "Wyciągnij wszystko do przodu",
"Add to dictionary": "Dodaj do słownika",
"The image failed to save": "Obraz nie został zapisany",
"Failed to save image": "Nie udało się zapisać obrazu",
"Save image as...": "Zapisz obraz jako...",
"Copy link address": "Kopiuj adres odnośnika",
"Copy email address": "Kopiuj adres e-mail",
"Copy image": "Kopiuj obraz",
"File": "Plik",
"Zoom": "Powiększenie",
"Stop Speaking": "Przestań mówić",
"Start Speaking": "Zacznij mówić",
"Speech": "Mowa",
"Unhide": "Odkryj",
"Hide Others": "Ukryj inne",
"Hide": "Ukryj",
"Services": "Usługi",
"About": "O nas",
"Help": "Pomoc",
"Close": "Zamknij",
"Minimize": "Minimalizuj",
"Window": "Okno",
"Toggle Developer Tools": "Przełącz na narzędzia deweloperskie",
"Toggle Full Screen": "Przełącz na pełny ekran",
"Preferences": "Preferencje",
"Zoom Out": "Pomniejsz",
"Zoom In": "Powiększ",
"Actual Size": "Rozmiar rzeczywisty",
"View": "Pokaż",
"Select All": "Zaznacz wszystko",
"Delete": "Usuń",
"Paste and Match Style": "Wklej i dopasuj styl",
"Paste": "Wklej",
"Copy": "Kopiuj",
"Cut": "Wytnij",
"Redo": "Ponów",
"Undo": "Cofnij",
"Edit": "Edytuj",
"Quit": "Zamknij",
"Show/Hide": "Pokaż/Ukryj",
"Are you sure you want to quit?": "Czy na pewno chcesz zamknąć?",
"Cancel": "Anuluj",
"Copy image address": "Kopiuj adres obrazu",
"Close %(brand)s": "Zamknij %(brand)s",
"%(brand)s Help": "Pomoc %(brand)s"
"action": {
"cancel": "Anuluj",
"close": "Zamknij",
"close_brand": "Zamknij %(brand)s",
"copy": "Kopiuj",
"cut": "Wytnij",
"delete": "Usuń",
"edit": "Edytuj",
"minimise": "Minimalizuj",
"paste": "Wklej",
"paste_match_style": "Wklej i dopasuj styl",
"quit": "Zamknij",
"redo": "Ponów",
"select_all": "Zaznacz wszystko",
"show_hide": "Pokaż/Ukryj",
"undo": "Cofnij",
"zoom_in": "Powiększ",
"zoom_out": "Pomniejsz"
},
"common": {
"about": "Informacje",
"brand_help": "Pomoc %(brand)s",
"help": "Pomoc",
"preferences": "Preferencje"
},
"confirm_quit": "Czy na pewno chcesz zamknąć?",
"edit_menu": {
"speech": "Mowa",
"speech_start_speaking": "Zacznij mówić",
"speech_stop_speaking": "Przestań mówić"
},
"file_menu": {
"label": "Plik"
},
"menu": {
"hide": "Ukryj",
"hide_others": "Ukryj inne",
"services": "Usługi",
"unhide": "Odkryj"
},
"right_click_menu": {
"add_to_dictionary": "Dodaj do słownika",
"copy_email": "Kopiuj adres e-mail",
"copy_image": "Kopiuj obraz",
"copy_image_url": "Kopiuj adres obrazu",
"copy_link_url": "Kopiuj adres odnośnika",
"save_image_as": "Zapisz obraz jako...",
"save_image_as_error_description": "Obraz nie został zapisany",
"save_image_as_error_title": "Nie udało się zapisać obrazu"
},
"view_menu": {
"actual_size": "Rozmiar rzeczywisty",
"toggle_developer_tools": "Przełącz na narzędzia deweloperskie",
"toggle_full_screen": "Przełącz na pełny ekran",
"view": "Wyświetl"
},
"window_menu": {
"bring_all_to_front": "Wyciągnij wszystko do przodu",
"label": "Okno",
"zoom": "Powiększenie"
}
}

View File

@@ -1,46 +1,61 @@
{
"Add to dictionary": "Adicionar a dicionário",
"The image failed to save": "A imagem falhou para salvar",
"Failed to save image": "Falha para salvar imagem",
"Save image as...": "Salvar imagem como...",
"Copy link address": "Copiar endereço de link",
"Copy email address": "Copiar endereço de email",
"Copy image": "Copiar imagem",
"File": "Arquivo",
"Zoom": "Zoom",
"Stop Speaking": "Parar de Falar",
"Start Speaking": "Começar a Falar",
"Speech": "Fala",
"Unhide": "Desesconder",
"Hide": "Esconder",
"Services": "Serviços",
"About": "Sobre",
"Help": "Ajuda",
"Close": "Fechar",
"Minimize": "Minimizar",
"Window": "Janela",
"Toggle Developer Tools": "Ativar/Desativar Ferramentas de Desenvolvimento",
"Toggle Full Screen": "Pôr em/Tirar de Tela Cheia",
"Preferences": "Preferências",
"Zoom Out": "Dar Zoom Out",
"Zoom In": "Dar Zoom In",
"Actual Size": "Tamanho de Verdade",
"View": "Visualizar",
"Select All": "Selecionar Todas",
"Delete": "Deletar",
"Paste and Match Style": "Colar e Adequar Estilo",
"Paste": "Colar",
"Copy": "Copiar",
"Cut": "Cortar",
"Redo": "Refazer",
"Undo": "Desfazer",
"Edit": "Editar",
"Quit": "Sair",
"Show/Hide": "Mostrar/Esconder",
"Are you sure you want to quit?": "Você tem certeza que você quer sair?",
"Cancel": "Cancelar",
"Bring All to Front": "Trazer Todas Para Frente",
"Hide Others": "Esconder Outras(os)",
"Copy image address": "Copiar endereço de imagem",
"Close %(brand)s": "Fechar %(brand)s"
"action": {
"cancel": "Cancelar",
"close": "Fechar",
"close_brand": "Fechar %(brand)s",
"copy": "Copiar",
"cut": "Cortar",
"delete": "Excluir",
"edit": "Editar",
"minimise": "Minimizar",
"paste": "Colar",
"paste_match_style": "Colar e Adequar Estilo",
"quit": "Sair",
"redo": "Refazer",
"select_all": "Selecionar Todas",
"show_hide": "Mostrar/Esconder",
"undo": "Desfazer",
"zoom_in": "Dar Zoom In",
"zoom_out": "Dar Zoom Out"
},
"common": {
"about": "Sobre",
"help": "Ajuda",
"preferences": "Preferências"
},
"confirm_quit": "Você tem certeza que você quer sair?",
"edit_menu": {
"speech": "Fala",
"speech_start_speaking": "Começar a Falar",
"speech_stop_speaking": "Parar de Falar"
},
"file_menu": {
"label": "Arquivo"
},
"menu": {
"hide": "Esconder",
"hide_others": "Esconder Outras(os)",
"services": "Serviços",
"unhide": "Desesconder"
},
"right_click_menu": {
"add_to_dictionary": "Adicionar a dicionário",
"copy_email": "Copiar endereço de email",
"copy_image": "Copiar imagem",
"copy_image_url": "Copiar endereço de imagem",
"copy_link_url": "Copiar endereço de link",
"save_image_as": "Salvar imagem como...",
"save_image_as_error_description": "A imagem falhou para salvar",
"save_image_as_error_title": "Falha para salvar imagem"
},
"view_menu": {
"actual_size": "Tamanho de Verdade",
"toggle_developer_tools": "Ativar/Desativar Ferramentas de Desenvolvimento",
"toggle_full_screen": "Pôr em/Tirar de Tela Cheia",
"view": "Ver"
},
"window_menu": {
"bring_all_to_front": "Trazer Todas Para Frente",
"label": "Janela"
}
}

View File

@@ -1,43 +0,0 @@
{
"Add to dictionary": "Adăugați la dicționar",
"Failed to save image": "Eroare în salvarea imaginii",
"Save image as...": "Salvează imagine ca ...",
"Copy link address": "Copiază link",
"Copy email address": "Copiază adresă de email",
"Copy image": "Copiază imagine",
"File": "Fișier",
"Bring All to Front": "Aduce-ți totul in față",
"Zoom": "Zoom",
"Stop Speaking": "Oprire Voce",
"Start Speaking": "Pornire Voce",
"Speech": "Voce",
"Hide Others": "Ascunde restul",
"Hide": "Ascunde",
"Services": "Servicii",
"About": "Despre",
"Help": "Ajutor",
"Close": "Inchide",
"Minimize": "Minimizare",
"Window": "Fereastră",
"Toggle Developer Tools": "Comutare unelte dezvoltator",
"Toggle Full Screen": "Comutare pe tot ecranul",
"Preferences": "Preferințe",
"Zoom Out": "Micșorează",
"Zoom In": "Mărește",
"Actual Size": "Mărime reală",
"View": "Vizualizează",
"Select All": "Selectează tot",
"Delete": "Șterge",
"Paste and Match Style": "Lipește si potrivește stilul",
"Paste": "Lipește",
"Copy": "Copiază",
"Redo": "Refă",
"Undo": "Anulare",
"Edit": "Editare",
"Quit": "Închid",
"Show/Hide": "Arată/Ascunde",
"Are you sure you want to quit?": "Sigur vrei să ieși din cont?",
"Cancel": "Anulare",
"Close %(brand)s": "Închide %(brand)s",
"Cut": "Taie"
}

View File

@@ -1,47 +1,63 @@
{
"Edit": "Изменить",
"Quit": "Выйти",
"Cancel": "Отмена",
"Show/Hide": "Показать/скрыть",
"Are you sure you want to quit?": "Вы уверены, что хотите выйти?",
"Copy email address": "Копировать адрес почты",
"Copy image": "Копировать изображение",
"File": "Файл",
"Zoom": "Масштаб",
"Unhide": "Показать",
"Hide": "Скрыть",
"Services": "Службы",
"About": "О программе",
"Help": "Помощь",
"Close": "Закрыть",
"Minimize": "Свернуть",
"Window": "Окно",
"Toggle Developer Tools": "Переключить инструменты разработчика",
"Toggle Full Screen": "Переключить полноэкранный режим",
"Preferences": "Предпочтения",
"Zoom Out": "Уменьшить",
"Zoom In": "Увеличить",
"Actual Size": "Фактический размер",
"View": "Просмотр",
"Select All": "Выбрать все",
"Delete": "Удалить",
"Paste": "Вставить",
"Copy": "Копировать",
"Cut": "Вырезать",
"Redo": овторить",
"Undo": "Отменить",
"Save image as...": "Сохранить изображение как...",
"Copy link address": "Копировать ссылку",
"Add to dictionary": "Добавить в словарь",
"The image failed to save": "Не удалось сохранить изображение",
"Failed to save image": "Не удалось сохранить изображение",
"Bring All to Front": "Вынести всё вперёд",
"Stop Speaking": "Перестаньте говорить",
"Start Speaking": "Говорите",
"Speech": "Речь",
"Hide Others": "Скрыть прочие",
"Paste and Match Style": "Вставить с тем же стилем",
"Copy image address": "Копировать адрес изображения",
"Close %(brand)s": "Закрыть %(brand)s",
"%(brand)s Help": "Помощь %(brand)s"
"action": {
"cancel": "Отмена",
"close": "Закрыть",
"close_brand": "Закрыть %(brand)s",
"copy": "Копировать",
"cut": "Вырезать",
"delete": "Удалить",
"edit": "Изменить",
"minimise": "Свернуть",
"paste": "Вставить",
"paste_match_style": "Вставить с тем же стилем",
"quit": "Выйти",
"redo": "Повторить",
"select_all": "Выбрать все",
"show_hide": "Показать/скрыть",
"undo": "Отменить",
"zoom_in": "Увеличить",
"zoom_out": "Уменьшить"
},
"common": {
"about": "О программе",
"brand_help": "Помощь %(brand)s",
"help": "Помощь",
"preferences": "Предпочтения"
},
"confirm_quit": "Вы уверены, что хотите выйти?",
"edit_menu": {
"speech": "Речь",
"speech_start_speaking": "Говорите",
"speech_stop_speaking": "Перестаньте говорить"
},
"file_menu": {
"label": "Файл"
},
"menu": {
"hide": "Скрыть",
"hide_others": "Скрыть прочие",
"services": "Службы",
"unhide": "Показать"
},
"right_click_menu": {
"add_to_dictionary": "Добавить в словарь",
"copy_email": "Копировать адрес почты",
"copy_image": "Копировать изображение",
"copy_image_url": "Копировать адрес изображения",
"copy_link_url": "Копировать ссылку",
"save_image_as": "Сохранить изображение как...",
"save_image_as_error_description": "Не удалось сохранить изображение",
"save_image_as_error_title": "Не удалось сохранить изображение"
},
"view_menu": {
"actual_size": "Фактический размер",
"toggle_developer_tools": "Переключить инструменты разработчика",
"toggle_full_screen": "Переключить полноэкранный режим",
"view": "Просмотр"
},
"window_menu": {
"bring_all_to_front": "Вынести всё вперёд",
"label": "Окно",
"zoom": "Масштаб"
}
}

View File

@@ -1,45 +0,0 @@
{
"Show/Hide": "පෙන්වන්න/සඟවන්න",
"Are you sure you want to quit?": "ඔබට ඉවත් වීමට අවශ්‍ය බව විශ්වාස ද?",
"Cancel": "අවලංගු කරන්න",
"Add to dictionary": "ශබ්ද කෝෂයට එකතු කරන්න",
"Copy link address": "සබැඳියේ ලිපිනය පිටපත් කරන්න",
"Copy email address": "වි-තැපෑල පිටපත් කරන්න",
"File": "ගොනුව",
"Zoom": "විශාල කරන්න",
"Hide Others": "වෙනත් දෑ සඟවන්න",
"Hide": "සඟවන්න",
"Services": "සේවා",
"About": "පිළිබඳව",
"Help": "උපකාර",
"Close": "වසන්න",
"Minimize": "හකුලන්න",
"Window": "කවුළුව",
"Zoom Out": "කුඩාලනය කරන්න",
"Zoom In": "විශාලනය කරන්න",
"Actual Size": "සැබෑ ප්‍රමාණය",
"Select All": "සියල්ල තෝරන්න",
"Paste": "අලවන්න",
"Copy": "පිටපත්",
"Cut": "කපන්න",
"Redo": "පසුසේ",
"Undo": "පෙරසේ",
"Edit": "සංස්කරණය",
"Quit": "ඉවත් වන්න",
"Paste and Match Style": "අලවා ශෛලිය ගැළපුම",
"Delete": "මකන්න",
"The image failed to save": "රූපය සුරැකීමට අසමත්",
"Failed to save image": "රූපය සුරැකීමට අසමත්",
"Save image as...": "...ලෙස රූපය සුරකින්න",
"Copy image address": "රූපයේ ලිපිනයේ පිටපතක්",
"Copy image": "රූපයෙහි පිටපතක්",
"Bring All to Front": "සියල්ල ඉදිරිපසට",
"Stop Speaking": "කථාව නිමාව",
"Start Speaking": "කථාව ආරම්භය",
"Speech": "කථාව",
"Unhide": "නොසඟවන්න",
"Toggle Developer Tools": "සංවර්ධක මෙවලම්",
"Toggle Full Screen": "පූර්ණ තිරයට",
"Preferences": "පෙනුම",
"View": "දකින්න"
}

View File

@@ -1,47 +1,63 @@
{
"Unhide": "Odkryť",
"Stop Speaking": "Zastaviť nahrávanie hlasu",
"Start Speaking": "Spustiť nahrávanie hlasu",
"Speech": "Reč",
"Paste and Match Style": "Vložiť a prispôsobiť štýl",
"Add to dictionary": "Pridať do slovníka",
"The image failed to save": "Obrázok sa nepodarilo uložiť",
"Failed to save image": "Chyba pri ukladaní obrázka",
"Save image as...": "Uložiť obrázok ako...",
"Copy link address": "Kopírovať adresu odkazu",
"Copy email address": "Kopírovať e-mailovú adresu",
"Copy image": "Kopírovať obrázok",
"File": "Súbor",
"Bring All to Front": "Preniesť všetky do popredia",
"Zoom": "Lupa",
"Hide Others": "Skryť ostatné",
"Hide": "Skryť",
"Services": "Služby",
"About": "O aplikácii",
"Help": "Pomocník",
"Close": "Zavrieť",
"Minimize": "Minimalizovať",
"Window": "Okno",
"Toggle Developer Tools": "Nástroje pre vývojárov",
"Toggle Full Screen": "Celá obrazovka",
"Preferences": "Vlastnosti",
"Zoom Out": "Oddialiť",
"Zoom In": "Priblížiť",
"Actual Size": "Aktuálna veľkosť",
"View": "Zobraziť",
"Select All": "Vybrať všetko",
"Delete": "Odstrániť",
"Paste": "Vložiť",
"Copy": "Kopírovať",
"Cut": "Vystrihnúť",
"Redo": "Opakovať",
"Undo": "Späť",
"Edit": "Úpravy",
"Quit": "Ukončiť",
"Show/Hide": "Zobraziť/Skryť",
"Are you sure you want to quit?": "Naozaj chcete zavrieť aplikáciu?",
"Cancel": "Zrušiť",
"Copy image address": "Kopírovať adresu obrázka",
"Close %(brand)s": "Zatvoriť %(brand)s",
"%(brand)s Help": "%(brand)s Pomoc"
"action": {
"cancel": "Zrušiť",
"close": "Zavrieť",
"close_brand": "Zatvoriť %(brand)s",
"copy": "Kopírovať",
"cut": "Vystrihnúť",
"delete": "Odstrániť",
"edit": "Upraviť",
"minimise": "Minimalizovať",
"paste": "Vložiť",
"paste_match_style": "Vložiť a prispôsobiť štýl",
"quit": "Ukončiť",
"redo": "Opakovať",
"select_all": "Vybrať všetko",
"show_hide": "Zobraziť/Skryť",
"undo": "Späť",
"zoom_in": "Priblížiť",
"zoom_out": "Oddialiť"
},
"common": {
"about": "Informácie",
"brand_help": "%(brand)s Pomoc",
"help": "Pomocník",
"preferences": "Predvoľby"
},
"confirm_quit": "Naozaj chcete zavrieť aplikáciu?",
"edit_menu": {
"speech": "Reč",
"speech_start_speaking": "Spustiť nahrávanie hlasu",
"speech_stop_speaking": "Zastaviť nahrávanie hlasu"
},
"file_menu": {
"label": "Súbor"
},
"menu": {
"hide": "Skryť",
"hide_others": "Skryť ostatné",
"services": "Služby",
"unhide": "Odkryť"
},
"right_click_menu": {
"add_to_dictionary": "Pridať do slovníka",
"copy_email": "Kopírovať e-mailovú adresu",
"copy_image": "Kopírovať obrázok",
"copy_image_url": "Kopírovať adresu obrázka",
"copy_link_url": "Kopírovať adresu odkazu",
"save_image_as": "Uložiť obrázok ako...",
"save_image_as_error_description": "Obrázok sa nepodarilo uložiť",
"save_image_as_error_title": "Chyba pri ukladaní obrázka"
},
"view_menu": {
"actual_size": "Aktuálna veľkosť",
"toggle_developer_tools": "Nástroje pre vývojárov",
"toggle_full_screen": "Celá obrazovka",
"view": "Zobraziť"
},
"window_menu": {
"bring_all_to_front": "Preniesť všetky do popredia",
"label": "Okno",
"zoom": "Lupa"
}
}

View File

@@ -1,47 +0,0 @@
{
"Undo": "Razveljavi",
"Redo": "Uveljavi",
"Copy": "Kopiraj",
"Paste": "Prilepi",
"Actual Size": "Dejanska velikost",
"Zoom Out": "Oddalji",
"Window": "Okno",
"Minimize": "Zmanjšaj",
"Help": "Pomoč",
"About": "O programu",
"Services": "Storitve",
"Hide Others": "Skrij ostalo",
"Unhide": "Razkrij",
"Speech": "Govor",
"Copy link address": "Kopiraj naslov povezave",
"Add to dictionary": "Dodaj v slovar",
"Cancel": "Prekliči",
"Close %(brand)s": "Zapri %(brand)s",
"Are you sure you want to quit?": "Ste prepričani, da želite zapreti program?",
"Show/Hide": "Prikaži/Skrij",
"Quit": "Končaj",
"Edit": "Uredi",
"Cut": "Izreži",
"Paste and Match Style": "Prilepi ter obdrži oblikovanje",
"Delete": "Izbriši",
"Select All": "Izberi vse",
"View": "Poglej",
"Zoom In": "Približaj",
"Preferences": "Nastavitve",
"Toggle Full Screen": "Preklopi čez cel zaslon",
"Toggle Developer Tools": "Preklopi na orodja za razvijalce",
"Close": "Zapri",
"%(brand)s Help": "%(brand)s pomoč",
"Hide": "Skrij",
"Start Speaking": "Začnite govoriti",
"Stop Speaking": "Prenehajte govoriti",
"Zoom": "Povečaj",
"Bring All to Front": "Postavi vse v ospredje",
"File": "Datoteka",
"Copy image": "Kopiraj sliko",
"Copy email address": "Kopiraj e-poštni naslov",
"Copy image address": "Kopiraj naslov slike",
"Save image as...": "Shrani sliko kot...",
"Failed to save image": "Shranjevanje slike ni uspelo",
"The image failed to save": "Slike ni bilo mogoče shraniti"
}

17
src/i18n/strings/sq.json Normal file
View File

@@ -0,0 +1,17 @@
{
"action": {
"cancel": "Anuloje",
"close": "Mbylle",
"copy": "Kopjoje",
"delete": "Fshije",
"edit": "Përpuno"
},
"common": {
"about": "Mbi",
"help": "Ndihmë",
"preferences": "Parapëlqime"
},
"view_menu": {
"view": "Shihni"
}
}

View File

@@ -1,47 +1,63 @@
{
"Save image as...": "Spara bild som…",
"Copy link address": "Kopiera länkadress",
"Copy email address": "Kopiera e-postadress",
"Copy image": "Kopiera bild",
"File": "Arkiv",
"Bring All to Front": "Lägg alla överst",
"Stop Speaking": "Sluta tala",
"Start Speaking": "Börja tala",
"Speech": "Tal",
"Hide Others": "Göm övriga",
"Hide": "Göm",
"Services": "Tjänster",
"About": "Om",
"Help": "Hjälp",
"Close": "Stäng",
"Minimize": "Minimera",
"Window": "Fönster",
"Preferences": "Inställningar",
"Actual Size": "Verklig storlek",
"View": "Visa",
"Select All": "Markera allt",
"Delete": "Radera",
"Paste and Match Style": "Klistra in och matcha stilen",
"Paste": "Klistra in",
"Copy": "Kopiera",
"Cut": "Klipp ut",
"Redo": "Gör om",
"Undo": "Ångra",
"Edit": "Redigera",
"Quit": "Avsluta",
"Cancel": "Avbryt",
"Zoom": "Zooma",
"Toggle Developer Tools": "Växla utvecklarverktyg",
"Toggle Full Screen": "Växla helskärm",
"Unhide": "Sluta gömma",
"Zoom Out": "Zooma ut",
"Zoom In": "Zooma in",
"Show/Hide": "Visa/dölj",
"Add to dictionary": "Lägg till i ordlistan",
"The image failed to save": "Bilden sparades inte",
"Failed to save image": "Misslyckades med att spara bilden",
"Are you sure you want to quit?": "Är du säker att du vill avsluta?",
"Copy image address": "Kopiera bildadress",
"Close %(brand)s": "Stäng %(brand)s",
"%(brand)s Help": "%(brand)s-hjälp"
"action": {
"cancel": "Avbryt",
"close": "Stäng",
"close_brand": "Stäng %(brand)s",
"copy": "Kopiera",
"cut": "Klipp ut",
"delete": "Radera",
"edit": "Ändra",
"minimise": "Minimera",
"paste": "Klistra in",
"paste_match_style": "Klistra in och matcha stilen",
"quit": "Avsluta",
"redo": "Gör om",
"select_all": "Markera allt",
"show_hide": "Visa/dölj",
"undo": "Ångra",
"zoom_in": "Zooma in",
"zoom_out": "Zooma ut"
},
"common": {
"about": "Om",
"brand_help": "%(brand)s-hjälp",
"help": "Hjälp",
"preferences": "Inställningar"
},
"confirm_quit": "Är du säker att du vill avsluta?",
"edit_menu": {
"speech": "Tal",
"speech_start_speaking": "Börja tala",
"speech_stop_speaking": "Sluta tala"
},
"file_menu": {
"label": "Arkiv"
},
"menu": {
"hide": "Göm",
"hide_others": "Göm övriga",
"services": "Tjänster",
"unhide": "Sluta gömma"
},
"right_click_menu": {
"add_to_dictionary": "Lägg till i ordlistan",
"copy_email": "Kopiera e-postadress",
"copy_image": "Kopiera bild",
"copy_image_url": "Kopiera bildadress",
"copy_link_url": "Kopiera länkadress",
"save_image_as": "Spara bild som…",
"save_image_as_error_description": "Bilden sparades inte",
"save_image_as_error_title": "Misslyckades med att spara bilden"
},
"view_menu": {
"actual_size": "Verklig storlek",
"toggle_developer_tools": "Växla utvecklarverktyg",
"toggle_full_screen": "Växla helskärm",
"view": "Visa"
},
"window_menu": {
"bring_all_to_front": "Lägg alla överst",
"label": "Fönster",
"zoom": "Zooma"
}
}

View File

@@ -1,46 +0,0 @@
{
"Zoom": "பெரிதாக்குதல்",
"Minimize": "சிறிதாக்கு",
"Toggle Developer Tools": "உருவாக்குநர் கருவிகளை நிலைமாற்று",
"Toggle Full Screen": "முழு திரையை நிலைமாற்று",
"Paste and Match Style": "ஒட்டு மற்றும் நடையை பொருத்து",
"Add to dictionary": "அகராதியில் சேர்",
"The image failed to save": "படம் சேமிக்கத் தவறிவிட்டது",
"Failed to save image": "படத்தைச் சேமிப்பதில் தோல்வி",
"Save image as...": "படத்தை இவ்வாறு சேமி...",
"Copy link address": "இணைப்பு முகவரியை நகலெடு",
"Copy email address": "மின்னஞ்சல் முகவரியை நகலெடு",
"Copy image": "படத்தை நகலெடு",
"File": "கோப்பு",
"Bring All to Front": "அனைத்தையும் முன்னால் கொண்டுவா",
"Stop Speaking": "பேசுவதை நிறுத்து",
"Start Speaking": "பேசத் துவங்கு",
"Speech": "பேச்சு",
"Unhide": "மறைநீக்கு",
"Hide Others": "மற்றவற்றை மறை",
"Hide": "மறை",
"Services": "சேவைகள்",
"About": "இதனைப் பற்றி",
"Help": "உதவி",
"Close": "மூடு",
"Window": "சாளரம்",
"Preferences": "விருப்பத்தேர்வுகள்",
"Zoom Out": "சிறிதாக்கு",
"Zoom In": "பெரிதாக்கு",
"Actual Size": "உண்மையான அளவு",
"View": "காட்டு",
"Select All": "அனைத்தையும் தேர்ந்தெடு",
"Delete": "அழி",
"Paste": "ஒட்டு",
"Copy": "நகலெடு",
"Cut": "வெட்டு",
"Redo": "மீண்டும் செய்",
"Undo": "செயல்தவிர்",
"Edit": "திருத்து",
"Quit": "வெளியேறு",
"Show/Hide": "காட்டு/மறை",
"Are you sure you want to quit?": "நீங்கள் நிச்சயம் வெளியேற விரும்புகிறீர்களா?",
"Cancel": "விலக்கிக்கொள்",
"Copy image address": "பட முகவரியை நகலெடு",
"Close %(brand)s": "%(brand)s ஐ மூடு"
}

View File

@@ -1,9 +0,0 @@
{
"About": "గ్రెంచ్",
"Paste and Match Style": "మునుపటి వంటి అతికించండి",
"Paste": "పేస్ట్",
"Cut": "కట్",
"Copy": "కాపీ",
"Are you sure you want to quit?": "మీరు వెళ్ళిపోవాలని అనుకుంటున్నారా?",
"Cancel": "ఆపు"
}

View File

@@ -1,16 +0,0 @@
{
"Hide": "Itago",
"Delete": "Alisin",
"Paste and Match Style": "I-paste at Tumugma ng Style",
"Paste": "I-paste",
"Copy": "I-copy",
"Cut": "I-cut",
"Redo": "Redo",
"Undo": "Undo",
"Edit": "I-edit",
"Quit": "Magsara",
"Show/Hide": "Ipakita/itago",
"Are you sure you want to quit?": "Sigurado ka ba na gusto mong magsara?",
"Close %(brand)s": "Isara ang %(brand)s",
"Cancel": "Kanselahin"
}

View File

@@ -1,45 +0,0 @@
{
"Add to dictionary": "Sözlüğe ekle",
"The image failed to save": "Bu resim kaydedilemedi",
"Failed to save image": "Resim kaydedilemedi",
"Save image as...": "Resmi ... olarak farklı kaydet",
"Copy link address": "Bağlantılı adresi kopyala",
"Copy email address": "E-posta adresini kopyala",
"Copy image": "Resmi kopyala",
"File": "Dosya",
"Bring All to Front": "Hepsini öne getir",
"Zoom": "Yaklaştır",
"Stop Speaking": "Konuşmayı durdur",
"Start Speaking": "Konuşmaya başla",
"Speech": "Konuşma",
"Unhide": "Gizlemeyi bırak",
"Hide Others": "Diğerlerini gizle",
"Hide": "Gizle",
"Services": "Hizmetler",
"About": "Hakkında",
"Help": "Yardım",
"Close": "Kapat",
"Minimize": "Küçült",
"Window": "Pencere",
"Toggle Developer Tools": "Geliştirici araçları",
"Toggle Full Screen": "Tam ekran",
"Preferences": "Tercihler",
"Zoom Out": "Uzaklaştır",
"Zoom In": "Yaklaştır",
"Actual Size": "Gerçek boyut",
"View": "Görünüm",
"Select All": "Tümünü seç",
"Delete": "Sil",
"Paste and Match Style": "Biçimiyle bir yapıştır",
"Paste": "Yapıştır",
"Copy": "Kopyala",
"Cut": "Kes",
"Redo": "Yinele",
"Undo": "Geri al",
"Edit": "Düzenle",
"Quit": ık",
"Show/Hide": "Göster/Gizle",
"Are you sure you want to quit?": ıkmak istediğinize emin misiniz?",
"Cancel": "İptal",
"Copy image address": "Görsel adresini kopyala"
}

Some files were not shown because too many files have changed in this diff Show More