Compare commits

..

172 Commits

Author SHA1 Message Date
Alexander Blair
33afd0bb83 Merge pull request #3180
954c9725 repo: prepare v0.17.1.1 (selsta)
2020-10-19 00:14:37 -07:00
Alexander Blair
a165a14519 Merge pull request #3181
6ee5effc Wallet: fix different signedness comparison (-Werror=sign-compare) (xiphon)
2020-10-19 00:14:12 -07:00
Alexander Blair
33e1801c57 Merge pull request #3175
e5b0837c SettingsNode: ignore selecting the same mode twice (xiphon)
2020-10-19 00:13:24 -07:00
Alexander Blair
fac3fcb518 Merge pull request #3174
a73ae625 DaemonManager: set out-peers to 16 in simple mode / bootstrap (selsta)
2020-10-19 00:12:52 -07:00
Alexander Blair
8457055f08 Merge pull request #3172
44df1bcc cmake: fix install targets (Bertrand Jacquin)
2020-10-19 00:12:31 -07:00
Alexander Blair
e01c847fde Merge pull request #3171
0a0dbf88 WizardRestoreWallet1: fix "wallet name" check in keys mode (selsta)
2020-10-19 00:12:05 -07:00
Alexander Blair
bedf04d08a Merge pull request #3161
b932df85 Wallet: interrupt refresh thread on wallet close (xiphon)
2020-10-19 00:11:35 -07:00
Alexander Blair
83da709436 Merge pull request #3158
79ee8934 History: fix failed and pending tx statuses (xiphon)
2020-10-19 00:11:09 -07:00
Alexander Blair
f51b0d7d0c Merge pull request #3156
1b2d9408 Makefile: add 'release-linux-armv8' target (xiphon)
2020-10-19 00:10:31 -07:00
Alexander Blair
1f9d60602a Merge pull request #3155
db4273ee NetworkStatusItem: 'starting/stopping the node' status (no splash) (xiphon)
2020-10-19 00:10:19 -07:00
Alexander Blair
7a285b3613 Merge pull request #3136
05733c14 Transfer: fix help text (white theme) (selsta)
2020-10-19 00:09:52 -07:00
xiphon
6ee5effc15 Wallet: fix different signedness comparison (-Werror=sign-compare)
Co-authored-by: Bertrand Jacquin <bertrand@jacquin.bzh>
2020-10-18 20:58:40 +00:00
selsta
954c972530 repo: prepare v0.17.1.1 2020-10-18 18:01:44 +02:00
xiphon
e5b0837c8e SettingsNode: ignore selecting the same mode twice 2020-10-18 02:53:57 +00:00
selsta
a73ae62526 DaemonManager: set out-peers to 16 in simple mode / bootstrap 2020-10-18 02:07:29 +02:00
Bertrand Jacquin
44df1bccfc cmake: fix install targets
Binary should be installed in bin/ relative to CMAKE_INSTALL_PREFIX,
prior to this commit, monero-wallet-gui is installed in usr/ instead of
usr/bin

  -- Installing: image/usr/monero-wallet-gui

With this comment, file is installed in the right location:

  -- Installing: image/usr/bin/monero-wallet-gui

See: https://cmake.org/cmake/help/latest/command/install.html
2020-10-17 23:08:21 +01:00
selsta
0a0dbf8853 WizardRestoreWallet1: fix "wallet name" check in keys mode 2020-10-17 20:23:29 +02:00
xiphon
b932df85fd Wallet: interrupt refresh thread on wallet close 2020-10-17 02:58:23 +00:00
xiphon
79ee893499 History: fix failed and pending tx statuses 2020-10-15 10:23:06 +00:00
xiphon
1b2d940850 Makefile: add 'release-linux-armv8' target 2020-10-14 15:51:29 +00:00
xiphon
db4273ee82 NetworkStatusItem: 'starting/stopping the node' status (no splash) 2020-10-14 02:26:56 +00:00
luigi1111
cb1f3ad0ce Merge pull request #3153
701f063 build: prepare v0.17.1.0 (selsta)
2020-10-13 12:41:38 -05:00
luigi1111
c81a842b6e Merge pull request #3150
6ed5369 cmake: set CMAKE_SKIP_RPATH on Linux to fix empty RPATH token issue (xiphon)
2020-10-13 12:40:39 -05:00
luigi1111
26ad7b78b5 Merge pull request #3147
4661167 onTransactionCommitted: don't show informationPopup on success (xiphon)
2020-10-13 12:39:34 -05:00
luigi1111
381442a138 Merge pull request #3145
39d9d7d Wallet: rework wallet refreshing (xiphon)
2020-10-13 12:38:40 -05:00
luigi1111
7cb24f50b8 Merge pull request #3143
8ad5fd4 main: wizard: console.log fixes (selsta)
2020-10-13 12:37:55 -05:00
luigi1111
8c5891e28a Merge pull request #3141
3c28ece Logger: runtime log config, no logs till a user selects wallet mode (xiphon)
2020-10-13 12:36:49 -05:00
luigi1111
61c0e15404 Merge pull request #3138
b76b43d README: minor sponsorships fixes (selsta)
2020-10-13 12:35:58 -05:00
luigi1111
b03714ec45 Merge pull request #3131
21d8c09 cmake: remove unused code (xiphon)
2020-10-13 12:35:12 -05:00
selsta
701f063797 build: prepare v0.17.1.0 2020-10-13 18:28:23 +02:00
xiphon
6ed5369829 cmake: set CMAKE_SKIP_RPATH on Linux to fix empty RPATH token issue 2020-10-11 19:51:05 +00:00
xiphon
4661167734 onTransactionCommitted: don't show informationPopup on success 2020-10-10 14:26:20 +00:00
xiphon
39d9d7d071 Wallet: rework wallet refreshing 2020-10-09 14:11:05 +00:00
selsta
8ad5fd4c76 main: wizard: console.log fixes 2020-10-08 21:24:55 +02:00
xiphon
3c28ecef93 Logger: runtime log config, no logs till a user selects wallet mode 2020-10-08 18:28:07 +00:00
luigi1111
d3943ca2a9 Merge pull request #3130
13ca3ee KeysFiles: QDirIterator is initially located before the first entry (xiphon)
2020-10-08 10:34:53 -05:00
luigi1111
73f76cec99 Merge pull request #3129
4cea7e1 docker: Linux - update freetype2 git source (xiphon)
2020-10-08 10:32:37 -05:00
selsta
b76b43da6c README: minor sponsorships fixes 2020-10-08 01:46:06 +02:00
selsta
05733c14b7 Transfer: fix help text (white theme) 2020-10-07 12:59:33 +02:00
xiphon
21d8c096ff cmake: remove unused code 2020-10-06 13:21:37 +00:00
xiphon
13ca3eeb84 KeysFiles: QDirIterator is initially located before the first entry 2020-10-05 12:36:00 +00:00
xiphon
4cea7e1647 docker: Linux - update freetype2 git source 2020-10-04 23:48:33 +00:00
luigi1111
afc2e846fd Merge pull request #3123
0b7cf4a cmake: update version (selsta)
2020-10-04 17:54:22 -05:00
luigi1111
c601313943 Merge pull request #3127
ff51dd0 History: fix amount handling for txex sent to the same account (xiphon)
2020-10-04 17:52:47 -05:00
luigi1111
73c0522a56 Merge pull request #3126
4768968 Translations from Weblate (erciccione)
2020-10-04 17:51:41 -05:00
luigi1111
06a66e3a00 Merge pull request #3122
caff619 workflows: don't brew update (selsta)
2020-10-04 17:43:16 -05:00
luigi1111
12355deb94 Merge pull request #3121
e2a82c9 Transfer: create SuccessfulTxDialog (rating89us)
2020-10-04 17:41:44 -05:00
luigi1111
cbbbf30198 Merge pull request #3120
7af0999 LeftPanel: add missing emptyString (selsta)
2020-10-04 17:40:10 -05:00
luigi1111
40e108eb2b Merge pull request #3026
4208b66 WizardModeSelection: optional 'Portable mode' feature support (xiphon)
2020-10-04 17:39:09 -05:00
luigi1111
cdfe9f338f Merge pull request #3025
f5c5df7 main: accountsDir runtime configuration support (xiphon)
2020-10-04 17:38:14 -05:00
luigi1111
adb04cef71 Merge pull request #3023
1aa98c3 MoneroSettings: portable mode, CWD relative 'monero-storage' dir (xiphon)
2020-10-04 17:37:21 -05:00
luigi1111
1123dd7046 Merge pull request #2992
f1fdbee history: 'in'/'to' fields + address labels + width/height + fix amounts (rating89us)
2020-10-04 17:35:45 -05:00
rating89us
f1fdbee25d history: "in"/"to" fields + address labels + width/height + fix amounts 2020-10-02 20:38:03 +02:00
xiphon
ff51dd08d3 History: fix amount handling for txex sent to the same account 2020-10-02 11:12:20 +00:00
erciccione
476896864c Translations from Weblate
Credits:

Spanish

    Michael Russo
    G.T.S.
    kombometralla
    CharlesCrisco
    nemecis rojas
    porokon7
    Viktor

Italian

    78carla
    erciccione
    Gleb Golov
    Anonymous

Russian

    Agent LvM
    solevoy-psih
    v1docq47
    Anonymous
    TheFuzzStone
    Russian Bear
    translator133

Portuguese (Portugal)

    Peter J. Mello
    EvolBit
    Anonymous

French

    icuntcode
    Bertrand Jacquin
    el00ruobuob
    Anonymous

Hindi

    srk raidu

Polish

    To Ja
    Anonymous

Portuguese (Brazil)

    vp11
    netrik182

Dutch

    Jaimie
    Jonathan Heirbaut
    Marcus
    obit33

German

    Paul Janowitz
    SJ
    Wobole
    Anonymous
    GreenPiece
2020-10-01 10:59:38 +02:00
selsta
0b7cf4a544 cmake: update version 2020-09-30 02:52:10 +02:00
selsta
caff6193f2 workflows: don't brew update 2020-09-30 01:58:57 +02:00
rating89us
e2a82c9037 Transfer: create SuccessfulTxDialog 2020-09-30 00:30:57 +02:00
luigi1111
28ee4164cd Merge pull request #3118
0d8e363 README: update to cmake (selsta)
2020-09-29 12:50:12 -05:00
selsta
7af099958e LeftPanel: add missing emptyString 2020-09-29 15:18:48 +02:00
selsta
0d8e363407 README: update to cmake 2020-09-29 15:01:03 +02:00
Alexander Blair
7306b84d41 Merge pull request #3117
67c47d46 DEPLOY: update with cmake (selsta)
2020-09-28 19:10:53 -07:00
Alexander Blair
9d25f7230b Merge pull request #3113
5b5c0ac6 workflows: cache docker build environment images (xiphon)
2020-09-28 19:10:26 -07:00
Alexander Blair
b28f2dae33 Merge pull request #3112
4c257aff docker: reduce Linux build environment image size (xiphon)
2020-09-28 19:09:58 -07:00
Alexander Blair
619b2d7947 Merge pull request #3111
be1f63f9 PasswordDialog: configurable Ok btn text/icon, non-primary Cancel (xiphon)
2020-09-28 19:09:32 -07:00
Alexander Blair
a23c49e5b6 Merge pull request #3110
9df9cb8d build: enable USE_SINGLE_BUILDDIR by default, OFF to disable (selsta)
2020-09-28 19:09:05 -07:00
Alexander Blair
61fc38b29c Merge pull request #3091
1b4c2170 build: set submodule to v0.17.0.1 (selsta)
2020-09-28 19:07:39 -07:00
Alexander Blair
22386aa7e1 Merge pull request #3089
0fcaadae main: command line option for socks5 proxy (selsta)
2020-09-28 19:06:58 -07:00
xiphon
f5c5df7b67 main: accountsDir runtime configuration support 2020-09-28 13:54:02 +00:00
xiphon
1aa98c3cfd MoneroSettings: portable mode, CWD relative 'monero-storage' dir 2020-09-28 13:50:01 +00:00
selsta
67c47d468c DEPLOY: update with cmake 2020-09-28 03:28:51 +02:00
selsta
0fcaadae53 main: command line option for socks5 proxy 2020-09-28 01:57:47 +02:00
xiphon
5b5c0ac658 workflows: cache docker build environment images 2020-09-26 14:26:53 +00:00
selsta
1b4c21700f build: set submodule to v0.17.0.1 2020-09-26 02:54:11 +02:00
selsta
9df9cb8da7 build: enable USE_SINGLE_BUILDDIR by default, OFF to disable 2020-09-26 02:15:58 +02:00
luigi1111
a32d39cc96 Merge pull request #3108
b12ec3b QR-Code-generator: remove from repo, use monero qrcodegen (selsta)
2020-09-25 18:27:48 -05:00
luigi1111
8ef7b7c89a Merge pull request #3106
839167a workflows: add static docker build (selsta)
2020-09-25 18:26:45 -05:00
luigi1111
1ef96f9544 Merge pull request #3105
b9e74f6 cmake: support ARCH and BUILD_64 overriding (xiphon)
2020-09-25 18:25:15 -05:00
luigi1111
d413b16d34 Merge pull request #3103
87400e7 cmake: add deploy target (mac / windows) (selsta)
2020-09-25 18:24:24 -05:00
luigi1111
37fea0ee33 Merge pull request #3101
9123988 main: Tails - enable 127.0.0.1:9050 socks5 proxy by default (xiphon)
2020-09-25 18:23:35 -05:00
selsta
b12ec3b0f0 QR-Code-generator: remove from repo, use monero qrcodegen 2020-09-25 01:37:29 +02:00
xiphon
4c257aff67 docker: reduce Linux build environment image size 2020-09-24 15:40:15 +00:00
xiphon
be1f63f93d PasswordDialog: configurable Ok btn text/icon, non-primary Cancel
Co-authored-by: rating89us <45968869+rating89us@users.noreply.github.com>
2020-09-24 14:32:52 +00:00
selsta
839167aff5 workflows: add static docker build 2020-09-24 08:25:04 +02:00
selsta
87400e781e cmake: add deploy target (mac / windows) 2020-09-24 04:28:53 +02:00
luigi1111
98ce87a572 Merge pull request #3102
270b86b workflows: remove qmake (selsta)
2020-09-22 10:43:38 -05:00
luigi1111
d555ba55a9 Merge pull request #3099
2d464a1 docker: Windows static build (cross-compilation from Linux) (xiphon)
2020-09-22 10:42:40 -05:00
luigi1111
1387fd4f9c Merge pull request #3098
6c67a39 README: update sponsors (selsta)
2020-09-22 10:39:04 -05:00
luigi1111
6ff43fa81e Merge pull request #3095
0dda579 Windows installer: Update for Oxygen Orion 0.17.0.0 (rbrunner7)
2020-09-22 10:33:42 -05:00
luigi1111
076c70906a Merge pull request #3094
e198752 cmake: support manual submodules (selsta)
2020-09-22 10:32:53 -05:00
luigi1111
923a32cfd5 Merge pull request #3090
1b519b8 fix build on arm (ph4r05)
2020-09-22 10:31:17 -05:00
luigi1111
e7c37fc7bc Merge pull request #3087
d488979 Remove Pirate language (erciccione)
2020-09-22 10:30:07 -05:00
luigi1111
2b83edc982 Merge pull request #3003
9fc260c account: update balances of account page when new block is found (rating89us)
2020-09-22 10:28:49 -05:00
xiphon
4208b66baf WizardModeSelection: optional 'Portable mode' feature support 2020-09-22 15:08:18 +00:00
xiphon
b9e74f6b6d cmake: support ARCH and BUILD_64 overriding 2020-09-22 15:01:36 +00:00
selsta
270b86b142 workflows: remove qmake 2020-09-22 03:03:06 +02:00
selsta
6c67a39d2e README: update sponsors 2020-09-21 21:46:22 +02:00
xiphon
91239881f1 main: Tails - enable 127.0.0.1:9050 socks5 proxy by default 2020-09-20 14:22:51 +00:00
xiphon
2d464a1266 docker: Windows static build (cross-compilation from Linux) 2020-09-20 10:15:04 +00:00
René Brunner
0dda5796ec Windows installer: Update for Oxygen Orion 0.17.0.0 2020-09-20 10:11:33 +02:00
selsta
e1987522e2 cmake: support manual submodules 2020-09-20 03:51:40 +02:00
Dusan Klinec
1b519b8302 fix build on arm 2020-09-16 21:35:30 +02:00
erciccione
d488979351 Remove Pirate language 2020-09-14 18:39:06 +02:00
luigi1111
d313c2de37 Merge pull request #3085
248ec22 WizardController: delete duplicated line (line 67) (rating89us)
2020-09-14 11:36:55 -05:00
luigi1111
560dd09f8a Merge pull request #3084
04eab65 WizardRestoreWallet1: reset radio buttons when loading (raiting89us)
2020-09-14 11:36:13 -05:00
luigi1111
ea778c41dd Merge pull request #3082
8643f85 cmake: MinGW - fix qtfreetype linking (xiphon)
2020-09-14 11:35:27 -05:00
luigi1111
6595a7b1c1 Merge pull request #3081
e0679ce cmake: cross-compilation to Windows - fix 'version' lib linking (xiphon)
2020-09-14 11:34:38 -05:00
luigi1111
dea513fc84 Merge pull request #3051
03db3f9 cmake: minor message improvements (selsta)
2020-09-14 11:33:43 -05:00
luigi1111
55759545d1 Merge pull request #3044
4e16698 MerchantTrackingList: fix Qt warning (selsta)
2020-09-14 11:32:28 -05:00
rating89us
248ec22eb5 WizardController: delete duplicated line (line 67) 2020-09-13 07:35:39 +02:00
rating89us
04eab65b10 WizardRestoreWallet1: reset radio buttons when loading 2020-09-13 07:33:28 +02:00
xiphon
8643f85fef cmake: MinGW - fix qtfreetype linking 2020-09-12 22:06:59 +00:00
xiphon
e0679ce5e6 cmake: cross-compilation to Windows - fix 'version' lib linking 2020-09-12 22:02:31 +00:00
luigi1111
31dbe7ea42 Merge pull request #3080
6467333 cmake: drop redundant CheckTrezor include (xiphon)
2020-09-12 16:00:31 -05:00
luigi1111
f745670b36 Merge pull request #3079
4effbd3 cmake: cross-compilation to Windows - use 'win32' Boost_THREADAPI (xiphon)
2020-09-12 15:59:29 -05:00
luigi1111
a80746adf1 Merge pull request #3078
8845ce6 cmake: cross-compilation to Windows - fix lrelease search paths (xiphon)
2020-09-12 15:56:03 -05:00
luigi1111
2e8bec15da Merge pull request #3077
3aeaf99 oshelper: 'shlobj.h' include should be lower case (xiphon)
2020-09-12 15:54:56 -05:00
luigi1111
24d8360da1 Merge pull request #3076
c41e3d8 cmake: cross-compilation to Windows - find MinGW prefixed windres (xiphon)
2020-09-12 15:54:05 -05:00
luigi1111
f75d988437 Merge pull request #3074
394e569 SettingsInfo: copy Tails information to clipboard (selsta)
2020-09-12 15:52:59 -05:00
luigi1111
3a1601f132 Merge pull request #3050
9d05462 cmake: fix DEV_MODE, checkout master in submodule (selsta)
2020-09-12 15:51:23 -05:00
luigi1111
fd956b54b5 Merge pull request #3033
749c166 main: socks5 proxy support (xiphon)
2020-09-12 15:49:57 -05:00
xiphon
6467333fe7 cmake: drop redundant CheckTrezor include 2020-09-10 23:06:30 +00:00
xiphon
4effbd3c8e cmake: cross-compilation to Windows - use 'win32' Boost_THREADAPI 2020-09-10 11:50:17 +00:00
xiphon
8845ce6d49 cmake: cross-compilation to Windows - fix lrelease search paths 2020-09-10 11:02:37 +00:00
xiphon
3aeaf99057 oshelper: 'shlobj.h' include should be lower case 2020-09-10 10:45:28 +00:00
xiphon
c41e3d8e7a cmake: cross-compilation to Windows - find MinGW prefixed windres 2020-09-10 10:37:06 +00:00
selsta
9d05462715 cmake: fix DEV_MODE, checkout master in submodule 2020-09-08 11:59:59 +02:00
selsta
394e56915d SettingsInfo: copy Tails information to clipboard 2020-09-07 22:58:34 +02:00
xiphon
749c166b10 main: socks5 proxy support 2020-09-07 20:35:20 +00:00
luigi1111
a563582d95 Merge pull request #3060
e1b5ee2 cmake: remove already defined functions (selsta)
2020-09-07 15:30:02 -05:00
luigi1111
a000b8d850 Merge pull request #3064
370607a Settings -> Info -> Copy to clipboard #3063 (xmrdsc)
2020-09-07 15:19:59 -05:00
luigi1111
4b626924e6 Merge pull request #3062
fed38b9 LineEdit: change background color when disabled (selsta)
2020-09-07 15:07:36 -05:00
luigi1111
e97fb0b3d8 Merge pull request #3061
17213bf cmake: move autogen to avoid warnings (selsta)
2020-09-07 15:06:49 -05:00
luigi1111
aa1ab4f448 Merge pull request #3059
35f92b7 tabs: remove from repo (selsta)
2020-09-07 15:06:01 -05:00
luigi1111
1752fde08b Merge pull request #3058
9255d64 cmake: copy monerod to mac bundle (selsta)
2020-09-07 15:05:18 -05:00
luigi1111
121904f340 Merge pull request #3056
86f5aae cmake: fix MacOS linking (-rpath, -bind_at_load, -dead_strip, etc.) (xiphon)
2020-09-07 15:04:30 -05:00
luigi1111
05f63a24cc Merge pull request #3055
75e4333 cmake: manually fix pkg-config prefix (QTBUG-80922 workaround) (xiphon)
2020-09-07 15:02:10 -05:00
luigi1111
e2085bdaa3 Merge pull request #3054
dc1d0a6 monero: update submodule to master branch HEAD (xiphon)
2020-09-07 15:01:05 -05:00
luigi1111
7e83173c77 Merge pull request #3053
1d2840f ipc: fix Qt deprecation warning with 5.15.1 beta (selsta)
2020-09-07 14:51:14 -05:00
luigi1111
183c8084a5 Merge pull request #3052
1895755 cmake: remove duplicate find_package (selsta)
2020-09-07 14:50:16 -05:00
luigi1111
5bc305679c Merge pull request #3032
5ea99a7 Wallet: WalletManager: implement proxy support (xiphon)
2020-09-07 14:46:14 -05:00
luigi1111
2557bdb35f Merge pull request #3030
43aeea8 Network: instantiable QML type, introduce proxyAddress property (xiphon)
2020-09-07 14:45:21 -05:00
luigi1111
79a87ca03b Merge pull request #3029
380b955 Downloader: introduce proxyAddress property (xiphon)
2020-09-07 14:44:26 -05:00
luigi1111
a8eab144e4 Merge pull request #3047
f51b0f6 fix windows deploy with QT 5.14+ (italocoin-project)
2020-09-07 14:43:32 -05:00
luigi1111
83cffa469e Merge pull request #3043
27e4771 docker: update Qt to 5.9.9 (selsta)
2020-09-07 14:42:00 -05:00
luigi1111
b1b7307578 Merge pull request #3042
c013d7d README: update list of third party monero packages (erciccione)
2020-09-07 14:41:14 -05:00
luigi1111
e0dfda2189 Merge pull request #3000
16646eb cmake: fix zxcvbn option description (selsta)
2020-09-07 14:39:25 -05:00
dsc
370607a7dc Settings -> Info -> Copy to clipboard #3063 2020-09-01 21:43:31 +02:00
xiphon
dc1d0a68c8 monero: update submodule to master branch HEAD 2020-08-31 23:05:34 +00:00
selsta
fed38b9e06 LineEdit: change background color when disabled 2020-08-29 23:22:49 +02:00
selsta
17213bfe8c cmake: move autogen to avoid warnings 2020-08-29 04:27:31 +02:00
selsta
e1b5ee24e9 cmake: remove already defined functions 2020-08-29 03:32:10 +02:00
selsta
35f92b76a2 tabs: remove from repo 2020-08-29 01:48:13 +02:00
selsta
9255d649d9 cmake: copy monerod to mac bundle 2020-08-29 00:42:30 +02:00
xiphon
86f5aae63d cmake: fix MacOS linking (-rpath, -bind_at_load, -dead_strip, etc.) 2020-08-28 17:54:17 +00:00
xiphon
75e433388f cmake: manually fix pkg-config prefix (QTBUG-80922 workaround) 2020-08-28 11:33:34 +00:00
Italocoin Project
f51b0f6704 fix windows deploy with QT 5.14+
this is a workaround on QT 5.14+ errors on mingw

fixes issue https://github.com/monero-project/monero-gui/issues/3041
2020-08-26 20:16:34 +02:00
selsta
1895755efb cmake: remove duplicate find_package 2020-08-26 03:18:41 +02:00
selsta
03db3f96ff cmake: minor message improvements 2020-08-26 03:07:18 +02:00
selsta
1d2840f8b5 ipc: fix Qt deprecation warning with 5.15.1 beta 2020-08-26 02:58:11 +02:00
selsta
4e16698558 MerchantTrackingList: fix Qt warning 2020-08-18 12:29:49 +02:00
erciccione
c013d7d125 README: update list of third party monero packages
Removed AUR package, since doesn't seem to exist anymore, added Debian package (the CCS-funded one) and updated xbps and guix packages.
2020-08-16 19:59:34 +02:00
selsta
27e4771622 docker: update Qt to 5.9.9 2020-08-16 01:21:23 +02:00
luigi1111
e65159163d Merge pull request #3038
6898d5d oshelper: always convert to canonical path in openContainingFolder (xiphon)
2020-08-14 14:16:19 -05:00
luigi1111
77b7a5244a Merge pull request #3024
eb924a3 KeysFiles: relative file path support (xiphon)
2020-08-14 14:15:26 -05:00
selsta
16646eb651 cmake: fix zxcvbn option description 2020-08-09 02:31:57 +02:00
xiphon
6898d5dd42 oshelper: always convert to canonical path in openContainingFolder 2020-08-06 18:58:15 +00:00
xiphon
5ea99a73e7 Wallet: WalletManager: implement proxy support 2020-07-30 21:37:09 +00:00
xiphon
43aeea8eb7 Network: instantiable QML type, introduce proxyAddress property
# Conflicts:
#	main.qml
2020-07-30 16:49:22 +00:00
xiphon
380b955bce Downloader: introduce proxyAddress property 2020-07-29 17:31:44 +00:00
xiphon
eb924a34d1 KeysFiles: relative file path support 2020-07-28 17:38:03 +00:00
rating89us
9fc260c62d account: update balances of account page when new block is found 2020-07-10 10:57:59 +02:00
140 changed files with 8212 additions and 13730 deletions

View File

@@ -4,42 +4,20 @@ on: [push, pull_request]
jobs: jobs:
build-macos: build-macos:
runs-on: macOS-latest runs-on: macOS-latest
strategy:
fail-fast: false
matrix:
toolchain:
- name: "qmake"
cmd: "export PATH=$PATH:/usr/local/opt/qt/bin && ./build.sh"
- name: "cmake"
cmd: "USE_SINGLE_BUILDDIR=ON DEV_MODE=ON make release -j3"
name: build-macos-${{ matrix.toolchain.name }}
steps: steps:
- uses: actions/checkout@v1 - uses: actions/checkout@v1
with: with:
submodules: recursive submodules: recursive
- name: update brew and install dependencies - name: install dependencies
run: brew update && brew install boost hidapi zmq libpgm miniupnpc ldns expat libunwind-headers protobuf qt5 pkg-config run: HOMEBREW_NO_AUTO_UPDATE=1 brew install boost hidapi zmq libpgm miniupnpc ldns expat libunwind-headers protobuf qt5 pkg-config
- name: build - name: build
run: ${{ matrix.toolchain.cmd }} run: DEV_MODE=ON make release -j3
- name: test qml - name: test qml
run: build/release/bin/monero-wallet-gui.app/Contents/MacOS/monero-wallet-gui --test-qml run: build/release/bin/monero-wallet-gui.app/Contents/MacOS/monero-wallet-gui --test-qml
build-ubuntu: build-ubuntu:
runs-on: ubuntu-latest runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
toolchain:
- name: "qmake"
cmd: "./build.sh"
- name: "cmake"
cmd: "USE_SINGLE_BUILDDIR=ON DEV_MODE=ON make release -j3"
name: build-ubuntu-${{ matrix.toolchain.name }}
steps: steps:
- uses: actions/checkout@v1 - uses: actions/checkout@v1
with: with:
@@ -58,26 +36,15 @@ jobs:
- name: install monero gui dependencies - name: install monero gui dependencies
run: sudo apt -y install qtbase5-dev qt5-default qtdeclarative5-dev qml-module-qtquick-controls qml-module-qtquick-controls2 qml-module-qtquick-dialogs qml-module-qtquick-xmllistmodel qml-module-qt-labs-settings qml-module-qt-labs-folderlistmodel qttools5-dev-tools qml-module-qtquick-templates2 libqt5svg5-dev libgcrypt20-dev xvfb run: sudo apt -y install qtbase5-dev qt5-default qtdeclarative5-dev qml-module-qtquick-controls qml-module-qtquick-controls2 qml-module-qtquick-dialogs qml-module-qtquick-xmllistmodel qml-module-qt-labs-settings qml-module-qt-labs-folderlistmodel qttools5-dev-tools qml-module-qtquick-templates2 libqt5svg5-dev libgcrypt20-dev xvfb
- name: build - name: build
run: ${{ matrix.toolchain.cmd }} run: DEV_MODE=ON make release -j3
- name: test qml - name: test qml
run: xvfb-run -a build/release/bin/monero-wallet-gui --test-qml run: xvfb-run -a build/release/bin/monero-wallet-gui --test-qml
build-windows: build-windows:
runs-on: windows-latest runs-on: windows-latest
strategy:
fail-fast: false
matrix:
toolchain:
- name: "qmake"
cmd: "./build.sh release"
- name: "cmake"
cmd: "USE_SINGLE_BUILDDIR=ON DEV_MODE=ON make release-win64 -j2"
name: build-windows-${{ matrix.toolchain.name }}
defaults: defaults:
run: run:
shell: msys2 {0} shell: msys2 {0}
steps: steps:
- uses: actions/checkout@v1 - uses: actions/checkout@v1
with: with:
@@ -87,8 +54,40 @@ jobs:
update: true update: true
install: mingw-w64-x86_64-toolchain make mingw-w64-x86_64-cmake mingw-w64-x86_64-boost mingw-w64-x86_64-openssl mingw-w64-x86_64-zeromq mingw-w64-x86_64-libsodium mingw-w64-x86_64-hidapi mingw-w64-x86_64-protobuf-c mingw-w64-x86_64-libusb git mingw-w64-x86_64-qt5 mingw-w64-x86_64-libgcrypt install: mingw-w64-x86_64-toolchain make mingw-w64-x86_64-cmake mingw-w64-x86_64-boost mingw-w64-x86_64-openssl mingw-w64-x86_64-zeromq mingw-w64-x86_64-libsodium mingw-w64-x86_64-hidapi mingw-w64-x86_64-protobuf-c mingw-w64-x86_64-libusb git mingw-w64-x86_64-qt5 mingw-w64-x86_64-libgcrypt
- name: build - name: build
run: | run: DEV_MODE=ON make release-win64 -j2
sed -i 's/CONFIG\ +=\ qtquickcompiler//' monero-wallet-gui.pro
${{ matrix.toolchain.cmd }}
- name: test qml - name: test qml
run: build/release/bin/monero-wallet-gui --test-qml run: build/release/bin/monero-wallet-gui --test-qml
docker-linux-static:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v1
with:
submodules: recursive
- uses: satackey/action-docker-layer-caching@v0.0.8
continue-on-error: true
with:
key: docker-linux-static-{hash}
restore-keys: |
docker-linux-static-
- name: preprare build enviroment
run: docker build --tag monero:build-env-linux --build-arg THREADS=3 --file Dockerfile.linux .
- name: build
run: docker run --rm -v /home/runner/work/monero-gui/monero-gui:/monero-gui -w /monero-gui monero:build-env-linux sh -c 'make release-static -j3'
docker-windows-static:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v1
with:
submodules: recursive
- uses: satackey/action-docker-layer-caching@v0.0.8
continue-on-error: true
with:
key: docker-windows-static-{hash}
restore-keys: |
docker-windows-static-
- name: preprare build enviroment
run: docker build --tag monero:build-env-windows --build-arg THREADS=3 --file Dockerfile.windows .
- name: build
run: docker run --rm -v /home/runner/work/monero-gui/monero-gui:/monero-gui -w /monero-gui monero:build-env-windows sh -c 'make depends root=/depends target=x86_64-w64-mingw32 tag=win-x64 -j3'

View File

@@ -3,15 +3,15 @@ project(monero-gui)
message(STATUS "Initiating compile using CMake ${CMAKE_VERSION}") message(STATUS "Initiating compile using CMake ${CMAKE_VERSION}")
set(VERSION_MAJOR "16") set(VERSION_MAJOR "17")
set(VERSION_MINOR "0") set(VERSION_MINOR "1")
set(VERSION_REVISION "3") set(VERSION_REVISION "1")
set(VERSION "0.${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_REVISION}") set(VERSION "0.${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_REVISION}")
option(STATIC "Link libraries statically, requires static Qt") option(STATIC "Link libraries statically, requires static Qt")
option(USE_DEVICE_TREZOR "Trezor support compilation" ON) option(USE_DEVICE_TREZOR "Trezor support compilation" ON)
option(ENABLE_PASS_STRENGTH_METER "Disable zxcvbn" OFF) option(ENABLE_PASS_STRENGTH_METER "Enable zxcvbn library for password strength" OFF)
option(WITH_SCANNER "Enable webcam QR scanner" OFF) option(WITH_SCANNER "Enable webcam QR scanner" OFF)
option(DEV_MODE "Checkout latest monero master on build" OFF) option(DEV_MODE "Checkout latest monero master on build" OFF)
@@ -21,67 +21,52 @@ include(CheckCXXCompilerFlag)
include(CheckLinkerFlag) include(CheckLinkerFlag)
include(FindCcache) include(FindCcache)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
if(DEBUG) if(DEBUG)
set(CMAKE_VERBOSE_MAKEFILE ON) set(CMAKE_VERBOSE_MAKEFILE ON)
endif() endif()
set(BUILD_GUI_DEPS ON) set(BUILD_GUI_DEPS ON)
set(ARCH "x86-64") set(ARCH "x86-64" CACHE STRING "Target architecture")
set(BUILD_64 ON) set(BUILD_64 ON CACHE BOOL "Build 64-bit binaries")
function (add_c_flag_if_supported flag var) if(NOT MANUAL_SUBMODULES)
string(REPLACE "-" "_" supported ${flag}_c) find_package(Git)
check_c_compiler_flag(${flag} ${supported}) if(GIT_FOUND)
if(${${supported}}) if(NOT DEV_MODE)
set(${var} "${${var}} ${flag}" PARENT_SCOPE) function (check_submodule relative_path)
endif() execute_process(COMMAND git rev-parse "HEAD" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${relative_path} OUTPUT_VARIABLE localHead)
endfunction() execute_process(COMMAND git rev-parse "HEAD:${relative_path}" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} OUTPUT_VARIABLE checkedHead)
string(COMPARE EQUAL "${localHead}" "${checkedHead}" upToDate)
function (add_cxx_flag_if_supported flag var) if (upToDate)
string(REPLACE "-" "_" supported ${flag}_cxx) message(STATUS "Submodule '${relative_path}' is up-to-date")
check_cxx_compiler_flag(${flag} ${supported}) else()
if(${${supported}}) message(FATAL_ERROR "Submodule '${relative_path}' is not using the checked head. Please update all submodules with\ngit submodule update --init --force --recursive\nor run cmake with -DMANUAL_SUBMODULES=1,\n or if you want to build from latest master run cmake with -DDEV_MODE=ON,\n or run make devmode")
set(${var} "${${var}} ${flag}" PARENT_SCOPE) endif()
endif() endfunction ()
endfunction() message(STATUS "Checking submodules")
check_submodule(monero)
function (add_linker_flag_if_supported flag var) else()
string(REPLACE "-" "_" supported ${flag}_ld) execute_process(COMMAND ${GIT_EXECUTABLE} fetch WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/monero RESULT_VARIABLE GIT_FETCH_RESULT)
string(REPLACE "," "_" supported ${flag}_ld) execute_process(COMMAND ${GIT_EXECUTABLE} checkout -f origin/master WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/monero RESULT_VARIABLE GIT_CHECKOUT_MASTER_RESULT)
check_linker_flag(${flag} ${supported}) execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init --force --recursive WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/monero RESULT_VARIABLE GIT_SUBMODULE_UPDATE_RESULT)
if(${${supported}}) if(NOT GIT_FETCH_RESULT EQUAL "0" OR NOT GIT_CHECKOUT_MASTER_RESULT EQUAL "0" OR NOT GIT_SUBMODULE_UPDATE_RESULT EQUAL "0")
set(${var} "${${var}} ${flag}" PARENT_SCOPE) message(FATAL_ERROR "Updating git submodule to master (-DDEV_MODE=ON) failed")
endif()
endfunction()
find_package(Git)
if(GIT_FOUND)
if(NOT DEV_MODE)
find_package(Git)
function (check_submodule relative_path)
execute_process(COMMAND git rev-parse "HEAD" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${relative_path} OUTPUT_VARIABLE localHead)
execute_process(COMMAND git rev-parse "HEAD:${relative_path}" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} OUTPUT_VARIABLE checkedHead)
string(COMPARE EQUAL "${localHead}" "${checkedHead}" upToDate)
if (upToDate)
message(STATUS "Submodule '${relative_path}' is up-to-date")
else()
message(FATAL_ERROR "Submodule '${relative_path}' is not using the checked head. Please update all submodules with\ngit submodule update --init --force\nor run cmake with -DMANUAL_SUBMODULES=1,\n or if you want to build from latest master run cmake with -DEV_MODE,\n or run make devmode")
endif() endif()
endfunction () endif()
message(STATUS "Checking submodules")
check_submodule(monero)
else()
execute_process(COMMAND cd monero && git checkout origin/master)
endif() endif()
endif() endif()
add_subdirectory(monero) add_subdirectory(monero)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
set_property(TARGET wallet_merged PROPERTY FOLDER "monero") set_property(TARGET wallet_merged PROPERTY FOLDER "monero")
get_directory_property(ARCH_WIDTH DIRECTORY "monero" DEFINITION ARCH_WIDTH) get_directory_property(ARCH_WIDTH DIRECTORY "monero" DEFINITION ARCH_WIDTH)
get_directory_property(UNBOUND_LIBRARY DIRECTORY "monero" DEFINITION UNBOUND_LIBRARY) get_directory_property(UNBOUND_LIBRARY DIRECTORY "monero" DEFINITION UNBOUND_LIBRARY)
get_directory_property(DEVICE_TREZOR_READY DIRECTORY "monero" DEFINITION DEVICE_TREZOR_READY)
get_directory_property(TREZOR_DEP_LIBS DIRECTORY "monero" DEFINITION TREZOR_DEP_LIBS)
if (NOT CMAKE_BUILD_TYPE STREQUAL "Debug") if (NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
add_definitions(-DQT_NO_DEBUG) add_definitions(-DQT_NO_DEBUG)
@@ -97,12 +82,11 @@ endif()
# Include password strength library # Include password strength library
if(ENABLE_PASS_STRENGTH_METER) if(ENABLE_PASS_STRENGTH_METER)
message(STATUS "Buildin with pass strength meter support.") message(STATUS "Building with pass strength meter support.")
else() else()
add_definitions(-DDISABLE_PASS_STRENGTH_METER) add_definitions(-DDISABLE_PASS_STRENGTH_METER)
endif() endif()
include(CheckTrezor) # Trezor support check
include(CMakePackageConfigHelpers) include(CMakePackageConfigHelpers)
# force version update # force version update
@@ -176,6 +160,9 @@ endif()
if(APPLE AND NOT BOOST_ROOT) if(APPLE AND NOT BOOST_ROOT)
execute_process(COMMAND brew --prefix boost OUTPUT_VARIABLE BOOST_ROOT OUTPUT_STRIP_TRAILING_WHITESPACE) execute_process(COMMAND brew --prefix boost OUTPUT_VARIABLE BOOST_ROOT OUTPUT_STRIP_TRAILING_WHITESPACE)
endif() endif()
if(MINGW)
set(Boost_THREADAPI win32)
endif()
find_package(Boost 1.58 REQUIRED COMPONENTS find_package(Boost 1.58 REQUIRED COMPONENTS
system system
filesystem filesystem
@@ -188,6 +175,7 @@ find_package(Boost 1.58 REQUIRED COMPONENTS
locale) locale)
if(UNIX AND NOT APPLE) if(UNIX AND NOT APPLE)
set(CMAKE_SKIP_RPATH ON)
find_package(X11 REQUIRED) find_package(X11 REQUIRED)
message(STATUS "X11_FOUND = ${X11_FOUND}") message(STATUS "X11_FOUND = ${X11_FOUND}")
message(STATUS "X11_INCLUDE_DIR = ${X11_INCLUDE_DIR}") message(STATUS "X11_INCLUDE_DIR = ${X11_INCLUDE_DIR}")
@@ -231,6 +219,10 @@ endif()
if(APPLE) if(APPLE)
list(APPEND QT5_LIBRARIES Qt5MacExtras) list(APPEND QT5_LIBRARIES Qt5MacExtras)
if(NOT CMAKE_PREFIX_PATH AND DEFINED ENV{CMAKE_PREFIX_PATH})
message(STATUS "Using CMAKE_PREFIX_PATH environment variable: '$ENV{CMAKE_PREFIX_PATH}'")
set(CMAKE_PREFIX_PATH $ENV{CMAKE_PREFIX_PATH})
endif()
if(NOT CMAKE_PREFIX_PATH) if(NOT CMAKE_PREFIX_PATH)
execute_process(COMMAND brew --prefix qt5 OUTPUT_VARIABLE QT5_DIR OUTPUT_STRIP_TRAILING_WHITESPACE) execute_process(COMMAND brew --prefix qt5 OUTPUT_VARIABLE QT5_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
list(APPEND CMAKE_PREFIX_PATH ${QT5_DIR}) list(APPEND CMAKE_PREFIX_PATH ${QT5_DIR})
@@ -238,6 +230,7 @@ if(APPLE)
if(CMAKE_PREFIX_PATH) if(CMAKE_PREFIX_PATH)
include_directories(${CMAKE_PREFIX_PATH}/include) include_directories(${CMAKE_PREFIX_PATH}/include)
set(CMAKE_BUILD_RPATH "${CMAKE_PREFIX_PATH}/lib")
endif() endif()
endif() endif()
@@ -271,6 +264,12 @@ if(QT5_PKG_CONFIG_FOUND)
if(APPLE) if(APPLE)
list(JOIN ${QT5_PKG_CONFIG}_LDFLAGS_OTHER " " ${QT5_PKG_CONFIG}_LDFLAGS_OTHER) list(JOIN ${QT5_PKG_CONFIG}_LDFLAGS_OTHER " " ${QT5_PKG_CONFIG}_LDFLAGS_OTHER)
list(JOIN ${QT5_PKG_CONFIG}_LIBRARIES " " ${QT5_PKG_CONFIG}_LIBRARIES) list(JOIN ${QT5_PKG_CONFIG}_LIBRARIES " " ${QT5_PKG_CONFIG}_LIBRARIES)
list(JOIN ${QT5_PKG_CONFIG}_INCLUDE_DIRS " " ${QT5_PKG_CONFIG}_INCLUDE_DIRS)
# temporal workaround for https://bugreports.qt.io/browse/QTBUG-80922
STRING(REPLACE "${QT5_PKG_CONFIG_Qt5Core_PREFIX}" "${CMAKE_PREFIX_PATH}" ${QT5_PKG_CONFIG}_LDFLAGS_OTHER "${${QT5_PKG_CONFIG}_LDFLAGS_OTHER}")
STRING(REPLACE "${QT5_PKG_CONFIG_Qt5Core_PREFIX}" "${CMAKE_PREFIX_PATH}" ${QT5_PKG_CONFIG}_LIBRARIES "${${QT5_PKG_CONFIG}_LIBRARIES}")
STRING(REPLACE "${QT5_PKG_CONFIG_Qt5Core_PREFIX}" "${CMAKE_PREFIX_PATH}" ${QT5_PKG_CONFIG}_INCLUDE_DIRS "${${QT5_PKG_CONFIG}_INCLUDE_DIRS}")
endif() endif()
set(QT5_LIBRARIES ${${QT5_PKG_CONFIG}_LIBRARIES} ${${QT5_PKG_CONFIG}_LDFLAGS_OTHER}) set(QT5_LIBRARIES ${${QT5_PKG_CONFIG}_LIBRARIES} ${${QT5_PKG_CONFIG}_LDFLAGS_OTHER})
@@ -338,8 +337,6 @@ if(STATIC)
endforeach() endforeach()
if(MINGW) if(MINGW)
list(APPEND QT5_EXTRA_LIBRARIES qtfreetype)
if(CMAKE_BUILD_TYPE STREQUAL "Debug") if(CMAKE_BUILD_TYPE STREQUAL "Debug")
list(APPEND QT5_EXTRA_LIBRARIES D3D11 Dwrite D2d1) list(APPEND QT5_EXTRA_LIBRARIES D3D11 Dwrite D2d1)
endif() endif()
@@ -364,6 +361,8 @@ if(STATIC)
Qt5ServiceSupport Qt5ServiceSupport
Qt5GlxSupport Qt5GlxSupport
) )
elseif(MINGW)
list(APPEND QT5_INTEGRATION_LIBRARIES_LIST qtfreetype)
endif() endif()
foreach(LIBRARY ${QT5_INTEGRATION_LIBRARIES_LIST}) foreach(LIBRARY ${QT5_INTEGRATION_LIBRARIES_LIST})
@@ -455,6 +454,11 @@ if (NOT (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND NOT CMAKE_C_COMPILER_VERSION VER
endif() endif()
# linker # linker
if (APPLE)
add_linker_flag_if_supported(-Wl,-bind_at_load LD_SECURITY_FLAGS)
add_linker_flag_if_supported(-Wl,-dead_strip LD_SECURITY_FLAGS)
add_linker_flag_if_supported(-Wl,-dead_strip_dylibs LD_SECURITY_FLAGS)
endif()
if (NOT APPLE AND NOT (WIN32 AND CMAKE_C_COMPILER_ID STREQUAL "GNU")) if (NOT APPLE AND NOT (WIN32 AND CMAKE_C_COMPILER_ID STREQUAL "GNU"))
# Windows binaries die on startup with PIE when compiled with GCC # Windows binaries die on startup with PIE when compiled with GCC
add_linker_flag_if_supported(-pie LD_SECURITY_FLAGS) add_linker_flag_if_supported(-pie LD_SECURITY_FLAGS)
@@ -513,7 +517,11 @@ if (HIDAPI_FOUND OR LibUSB_COMPILE_TEST_PASSED)
endif() endif()
endif() endif()
if (WIN32) if (WIN32)
list(APPEND EXTRA_LIBRARIES setupapi Version) find_library(VERSION_LIBRARY version PATHS /usr/x86_64-w64-mingw32/lib)
if(VERSION_LIBRARY STREQUAL "VERSION_LIBRARY-NOTFOUND")
set(VERSION_LIBRARY Version)
endif()
list(APPEND EXTRA_LIBRARIES setupapi ${VERSION_LIBRARY})
endif() endif()
endif() endif()

View File

@@ -8,33 +8,13 @@ Use macOS 10.12 - 10.13 for better backwards compability.
3. Get the latest LTS from here: https://www.qt.io/offline-installers and install 3. Get the latest LTS from here: https://www.qt.io/offline-installers and install
4. `export PATH=$PATH:$HOME/Qt5.12.8/5.12.8/clang_64/bin` 4. `git clone --recursive -b v0.X.Y.Z --depth 1 https://github.com/monero-project/monero-gui`
5. `git clone https://github.com/monero-project/monero-gui` 5. `CMAKE_PREFIX_PATH=~/Qt5.12.8/5.12.8/clang_64 make release`
6. `git checkout v0.X.Y.Z` 6. `cd build/release && make deploy`
7. `sed -i '' s/ARCH=\"native\"/ARCH=\"x86-64\"/g get_libwallet_api.sh` 7. Replace the `monerod` binary inside `monero-wallet-gui.app/Contents/MacOS/` with one built using deterministic builds / gitian.
8. `sed -i '' s/-O2/-O0/g monero-wallet-gui.pro`
9. `./build.sh`
10. `cd build && make deploy`
11. `cd release/bin/monero-wallet-gui.app/Contents/PlugIns/imageformats/`
12. `cp ~/Qt5.12.8/5.12.8/clang_64/plugins/imageformats/libqsvg.dylib .`
13. `install_name_tool -change ~/Qt5.12.8/5.12.8/clang_64/clang_64/lib/QtGui.framework/Versions/5/QtGui @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui libqsvg.dylib`
14. `install_name_tool -change ~/Qt5.12.8/5.12.8/clang_64/clang_64/lib/QtWidgets.framework/Versions/5/QtWidgets @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui libqsvg.dylib`
15. `install_name_tool -change ~/Qt5.12.8/5.12.8/clang_64/lib/QtSvg.framework/Versions/5/QtSvg @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui libqsvg.dylib`
16. `install_name_tool -change ~/Qt5.12.8/5.12.8/clang_64/clang_64/lib/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui libqsvg.dylib`
17. Replace the `monerod` binary inside `monero-wallet-gui.app/Contents/MacOS/` with one built using deterministic builds / gitian.
## Codesigning and notarizing ## Codesigning and notarizing

View File

@@ -10,14 +10,16 @@ RUN apt install -y automake git pkg-config python xutils-dev && \
git reset --hard c62e8203402cafafa5ba0357b6d1c019156c9f36 && \ git reset --hard c62e8203402cafafa5ba0357b6d1c019156c9f36 && \
CFLAGS='-fPIC' CXXFLAGS='-fPIC' ./autogen.sh --disable-shared --enable-static && \ CFLAGS='-fPIC' CXXFLAGS='-fPIC' ./autogen.sh --disable-shared --enable-static && \
make -j$THREADS && \ make -j$THREADS && \
make -j$THREADS install make -j$THREADS install && \
rm -rf $(pwd)
RUN git clone -b 1.12 --depth 1 https://gitlab.freedesktop.org/xorg/proto/xcbproto && \ RUN git clone -b 1.12 --depth 1 https://gitlab.freedesktop.org/xorg/proto/xcbproto && \
cd xcbproto && \ cd xcbproto && \
git reset --hard 6398e42131eedddde0d98759067dde933191f049 && \ git reset --hard 6398e42131eedddde0d98759067dde933191f049 && \
CFLAGS='-fPIC' CXXFLAGS='-fPIC' ./autogen.sh --disable-shared --enable-static && \ CFLAGS='-fPIC' CXXFLAGS='-fPIC' ./autogen.sh --disable-shared --enable-static && \
make -j$THREADS && \ make -j$THREADS && \
make -j$THREADS install make -j$THREADS install && \
rm -rf $(pwd)
RUN apt install -y libtool-bin && \ RUN apt install -y libtool-bin && \
git clone -b libXau-1.0.9 --depth 1 https://gitlab.freedesktop.org/xorg/lib/libxau && \ git clone -b libXau-1.0.9 --depth 1 https://gitlab.freedesktop.org/xorg/lib/libxau && \
@@ -25,7 +27,8 @@ RUN apt install -y libtool-bin && \
git reset --hard d9443b2c57b512cfb250b35707378654d86c7dea && \ git reset --hard d9443b2c57b512cfb250b35707378654d86c7dea && \
CFLAGS='-fPIC' CXXFLAGS='-fPIC' ./autogen.sh --disable-shared --enable-static && \ CFLAGS='-fPIC' CXXFLAGS='-fPIC' ./autogen.sh --disable-shared --enable-static && \
make -j$THREADS && \ make -j$THREADS && \
make -j$THREADS install make -j$THREADS install && \
rm -rf $(pwd)
RUN apt install -y libpthread-stubs0-dev && \ RUN apt install -y libpthread-stubs0-dev && \
git clone -b 1.12 --depth 1 https://gitlab.freedesktop.org/xorg/lib/libxcb && \ git clone -b 1.12 --depth 1 https://gitlab.freedesktop.org/xorg/lib/libxcb && \
@@ -33,22 +36,25 @@ RUN apt install -y libpthread-stubs0-dev && \
git reset --hard d34785a34f28fa6a00f8ce00d87e3132ff0f6467 && \ git reset --hard d34785a34f28fa6a00f8ce00d87e3132ff0f6467 && \
CFLAGS='-fPIC' CXXFLAGS='-fPIC' ./autogen.sh --disable-shared --enable-static && \ CFLAGS='-fPIC' CXXFLAGS='-fPIC' ./autogen.sh --disable-shared --enable-static && \
make -j$THREADS && \ make -j$THREADS && \
make -j$THREADS install make -j$THREADS install && \
rm -rf $(pwd)
RUN git clone -b v1.2.11 --depth 1 https://github.com/madler/zlib && \ RUN git clone -b v1.2.11 --depth 1 https://github.com/madler/zlib && \
cd zlib && \ cd zlib && \
git reset --hard cacf7f1d4e3d44d871b605da3b647f07d718623f && \ git reset --hard cacf7f1d4e3d44d871b605da3b647f07d718623f && \
CFLAGS='-fPIC' CXXFLAGS='-fPIC' ./configure --static && \ CFLAGS='-fPIC' CXXFLAGS='-fPIC' ./configure --static && \
make -j$THREADS && \ make -j$THREADS && \
make -j$THREADS install make -j$THREADS install && \
rm -rf $(pwd)
RUN git clone -b VER-2-10-2 --depth 1 https://git.sv.nongnu.org/r/freetype/freetype2.git && \ RUN git clone -b VER-2-10-2 --depth 1 https://git.savannah.gnu.org/git/freetype/freetype2.git && \
cd freetype2 && \ cd freetype2 && \
git reset --hard 132f19b779828b194b3fede187cee719785db4d8 && \ git reset --hard 132f19b779828b194b3fede187cee719785db4d8 && \
./autogen.sh && \ ./autogen.sh && \
CFLAGS='-fPIC' CXXFLAGS='-fPIC' ./configure --disable-shared --enable-static --with-zlib=no && \ CFLAGS='-fPIC' CXXFLAGS='-fPIC' ./configure --disable-shared --enable-static --with-zlib=no && \
make -j$THREADS && \ make -j$THREADS && \
make -j$THREADS install make -j$THREADS install && \
rm -rf $(pwd)
RUN git clone -b R_2_2_9 --depth 1 https://github.com/libexpat/libexpat && \ RUN git clone -b R_2_2_9 --depth 1 https://github.com/libexpat/libexpat && \
cd libexpat/expat && \ cd libexpat/expat && \
@@ -56,7 +62,8 @@ RUN git clone -b R_2_2_9 --depth 1 https://github.com/libexpat/libexpat && \
./buildconf.sh && \ ./buildconf.sh && \
CFLAGS='-fPIC' CXXFLAGS='-fPIC' ./configure --disable-shared --enable-static && \ CFLAGS='-fPIC' CXXFLAGS='-fPIC' ./configure --disable-shared --enable-static && \
make -j$THREADS && \ make -j$THREADS && \
make -j$THREADS install make -j$THREADS install && \
rm -rf $(pwd)
RUN apt install -y autopoint gettext gperf libpng12-dev && \ RUN apt install -y autopoint gettext gperf libpng12-dev && \
git clone -b 2.13.92 --depth 1 https://gitlab.freedesktop.org/fontconfig/fontconfig && \ git clone -b 2.13.92 --depth 1 https://gitlab.freedesktop.org/fontconfig/fontconfig && \
@@ -64,40 +71,46 @@ RUN apt install -y autopoint gettext gperf libpng12-dev && \
git reset --hard b1df1101a643ae16cdfa1d83b939de2497b1bf27 && \ git reset --hard b1df1101a643ae16cdfa1d83b939de2497b1bf27 && \
CFLAGS='-fPIC' CXXFLAGS='-fPIC' ./autogen.sh --disable-shared --enable-static --sysconfdir=/etc --localstatedir=/var && \ CFLAGS='-fPIC' CXXFLAGS='-fPIC' ./autogen.sh --disable-shared --enable-static --sysconfdir=/etc --localstatedir=/var && \
make -j$THREADS && \ make -j$THREADS && \
make -j$THREADS install make -j$THREADS install && \
rm -rf $(pwd)
RUN git clone -b release-64-2 --depth 1 https://github.com/unicode-org/icu && \ RUN git clone -b release-64-2 --depth 1 https://github.com/unicode-org/icu && \
cd icu/icu4c/source && \ cd icu/icu4c/source && \
git reset --hard e2d85306162d3a0691b070b4f0a73e4012433444 && \ git reset --hard e2d85306162d3a0691b070b4f0a73e4012433444 && \
CFLAGS='-fPIC' CXXFLAGS='-fPIC' ./configure --disable-shared --enable-static --disable-tests --disable-samples && \ CFLAGS='-fPIC' CXXFLAGS='-fPIC' ./configure --disable-shared --enable-static --disable-tests --disable-samples && \
make -j$THREADS && \ make -j$THREADS && \
make -j$THREADS install make -j$THREADS install && \
rm -rf $(pwd)
RUN apt install -y wget && \ RUN apt install -y wget && \
wget https://dl.bintray.com/boostorg/release/1.73.0/source/boost_1_73_0.tar.gz && \ wget https://dl.bintray.com/boostorg/release/1.73.0/source/boost_1_73_0.tar.gz && \
echo "9995e192e68528793755692917f9eb6422f3052a53c5e13ba278a228af6c7acf boost_1_73_0.tar.gz" > hashsum.txt && \ echo "9995e192e68528793755692917f9eb6422f3052a53c5e13ba278a228af6c7acf boost_1_73_0.tar.gz" > hashsum.txt && \
sha256sum -c hashsum.txt && \ sha256sum -c hashsum.txt && \
tar -xvzf boost_1_73_0.tar.gz && \ tar -xzf boost_1_73_0.tar.gz && \
rm boost_1_73_0.tar.gz && \
cd boost_1_73_0 && \ cd boost_1_73_0 && \
./bootstrap.sh && \ ./bootstrap.sh && \
./b2 --with-atomic --with-system --with-filesystem --with-thread --with-date_time --with-chrono --with-regex --with-serialization --with-program_options --with-locale variant=release link=static runtime-link=static cflags='-fPIC' cxxflags='-fPIC' install -a --prefix=/usr ./b2 --with-atomic --with-system --with-filesystem --with-thread --with-date_time --with-chrono --with-regex --with-serialization --with-program_options --with-locale variant=release link=static runtime-link=static cflags='-fPIC' cxxflags='-fPIC' install -a --prefix=/usr && \
rm -rf $(pwd)
RUN wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz && \ RUN wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz && \
echo "ddb04774f1e32f0c49751e21b67216ac87852ceb056b75209af2443400636d46 openssl-1.1.1g.tar.gz" > hashsum.txt && \ echo "ddb04774f1e32f0c49751e21b67216ac87852ceb056b75209af2443400636d46 openssl-1.1.1g.tar.gz" > hashsum.txt && \
sha256sum -c hashsum.txt && \ sha256sum -c hashsum.txt && \
tar -xzf openssl-1.1.1g.tar.gz && \ tar -xzf openssl-1.1.1g.tar.gz && \
rm openssl-1.1.1g.tar.gz && \
cd openssl-1.1.1g && \ cd openssl-1.1.1g && \
CFLAGS='-fPIC' CXXFLAGS='-fPIC' ./config no-asm no-shared no-zlib-dynamic --openssldir=/usr && \ CFLAGS='-fPIC' CXXFLAGS='-fPIC' ./config no-asm no-shared no-zlib-dynamic --openssldir=/usr && \
make -j$THREADS && \ make -j$THREADS && \
make -j$THREADS install make -j$THREADS install && \
rm -rf $(pwd)
RUN wget https://download.qt.io/archive/qt/5.9/5.9.7/single/qt-everywhere-opensource-src-5.9.7.tar.xz && \
echo "1c3852aa48b5a1310108382fb8f6185560cefc3802e81ecc099f4e62ee38516c qt-everywhere-opensource-src-5.9.7.tar.xz" > hashsum.txt && \
sha256sum -c hashsum.txt && \
tar -xf qt-everywhere-opensource-src-5.9.7.tar.xz
RUN apt install -y libgl1-mesa-dev libglib2.0-dev libxkbcommon-dev && \ RUN apt install -y libgl1-mesa-dev libglib2.0-dev libxkbcommon-dev && \
cd qt-everywhere-opensource-src-5.9.7 && \ wget https://download.qt.io/archive/qt/5.9/5.9.9/single/qt-everywhere-opensource-src-5.9.9.tar.xz && \
echo "5ce285209290a157d7f42ec8eb22bf3f1d76f2e03a95fc0b99b553391be01642 qt-everywhere-opensource-src-5.9.9.tar.xz" > hashsum.txt && \
sha256sum -c hashsum.txt && \
tar -xf qt-everywhere-opensource-src-5.9.9.tar.xz && \
rm qt-everywhere-opensource-src-5.9.9.tar.xz && \
cd qt-everywhere-opensource-src-5.9.9 && \
sed -ri s/\(Libs:.*\)/\\1\ -lexpat/ /usr/local/lib/pkgconfig/fontconfig.pc && \ sed -ri s/\(Libs:.*\)/\\1\ -lexpat/ /usr/local/lib/pkgconfig/fontconfig.pc && \
sed -ri s/\(Libs:.*\)/\\1\ -lz/ /usr/local/lib/pkgconfig/freetype2.pc && \ sed -ri s/\(Libs:.*\)/\\1\ -lz/ /usr/local/lib/pkgconfig/freetype2.pc && \
sed -ri s/\(Libs:.*\)/\\1\ -lXau/ /usr/local/lib/pkgconfig/xcb.pc && \ sed -ri s/\(Libs:.*\)/\\1\ -lXau/ /usr/local/lib/pkgconfig/xcb.pc && \
@@ -112,12 +125,13 @@ RUN apt install -y libgl1-mesa-dev libglib2.0-dev libxkbcommon-dev && \
-skip qtwinextras -skip qtx11extras -skip gamepad -skip serialbus -skip location -skip webengine \ -skip qtwinextras -skip qtx11extras -skip gamepad -skip serialbus -skip location -skip webengine \
-nomake examples -nomake tests -nomake tools && \ -nomake examples -nomake tests -nomake tools && \
make -j$THREADS && \ make -j$THREADS && \
make -j$THREADS install make -j$THREADS install && \
cd qttools/src/linguist/lrelease && \
RUN cd qt-everywhere-opensource-src-5.9.7/qttools/src/linguist/lrelease && \ ../../../../qtbase/bin/qmake && \
qmake && \
make -j$THREADS && \ make -j$THREADS && \
make -j$THREADS install make -j$THREADS install && \
cd ../../../.. && \
rm -rf $(pwd)
RUN apt install -y libudev-dev && \ RUN apt install -y libudev-dev && \
git clone -b v1.0.23 --depth 1 https://github.com/libusb/libusb && \ git clone -b v1.0.23 --depth 1 https://github.com/libusb/libusb && \
@@ -125,7 +139,8 @@ RUN apt install -y libudev-dev && \
git reset --hard e782eeb2514266f6738e242cdcb18e3ae1ed06fa && \ git reset --hard e782eeb2514266f6738e242cdcb18e3ae1ed06fa && \
CFLAGS='-fPIC' CXXFLAGS='-fPIC' ./autogen.sh --disable-shared --enable-static && \ CFLAGS='-fPIC' CXXFLAGS='-fPIC' ./autogen.sh --disable-shared --enable-static && \
make -j$THREADS && \ make -j$THREADS && \
make -j$THREADS install make -j$THREADS install && \
rm -rf $(pwd)
RUN git clone -b hidapi-0.9.0 --depth 1 https://github.com/libusb/hidapi && \ RUN git clone -b hidapi-0.9.0 --depth 1 https://github.com/libusb/hidapi && \
cd hidapi && \ cd hidapi && \
@@ -133,21 +148,24 @@ RUN git clone -b hidapi-0.9.0 --depth 1 https://github.com/libusb/hidapi && \
./bootstrap && \ ./bootstrap && \
CFLAGS='-fPIC' CXXFLAGS='-fPIC' ./configure --disable-shared --enable-static && \ CFLAGS='-fPIC' CXXFLAGS='-fPIC' ./configure --disable-shared --enable-static && \
make -j$THREADS && \ make -j$THREADS && \
make -j$THREADS install make -j$THREADS install && \
rm -rf $(pwd)
RUN git clone -b libX11-1.6.9 --depth 1 https://gitlab.freedesktop.org/xorg/lib/libx11 && \ RUN git clone -b libX11-1.6.9 --depth 1 https://gitlab.freedesktop.org/xorg/lib/libx11 && \
cd libx11 && \ cd libx11 && \
git reset --hard db7cca17ad7807e92a928da9d4c68a00f4836da2 && \ git reset --hard db7cca17ad7807e92a928da9d4c68a00f4836da2 && \
CFLAGS='-fPIC' CXXFLAGS='-fPIC' ./autogen.sh --disable-shared --enable-static && \ CFLAGS='-fPIC' CXXFLAGS='-fPIC' ./autogen.sh --disable-shared --enable-static && \
make -j$THREADS && \ make -j$THREADS && \
make -j$THREADS install make -j$THREADS install && \
rm -rf $(pwd)
RUN git clone -b libXext-1.3.4 --depth 1 https://gitlab.freedesktop.org/xorg/lib/libxext && \ RUN git clone -b libXext-1.3.4 --depth 1 https://gitlab.freedesktop.org/xorg/lib/libxext && \
cd libxext && \ cd libxext && \
git reset --hard ebb167f34a3514783966775fb12573c4ed209625 && \ git reset --hard ebb167f34a3514783966775fb12573c4ed209625 && \
CFLAGS='-fPIC' CXXFLAGS='-fPIC' ./autogen.sh --disable-shared --enable-static && \ CFLAGS='-fPIC' CXXFLAGS='-fPIC' ./autogen.sh --disable-shared --enable-static && \
make -j$THREADS && \ make -j$THREADS && \
make -j$THREADS install make -j$THREADS install && \
rm -rf $(pwd)
RUN apt install -y libsodium-dev && \ RUN apt install -y libsodium-dev && \
git clone -b v4.3.2 --depth 1 https://github.com/zeromq/libzmq && \ git clone -b v4.3.2 --depth 1 https://github.com/zeromq/libzmq && \
@@ -156,7 +174,8 @@ RUN apt install -y libsodium-dev && \
./autogen.sh && \ ./autogen.sh && \
CFLAGS='-fPIC' CXXFLAGS='-fPIC' ./configure --disable-shared --enable-static --disable-libunwind --with-libsodium && \ CFLAGS='-fPIC' CXXFLAGS='-fPIC' ./configure --disable-shared --enable-static --disable-libunwind --with-libsodium && \
make -j$THREADS && \ make -j$THREADS && \
make -j$THREADS install make -j$THREADS install && \
rm -rf $(pwd)
RUN git clone -b libgpg-error-1.38 --depth 1 git://git.gnupg.org/libgpg-error.git && \ RUN git clone -b libgpg-error-1.38 --depth 1 git://git.gnupg.org/libgpg-error.git && \
cd libgpg-error && \ cd libgpg-error && \
@@ -164,7 +183,8 @@ RUN git clone -b libgpg-error-1.38 --depth 1 git://git.gnupg.org/libgpg-error.gi
./autogen.sh && \ ./autogen.sh && \
CFLAGS='-fPIC' CXXFLAGS='-fPIC' ./configure --disable-shared --enable-static --disable-doc --disable-tests && \ CFLAGS='-fPIC' CXXFLAGS='-fPIC' ./configure --disable-shared --enable-static --disable-doc --disable-tests && \
make -j$THREADS && \ make -j$THREADS && \
make -j$THREADS install make -j$THREADS install && \
rm -rf $(pwd)
RUN git clone -b libgcrypt-1.8.5 --depth 1 git://git.gnupg.org/libgcrypt.git && \ RUN git clone -b libgcrypt-1.8.5 --depth 1 git://git.gnupg.org/libgcrypt.git && \
cd libgcrypt && \ cd libgcrypt && \
@@ -172,7 +192,8 @@ RUN git clone -b libgcrypt-1.8.5 --depth 1 git://git.gnupg.org/libgcrypt.git &&
./autogen.sh && \ ./autogen.sh && \
CFLAGS='-fPIC' CXXFLAGS='-fPIC' ./configure --disable-shared --enable-static --disable-doc && \ CFLAGS='-fPIC' CXXFLAGS='-fPIC' ./configure --disable-shared --enable-static --disable-doc && \
make -j$THREADS && \ make -j$THREADS && \
make -j$THREADS install make -j$THREADS install && \
rm -rf $(pwd)
RUN git clone -b v3.10.0 --depth 1 https://github.com/protocolbuffers/protobuf && \ RUN git clone -b v3.10.0 --depth 1 https://github.com/protocolbuffers/protobuf && \
cd protobuf && \ cd protobuf && \
@@ -180,6 +201,7 @@ RUN git clone -b v3.10.0 --depth 1 https://github.com/protocolbuffers/protobuf &
./autogen.sh && \ ./autogen.sh && \
CFLAGS='-fPIC' CXXFLAGS='-fPIC' ./configure --enable-static --disable-shared && \ CFLAGS='-fPIC' CXXFLAGS='-fPIC' ./configure --enable-static --disable-shared && \
make -j$THREADS && \ make -j$THREADS && \
make -j$THREADS install make -j$THREADS install && \
rm -rf $(pwd)
RUN apt install -y cmake libusb-1.0-0-dev RUN apt install -y cmake libusb-1.0-0-dev

71
Dockerfile.windows Normal file
View File

@@ -0,0 +1,71 @@
FROM ubuntu:20.04
ARG THREADS=1
RUN apt update && \
DEBIAN_FRONTEND=noninteractive apt install -y build-essential cmake g++-mingw-w64 gettext git libtool pkg-config \
python && \
rm -rf /var/lib/apt/lists/*
RUN update-alternatives --set x86_64-w64-mingw32-g++ $(which x86_64-w64-mingw32-g++-posix) && \
update-alternatives --set x86_64-w64-mingw32-gcc $(which x86_64-w64-mingw32-gcc-posix)
RUN git clone -b v0.17.0.0 --depth 1 https://github.com/monero-project/monero && \
cd monero && \
git reset --hard d27d4526fe89b7cdeb4b296280c4a6cf7efe21f8 && \
cp -a contrib/depends / && \
cd .. && \
rm -rf monero
RUN make -j$THREADS -C /depends HOST=x86_64-w64-mingw32 NO_QT=1
RUN curl -LO https://download.qt.io/archive/qt/5.9/5.9.9/single/qt-everywhere-opensource-src-5.9.9.tar.xz && \
echo "5ce285209290a157d7f42ec8eb22bf3f1d76f2e03a95fc0b99b553391be01642 qt-everywhere-opensource-src-5.9.9.tar.xz" > hashsum.txt && \
sha256sum -c hashsum.txt && \
tar -xf qt-everywhere-opensource-src-5.9.9.tar.xz && \
rm qt-everywhere-opensource-src-5.9.9.tar.xz && \
cd qt-everywhere-opensource-src-5.9.9 && \
./configure --prefix=/depends/x86_64-w64-mingw32 -xplatform win32-g++ \
-device-option CROSS_COMPILE=/usr/bin/x86_64-w64-mingw32- \
-I $(pwd)/qtbase/src/3rdparty/angle/include \
-opensource -confirm-license -release -static -static-runtime -opengl dynamic -no-angle \
-no-avx -no-openssl -no-sql-sqlite \
-qt-freetype -qt-harfbuzz -qt-libjpeg -qt-libpng -qt-pcre -qt-zlib \
-skip gamepad -skip location -skip qt3d -skip qtactiveqt -skip qtandroidextras -skip qtcanvas3d -skip qtcharts \
-skip qtconnectivity -skip qtdatavis3d -skip qtdoc -skip qtgamepad -skip qtlocation -skip qtmacextras \
-skip qtmultimedia -skip qtnetworkauth -skip qtpurchasing -skip qtscript -skip qtscxml -skip qtsensors \
-skip qtserialbus -skip qtserialport -skip qtspeech -skip qttools -skip qtvirtualkeyboard -skip qtwayland \
-skip qtwebchannel -skip qtwebengine -skip qtwebsockets -skip qtwebview -skip qtwinextras -skip qtx11extras \
-skip serialbus -skip webengine \
-nomake examples -nomake tests -nomake tools && \
make QMAKE="$(pwd)/qtbase/bin/qmake CONFIG-='debug debug_and_release'" -j$THREADS && \
make -j$THREADS install && \
cd qttools/src/linguist/lrelease && \
../../../../qtbase/bin/qmake && \
make -j$THREADS && \
make -j$THREADS install && \
cd ../../../.. && \
rm -rf $(pwd)
RUN git clone -b libgpg-error-1.38 --depth 1 git://git.gnupg.org/libgpg-error.git && \
cd libgpg-error && \
git reset --hard 71d278824c5fe61865f7927a2ed1aa3115f9e439 && \
./autogen.sh && \
./configure --disable-shared --enable-static --disable-doc --disable-tests \
--host=x86_64-w64-mingw32 --prefix=/depends/x86_64-w64-mingw32 && \
make -j$THREADS && \
make -j$THREADS install && \
cd .. && \
rm -rf libgpg-error
RUN git clone -b libgcrypt-1.8.5 --depth 1 git://git.gnupg.org/libgcrypt.git && \
cd libgcrypt && \
git reset --hard 56606331bc2a80536db9fc11ad53695126007298 && \
./autogen.sh && \
./configure --disable-shared --enable-static --disable-doc \
--host=x86_64-w64-mingw32 --prefix=/depends/x86_64-w64-mingw32 \
--with-gpg-error-prefix=/depends/x86_64-w64-mingw32 && \
make -j$THREADS && \
make -j$THREADS install && \
cd .. && \
rm -rf libgcrypt

View File

@@ -221,7 +221,7 @@ Rectangle {
MoneroComponents.Label { MoneroComponents.Label {
fontSize: 16 fontSize: 16
visible: isSyncing visible: isSyncing
text: qsTr("Syncing...") text: qsTr("Syncing...") + translationManager.emptyString
color: MoneroComponents.Style.blackTheme ? "white" : "black" color: MoneroComponents.Style.blackTheme ? "white" : "black"
anchors.left: parent.left anchors.left: parent.left
anchors.leftMargin: 20 anchors.leftMargin: 20

View File

@@ -6,7 +6,7 @@ ifneq ($(dotgit), .git/config)
endif endif
subbuilddir:=$(shell echo `uname | sed -e 's|[:/\\ \(\)]|_|g'`/`git branch | grep '\* ' | cut -f2- -d' '| sed -e 's|[:/\\ \(\)]|_|g'`) subbuilddir:=$(shell echo `uname | sed -e 's|[:/\\ \(\)]|_|g'`/`git branch | grep '\* ' | cut -f2- -d' '| sed -e 's|[:/\\ \(\)]|_|g'`)
ifeq ($(USE_SINGLE_BUILDDIR),) ifeq ($(USE_SINGLE_BUILDDIR), OFF)
builddir := build/"$(subbuilddir)" builddir := build/"$(subbuilddir)"
topdir := ../../../.. topdir := ../../../..
deldirs := $(builddir) deldirs := $(builddir)
@@ -21,6 +21,11 @@ default:
mkdir -p build && cd build && cmake -D ARCH="x86-64" -D DEV_MODE=$(or ${DEV_MODE},OFF) -D BUILD_64=ON -D CMAKE_BUILD_TYPE=Release .. && $(MAKE) mkdir -p build && cd build && cmake -D ARCH="x86-64" -D DEV_MODE=$(or ${DEV_MODE},OFF) -D BUILD_64=ON -D CMAKE_BUILD_TYPE=Release .. && $(MAKE)
debug: debug:
mkdir -p build && cd build && cmake -D DEV_MODE=$(or ${DEV_MODE},ON) .. && $(MAKE) VERBOSE=1 mkdir -p build && cd build && cmake -D DEV_MODE=$(or ${DEV_MODE},ON) .. && $(MAKE) VERBOSE=1
depends:
mkdir -p build/$(target)/release
cd build/$(target)/release && cmake -D STATIC=ON -D DEV_MODE=$(or ${DEV_MODE},OFF) -D BUILD_TAG=$(tag) -D CMAKE_BUILD_TYPE=Release -D CMAKE_TOOLCHAIN_FILE=$(root)/$(target)/share/toolchain.cmake ../../.. && $(MAKE)
devmode: devmode:
mkdir -p build && cd build && cmake -D ARCH="x86-64" -D DEV_MODE=$(or ${DEV_MODE},ON) -D BUILD_64=ON -D CMAKE_BUILD_TYPE=Release .. && $(MAKE) mkdir -p build && cd build && cmake -D ARCH="x86-64" -D DEV_MODE=$(or ${DEV_MODE},ON) -D BUILD_64=ON -D CMAKE_BUILD_TYPE=Release .. && $(MAKE)
clean: clean:
@@ -31,6 +36,11 @@ scanner:
release: release:
mkdir -p $(builddir)/release && cd $(builddir)/release && cmake -D DEV_MODE=$(or ${DEV_MODE},OFF) -D ARCH="x86-64" -D CMAKE_BUILD_TYPE=Release $(topdir) && $(MAKE) mkdir -p $(builddir)/release && cd $(builddir)/release && cmake -D DEV_MODE=$(or ${DEV_MODE},OFF) -D ARCH="x86-64" -D CMAKE_BUILD_TYPE=Release $(topdir) && $(MAKE)
release-linux-armv8:
mkdir -p $(builddir)/release
cd $(builddir)/release
cmake -D DEV_MODE=$(or ${DEV_MODE},OFF) -D ARCH="armv8-a" -D BUILD_64=ON -D CMAKE_BUILD_TYPE=Release -D BUILD_TAG="linux-armv8" $(topdir) && $(MAKE)
release-static: release-static:
mkdir -p $(builddir)/release && cd $(builddir)/release && cmake -D STATIC=ON -D DEV_MODE=$(or ${DEV_MODE},OFF) -D ARCH="x86-64" -D BUILD_64=ON -D CMAKE_BUILD_TYPE=Release $(topdir) && $(MAKE) mkdir -p $(builddir)/release && cd $(builddir)/release && cmake -D STATIC=ON -D DEV_MODE=$(or ${DEV_MODE},OFF) -D ARCH="x86-64" -D BUILD_64=ON -D CMAKE_BUILD_TYPE=Release $(topdir) && $(MAKE)

View File

@@ -40,15 +40,13 @@ The Monero donation address is: `888tNkZrPN6JsEgekjMnABU4TBzc2Dt29EPAvkRxbANsAnj
The Bitcoin donation address is: `1KTexdemPdxSBcG55heUuTjDRYqbC5ZL8H` The Bitcoin donation address is: `1KTexdemPdxSBcG55heUuTjDRYqbC5ZL8H`
GUI development funding and/or some supporting services are also graciously provided by sponsors: GUI development funding and/or some supporting services are also graciously provided by [sponsors](https://www.getmonero.org/community/sponsorships/):
[<img width="80" src="https://static.getmonero.org/images/sponsors/mymonero.png"/>](https://mymonero.com) [<img width="150" src="https://www.getmonero.org/img/sponsors/tarilabs.png"/>](https://tarilabs.com/)
[<img width="150" src="https://static.getmonero.org/images/sponsors/kitware.png?1"/>](http://kitware.com) [<img width="150" src="https://www.getmonero.org/img/sponsors/globee.png"/>](https://globee.com/)
[<img width="100" src="https://static.getmonero.org/images/sponsors/dome9.png"/>](http://dome9.com) [<img width="150" src="https://www.getmonero.org/img/sponsors/symas.png"/>](https://symas.com/)
[<img width="150" src="https://static.getmonero.org/images/sponsors/araxis.png"/>](http://araxis.com) [<img width="150" src="https://www.getmonero.org/img/sponsors/forked_logo.png"/>](http://www.forked.net/)
[<img width="150" src="https://static.getmonero.org/images/sponsors/jetbrains.png"/>](http://www.jetbrains.com/) [<img width="150" src="https://www.getmonero.org/img/sponsors/macstadium.png"/>](https://www.macstadium.com/)
[<img width="150" src="https://static.getmonero.org/images/sponsors/navicat.png"/>](http://www.navicat.com/)
[<img width="150" src="https://static.getmonero.org/images/sponsors/symas.png"/>](http://www.symas.com/)
There are also several mining pools that kindly donate a portion of their fees, [a list of them can be found on our Bitcointalk post](https://bitcointalk.org/index.php?topic=583449.0). There are also several mining pools that kindly donate a portion of their fees, [a list of them can be found on our Bitcointalk post](https://bitcointalk.org/index.php?topic=583449.0).
@@ -70,10 +68,11 @@ Status of the translations:
## Installing the Monero GUI from a package ## Installing the Monero GUI from a package
Packages are available for Packages are available for
* Arch Linux: [monero-gui](https://www.archlinux.org/packages/community/x86_64/monero-gui/)
* Arch Linux: pacman -S monero-gui * Debian: See the [whonix/monero-gui repository](https://gitlab.com/whonix/monero-gui#how-to-install-monero-using-apt-get)
* Void Linux: xbps-install -S monero-core * Void Linux: `xbps-install -S monero-gui`
* GuixSD: guix package -i monero-core * GuixSD: `guix package -i monero-gui`
* macOS (homebrew): `brew cask install monero-wallet`
Packaging for your favorite distribution would be a welcome contribution! Packaging for your favorite distribution would be a welcome contribution!
@@ -81,6 +80,28 @@ Packaging for your favorite distribution would be a welcome contribution!
*Note*: Qt 5.9.7 is the minimum version required to build the GUI. *Note*: Qt 5.9.7 is the minimum version required to build the GUI.
### Building Windows static binaries with Docker (any OS)
1. Install Docker [https://docs.docker.com/engine/install/](https://docs.docker.com/engine/install/)
2. Clone the repository
```
git clone --recursive https://github.com/monero-project/monero-gui.git
```
3. Prepare build environment
```
cd monero-gui
docker build --tag monero:build-env-windows --build-arg THREADS=4 --file Dockerfile.windows .
```
\* `4` - number of CPU threads to use
4. Build
```
docker run --rm -it -v <MONERO_GUI_DIR_FULL_PATH>:/monero-gui -w /monero-gui monero:build-env-windows sh -c 'make depends root=/depends target=x86_64-w64-mingw32 tag=win-x64 -j4'
```
\* `<MONERO_GUI_DIR_FULL_PATH>` - absolute path to `monero-gui` directory
\* `4` - number of CPU threads to use
5. Monero GUI Windows static binaries will be placed in `monero-gui/build/x86_64-w64-mingw32/release/bin` directory
### Building Linux static binaries with Docker (any OS) ### Building Linux static binaries with Docker (any OS)
1. Install Docker [https://docs.docker.com/engine/install/](https://docs.docker.com/engine/install/) 1. Install Docker [https://docs.docker.com/engine/install/](https://docs.docker.com/engine/install/)
@@ -91,13 +112,13 @@ Packaging for your favorite distribution would be a welcome contribution!
3. Prepare build environment 3. Prepare build environment
``` ```
cd monero-gui cd monero-gui
docker build --tag monero:build-env-gui --build-arg THREADS=4 . docker build --tag monero:build-env-linux --build-arg THREADS=4 --file Dockerfile.linux .
``` ```
\* `4` - number of CPU threads to use \* `4` - number of CPU threads to use
4. Build 4. Build
``` ```
docker run --rm -it -v <MONERO_GUI_DIR_FULL_PATH>:/monero-gui -w /monero-gui monero:build-env-gui sh -c 'USE_SINGLE_BUILDDIR=ON DEV_MODE=ON make release-static -j4' docker run --rm -it -v <MONERO_GUI_DIR_FULL_PATH>:/monero-gui -w /monero-gui monero:build-env-linux sh -c 'make release-static -j4'
``` ```
\* `<MONERO_GUI_DIR_FULL_PATH>` - absolute path to `monero-gui` directory \* `<MONERO_GUI_DIR_FULL_PATH>` - absolute path to `monero-gui` directory
\* `4` - number of CPU threads to use \* `4` - number of CPU threads to use
@@ -152,14 +173,18 @@ The following instructions will fetch Qt from your distribution's repositories i
3. Clone repository 3. Clone repository
`git clone https://github.com/monero-project/monero-gui.git` ```
git clone --recursive https://github.com/monero-project/monero-gui.git
cd monero-gui
```
4. Build 4. Build
``` ```
cd monero-gui make release -j4
QT_SELECT=5 ./build.sh
``` ```
\* `4` - number of CPU threads to use
\* Add `CMAKE_PREFIX_PATH` enviroment variable to set a custom Qt install directory, e.g. `CMAKE_PREFIX_PATH=$HOME/Qt/5.9.7/gcc_64 make release -j4`
The executable can be found in the build/release/bin folder. The executable can be found in the build/release/bin folder.
@@ -177,22 +202,20 @@ The executable can be found in the build/release/bin folder.
`brew install qt5` (or download QT 5.9.7+ from [qt.io](https://www.qt.io/download-open-source/)) `brew install qt5` (or download QT 5.9.7+ from [qt.io](https://www.qt.io/download-open-source/))
5. Add the Qt bin directory to your path 5. Grab an up-to-date copy of the monero-gui repository
- Example for Qt: `export PATH=$PATH:$HOME/Qt/5.9.7/clang_64/bin` ```
- Example for Homebrew: `export PATH=$PATH:/usr/local/opt/qt/bin` git clone --recursive https://github.com/monero-project/monero-gui.git
cd monero-gui
```
6. Grab an up-to-date copy of the monero-gui repository 6. Start the build
`git clone https://github.com/monero-project/monero-gui.git` ```
make release -j4
7. Go into the repository ```
\* `4` - number of CPU threads to use
`cd monero-gui` \* Add `CMAKE_PREFIX_PATH` enviroment variable to set a custom Qt install directory, e.g. `CMAKE_PREFIX_PATH=$HOME/Qt/5.9.7/clang_64 make release -j4`
8. Start the build
`./build.sh`
The executable can be found in the `build/release/bin` folder. The executable can be found in the `build/release/bin` folder.
@@ -237,18 +260,17 @@ The Monero GUI on Windows is 64 bits only; 32-bit Windows GUI builds are not off
6. Clone repository 6. Clone repository
``` ```
git clone https://github.com/monero-project/monero-gui.git git clone --recursive https://github.com/monero-project/monero-gui.git
cd monero-gui
``` ```
7. Build 7. Build
``` ```
cd monero-gui make release-win64 -j4
source ./build.sh release-static cd build/release
cd build
make deploy make deploy
``` ```
\* `4` - number of CPU threads to use
**Note:** The use of `source` above is a dirty workaround for a suspected bug in the current QT version 5.11.2-3 available in the MSYS2 packaging system, see https://github.com/monero-project/monero-gui/issues/1559 for more info. The executable can be found in the `.\bin` directory.
The executable can be found in the `.\release\bin` directory.

View File

@@ -1,181 +0,0 @@
OPTION(USE_DEVICE_TREZOR "Trezor support compilation" ON)
OPTION(USE_DEVICE_TREZOR_LIBUSB "Trezor LibUSB compilation" ON)
OPTION(USE_DEVICE_TREZOR_UDP_RELEASE "Trezor UdpTransport in release mode" OFF)
OPTION(USE_DEVICE_TREZOR_DEBUG "Trezor Debugging enabled" OFF)
OPTION(TREZOR_DEBUG "Main trezor debugging switch" OFF)
# Helper function to fix cmake < 3.6.0 FindProtobuf variables
function(_trezor_protobuf_fix_vars)
if(${CMAKE_VERSION} VERSION_LESS "3.6.0")
foreach(UPPER
PROTOBUF_SRC_ROOT_FOLDER
PROTOBUF_IMPORT_DIRS
PROTOBUF_DEBUG
PROTOBUF_LIBRARY
PROTOBUF_PROTOC_LIBRARY
PROTOBUF_INCLUDE_DIR
PROTOBUF_PROTOC_EXECUTABLE
PROTOBUF_LIBRARY_DEBUG
PROTOBUF_PROTOC_LIBRARY_DEBUG
PROTOBUF_LITE_LIBRARY
PROTOBUF_LITE_LIBRARY_DEBUG
)
if (DEFINED ${UPPER})
string(REPLACE "PROTOBUF_" "Protobuf_" Camel ${UPPER})
if (NOT DEFINED ${Camel})
set(${Camel} ${${UPPER}} PARENT_SCOPE)
endif()
endif()
endforeach()
endif()
endfunction()
# Use Trezor master switch
if (USE_DEVICE_TREZOR)
# Protobuf is required to build protobuf messages for Trezor
include(FindProtobuf OPTIONAL)
find_package(Protobuf)
_trezor_protobuf_fix_vars()
# Protobuf handling the cache variables set in docker.
if(NOT Protobuf_FOUND AND NOT Protobuf_LIBRARY AND NOT Protobuf_PROTOC_EXECUTABLE AND NOT Protobuf_INCLUDE_DIR)
message(STATUS "Could not find Protobuf")
elseif(NOT Protobuf_LIBRARY OR NOT EXISTS "${Protobuf_LIBRARY}")
message(STATUS "Protobuf library not found: ${Protobuf_LIBRARY}")
unset(Protobuf_FOUND)
elseif(NOT Protobuf_PROTOC_EXECUTABLE OR NOT EXISTS "${Protobuf_PROTOC_EXECUTABLE}")
message(STATUS "Protobuf executable not found: ${Protobuf_PROTOC_EXECUTABLE}")
unset(Protobuf_FOUND)
elseif(NOT Protobuf_INCLUDE_DIR OR NOT EXISTS "${Protobuf_INCLUDE_DIR}")
message(STATUS "Protobuf include dir not found: ${Protobuf_INCLUDE_DIR}")
unset(Protobuf_FOUND)
else()
message(STATUS "Protobuf lib: ${Protobuf_LIBRARY}, inc: ${Protobuf_INCLUDE_DIR}, protoc: ${Protobuf_PROTOC_EXECUTABLE}")
set(Protobuf_INCLUDE_DIRS ${Protobuf_INCLUDE_DIR})
set(Protobuf_FOUND 1) # override found if all rquired info was provided by variables
endif()
if(TREZOR_DEBUG)
set(USE_DEVICE_TREZOR_DEBUG 1)
endif()
# Compile debugging support (for tests)
if (USE_DEVICE_TREZOR_DEBUG)
add_definitions(-DWITH_TREZOR_DEBUGGING=1)
endif()
else()
message(STATUS "Trezor support disabled by USE_DEVICE_TREZOR")
endif()
if(Protobuf_FOUND AND USE_DEVICE_TREZOR)
if (NOT "$ENV{TREZOR_PYTHON}" STREQUAL "")
set(TREZOR_PYTHON "$ENV{TREZOR_PYTHON}" CACHE INTERNAL "Copied from environment variable TREZOR_PYTHON")
else()
find_package(Python QUIET COMPONENTS Interpreter) # cmake 3.12+
if(Python_Interpreter_FOUND)
set(TREZOR_PYTHON "${Python_EXECUTABLE}")
endif()
endif()
if(NOT TREZOR_PYTHON)
find_package(PythonInterp)
if(PYTHONINTERP_FOUND AND PYTHON_EXECUTABLE)
set(TREZOR_PYTHON "${PYTHON_EXECUTABLE}")
endif()
endif()
if(NOT TREZOR_PYTHON)
message(STATUS "Trezor: Python not found")
endif()
endif()
# Protobuf compilation test
if(Protobuf_FOUND AND USE_DEVICE_TREZOR AND TREZOR_PYTHON)
execute_process(COMMAND ${Protobuf_PROTOC_EXECUTABLE} -I "${CMAKE_SOURCE_DIR}/cmake" -I "${Protobuf_INCLUDE_DIR}" "${CMAKE_SOURCE_DIR}/cmake/test-protobuf.proto" --cpp_out ${CMAKE_BINARY_DIR} RESULT_VARIABLE RET OUTPUT_VARIABLE OUT ERROR_VARIABLE ERR)
if(RET)
message(STATUS "Protobuf test generation failed: ${OUT} ${ERR}")
endif()
try_compile(Protobuf_COMPILE_TEST_PASSED
"${CMAKE_BINARY_DIR}"
SOURCES
"${CMAKE_BINARY_DIR}/test-protobuf.pb.cc"
"${CMAKE_SOURCE_DIR}/cmake/test-protobuf.cpp"
CMAKE_FLAGS
"-DINCLUDE_DIRECTORIES=${Protobuf_INCLUDE_DIR};${CMAKE_BINARY_DIR}"
"-DCMAKE_CXX_STANDARD=11"
LINK_LIBRARIES ${Protobuf_LIBRARY}
OUTPUT_VARIABLE OUTPUT
)
if(NOT Protobuf_COMPILE_TEST_PASSED)
message(STATUS "Protobuf Compilation test failed: ${OUTPUT}.")
endif()
endif()
# Try to build protobuf messages
if(Protobuf_FOUND AND USE_DEVICE_TREZOR AND TREZOR_PYTHON AND Protobuf_COMPILE_TEST_PASSED)
set(ENV{PROTOBUF_INCLUDE_DIRS} "${Protobuf_INCLUDE_DIR}")
set(ENV{PROTOBUF_PROTOC_EXECUTABLE} "${Protobuf_PROTOC_EXECUTABLE}")
set(TREZOR_PROTOBUF_PARAMS "")
if (USE_DEVICE_TREZOR_DEBUG)
set(TREZOR_PROTOBUF_PARAMS "--debug")
endif()
execute_process(COMMAND ${TREZOR_PYTHON} tools/build_protob.py ${TREZOR_PROTOBUF_PARAMS} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/monero/src/device_trezor/trezor RESULT_VARIABLE RET OUTPUT_VARIABLE OUT ERROR_VARIABLE ERR)
if(RET)
message(WARNING "Trezor protobuf messages could not be regenerated (err=${RET}, python ${PYTHON})."
"OUT: ${OUT}, ERR: ${ERR}."
"Please read src/device_trezor/trezor/tools/README.md")
else()
message(STATUS "Trezor protobuf messages regenerated out: \"${OUT}.\"")
set(DEVICE_TREZOR_READY 1)
add_definitions(-DDEVICE_TREZOR_READY=1)
add_definitions(-DPROTOBUF_INLINE_NOT_IN_HEADERS=0)
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
add_definitions(-DTREZOR_DEBUG=1)
endif()
if(USE_DEVICE_TREZOR_UDP_RELEASE)
add_definitions(-DUSE_DEVICE_TREZOR_UDP_RELEASE=1)
endif()
if (Protobuf_INCLUDE_DIR)
include_directories(${Protobuf_INCLUDE_DIR})
endif()
# LibUSB support, check for particular version
# Include support only if compilation test passes
if (USE_DEVICE_TREZOR_LIBUSB)
find_package(LibUSB)
endif()
if (LibUSB_COMPILE_TEST_PASSED)
add_definitions(-DHAVE_TREZOR_LIBUSB=1)
if(LibUSB_INCLUDE_DIRS)
include_directories(${LibUSB_INCLUDE_DIRS})
endif()
endif()
set(TREZOR_LIBUSB_LIBRARIES "")
if(LibUSB_COMPILE_TEST_PASSED)
list(APPEND TREZOR_LIBUSB_LIBRARIES ${LibUSB_LIBRARIES})
message(STATUS "Trezor compatible LibUSB found at: ${LibUSB_INCLUDE_DIRS}")
endif()
if (BUILD_GUI_DEPS)
set(TREZOR_DEP_LIBS "")
set(TREZOR_DEP_LINKER "")
if (Protobuf_LIBRARY)
list(APPEND TREZOR_DEP_LIBS ${Protobuf_LIBRARY})
string(APPEND TREZOR_DEP_LINKER " -lprotobuf")
endif()
if (TREZOR_LIBUSB_LIBRARIES)
list(APPEND TREZOR_DEP_LIBS ${TREZOR_LIBUSB_LIBRARIES})
string(APPEND TREZOR_DEP_LINKER " -lusb-1.0")
endif()
endif()
endif()
endif()

103
cmake/Deploy.cmake Normal file
View File

@@ -0,0 +1,103 @@
if(APPLE OR (WIN32 AND NOT STATIC))
add_custom_target(deploy)
get_target_property(_qmake_executable Qt5::qmake IMPORTED_LOCATION)
get_filename_component(_qt_bin_dir "${_qmake_executable}" DIRECTORY)
if(APPLE AND NOT IOS)
find_program(MACDEPLOYQT_EXECUTABLE macdeployqt HINTS "${_qt_bin_dir}")
add_custom_command(TARGET deploy
POST_BUILD
COMMAND "${MACDEPLOYQT_EXECUTABLE}" "$<TARGET_FILE_DIR:monero-wallet-gui>/../.." -always-overwrite -qmldir="${CMAKE_SOURCE_DIR}"
COMMENT "Running macdeployqt..."
)
# workaround for a Qt bug that requires manually adding libqsvg.dylib to bundle
find_file(_qt_svg_dylib "libqsvg.dylib" PATHS "${CMAKE_PREFIX_PATH}/plugins/imageformats" NO_DEFAULT_PATH)
if(_qt_svg_dylib)
add_custom_command(TARGET deploy
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${_qt_svg_dylib} $<TARGET_FILE_DIR:monero-wallet-gui>/../PlugIns/imageformats/
COMMAND ${CMAKE_INSTALL_NAME_TOOL} -change "${CMAKE_PREFIX_PATH}/lib/QtGui.framework/Versions/5/QtGui" "@executable_path/../Frameworks/QtGui.fr amework/Versions/5/QtGui" $<TARGET_FILE_DIR:monero-wallet-gui>/../PlugIns/imageformats/libqsvg.dylib
COMMAND ${CMAKE_INSTALL_NAME_TOOL} -change "${CMAKE_PREFIX_PATH}/lib/QtWidgets.framework/Versions/5/QtWidgets" "@executable_path/../Frameworks/ QtGui.framework/Versions/5/QtGui" $<TARGET_FILE_DIR:monero-wallet-gui>/../PlugIns/imageformats/libqsvg.dylib
COMMAND ${CMAKE_INSTALL_NAME_TOOL} -change "${CMAKE_PREFIX_PATH}/lib/QtSvg.framework/Versions/5/QtSvg" "@executable_path/../Frameworks/QtGui.fr amework/Versions/5/QtGui" $<TARGET_FILE_DIR:monero-wallet-gui>/../PlugIns/imageformats/libqsvg.dylib
COMMAND ${CMAKE_INSTALL_NAME_TOOL} -change "${CMAKE_PREFIX_PATH}/lib/QtCore.framework/Versions/5/QtCore" "@executable_path/../Frameworks/QtGui. framework/Versions/5/QtGui" $<TARGET_FILE_DIR:monero-wallet-gui>/../PlugIns/imageformats/libqsvg.dylib
COMMENT "Copying libqsvg.dylib, running install_name_tool"
)
endif()
elseif(WIN32)
find_program(WINDEPLOYQT_EXECUTABLE windeployqt HINTS "${_qt_bin_dir}")
add_custom_command(TARGET monero-wallet-gui POST_BUILD
COMMAND "${CMAKE_COMMAND}" -E env PATH="${_qt_bin_dir}" "${WINDEPLOYQT_EXECUTABLE}" "$<TARGET_FILE:monero-wallet-gui>" -no-translations -qmldir="${CMAKE_SOURCE_DIR}"
COMMENT "Running windeployqt..."
)
set(WIN_DEPLOY_DLLS
libboost_chrono-mt.dll
libboost_filesystem-mt.dll
libboost_locale-mt.dll
libboost_program_options-mt.dll
libboost_regex-mt.dll
libboost_serialization-mt.dll
libboost_thread-mt.dll
libprotobuf.dll
libbrotlicommon.dll
libbrotlidec.dll
libusb-1.0.dll
zlib1.dll
libzstd.dll
libwinpthread-1.dll
libtiff-5.dll
libstdc++-6.dll
libpng16-16.dll
libpcre16-0.dll
libpcre-1.dll
libmng-2.dll
liblzma-5.dll
liblcms2-2.dll
libjpeg-8.dll
libintl-8.dll
libiconv-2.dll
libharfbuzz-0.dll
libgraphite2.dll
libglib-2.0-0.dll
libfreetype-6.dll
libbz2-1.dll
libssp-0.dll
libpcre2-16-0.dll
libhidapi-0.dll
libdouble-conversion.dll
libgcrypt-20.dll
libgpg-error-0.dll
libsodium-23.dll
libzmq.dll
#platform files
libgcc_s_seh-1.dll
#openssl files
libssl-1_1-x64.dll
libcrypto-1_1-x64.dll
)
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
list(APPEND WIN_DEPLOY_DLLS
libicudtd67.dll
libicuind67.dll
libicuiod67.dll
libicutud67.dll
libicuucd67.dll
)
else() # assume release
list(APPEND WIN_DEPLOY_DLLS
libicudt67.dll
libicuin67.dll
libicuio67.dll
libicutu67.dll
libicuuc67.dll
)
endif()
list(TRANSFORM WIN_DEPLOY_DLLS PREPEND "$ENV{MSYSTEM_PREFIX}/bin/")
add_custom_command(TARGET deploy
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${WIN_DEPLOY_DLLS} "$<TARGET_FILE_DIR:monero-wallet-gui>"
COMMENT "Copying DLLs to target folder"
)
endif()
endif()

File diff suppressed because it is too large Load Diff

View File

@@ -1,14 +0,0 @@
/* increase vertical space */
#titlearea, #nav-path {
display: none;
height: 0px;
}
/* uncomment these lines for some extra vertical space */
/*
.tablist li {
line-height: 26px;
}
*/

View File

@@ -1,98 +0,0 @@
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.
#.rst:
# FindBacktrace
# -------------
#
# Find provider for backtrace(3).
#
# Checks if OS supports backtrace(3) via either libc or custom library.
# This module defines the following variables:
#
# ``Backtrace_HEADER``
# The header file needed for backtrace(3). Cached.
# Could be forcibly set by user.
# ``Backtrace_INCLUDE_DIRS``
# The include directories needed to use backtrace(3) header.
# ``Backtrace_LIBRARIES``
# The libraries (linker flags) needed to use backtrace(3), if any.
# ``Backtrace_FOUND``
# Is set if and only if backtrace(3) support detected.
#
# The following cache variables are also available to set or use:
#
# ``Backtrace_LIBRARY``
# The external library providing backtrace, if any.
# ``Backtrace_INCLUDE_DIR``
# The directory holding the backtrace(3) header.
#
# Typical usage is to generate of header file using configure_file() with the
# contents like the following::
#
# #cmakedefine01 Backtrace_FOUND
# #if Backtrace_FOUND
# # include <${Backtrace_HEADER}>
# #endif
#
# And then reference that generated header file in actual source.
include(CMakePushCheckState)
include(CheckSymbolExists)
include(FindPackageHandleStandardArgs)
# List of variables to be provided to find_package_handle_standard_args()
set(_Backtrace_STD_ARGS Backtrace_INCLUDE_DIR)
if(Backtrace_HEADER)
set(_Backtrace_HEADER_TRY "${Backtrace_HEADER}")
else(Backtrace_HEADER)
set(_Backtrace_HEADER_TRY "execinfo.h")
endif(Backtrace_HEADER)
find_path(Backtrace_INCLUDE_DIR "${_Backtrace_HEADER_TRY}")
set(Backtrace_INCLUDE_DIRS ${Backtrace_INCLUDE_DIR})
if (NOT DEFINED Backtrace_LIBRARY)
# First, check if we already have backtrace(), e.g., in libc
cmake_push_check_state(RESET)
set(CMAKE_REQUIRED_INCLUDES ${Backtrace_INCLUDE_DIRS})
set(CMAKE_REQUIRED_QUIET ${Backtrace_FIND_QUIETLY})
check_symbol_exists("backtrace" "${_Backtrace_HEADER_TRY}" _Backtrace_SYM_FOUND)
cmake_pop_check_state()
endif()
if(_Backtrace_SYM_FOUND)
# Avoid repeating the message() call below each time CMake is run.
if(NOT Backtrace_FIND_QUIETLY AND NOT DEFINED Backtrace_LIBRARY)
message(STATUS "backtrace facility detected in default set of libraries")
endif()
set(Backtrace_LIBRARY "" CACHE FILEPATH "Library providing backtrace(3), empty for default set of libraries")
else()
# Check for external library, for non-glibc systems
if(Backtrace_INCLUDE_DIR)
# OpenBSD has libbacktrace renamed to libexecinfo
find_library(Backtrace_LIBRARY "execinfo")
elseif() # respect user wishes
set(_Backtrace_HEADER_TRY "backtrace.h")
find_path(Backtrace_INCLUDE_DIR ${_Backtrace_HEADER_TRY})
find_library(Backtrace_LIBRARY "backtrace")
endif()
# Prepend list with library path as it's more common practice
set(_Backtrace_STD_ARGS Backtrace_LIBRARY ${_Backtrace_STD_ARGS})
endif()
message(STATUS "Backtrace_LIBRARY: ${Backtrace_LIBRARY}")
if(Backtrace_LIBRARY STREQUAL "NOTFOUND")
set(Backtrace_LIBRARY "")
endif()
if(Backtrace_LIBRARY STREQUAL "Backtrace_LIBRARY-NOTFOUND")
set(Backtrace_LIBRARY "")
endif()
set(Backtrace_LIBRARIES ${Backtrace_LIBRARY})
set(Backtrace_HEADER "${_Backtrace_HEADER_TRY}" CACHE STRING "Header providing backtrace(3) facility")
find_package_handle_standard_args(Backtrace FOUND_VAR Backtrace_FOUND REQUIRED_VARS ${_Backtrace_STD_ARGS})
mark_as_advanced(Backtrace_HEADER Backtrace_INCLUDE_DIR Backtrace_LIBRARY)

View File

@@ -1,25 +0,0 @@
# - Try to find Berkeley DB
# Once done this will define
#
# BERKELEY_DB_FOUND - system has Berkeley DB
# BERKELEY_DB_INCLUDE_DIR - the Berkeley DB include directory
# BERKELEY_DB_LIBRARIES - Link these to use Berkeley DB
# BERKELEY_DB_DEFINITIONS - Compiler switches required for using Berkeley DB
# Copyright (c) 2006, Alexander Dymo, <adymo@kdevelop.org>
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
find_path(BERKELEY_DB_INCLUDE_DIR db_cxx.h
/usr/include/db4
/usr/local/include/db4
)
find_library(BERKELEY_DB_LIBRARIES NAMES db_cxx )
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Berkeley "Could not find Berkeley DB >= 4.1" BERKELEY_DB_INCLUDE_DIR BERKELEY_DB_LIBRARIES)
# show the BERKELEY_DB_INCLUDE_DIR and BERKELEY_DB_LIBRARIES variables only in the advanced view
mark_as_advanced(BERKELEY_DB_INCLUDE_DIR BERKELEY_DB_LIBRARIES )

View File

@@ -1,41 +0,0 @@
# - Try to find libunwind
# Once done this will define
#
# LIBUNWIND_FOUND - system has libunwind
# LIBUNWIND_INCLUDE_DIR - the libunwind include directory
# LIBUNWIND_LIBRARIES - Link these to use libunwind
# LIBUNWIND_DEFINITIONS - Compiler switches required for using libunwind
# Copyright (c) 2006, Alexander Dymo, <adymo@kdevelop.org>
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
find_path(LIBUNWIND_INCLUDE_DIR libunwind.h
/usr/include
/usr/local/include
)
find_library(LIBUNWIND_LIBRARIES NAMES unwind )
if(NOT LIBUNWIND_LIBRARIES STREQUAL "LIBUNWIND_LIBRARIES-NOTFOUND")
if (CMAKE_COMPILER_IS_GNUCC)
set(LIBUNWIND_LIBRARIES "gcc_eh;${LIBUNWIND_LIBRARIES}")
endif()
endif()
# some versions of libunwind need liblzma, and we don't use pkg-config
# so we just look whether liblzma is installed, and add it if it is.
# It might not be actually needed, but doesn't hurt if it is not.
# We don't need any headers, just the lib, as it's privately needed.
message(STATUS "looking for liblzma")
find_library(LIBLZMA_LIBRARIES lzma )
if(NOT LIBLZMA_LIBRARIES STREQUAL "LIBLZMA_LIBRARIES-NOTFOUND")
message(STATUS "liblzma found")
set(LIBUNWIND_LIBRARIES "${LIBUNWIND_LIBRARIES};${LIBLZMA_LIBRARIES}")
endif()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Libunwind "Could not find libunwind" LIBUNWIND_INCLUDE_DIR LIBUNWIND_LIBRARIES)
# show the LIBUNWIND_INCLUDE_DIR and LIBUNWIND_LIBRARIES variables only in the advanced view
mark_as_advanced(LIBUNWIND_INCLUDE_DIR LIBUNWIND_LIBRARIES )

View File

@@ -1,59 +0,0 @@
# --------------------------------- FindMiniupnpc Start ---------------------------------
# Locate miniupnp library
# This module defines
# MINIUPNP_FOUND, if false, do not try to link to miniupnp
# MINIUPNP_LIBRARY, the miniupnp variant
# MINIUPNP_INCLUDE_DIR, where to find miniupnpc.h and family)
# MINIUPNPC_VERSION_1_7_OR_HIGHER, set if we detect the version of miniupnpc is 1.7 or higher
#
# Note that the expected include convention is
# #include "miniupnpc.h"
# and not
# #include <miniupnpc/miniupnpc.h>
# This is because, the miniupnpc location is not standardized and may exist
# in locations other than miniupnpc/
if (MINIUPNP_INCLUDE_DIR AND MINIUPNP_LIBRARY)
# Already in cache, be silent
set(MINIUPNP_FIND_QUIETLY TRUE)
endif ()
find_path(MINIUPNP_INCLUDE_DIR miniupnpc.h
HINTS $ENV{MINIUPNP_INCLUDE_DIR}
PATH_SUFFIXES miniupnpc
)
find_library(MINIUPNP_LIBRARY miniupnpc
HINTS $ENV{MINIUPNP_LIBRARY}
)
find_library(MINIUPNP_STATIC_LIBRARY libminiupnpc.a
HINTS $ENV{MINIUPNP_STATIC_LIBRARY}
)
set(MINIUPNP_INCLUDE_DIRS ${MINIUPNP_INCLUDE_DIR})
set(MINIUPNP_LIBRARIES ${MINIUPNP_LIBRARY})
set(MINIUPNP_STATIC_LIBRARIES ${MINIUPNP_STATIC_LIBRARY})
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(
MiniUPnPc DEFAULT_MSG
MINIUPNP_INCLUDE_DIR
MINIUPNP_LIBRARY
)
IF(MINIUPNPC_FOUND)
file(STRINGS "${MINIUPNP_INCLUDE_DIR}/miniupnpc.h" MINIUPNPC_API_VERSION_STR REGEX "^#define[\t ]+MINIUPNPC_API_VERSION[\t ]+[0-9]+")
if(MINIUPNPC_API_VERSION_STR MATCHES "^#define[\t ]+MINIUPNPC_API_VERSION[\t ]+([0-9]+)")
set(MINIUPNPC_API_VERSION "${CMAKE_MATCH_1}")
if (${MINIUPNPC_API_VERSION} GREATER "10" OR ${MINIUPNPC_API_VERSION} EQUAL "10")
message(STATUS "Found miniupnpc API version " ${MINIUPNPC_API_VERSION})
set(MINIUPNP_FOUND true)
set(MINIUPNPC_VERSION_1_7_OR_HIGHER true)
endif()
endif()
ENDIF()
mark_as_advanced(MINIUPNP_INCLUDE_DIR MINIUPNP_LIBRARY MINIUPNP_STATIC_LIBRARY)
# --------------------------------- FindMiniupnpc End ---------------------------------

View File

@@ -1,91 +0,0 @@
# - Try to find readline include dirs and libraries
#
# Usage of this module as follows:
#
# find_package(Readline)
#
# Variables used by this module, they can change the default behaviour and need
# to be set before calling find_package:
#
# Readline_ROOT_DIR Set this variable to the root installation of
# readline if the module has problems finding the
# proper installation path.
#
# Variables defined by this module:
#
# READLINE_FOUND System has readline, include and lib dirs found
# GNU_READLINE_FOUND Version of readline found is GNU readline, not libedit!
# LIBEDIT_FOUND Version of readline found is libedit, not GNU readline!
# Readline_INCLUDE_DIR The readline include directories.
# Readline_LIBRARY The readline library.
# GNU_READLINE_LIBRARY The GNU readline library or empty string.
# LIBEDIT_LIBRARY The libedit library or empty string.
find_path(Readline_ROOT_DIR
NAMES include/readline/readline.h
PATHS /usr/local/opt/readline/ /opt/local/ /usr/local/ /usr/
NO_DEFAULT_PATH
)
find_path(Readline_INCLUDE_DIR
NAMES readline/readline.h
PATHS ${Readline_ROOT_DIR}/include
NO_DEFAULT_PATH
)
find_library(Readline_LIBRARY
NAMES readline
PATHS ${Readline_ROOT_DIR}/lib
NO_DEFAULT_PATH
)
find_library(Termcap_LIBRARY
NAMES tinfo termcap ncursesw ncurses cursesw curses
)
if(Readline_INCLUDE_DIR AND Readline_LIBRARY)
set(READLINE_FOUND TRUE)
else(Readline_INCLUDE_DIR AND Readline_LIBRARY)
FIND_LIBRARY(Readline_LIBRARY NAMES readline PATHS Readline_ROOT_DIR)
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Readline DEFAULT_MSG Readline_INCLUDE_DIR Readline_LIBRARY )
MARK_AS_ADVANCED(Readline_INCLUDE_DIR Readline_LIBRARY)
endif(Readline_INCLUDE_DIR AND Readline_LIBRARY)
mark_as_advanced(
Readline_ROOT_DIR
Readline_INCLUDE_DIR
Readline_LIBRARY
)
set(CMAKE_REQUIRED_INCLUDES ${Readline_INCLUDE_DIR})
set(CMAKE_REQUIRED_LIBRARIES ${Readline_LIBRARY})
include(CheckFunctionExists)
check_function_exists(rl_copy_text HAVE_COPY_TEXT)
check_function_exists(rl_filename_completion_function HAVE_COMPLETION_FUNCTION)
if(NOT HAVE_COMPLETION_FUNCTION)
if (Readline_LIBRARY)
set(CMAKE_REQUIRED_LIBRARIES ${Readline_LIBRARY} ${Termcap_LIBRARY})
endif(Readline_LIBRARY)
check_function_exists(rl_copy_text HAVE_COPY_TEXT_TC)
check_function_exists(rl_filename_completion_function HAVE_COMPLETION_FUNCTION_TC)
set(HAVE_COMPLETION_FUNCTION ${HAVE_COMPLETION_FUNCTION_TC})
set(HAVE_COPY_TEXT ${HAVE_COPY_TEXT_TC})
if(HAVE_COMPLETION_FUNCTION)
set(Readline_LIBRARY ${Readline_LIBRARY} ${Termcap_LIBRARY})
endif(HAVE_COMPLETION_FUNCTION)
endif(NOT HAVE_COMPLETION_FUNCTION)
set(LIBEDIT_LIBRARY "")
set(GNU_READLINE_LIBRARY "")
if(HAVE_COMPLETION_FUNCTION AND HAVE_COPY_TEXT)
set(GNU_READLINE_FOUND TRUE)
set(GNU_READLINE_LIBRARY ${Readline_LIBRARY})
elseif(READLINE_FOUND AND NOT HAVE_COPY_TEXT)
set(LIBEDIT_FOUND TRUE)
set(LIBEDIT_LIBRARY ${Readline_LIBRARY})
endif(HAVE_COMPLETION_FUNCTION AND HAVE_COPY_TEXT)

View File

@@ -1,40 +0,0 @@
# Copyright (c) 2014-2019, The Monero Project
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification, are
# permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this list of
# conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
# of conditions and the following disclaimer in the documentation and/or other
# materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its contributors may be
# used to endorse or promote products derived from this software without specific
# prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
# THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MESSAGE(STATUS "Looking for libunbound")
FIND_PATH(UNBOUND_INCLUDE_DIR
NAMES unbound.h
PATH_SUFFIXES include/ include/unbound/
PATHS "${PROJECT_SOURCE_DIR}"
${UNBOUND_ROOT}
$ENV{UNBOUND_ROOT}
/usr/local/
/usr/
)
find_library(UNBOUND_LIBRARIES unbound)

View File

@@ -1,68 +0,0 @@
# Copyright (c) 2014-2019, The Monero Project
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification, are
# permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this list of
# conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
# of conditions and the following disclaimer in the documentation and/or other
# materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its contributors may be
# used to endorse or promote products derived from this software without specific
# prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
# THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
# Check what commit we're on
execute_process(COMMAND "${GIT}" rev-parse --short=9 HEAD RESULT_VARIABLE RET OUTPUT_VARIABLE COMMIT OUTPUT_STRIP_TRAILING_WHITESPACE)
if(RET)
# Something went wrong, set the version tag to -unknown
message(WARNING "Cannot determine current commit. Make sure that you are building either from a Git working tree or from a source archive.")
set(VERSIONTAG "unknown")
set(VERSION_IS_RELEASE "false")
configure_file("monero/src/version.cpp.in" "${TO}")
else()
string(SUBSTRING ${COMMIT} 0 9 COMMIT)
message(STATUS "You are currently on commit ${COMMIT}")
# Get all the tags
execute_process(COMMAND "${GIT}" rev-list --tags --max-count=1 --abbrev-commit RESULT_VARIABLE RET OUTPUT_VARIABLE TAGGEDCOMMIT OUTPUT_STRIP_TRAILING_WHITESPACE)
if(NOT TAGGEDCOMMIT)
message(WARNING "Cannot determine most recent tag. Make sure that you are building either from a Git working tree or from a source archive.")
set(VERSIONTAG "${COMMIT}")
set(VERSION_IS_RELEASE "false")
else()
message(STATUS "The most recent tag was at ${TAGGEDCOMMIT}")
# Check if we're building that tagged commit or a different one
if(COMMIT STREQUAL TAGGEDCOMMIT)
message(STATUS "You are building a tagged release")
set(VERSIONTAG "release")
set(VERSION_IS_RELEASE "true")
else()
message(STATUS "You are ahead of or behind a tagged release")
set(VERSIONTAG "${COMMIT}")
set(VERSION_IS_RELEASE "false")
endif()
endif()
configure_file("monero/src/version.cpp.in" "${TO}")
endif()

View File

@@ -1,81 +0,0 @@
# Copyright (c) 2014-2017, The Monero Project
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification, are
# permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this list of
# conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
# of conditions and the following disclaimer in the documentation and/or other
# materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its contributors may be
# used to endorse or promote products derived from this software without specific
# prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
# THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
function (write_static_version_header hash)
set(VERSIONTAG "${hash}")
configure_file("${CMAKE_SOURCE_DIR}/monero/src/version.cpp.in" "${CMAKE_BINARY_DIR}/version.cpp")
endfunction ()
find_package(Git QUIET)
if ("$Format:$" STREQUAL "")
# We're in a tarball; use hard-coded variables.
write_static_version_header("release")
elseif (GIT_FOUND OR Git_FOUND)
add_custom_command(
OUTPUT "${CMAKE_BINARY_DIR}/version.cpp"
COMMAND "${CMAKE_COMMAND}"
"-D" "GIT=${GIT_EXECUTABLE}"
"-D" "TO=${CMAKE_BINARY_DIR}/version.cpp"
"-P" "cmake/GenVersion.cmake"
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}")
#message(STATUS "Found Git: ${GIT_EXECUTABLE}")
# COMMAND "${CMAKE_COMMAND}"
# "-D" "GIT=${GIT_EXECUTABLE}"
# "-D" "TO=${CMAKE_BINARY_DIR}/monero/version.cpp"
# "-P" "cmake/GenVersion.cmake"
# BYPRODUCTS "${CMAKE_BINARY_DIR}/monero/version.cpp"
# WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}")
else()
message(STATUS "WARNING: Git was not found!")
write_static_version_header("unknown")
endif ()
add_custom_target(genversion ALL
DEPENDS "${CMAKE_BINARY_DIR}/version.cpp")
#find_package(Git QUIET)
#if ("$Format:$" STREQUAL "")
# # We're in a tarball; use hard-coded variables.
# write_static_version_header("release")
#elseif (GIT_FOUND OR Git_FOUND)
# message(STATUS "Found Git: ${GIT_EXECUTABLE}")
# add_custom_command(
# OUTPUT "${CMAKE_BINARY_DIR}/version.cpp"
# COMMAND "${CMAKE_COMMAND}"
# "-D" "GIT=${GIT_EXECUTABLE}"
# "-D" "TO=${CMAKE_BINARY_DIR}/version.cpp"
# "-P" "cmake/GenVersion.cmake"
# WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}")
#else()
# message(STATUS "WARNING: Git was not found!")
# write_static_version_header("unknown")
#endif ()
#add_custom_target(genversion ALL
# DEPENDS "${CMAKE_BINARY_DIR}/version.cpp")

View File

@@ -1,43 +0,0 @@
// Copyright (c) 2014-2019, The Monero Project
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification, are
// permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice, this list of
// conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
// of conditions and the following disclaimer in the documentation and/or other
// materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of its contributors may be
// used to endorse or promote products derived from this software without specific
// prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <string>
#include <iostream>
#include <google/protobuf/message.h>
#include <google/protobuf/unknown_field_set.h>
#include "test-protobuf.pb.h"
int main(int argc, char *argv[]) {
google::protobuf::UnknownFieldSet ufs;
ufs.ClearAndFreeMemory();
Success sc;
sc.set_message("test");
sc.SerializeToOstream(&std::cerr);
return 0;
}

View File

@@ -1,7 +0,0 @@
syntax = "proto2";
import "google/protobuf/descriptor.proto";
message Success {
optional string message = 1;
}

View File

@@ -1,34 +0,0 @@
// Copyright (c) 2014-2019, The Monero Project
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification, are
// permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice, this list of
// conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
// of conditions and the following disclaimer in the documentation and/or other
// materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of its contributors may be
// used to endorse or promote products derived from this software without specific
// prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <assert.h>
static_assert(1, "FAIL");
int main(int argc, char *argv[]) {
return 0;
}

View File

@@ -1,34 +0,0 @@
// Copyright (c) 2014-2019, The Monero Project
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification, are
// permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice, this list of
// conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
// of conditions and the following disclaimer in the documentation and/or other
// materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of its contributors may be
// used to endorse or promote products derived from this software without specific
// prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <assert.h>
static_assert(1, "FAIL");
int main(int argc, char *argv[]) {
return 0;
}

View File

@@ -109,6 +109,7 @@ Item {
color: MoneroComponents.Style.defaultFontColor color: MoneroComponents.Style.defaultFontColor
textFormat: Text.RichText textFormat: Text.RichText
wrapMode: Text.NoWrap wrapMode: Text.NoWrap
visible: text != ""
} }
} }

View File

@@ -204,7 +204,7 @@ Item {
Rectangle { Rectangle {
anchors.fill: parent anchors.fill: parent
anchors.topMargin: 1 anchors.topMargin: 1
color: "transparent" color: item.enabled ? "transparent" : MoneroComponents.Style.inputBoxBackgroundDisabled
} }
Rectangle { Rectangle {

View File

@@ -39,6 +39,15 @@ Rectangle {
property var connected: Wallet.ConnectionStatus_Disconnected property var connected: Wallet.ConnectionStatus_Disconnected
function getConnectionStatusString(status) { function getConnectionStatusString(status) {
switch (appWindow.daemonStartStopInProgress)
{
case 1:
return qsTr("Starting the node");
case 2:
return qsTr("Stopping the node");
default:
break;
}
switch (status) { switch (status) {
case Wallet.ConnectionStatus_Connected: case Wallet.ConnectionStatus_Connected:
if (!appWindow.daemonSynced) if (!appWindow.daemonSynced)

View File

@@ -44,6 +44,8 @@ Item {
property alias password: passwordInput1.text property alias password: passwordInput1.text
property string walletName property string walletName
property var okButtonText
property string okButtonIcon
property string errorText property string errorText
property bool passwordDialogMode property bool passwordDialogMode
property bool passphraseDialogMode property bool passphraseDialogMode
@@ -75,10 +77,12 @@ Item {
appWindow.updateBalance(); appWindow.updateBalance();
} }
function open(walletName, errorText) { function open(walletName, errorText, okButtonText, okButtonIcon) {
passwordDialogMode = true; passwordDialogMode = true;
passphraseDialogMode = false; passphraseDialogMode = false;
newPasswordDialogMode = false; newPasswordDialogMode = false;
root.okButtonText = okButtonText;
root.okButtonIcon = okButtonIcon ? okButtonIcon : "";
_openInit(walletName, errorText); _openInit(walletName, errorText);
} }
@@ -274,6 +278,7 @@ Item {
MoneroComponents.StandardButton { MoneroComponents.StandardButton {
id: cancelButton id: cancelButton
primary: false
small: true small: true
text: qsTr("Cancel") + translationManager.emptyString text: qsTr("Cancel") + translationManager.emptyString
KeyNavigation.tab: passwordInput1 KeyNavigation.tab: passwordInput1
@@ -282,8 +287,10 @@ Item {
MoneroComponents.StandardButton { MoneroComponents.StandardButton {
id: okButton id: okButton
fontAwesomeIcon: true
rightIcon: okButtonIcon
small: true small: true
text: qsTr("Ok") + translationManager.emptyString text: okButtonText ? okButtonText : qsTr("Ok") + translationManager.emptyString
KeyNavigation.tab: cancelButton KeyNavigation.tab: cancelButton
enabled: (passwordDialogMode == true) ? true : passwordInput1.text === passwordInput2.text enabled: (passwordDialogMode == true) ? true : passwordInput1.text === passwordInput2.text
onClicked: onOk() onClicked: onOk()

View File

@@ -29,10 +29,13 @@
import QtQuick 2.9 import QtQuick 2.9
import QtQuick.Layouts 1.1 import QtQuick.Layouts 1.1
import FontAwesome 1.0
import "../components" as MoneroComponents import "../components" as MoneroComponents
Item { Item {
id: button id: button
property bool fontAwesomeIcon: false
property bool primary: true property bool primary: true
property string rightIcon: "" property string rightIcon: ""
property string rightIconInactive: "" property string rightIconInactive: ""
@@ -135,7 +138,7 @@ Item {
} }
Image { Image {
visible: button.rightIcon !== "" visible: !fontAwesomeIcon && button.rightIcon !== ""
Layout.alignment: Qt.AlignVCenter | Qt.AlignRight Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
width: button.small ? 16 : 20 width: button.small ? 16 : 20
height: button.small ? 16 : 20 height: button.small ? 16 : 20
@@ -146,6 +149,16 @@ Item {
return button.rightIcon; return button.rightIcon;
} }
} }
Text {
Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
color: MoneroComponents.Style.defaultFontColor
font.family: FontAwesome.fontFamilySolid
font.pixelSize: button.small ? 16 : 20
font.styleName: "Solid"
text: button.rightIcon
visible: fontAwesomeIcon && button.rightIcon !== ""
}
} }
MouseArea { MouseArea {

View File

@@ -0,0 +1,191 @@
// Copyright (c) 2014-2020, The Monero Project
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification, are
// permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice, this list of
// conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
// of conditions and the following disclaimer in the documentation and/or other
// materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of its contributors may be
// used to endorse or promote products derived from this software without specific
// prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import QtQuick 2.9
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.1
import moneroComponents.Clipboard 1.0
import "../components" as MoneroComponents
Rectangle {
id: root
x: parent.width/2 - root.width/2
y: parent.height/2 - root.height/2
// TODO: implement without hardcoding sizes
width: 580
height: 400
color: MoneroComponents.Style.blackTheme ? "black" : "white"
visible: false
radius: 10
border.color: MoneroComponents.Style.blackTheme ? Qt.rgba(255, 255, 255, 0.25) : Qt.rgba(0, 0, 0, 0.25)
border.width: 1
focus: true
Keys.enabled: true
Keys.onEscapePressed: {
root.close()
root.rejected()
}
Keys.onEnterPressed: {
root.close()
root.accepted()
}
Keys.onReturnPressed: {
root.close()
root.accepted()
}
KeyNavigation.tab: doneButton
Clipboard { id: clipboard }
property var transactionID;
// same signals as Dialog has
signal accepted()
signal rejected()
function open(txid) {
root.transactionID = txid;
root.visible = true;
root.forceActiveFocus();
}
function close() {
root.visible = false;
}
ColumnLayout {
spacing: 10
anchors.fill: parent
anchors.margins: 25
ColumnLayout{
Layout.topMargin: 10
Layout.leftMargin: 0
Layout.fillWidth: true
Layout.alignment: Qt.AlignCenter
MoneroComponents.Label {
fontSize: 18
fontFamily: "Arial"
horizontalAlignment: Text.AlignHCenter
text: {
if (appWindow.viewOnly){
return qsTr("Transaction file successfully saved!") + translationManager.emptyString;
} else {
return qsTr("Transaction successfully sent!") + translationManager.emptyString;
}
}
}
}
Image {
id: successImage
Layout.alignment: Qt.AlignCenter
width: 140
height: 140
source: "qrc:///images/success.png"
SequentialAnimation{
running: successImage.visible
ScaleAnimator { target: successImage; from: 0.4; to: 1.3; duration: 125}
ScaleAnimator { target: successImage; from: 1.3; to: 1; duration: 80}
}
}
MoneroComponents.LineEditMulti {
visible: !appWindow.viewOnly
Layout.leftMargin: 25
Layout.rightMargin: 25
borderDisabled: true
readOnly: true
copyButton: true
wrapMode: Text.Wrap
labelText: qsTr("Transaction ID:") + translationManager.emptyString
text: root.transactionID ? root.transactionID : "";
fontSize: 16
}
MoneroComponents.LineEditMulti {
visible: appWindow.viewOnly
Layout.leftMargin: 25
borderDisabled: true
readOnly: true
wrapMode: Text.Wrap
labelText: qsTr("Transaction file location:") + translationManager.emptyString
text: walletManager.urlToLocalPath(saveTxDialog.fileUrl)
fontSize: 16
}
// open folder / done buttons
RowLayout {
id: buttons
spacing: 70
Layout.alignment: Qt.AlignBottom | Qt.AlignHCenter
Layout.fillWidth: true
Layout.preferredHeight: 50
MoneroComponents.StandardButton {
id: openFolderButton
visible: appWindow.viewOnly
text: qsTr("Open folder") + translationManager.emptyString;
width: 200
KeyNavigation.tab: doneButton
Keys.enabled: openFolderButton.visible
Keys.onReturnPressed: openFolderButton.onClicked
Keys.onEnterPressed: openFolderButton.onClicked
Keys.onEscapePressed: {
root.close()
root.rejected()
}
onClicked: {
oshelper.openContainingFolder(walletManager.urlToLocalPath(saveTxDialog.fileUrl))
}
}
MoneroComponents.StandardButton {
id: doneButton
text: qsTr("Done") + translationManager.emptyString;
width: 200
focus: true
KeyNavigation.tab: openFolderButton
Keys.enabled: doneButton.visible
Keys.onReturnPressed: doneButton.onClicked
Keys.onEnterPressed: doneButton.onClicked
Keys.onEscapePressed: {
root.close()
root.rejected()
}
onClicked: {
root.close()
root.accepted()
}
}
}
}
}

View File

@@ -199,5 +199,6 @@ Popup {
Downloader { Downloader {
id: downloader id: downloader
proxyAddress: persistentSettings.getProxyAddress()
} }
} }

View File

@@ -17,7 +17,7 @@ if [ ! -d $MONERO_DIR/src ]; then
fi fi
git submodule update --remote git submodule update --remote
git -C $MONERO_DIR fetch git -C $MONERO_DIR fetch
git -C $MONERO_DIR checkout v0.16.0.3 git -C $MONERO_DIR checkout v0.17.1.1
# get monero core tag # get monero core tag
pushd $MONERO_DIR pushd $MONERO_DIR
@@ -203,7 +203,7 @@ elif [ "$platform" == "linuxarmv7" ]; then
if [ "$STATIC" == true ]; then if [ "$STATIC" == true ]; then
cmake -D BUILD_TESTS=OFF -D ARCH="$ARCH" -D STATIC=ON -D BUILD_64=OFF -D BUILD_GUI_DEPS=ON $BUILD_TREZOR_FLAGS -D CMAKE_INSTALL_PREFIX="$MONERO_DIR" ../.. cmake -D BUILD_TESTS=OFF -D ARCH="$ARCH" -D STATIC=ON -D BUILD_64=OFF -D BUILD_GUI_DEPS=ON $BUILD_TREZOR_FLAGS -D CMAKE_INSTALL_PREFIX="$MONERO_DIR" ../..
else else
cmake -D BUILD_TESTS=OFF -D ARCH="$ARCH" -D -D BUILD_64=OFF -D BUILD_GUI_DEPS=ON $BUILD_TREZOR_FLAGS -D CMAKE_INSTALL_PREFIX="$MONERO_DIR" ../.. cmake -D BUILD_TESTS=OFF -D ARCH="$ARCH" -D BUILD_64=OFF -D BUILD_GUI_DEPS=ON $BUILD_TREZOR_FLAGS -D CMAKE_INSTALL_PREFIX="$MONERO_DIR" ../..
fi fi
## LINUX other ## LINUX other

BIN
images/success.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

BIN
images/success@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -1,4 +1,4 @@
; Monero Nitrogen Nebula GUI Wallet Installer for Windows ; Monero Oxygen Orion GUI Wallet Installer for Windows
; Copyright (c) 2017-2020, The Monero Project ; Copyright (c) 2017-2020, The Monero Project
; See LICENSE ; See LICENSE
#define GuiVersion GetFileVersion("bin\monero-wallet-gui.exe") #define GuiVersion GetFileVersion("bin\monero-wallet-gui.exe")
@@ -105,6 +105,9 @@ Source: "bin\extras\monero-gen-ssl-cert.exe"; DestDir: "{app}"; Flags: ignorever
; Qt Quick 2D Renderer fallback for systems / environments with "low-level graphics" i.e. without 3D support ; Qt Quick 2D Renderer fallback for systems / environments with "low-level graphics" i.e. without 3D support
Source: "bin\start-low-graphics-mode.bat"; DestDir: "{app}"; Flags: ignoreversion Source: "bin\start-low-graphics-mode.bat"; DestDir: "{app}"; Flags: ignoreversion
; Use a scale factor of 2 for Qt for high-DPI systems, as long as Qt does not handle some such systems adequately
Source: "bin\start-high-dpi.bat"; DestDir: "{app}"; Flags: ignoreversion
; Mesa, open-source OpenGL implementation; part of "low-level graphics" support ; Mesa, open-source OpenGL implementation; part of "low-level graphics" support
Source: "bin\opengl32sw.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "bin\opengl32sw.dll"; DestDir: "{app}"; Flags: ignoreversion

View File

@@ -6,7 +6,7 @@ Copyright (c) 2017-2020, The Monero Project
This is a *Inno Setup* script `Monero.iss` plus some related files This is a *Inno Setup* script `Monero.iss` plus some related files
that allows you to build a standalone Windows installer (.exe) for that allows you to build a standalone Windows installer (.exe) for
the GUI wallet that comes with the Nitrogen Nebula release of Monero. the GUI wallet that comes with the Oxygen Orion release of Monero.
This turns the GUI wallet into a more or less standard Windows program, This turns the GUI wallet into a more or less standard Windows program,
by default installed into a subdirectory of `C:\Program Files`, a by default installed into a subdirectory of `C:\Program Files`, a
@@ -18,7 +18,7 @@ Monero.
As the setup script in file [Monero.iss](Monero.iss) has to list many As the setup script in file [Monero.iss](Monero.iss) has to list many
files and directories of the GUI wallet package to install by name, files and directories of the GUI wallet package to install by name,
this version of the script only works with exactly the GUI wallet this version of the script only works with exactly the GUI wallet
for Monero release *Nitrogen Nebula* that you find on for Monero release *Oxygen Orion* that you find on
[the official download page](https://getmonero.org/downloads/). [the official download page](https://getmonero.org/downloads/).
It should however be easy to modify the script for future It should however be easy to modify the script for future
@@ -32,15 +32,15 @@ See [LICENSE](LICENSE).
You can only build on Windows, and the result is always a You can only build on Windows, and the result is always a
Windows .exe file that can act as a standalone installer for the Windows .exe file that can act as a standalone installer for the
Nitrogen Nebula GUI wallet. GUI wallet.
Note that the installer build process is now reproducible / deterministic. For details check the file [Deterministic.md](Deterministic.md). Note that the installer build process is now reproducible / deterministic. For details check the file [Deterministic.md](Deterministic.md).
The build steps in detail: The build steps in detail:
1. Install *Inno Setup*. You can get it from [here](http://www.jrsoftware.org/isdl.php) 1. Install *Inno Setup*. You can get it from [here](http://www.jrsoftware.org/isdl.php)
2. Get the Inno Setup script plus related files by cloning the whole [monero-gui GitHub repository](https://github.com/monero-project/monero-gui); you will only need the files in the installer directory `installers\windows` however. Depending on development state, additionally instead of simply using `master` you may have to checkout a specific branch, like `release-v0.16`. 2. Get the Inno Setup script plus related files by cloning the whole [monero-gui GitHub repository](https://github.com/monero-project/monero-gui); you will only need the files in the installer directory `installers\windows` however. Depending on development state, additionally instead of simply using `master` you may have to checkout a specific branch, like `release-v0.17`.
3. The setup script is written to take the GUI wallet files from a subdirectory named `bin`; so create `installers\windows\bin`, get the zip file of the GUI wallet from [here](https://getmonero.org/downloads/), unpack it somewhere, and copy all the files and subdirectories in the single subdirectory there (currently named `monero-gui-0.16.0.0`) to this `bin` subdirectory 3. The setup script is written to take the GUI wallet files from a subdirectory named `bin`; so create `installers\windows\bin`, get the zip file of the GUI wallet from [here](https://getmonero.org/downloads/), unpack it somewhere, and copy all the files and subdirectories in the single subdirectory there (currently named `monero-gui-0.17.0.0`) to this `bin` subdirectory
4. Start Inno Setup, load `Monero.iss` and compile it 4. Start Inno Setup, load `Monero.iss` and compile it
5. The result i.e. the finished installer will be the file `mysetup.exe` in the `installers\windows\Output` subdirectory 5. The result i.e. the finished installer will be the file `mysetup.exe` in the `installers\windows\Output` subdirectory

View File

@@ -1,10 +1,10 @@
<html> <html>
<head> <head>
<title>Monero Nitrogen Nebula GUI Wallet</title> <title>Monero Oxygen Orion GUI Wallet</title>
</head> </head>
<body style="font-family: Arial, Helvetica, sans-serif"> <body style="font-family: Arial, Helvetica, sans-serif">
<h1>Monero Nitrogen Nebula GUI Wallet</h1> <h1>Monero Oxygen Orion GUI Wallet</h1>
<p>Copyright (c) 2014-2020, The Monero Project</p> <p>Copyright (c) 2014-2020, The Monero Project</p>
@@ -22,7 +22,7 @@
<h2>Content of the Package</h2> <h2>Content of the Package</h2>
<p>You just installed the <i>Monero GUI wallet</i> for Windows, release Nitrogen Nebula, version {#GuiVersion}. <p>You just installed the <i>Monero GUI wallet</i> for Windows, release Oxygen Orion, version {#GuiVersion}.
The wallet enables you to send and receive Moneroj in a secure and very private way. The wallet enables you to send and receive Moneroj in a secure and very private way.
</p> </p>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 440 KiB

After

Width:  |  Height:  |  Size: 440 KiB

View File

@@ -65,7 +65,7 @@ function createWalletPath(isIOS, folder_path,account_name){
return folder_path + "/" + account_name + "/" + account_name return folder_path + "/" + account_name + "/" + account_name
} }
function walletPathExists(directory, filename, isIOS, walletManager) { function walletPathExists(accountsDir, directory, filename, isIOS, walletManager) {
if(!filename || filename === "") return false; if(!filename || filename === "") return false;
if(!directory || directory === "") return false; if(!directory || directory === "") return false;
@@ -76,7 +76,7 @@ function walletPathExists(directory, filename, isIOS, walletManager) {
directory += "/" directory += "/"
if(isIOS) if(isIOS)
var path = moneroAccountsDir + filename; var path = accountsDir + filename;
else else
var path = directory + filename + "/" + filename; var path = directory + filename + "/" + filename;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -53,7 +53,6 @@ Lojban
<language display_name="Українська" locale="uk_UA" wallet_language="English" flag="/lang/flags/ua.png" qs="none"/> <language display_name="Українська" locale="uk_UA" wallet_language="English" flag="/lang/flags/ua.png" qs="none"/>
<language display_name="Lietuvių" locale="lt_LT" wallet_language="English" flag="/lang/flags/lt.png" qs="none"/> <language display_name="Lietuvių" locale="lt_LT" wallet_language="English" flag="/lang/flags/lt.png" qs="none"/>
<language display_name="Suomi" locale="fi_FI" wallet_language="English" flag="/lang/flags/fi.png" qs="none"/> <language display_name="Suomi" locale="fi_FI" wallet_language="English" flag="/lang/flags/fi.png" qs="none"/>
<language display_name="Pirate" locale="prt" wallet_language="English" flag="/lang/flags/pirate.png" qs="none"/>
<language display_name="Български" locale="bg_BG" wallet_language="English" flag="/lang/flags/bg.png" qs="none"/> <language display_name="Български" locale="bg_BG" wallet_language="English" flag="/lang/flags/bg.png" qs="none"/>
<language display_name="Norwegian" locale="nb_NO" wallet_language="English" flag="/lang/flags/nb_NO.png" qs="none"/> <language display_name="Norwegian" locale="nb_NO" wallet_language="English" flag="/lang/flags/nb_NO.png" qs="none"/>
<!-- <language display_name="اُردُو" locale="ur_UR" wallet_language="English" flag="/lang/flags/pk.png" qs="none"/> --> <!-- <language display_name="اُردُو" locale="ur_UR" wallet_language="English" flag="/lang/flags/pk.png" qs="none"/> -->

127
main.qml
View File

@@ -33,6 +33,9 @@ import QtQuick.Controls.Styles 1.1
import QtQuick.Dialogs 1.2 import QtQuick.Dialogs 1.2
import QtGraphicalEffects 1.0 import QtGraphicalEffects 1.0
import FontAwesome 1.0
import moneroComponents.Network 1.0
import moneroComponents.Wallet 1.0 import moneroComponents.Wallet 1.0
import moneroComponents.WalletManager 1.0 import moneroComponents.WalletManager 1.0
import moneroComponents.PendingTransaction 1.0 import moneroComponents.PendingTransaction 1.0
@@ -58,6 +61,7 @@ ApplicationWindow {
property bool hideBalanceForced: false property bool hideBalanceForced: false
property bool ctrlPressed: false property bool ctrlPressed: false
property alias persistentSettings : persistentSettings property alias persistentSettings : persistentSettings
property string accountsDir: !persistentSettings.portable ? moneroAccountsDir : persistentSettings.portableFolderName + "/wallets"
property var currentWallet; property var currentWallet;
property bool disconnected: currentWallet ? currentWallet.disconnected : false property bool disconnected: currentWallet ? currentWallet.disconnected : false
property var transaction; property var transaction;
@@ -68,7 +72,7 @@ ApplicationWindow {
property bool walletSynced: false property bool walletSynced: false
property int maxWindowHeight: (isAndroid || isIOS)? screenHeight : (screenHeight < 900)? 720 : 800; property int maxWindowHeight: (isAndroid || isIOS)? screenHeight : (screenHeight < 900)? 720 : 800;
property bool daemonRunning: !persistentSettings.useRemoteNode && !disconnected property bool daemonRunning: !persistentSettings.useRemoteNode && !disconnected
property bool daemonStartStopInProgress: false property int daemonStartStopInProgress: 0
property alias toolTip: toolTip property alias toolTip: toolTip
property string walletName property string walletName
property bool viewOnly: false property bool viewOnly: false
@@ -258,7 +262,7 @@ ApplicationWindow {
// wallet already opened with wizard, we just need to initialize it // wallet already opened with wizard, we just need to initialize it
var wallet_path = persistentSettings.wallet_path; var wallet_path = persistentSettings.wallet_path;
if(isIOS) if(isIOS)
wallet_path = moneroAccountsDir + wallet_path; wallet_path = appWindow.accountsDir + wallet_path;
// console.log("opening wallet at: ", wallet_path, "with password: ", appWindow.walletPassword); // console.log("opening wallet at: ", wallet_path, "with password: ", appWindow.walletPassword);
console.log("opening wallet at: ", wallet_path, ", network type: ", persistentSettings.nettype == NetworkType.MAINNET ? "mainnet" : persistentSettings.nettype == NetworkType.TESTNET ? "testnet" : "stagenet"); console.log("opening wallet at: ", wallet_path, ", network type: ", persistentSettings.nettype == NetworkType.MAINNET ? "mainnet" : persistentSettings.nettype == NetworkType.TESTNET ? "testnet" : "stagenet");
@@ -364,6 +368,7 @@ ApplicationWindow {
currentWallet.deviceButtonPressed.connect(onDeviceButtonPressed); currentWallet.deviceButtonPressed.connect(onDeviceButtonPressed);
currentWallet.walletPassphraseNeeded.connect(onWalletPassphraseNeededWallet); currentWallet.walletPassphraseNeeded.connect(onWalletPassphraseNeededWallet);
currentWallet.transactionCommitted.connect(onTransactionCommitted); currentWallet.transactionCommitted.connect(onTransactionCommitted);
currentWallet.proxyAddress = Qt.binding(persistentSettings.getWalletProxyAddress);
middlePanel.paymentClicked.connect(handlePayment); middlePanel.paymentClicked.connect(handlePayment);
middlePanel.sweepUnmixableClicked.connect(handleSweepUnmixable); middlePanel.sweepUnmixableClicked.connect(handleSweepUnmixable);
middlePanel.getProofClicked.connect(handleGetProof); middlePanel.getProofClicked.connect(handleGetProof);
@@ -388,7 +393,9 @@ ApplicationWindow {
0, 0,
persistentSettings.is_recovering, persistentSettings.is_recovering,
persistentSettings.is_recovering_from_device, persistentSettings.is_recovering_from_device,
persistentSettings.restore_height); persistentSettings.restore_height,
persistentSettings.getWalletProxyAddress());
// save wallet keys in case wallet settings have been changed in the init // save wallet keys in case wallet settings have been changed in the init
currentWallet.setPassword(walletPassword); currentWallet.setPassword(walletPassword);
} }
@@ -429,6 +436,10 @@ ApplicationWindow {
leftPanel.minutesToUnlock = (balance !== balanceU) ? currentWallet.history.minutesToUnlock : ""; leftPanel.minutesToUnlock = (balance !== balanceU) ? currentWallet.history.minutesToUnlock : "";
leftPanel.balanceString = balance leftPanel.balanceString = balance
leftPanel.balanceUnlockedString = balanceU leftPanel.balanceUnlockedString = balanceU
if (middlePanel.state === "Account") {
middlePanel.accountView.balanceAllText = walletManager.displayAmount(appWindow.currentWallet.balanceAll());
middlePanel.accountView.unlockedBalanceAllText = walletManager.displayAmount(appWindow.currentWallet.unlockedBalanceAll());
}
} }
function onUriHandler(uri){ function onUriHandler(uri){
@@ -606,7 +617,14 @@ ApplicationWindow {
const callback = function() { const callback = function() {
persistentSettings.useRemoteNode = true; persistentSettings.useRemoteNode = true;
currentDaemonAddress = persistentSettings.remoteNodeAddress; currentDaemonAddress = persistentSettings.remoteNodeAddress;
currentWallet.initAsync(currentDaemonAddress, isTrustedDaemon()); currentWallet.initAsync(
currentDaemonAddress,
isTrustedDaemon(),
0,
false,
false,
0,
persistentSettings.getWalletProxyAddress());
walletManager.setDaemonAddressAsync(currentDaemonAddress); walletManager.setDaemonAddressAsync(currentDaemonAddress);
}; };
@@ -624,7 +642,14 @@ ApplicationWindow {
console.log("disconnecting remote node"); console.log("disconnecting remote node");
persistentSettings.useRemoteNode = false; persistentSettings.useRemoteNode = false;
currentDaemonAddress = localDaemonAddress currentDaemonAddress = localDaemonAddress
currentWallet.initAsync(currentDaemonAddress, isTrustedDaemon()); currentWallet.initAsync(
currentDaemonAddress,
isTrustedDaemon(),
0,
false,
false,
0,
persistentSettings.getWalletProxyAddress());
walletManager.setDaemonAddressAsync(currentDaemonAddress); walletManager.setDaemonAddressAsync(currentDaemonAddress);
firstBlockSeen = 0; firstBlockSeen = 0;
} }
@@ -682,31 +707,33 @@ ApplicationWindow {
} }
function startDaemon(flags){ function startDaemon(flags){
daemonStartStopInProgress = true; daemonStartStopInProgress = 1;
// Pause refresh while starting daemon // Pause refresh while starting daemon
currentWallet.pauseRefresh(); currentWallet.pauseRefresh();
appWindow.showProcessingSplash(qsTr("Waiting for daemon to start..."))
const noSync = appWindow.walletMode === 0; const noSync = appWindow.walletMode === 0;
const bootstrapNodeAddress = persistentSettings.walletMode < 2 ? "auto" : persistentSettings.bootstrapNodeAddress const bootstrapNodeAddress = persistentSettings.walletMode < 2 ? "auto" : persistentSettings.bootstrapNodeAddress
daemonManager.start(flags, persistentSettings.nettype, persistentSettings.blockchainDataDir, bootstrapNodeAddress, noSync); daemonManager.start(flags, persistentSettings.nettype, persistentSettings.blockchainDataDir, bootstrapNodeAddress, noSync);
} }
function stopDaemon(callback){ function stopDaemon(callback, splash){
daemonStartStopInProgress = true; daemonStartStopInProgress = 2;
appWindow.showProcessingSplash(qsTr("Waiting for daemon to stop...")) if (splash) {
appWindow.showProcessingSplash(qsTr("Waiting for daemon to stop..."));
}
daemonManager.stopAsync(persistentSettings.nettype, function(result) { daemonManager.stopAsync(persistentSettings.nettype, function(result) {
daemonStartStopInProgress = false; daemonStartStopInProgress = 0;
hideProcessingSplash(); if (splash) {
hideProcessingSplash();
}
callback(result); callback(result);
}); });
} }
function onDaemonStarted(){ function onDaemonStarted(){
console.log("daemon started"); console.log("daemon started");
daemonStartStopInProgress = false; daemonStartStopInProgress = 0;
hideProcessingSplash();
currentWallet.connected(true); currentWallet.connected(true);
// resume refresh // resume refresh
currentWallet.startRefresh(); currentWallet.startRefresh();
@@ -719,8 +746,7 @@ ApplicationWindow {
function onDaemonStartFailure(error) { function onDaemonStartFailure(error) {
console.log("daemon start failed"); console.log("daemon start failed");
daemonStartStopInProgress = false; daemonStartStopInProgress = 0;
hideProcessingSplash();
// resume refresh // resume refresh
currentWallet.startRefresh(); currentWallet.startRefresh();
informationPopup.title = qsTr("Daemon failed to start") + translationManager.emptyString; informationPopup.title = qsTr("Daemon failed to start") + translationManager.emptyString;
@@ -777,7 +803,7 @@ ApplicationWindow {
function walletsFound() { function walletsFound() {
if (persistentSettings.wallet_path.length > 0) { if (persistentSettings.wallet_path.length > 0) {
if(isIOS) if(isIOS)
return walletManager.walletExists(moneroAccountsDir + persistentSettings.wallet_path); return walletManager.walletExists(appWindow.accountsDir + persistentSettings.wallet_path);
else else
return walletManager.walletExists(persistentSettings.wallet_path); return walletManager.walletExists(persistentSettings.wallet_path);
} }
@@ -892,7 +918,7 @@ ApplicationWindow {
FileDialog { FileDialog {
id: saveTxDialog id: saveTxDialog
title: "Please choose a location" title: "Please choose a location"
folder: "file://" +moneroAccountsDir folder: "file://" + appWindow.accountsDir
selectExisting: false; selectExisting: false;
onAccepted: { onAccepted: {
@@ -972,16 +998,9 @@ ApplicationWindow {
informationPopup.title = qsTr("Error") + translationManager.emptyString informationPopup.title = qsTr("Error") + translationManager.emptyString
informationPopup.text = qsTr("Couldn't send the money: ") + transaction.errorString informationPopup.text = qsTr("Couldn't send the money: ") + transaction.errorString
informationPopup.icon = StandardIcon.Critical informationPopup.icon = StandardIcon.Critical
informationPopup.onCloseCallback = null;
informationPopup.open();
} else { } else {
var txid_text = ""
informationPopup.title = qsTr("Information") + translationManager.emptyString
for (var i = 0; i < txid.length; ++i) {
if (txid_text.length > 0)
txid_text += ", "
txid_text += txid[i]
}
informationPopup.text = (viewOnly)? qsTr("Transaction saved to file: %1").arg(path) : qsTr("Monero sent successfully: %1 transaction(s) ").arg(txid.length) + txid_text + translationManager.emptyString
informationPopup.icon = StandardIcon.Information
if (transactionDescription.length > 0) { if (transactionDescription.length > 0) {
for (var i = 0; i < txid.length; ++i) for (var i = 0; i < txid.length; ++i)
currentWallet.setUserNote(txid[i], transactionDescription); currentWallet.setUserNote(txid[i], transactionDescription);
@@ -989,10 +1008,8 @@ ApplicationWindow {
// Clear tx fields // Clear tx fields
middlePanel.transferView.clearFields() middlePanel.transferView.clearFields()
successfulTxPopup.open(txid)
} }
informationPopup.onCloseCallback = null
informationPopup.open()
currentWallet.refresh() currentWallet.refresh()
currentWallet.disposeTransaction(transaction) currentWallet.disposeTransaction(transaction)
currentWallet.storeAsync(function(success) { currentWallet.storeAsync(function(success) {
@@ -1255,7 +1272,7 @@ ApplicationWindow {
} }
var url = provider[userCurrency]; var url = provider[userCurrency];
Network.getJSON(url, fiatApiJsonReceived); network.getJSON(url, fiatApiJsonReceived);
} }
function fiatApiCurrencySymbol() { function fiatApiCurrencySymbol() {
@@ -1273,7 +1290,7 @@ ApplicationWindow {
function fiatApiConvertToFiat(amount) { function fiatApiConvertToFiat(amount) {
var ticker = persistentSettings.fiatPriceCurrency === "xmrusd" ? appWindow.fiatPriceXMRUSD : appWindow.fiatPriceXMREUR; var ticker = persistentSettings.fiatPriceCurrency === "xmrusd" ? appWindow.fiatPriceXMRUSD : appWindow.fiatPriceXMREUR;
if(ticker <= 0){ if(ticker <= 0){
console.log(fiatApiError("Invalid ticker value: " + ticker)); fiatApiError("Invalid ticker value: " + ticker);
return "?.??"; return "?.??";
} }
return (amount * ticker).toFixed(2); return (amount * ticker).toFixed(2);
@@ -1341,6 +1358,7 @@ ApplicationWindow {
} else { } else {
wizard.wizardState = "wizardHome"; wizard.wizardState = "wizardHome";
rootItem.state = "normal" rootItem.state = "normal"
logger.resetLogFilePath(persistentSettings.portable);
openWallet("wizard"); openWallet("wizard");
} }
@@ -1402,6 +1420,25 @@ ApplicationWindow {
property string fiatPriceProvider: "kraken" property string fiatPriceProvider: "kraken"
property string fiatPriceCurrency: "xmrusd" property string fiatPriceCurrency: "xmrusd"
property string proxyAddress: "127.0.0.1:9050"
property bool proxyEnabled: isTails
function getProxyAddress() {
if ((socksProxyFlagSet && socksProxyFlag == "") || !proxyEnabled) {
return "";
}
var proxyAddressSetOrForced = socksProxyFlagSet ? socksProxyFlag : proxyAddress;
if (proxyAddressSetOrForced == "") {
return "127.0.0.1:0";
}
return proxyAddressSetOrForced;
}
function getWalletProxyAddress() {
if (!useRemoteNode) {
return "";
}
return getProxyAddress();
}
Component.onCompleted: { Component.onCompleted: {
MoneroComponents.Style.blackTheme = persistentSettings.blackTheme MoneroComponents.Style.blackTheme = persistentSettings.blackTheme
} }
@@ -1447,11 +1484,21 @@ ApplicationWindow {
if(!persistentSettings.askPasswordBeforeSending) { if(!persistentSettings.askPasswordBeforeSending) {
handleAccepted() handleAccepted()
} else { } else {
passwordDialog.open() passwordDialog.open(
"",
"",
(appWindow.viewOnly ? qsTr("Save transaction file") : qsTr("Send transaction")) + translationManager.emptyString,
appWindow.viewOnly ? "" : FontAwesome.arrowCircleRight);
} }
} }
} }
// Transaction successfully sent popup
SuccessfulTxDialog {
id: successfulTxPopup
z: parent.z + 1
}
StandardDialog { StandardDialog {
z: parent.z + 1 z: parent.z + 1
id: confirmationDialog id: confirmationDialog
@@ -1721,7 +1768,7 @@ ApplicationWindow {
anchors.fill: blurredArea anchors.fill: blurredArea
source: blurredArea source: blurredArea
radius: 64 radius: 64
visible: passwordDialog.visible || inputDialog.visible || splash.visible || updateDialog.visible || devicePassphraseDialog.visible visible: passwordDialog.visible || inputDialog.visible || splash.visible || updateDialog.visible || devicePassphraseDialog.visible || successfulTxPopup.visible
} }
@@ -1840,7 +1887,7 @@ ApplicationWindow {
repeat: true repeat: true
running: persistentSettings.autosave running: persistentSettings.autosave
onTriggered: { onTriggered: {
if (currentWallet) { if (currentWallet && !currentWallet.refreshing) {
currentWallet.storeAsync(function(success) { currentWallet.storeAsync(function(success) {
if (success) { if (success) {
appWindow.showStatusMessage(qsTr("Autosaved the wallet"), 3); appWindow.showStatusMessage(qsTr("Autosaved the wallet"), 3);
@@ -1919,7 +1966,7 @@ ApplicationWindow {
// Simple mode connection check timer // Simple mode connection check timer
id: simpleModeConnectionTimer id: simpleModeConnectionTimer
interval: 2000 interval: 2000
running: appWindow.walletMode < 2 && currentWallet != undefined && !daemonStartStopInProgress running: appWindow.walletMode < 2 && currentWallet != undefined && daemonStartStopInProgress == 0
repeat: true repeat: true
onTriggered: appWindow.checkSimpleModeConnection() onTriggered: appWindow.checkSimpleModeConnection()
} }
@@ -1997,7 +2044,7 @@ ApplicationWindow {
if(daemonManager == undefined || persistentSettings.useRemoteNode) { if(daemonManager == undefined || persistentSettings.useRemoteNode) {
closeAccepted(); closeAccepted();
} else if (appWindow.walletMode == 0) { } else if (appWindow.walletMode == 0) {
stopDaemon(closeAccepted); stopDaemon(closeAccepted, true);
} else { } else {
showProcessingSplash(qsTr("Checking local node status...")); showProcessingSplash(qsTr("Checking local node status..."));
const handler = function(running) { const handler = function(running) {
@@ -2237,7 +2284,13 @@ ApplicationWindow {
dragMargin: 0 dragMargin: 0
} }
Network {
id: network
proxyAddress: persistentSettings.getProxyAddress()
}
WalletManager { WalletManager {
id: walletManager id: walletManager
proxyAddress: persistentSettings.getProxyAddress()
} }
} }

2
monero

Submodule monero updated: 7bd1ed03dd...76cc82c292

View File

@@ -541,7 +541,7 @@ macx {
} }
win32 { win32 {
deploy.commands += windeployqt $$sprintf("%1/%2/%3.exe", $$OUT_PWD, $$DESTDIR, $$TARGET) -release -no-translations -qmldir=$$PWD deploy.commands += windeployqt $$sprintf("%1/%2/%3.exe", $$OUT_PWD, $$DESTDIR, $$TARGET) -no-translations -qmldir=$$PWD
# Win64 msys2 deploy settings # Win64 msys2 deploy settings
contains(QMAKE_HOST.arch, x86_64) { contains(QMAKE_HOST.arch, x86_64) {
deploy.commands += $$escape_expand(\n\t) $$PWD/windeploy_helper.sh $$DESTDIR deploy.commands += $$escape_expand(\n\t) $$PWD/windeploy_helper.sh $$DESTDIR

View File

@@ -48,6 +48,8 @@ Rectangle {
color: "transparent" color: "transparent"
property var model property var model
property alias accountHeight: mainLayout.height property alias accountHeight: mainLayout.height
property alias balanceAllText: balanceAll.text
property alias unlockedBalanceAllText: unlockedBalanceAll.text
property bool selectAndSend: false property bool selectAndSend: false
property int currentAccountIndex property int currentAccountIndex

View File

@@ -573,8 +573,7 @@ Rectangle {
anchors.right: parent ? parent.right : undefined anchors.right: parent ? parent.right : undefined
height: { height: {
if(!collapsed) return 60; if(!collapsed) return 60;
if(isout && delegate.address !== "") return 320; return 320;
return 220;
} }
color: { color: {
if(!collapsed) return "transparent" if(!collapsed) return "transparent"
@@ -618,6 +617,7 @@ Rectangle {
spacing: 0 spacing: 0
clip: true clip: true
Layout.preferredHeight: 120 Layout.preferredHeight: 120
Layout.minimumWidth: 180
Rectangle { Rectangle {
color: "transparent" color: "transparent"
@@ -633,17 +633,7 @@ Rectangle {
MoneroComponents.TextPlain { MoneroComponents.TextPlain {
font.family: MoneroComponents.Style.fontRegular.name font.family: MoneroComponents.Style.fontRegular.name
font.pixelSize: 15 font.pixelSize: 15
text: { text: (isout ? qsTr("Sent") : qsTr("Received")) + translationManager.emptyString
if (!isout) {
return qsTr("Received") + translationManager.emptyString;
}
const addressBookName = currentWallet ? currentWallet.addressBook.getDescription(address) : null;
if (!addressBookName)
{
return qsTr("Sent") + translationManager.emptyString;
}
return addressBookName;
}
color: MoneroComponents.Style.historyHeaderTextColor color: MoneroComponents.Style.historyHeaderTextColor
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
themeTransitionBlackColor: MoneroComponents.Style._b_historyHeaderTextColor themeTransitionBlackColor: MoneroComponents.Style._b_historyHeaderTextColor
@@ -659,7 +649,7 @@ Rectangle {
MoneroComponents.TextPlain { MoneroComponents.TextPlain {
font.family: MoneroComponents.Style.fontRegular.name font.family: MoneroComponents.Style.fontRegular.name
font.pixelSize: 15 font.pixelSize: 15
text: displayAmount text: (amount == 0 ? qsTr("Unknown amount") : displayAmount) + translationManager.emptyString
color: MoneroComponents.Style.defaultFontColor color: MoneroComponents.Style.defaultFontColor
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
@@ -711,7 +701,7 @@ Rectangle {
font.pixelSize: 15 font.pixelSize: 15
text: { text: {
if(!isout && confirmationsRequired === 60) return qsTr("Yes") + translationManager.emptyString; if(!isout && confirmationsRequired === 60) return qsTr("Yes") + translationManager.emptyString;
if(fee !== "") return fee + " XMR"; if(fee !== "") return Utils.removeTrailingZeros(fee) + " XMR";
return "-"; return "-";
} }
@@ -739,6 +729,7 @@ Rectangle {
spacing: 0 spacing: 0
clip: true clip: true
Layout.preferredHeight: 120 Layout.preferredHeight: 120
Layout.minimumWidth: 230
Rectangle { Rectangle {
color: "transparent" color: "transparent"
@@ -754,7 +745,7 @@ Rectangle {
MoneroComponents.TextPlain { MoneroComponents.TextPlain {
font.family: MoneroComponents.Style.fontRegular.name font.family: MoneroComponents.Style.fontRegular.name
font.pixelSize: 15 font.pixelSize: 15
text: qsTr("Blockheight") + translationManager.emptyString text: (isout ? qsTr("To") : qsTr("In")) + translationManager.emptyString
color: MoneroComponents.Style.historyHeaderTextColor color: MoneroComponents.Style.historyHeaderTextColor
themeTransitionBlackColor: MoneroComponents.Style._b_historyHeaderTextColor themeTransitionBlackColor: MoneroComponents.Style._b_historyHeaderTextColor
themeTransitionWhiteColor: MoneroComponents.Style._w_historyHeaderTextColor themeTransitionWhiteColor: MoneroComponents.Style._w_historyHeaderTextColor
@@ -768,15 +759,50 @@ Rectangle {
Layout.preferredHeight: 20 Layout.preferredHeight: 20
MoneroComponents.TextPlain { MoneroComponents.TextPlain {
id: addressField
font.family: MoneroComponents.Style.fontRegular.name font.family: MoneroComponents.Style.fontRegular.name
font.pixelSize: 14 font.pixelSize: 15
text: blockheight > 0 ? blockheight : qsTr('Pending') + translationManager.emptyString; text: {
if (isout) {
if (isFailed) {
return qsTr("Failed") + translationManager.emptyString;
}
if (isPending) {
return qsTr("Waiting confirmation...") + translationManager.emptyString;
}
if (address) {
const addressBookName = currentWallet ? currentWallet.addressBook.getDescription(address) : null;
return (addressBookName ? FontAwesome.addressBook + " " + addressBookName : TxUtils.addressTruncate(address, 8));
}
if (amount != 0) {
return qsTr("Unknown recipient") + translationManager.emptyString;
} else {
return qsTr("My wallet") + translationManager.emptyString;
}
} else {
const receivingAddress = currentWallet ? currentWallet.address(subaddrAccount, subaddrIndex) : null;
const receivingAddressLabel = currentWallet ? appWindow.currentWallet.getSubaddressLabel(subaddrAccount, subaddrIndex) : null;
if (receivingAddress) {
if (subaddrIndex == 0) {
return qsTr("Address") + " #0" + " (" + qsTr("Primary address") + ")" + translationManager.emptyString;
} else {
if (receivingAddressLabel) {
return qsTr("Address") + " #" + subaddrIndex + " (" + receivingAddressLabel + ")" + translationManager.emptyString;
} else {
return qsTr("Address") + " #" + subaddrIndex + " (" + TxUtils.addressTruncate(receivingAddress, 4) + ")" + translationManager.emptyString;
}
}
} else {
return qsTr("Unknown address") + translationManager.emptyString;
}
}
}
color: MoneroComponents.Style.defaultFontColor color: MoneroComponents.Style.defaultFontColor
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
MouseArea { MouseArea {
state: "copyable" state: isout ? "copyable_address" : "copyable_receiving_address"
anchors.fill: parent anchors.fill: parent
hoverEnabled: true hoverEnabled: true
onEntered: parent.color = MoneroComponents.Style.orange onEntered: parent.color = MoneroComponents.Style.orange
@@ -847,6 +873,7 @@ Rectangle {
spacing: 0 spacing: 0
clip: true clip: true
Layout.preferredHeight: 120 Layout.preferredHeight: 120
Layout.minimumWidth: 130
Rectangle { Rectangle {
color: "transparent" color: "transparent"
@@ -909,9 +936,15 @@ Rectangle {
Layout.preferredHeight: 10 Layout.preferredHeight: 10
} }
Rectangle {
color: "transparent"
Layout.fillWidth: true
Layout.preferredHeight: 10
}
Item { Item {
Layout.fillWidth: true Layout.fillWidth: true
Layout.preferredHeight: 60 Layout.preferredHeight: 50
MoneroComponents.StandardButton { MoneroComponents.StandardButton {
id: btnDetails id: btnDetails
@@ -919,7 +952,7 @@ Rectangle {
small: true small: true
label.font.family: FontAwesome.fontFamily label.font.family: FontAwesome.fontFamily
fontSize: 18 fontSize: 18
width: 28 width: 34
MouseArea { MouseArea {
state: "details" state: "details"
@@ -949,7 +982,7 @@ Rectangle {
small: true small: true
label.font.family: FontAwesome.fontFamilyBrands label.font.family: FontAwesome.fontFamilyBrands
fontSize: 18 fontSize: 18
width: 36 width: 34
MouseArea { MouseArea {
state: "proof" state: "proof"
@@ -1128,7 +1161,6 @@ Rectangle {
} }
Rectangle { Rectangle {
visible: isout
color: "transparent" color: "transparent"
Layout.fillWidth: true Layout.fillWidth: true
Layout.preferredHeight: 20 Layout.preferredHeight: 20
@@ -1136,7 +1168,7 @@ Rectangle {
MoneroComponents.TextPlain { MoneroComponents.TextPlain {
font.family: MoneroComponents.Style.fontRegular.name font.family: MoneroComponents.Style.fontRegular.name
font.pixelSize: 15 font.pixelSize: 15
text: qsTr("Address sent to") + translationManager.emptyString text: qsTr("Blockheight") + translationManager.emptyString
color: MoneroComponents.Style.historyHeaderTextColor color: MoneroComponents.Style.historyHeaderTextColor
themeTransitionBlackColor: MoneroComponents.Style._b_historyHeaderTextColor themeTransitionBlackColor: MoneroComponents.Style._b_historyHeaderTextColor
themeTransitionWhiteColor: MoneroComponents.Style._w_historyHeaderTextColor themeTransitionWhiteColor: MoneroComponents.Style._w_historyHeaderTextColor
@@ -1145,30 +1177,20 @@ Rectangle {
} }
Rectangle { Rectangle {
visible: isout
color: "transparent" color: "transparent"
Layout.fillWidth: true Layout.fillWidth: true
Layout.preferredHeight: 20 Layout.preferredHeight: 20
MoneroComponents.TextPlain { MoneroComponents.TextPlain {
font.family: MoneroComponents.Style.fontRegular.name font.family: MoneroComponents.Style.fontRegular.name
font.pixelSize: 15 font.pixelSize: 14
text: { text: (blockheight > 0 ? blockheight : qsTr('Pending')) + translationManager.emptyString;
if(isout && address !== ""){
return TxUtils.addressTruncate(address, 24);
}
if(isout && blockheight === 0)
return qsTr("Waiting for transaction to leave txpool.") + translationManager.emptyString
else
return qsTr("Unknown recipient") + translationManager.emptyString;
}
color: MoneroComponents.Style.defaultFontColor color: MoneroComponents.Style.defaultFontColor
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
MouseArea { MouseArea {
state: "copyable_address" state: "copyable"
anchors.fill: parent anchors.fill: parent
hoverEnabled: true hoverEnabled: true
onEntered: parent.color = MoneroComponents.Style.orange onEntered: parent.color = MoneroComponents.Style.orange
@@ -1202,7 +1224,8 @@ Rectangle {
for(var i = 0; i < res.length; i+=1){ for(var i = 0; i < res.length; i+=1){
if(res[i].containsMouse === true){ if(res[i].containsMouse === true){
if(res[i].state === 'copyable' && res[i].parent.hasOwnProperty('text')) toClipboard(res[i].parent.text); if(res[i].state === 'copyable' && res[i].parent.hasOwnProperty('text')) toClipboard(res[i].parent.text);
if(res[i].state === 'copyable_address') root.toClipboard(address); if(res[i].state === 'copyable_address') (address ? root.toClipboard(address) : root.toClipboard(addressField.text));
if(res[i].state === 'copyable_receiving_address') root.toClipboard(currentWallet.address(subaddrAccount, subaddrIndex));
if(res[i].state === 'copyable_txkey') root.getTxKey(hash, res[i]); if(res[i].state === 'copyable_txkey') root.getTxKey(hash, res[i]);
if(res[i].state === 'set_tx_note') root.editDescription(hash, tx_note); if(res[i].state === 'set_tx_note') root.editDescription(hash, tx_note);
if(res[i].state === 'details') root.showTxDetails(hash, paymentId, destinations, subaddrAccount, subaddrIndex, dateTime, displayAmount, isout); if(res[i].state === 'details') root.showTxDetails(hash, paymentId, destinations, subaddrAccount, subaddrIndex, dateTime, displayAmount, isout);
@@ -1472,6 +1495,8 @@ Rectangle {
for (var i = 0; i < count; ++i) { for (var i = 0; i < count; ++i) {
var idx = _model.index(i, 0); var idx = _model.index(i, 0);
var isPending = model.data(idx, TransactionHistoryModel.TransactionPendingRole);
var isFailed = model.data(idx, TransactionHistoryModel.TransactionFailedRole);
var isout = _model.data(idx, TransactionHistoryModel.TransactionIsOutRole); var isout = _model.data(idx, TransactionHistoryModel.TransactionIsOutRole);
var amount = _model.data(idx, TransactionHistoryModel.TransactionAmountRole); var amount = _model.data(idx, TransactionHistoryModel.TransactionAmountRole);
var hash = _model.data(idx, TransactionHistoryModel.TransactionHashRole); var hash = _model.data(idx, TransactionHistoryModel.TransactionHashRole);
@@ -1488,13 +1513,12 @@ Rectangle {
var timestamp = new Date(date + " " + time).getTime() / 1000; var timestamp = new Date(date + " " + time).getTime() / 1000;
var dateHuman = Utils.ago(timestamp); var dateHuman = Utils.ago(timestamp);
var displayAmount = amount; if (amount === 0) {
if(displayAmount === 0){ // transactions to the same account have amount === 0, while the 'destinations string'
// *sometimes* amount is 0, while the 'destinations string'
// has the correct amount, so we try to fetch it from that instead. // has the correct amount, so we try to fetch it from that instead.
displayAmount = TxUtils.destinationsToAmount(destinations); amount = Number(TxUtils.destinationsToAmount(destinations));
displayAmount = Number(displayAmount *1);
} }
var displayAmount = Utils.removeTrailingZeros(amount.toFixed(12)) + " XMR";
var tx_note = currentWallet.getUserNote(hash); var tx_note = currentWallet.getUserNote(hash);
var address = ""; var address = "";
@@ -1509,9 +1533,11 @@ Rectangle {
root.txModelData.push({ root.txModelData.push({
"i": i, "i": i,
"isPending": isPending,
"isFailed": isFailed,
"isout": isout, "isout": isout,
"amount": Number(amount), "amount": amount,
"displayAmount": Utils.removeTrailingZeros(displayAmount.toFixed(12)) + " XMR", "displayAmount": displayAmount,
"hash": hash, "hash": hash,
"paymentId": paymentId, "paymentId": paymentId,
"address": address, "address": address,
@@ -1692,7 +1718,7 @@ Rectangle {
informationPopup.open(); informationPopup.open();
} }
Component.onCompleted: { Component.onCompleted: {
var _folder = 'file://' + moneroAccountsDir; var _folder = 'file://' + appWindow.accountsDir;
try { try {
_folder = 'file://' + desktopFolder; _folder = 'file://' + desktopFolder;
} }

View File

@@ -553,7 +553,8 @@ Rectangle {
if (appWindow.viewOnly && !appWindow.isTrustedDaemon()){ if (appWindow.viewOnly && !appWindow.isTrustedDaemon()){
errorMessage = "<p class='orange'>" + qsTr("* To import, you must connect to a local node or a trusted remote node") + "</p>"; errorMessage = "<p class='orange'>" + qsTr("* To import, you must connect to a local node or a trusted remote node") + "</p>";
} }
return "<style type='text/css'>p{line-height:20px; margin-top:0px; margin-bottom:0px; color:#ffffff;} p.orange{color:#ff9323;}</style>" + return "<style type='text/css'>p{line-height:20px; margin-top:0px; margin-bottom:0px; color:" + MoneroComponents.Style.defaultFontColor +
";} p.orange{color:#ff9323;}</style>" +
"<p>" + qsTr("1. Using cold wallet, export the key images into a file") + "</p>" + "<p>" + qsTr("1. Using cold wallet, export the key images into a file") + "</p>" +
"<p>" + qsTr("2. Using view-only wallet, import the key images file") + "</p>" + "<p>" + qsTr("2. Using view-only wallet, import the key images file") + "</p>" +
errorMessage + translationManager.emptyString errorMessage + translationManager.emptyString
@@ -593,7 +594,8 @@ Rectangle {
if (appWindow.viewOnly && !pageRoot.checkInformation(amountLine.text, addressLine.text, appWindow.persistentSettings.nettype)){ if (appWindow.viewOnly && !pageRoot.checkInformation(amountLine.text, addressLine.text, appWindow.persistentSettings.nettype)){
errorMessage = "<p class='orange'>" + qsTr("* To create a transaction file, please enter address and amount above") + "</p>"; errorMessage = "<p class='orange'>" + qsTr("* To create a transaction file, please enter address and amount above") + "</p>";
} }
return "<style type='text/css'>p{line-height:20px; margin-top:0px; margin-bottom:0px; color:#ffffff;} p.orange{color:#ff9323;}</style>" + return "<style type='text/css'>p{line-height:20px; margin-top:0px; margin-bottom:0px; color:" + MoneroComponents.Style.defaultFontColor +
";} p.orange{color:#ff9323;}</style>" +
"<p>" + qsTr("1. Using view-only wallet, export the outputs into a file") + "</p>" + "<p>" + qsTr("1. Using view-only wallet, export the outputs into a file") + "</p>" +
"<p>" + qsTr("2. Using cold wallet, import the outputs file and export the key images") + "</p>" + "<p>" + qsTr("2. Using cold wallet, import the outputs file and export the key images") + "</p>" +
"<p>" + qsTr("3. Using view-only wallet, import the key images file and create a transaction file") + "</p>" + "<p>" + qsTr("3. Using view-only wallet, import the key images file and create a transaction file") + "</p>" +
@@ -621,7 +623,7 @@ Rectangle {
FileDialog { FileDialog {
id: signTxDialog id: signTxDialog
title: qsTr("Please choose a file") + translationManager.emptyString title: qsTr("Please choose a file") + translationManager.emptyString
folder: "file://" +moneroAccountsDir folder: "file://" + appWindow.accountsDir
nameFilters: [ "Unsigned transfers (*)"] nameFilters: [ "Unsigned transfers (*)"]
onAccepted: { onAccepted: {
@@ -682,7 +684,7 @@ Rectangle {
FileDialog { FileDialog {
id: submitTxDialog id: submitTxDialog
title: qsTr("Please choose a file") + translationManager.emptyString title: qsTr("Please choose a file") + translationManager.emptyString
folder: "file://" +moneroAccountsDir folder: "file://" + appWindow.accountsDir
nameFilters: [ "signed transfers (*)"] nameFilters: [ "signed transfers (*)"]
onAccepted: { onAccepted: {

View File

@@ -47,7 +47,7 @@ ListView {
id: trackingTableItem id: trackingTableItem
visible: trackingListView.message === "" visible: trackingListView.message === ""
height: 53 height: 53
width: parent.width width: parent ? parent.width : undefined
Layout.fillWidth: true Layout.fillWidth: true
RowLayout { RowLayout {

View File

@@ -135,7 +135,7 @@ Rectangle {
Layout.fillWidth: true Layout.fillWidth: true
color: MoneroComponents.Style.dimmedFontColor color: MoneroComponents.Style.dimmedFontColor
font.pixelSize: 14 font.pixelSize: 14
property string walletPath: (isIOS ? moneroAccountsDir : "") + persistentSettings.wallet_path property string walletPath: (isIOS ? appWindow.accountsDir : "") + persistentSettings.wallet_path
text: "\ text: "\
<style type='text/css'>\ <style type='text/css'>\
a {cursor:pointer;text-decoration: none; color: #FF6C3C}\ a {cursor:pointer;text-decoration: none; color: #FF6C3C}\
@@ -272,9 +272,9 @@ Rectangle {
<style type='text/css'>\ <style type='text/css'>\
a {cursor:pointer;text-decoration: none; color: #FF6C3C}\ a {cursor:pointer;text-decoration: none; color: #FF6C3C}\
</style>\ </style>\
<a href='#'>%1</a>".arg(walletLogPath) <a href='#'>%1</a>".arg(logger.logFilePath)
textFormat: Text.RichText textFormat: Text.RichText
onLinkActivated: oshelper.openContainingFolder(walletLogPath) onLinkActivated: oshelper.openContainingFolder(logger.logFilePath)
MouseArea { MouseArea {
anchors.fill: parent anchors.fill: parent
@@ -393,13 +393,15 @@ Rectangle {
data += "\nEmbedded Monero version: " + moneroVersion; data += "\nEmbedded Monero version: " + moneroVersion;
data += "\nWallet path: " + walletLocation.walletPath; data += "\nWallet path: " + walletLocation.walletPath;
data += "\nWallet creation height: "; data += "\nWallet restore height: ";
if(currentWallet) if(currentWallet)
data += currentWallet.walletCreationHeight; data += currentWallet.walletCreationHeight;
data += "\nWallet log path: " + walletLogPath; data += "\nWallet log path: " + logger.logFilePath;
data += "\nWallet mode: " + walletModeString; data += "\nWallet mode: " + walletModeString;
data += "\nGraphics: " + isOpenGL ? "OpenGL" : "Low graphics mode"; data += "\nGraphics mode: " + isOpenGL ? "OpenGL" : "Low graphics mode";
if (isTails)
data += "\nTails: " + tailsUsePersistence ? "persistent" : "persistence disabled";
console.log("Copied to clipboard"); console.log("Copied to clipboard");
clipboard.setText(data); clipboard.setText(data);

View File

@@ -251,6 +251,37 @@ Rectangle {
} }
} }
MoneroComponents.CheckBox {
id: proxyCheckbox
Layout.topMargin: 6
enabled: !socksProxyFlagSet
checked: socksProxyFlagSet ? socksProxyFlag : persistentSettings.proxyEnabled
onClicked: {
persistentSettings.proxyEnabled = !persistentSettings.proxyEnabled;
}
text: qsTr("Socks5 proxy (%1%2)")
.arg(appWindow.walletMode >= 2 ? qsTr("remote node connections, ") : "")
.arg(qsTr("updates downloading, fetching price sources")) + translationManager.emptyString
}
MoneroComponents.RemoteNodeEdit {
id: proxyEdit
enabled: proxyCheckbox.enabled
Layout.leftMargin: 36
Layout.topMargin: 6
Layout.minimumWidth: 100
placeholderFontSize: 15
visible: proxyCheckbox.checked
daemonAddrLabelText: qsTr("IP address") + translationManager.emptyString
daemonPortLabelText: qsTr("Port") + translationManager.emptyString
initialAddress: socksProxyFlagSet ? socksProxyFlag : persistentSettings.proxyAddress
onEditingFinished: {
persistentSettings.proxyAddress = proxyEdit.getAddress();
}
}
MoneroComponents.StandardButton { MoneroComponents.StandardButton {
visible: !persistentSettings.customDecorations visible: !persistentSettings.customDecorations
Layout.topMargin: 10 Layout.topMargin: 10

View File

@@ -136,6 +136,7 @@ Rectangle{
MouseArea { MouseArea {
cursorShape: Qt.PointingHandCursor cursorShape: Qt.PointingHandCursor
anchors.fill: parent anchors.fill: parent
enabled: persistentSettings.useRemoteNode
onClicked: { onClicked: {
persistentSettings.useRemoteNode = false; persistentSettings.useRemoteNode = false;
appWindow.disconnectRemoteNode(); appWindow.disconnectRemoteNode();
@@ -227,6 +228,7 @@ Rectangle{
MouseArea { MouseArea {
cursorShape: Qt.PointingHandCursor cursorShape: Qt.PointingHandCursor
anchors.fill: parent anchors.fill: parent
enabled: !persistentSettings.useRemoteNode
onClicked: { onClicked: {
appWindow.connectRemoteNode(); appWindow.connectRemoteNode();
} }

View File

@@ -87,7 +87,6 @@
<file>lang/flags/ua.png</file> <file>lang/flags/ua.png</file>
<file>lang/flags/gb.png</file> <file>lang/flags/gb.png</file>
<file>lang/flags/us.png</file> <file>lang/flags/us.png</file>
<file>lang/flags/pirate.png</file>
<file>lang/flags/nb_NO.png</file> <file>lang/flags/nb_NO.png</file>
<file>pages/Receive.qml</file> <file>pages/Receive.qml</file>
<file>pages/TxKey.qml</file> <file>pages/TxKey.qml</file>
@@ -241,5 +240,8 @@
<file>components/AdvancedOptionsItem.qml</file> <file>components/AdvancedOptionsItem.qml</file>
<file>images/busy-indicator.png</file> <file>images/busy-indicator.png</file>
<file>images/busy-indicator@2x.png</file> <file>images/busy-indicator@2x.png</file>
<file>images/success.png</file>
<file>images/success@2x.png</file>
<file>components/SuccessfulTxDialog.qml</file>
</qresource> </qresource>
</RCC> </RCC>

View File

@@ -1,4 +1,3 @@
add_subdirectory(QR-Code-generator)
add_subdirectory(QR-Code-scanner) add_subdirectory(QR-Code-scanner)
add_subdirectory(daemon) add_subdirectory(daemon)
add_subdirectory(libwalletqt) add_subdirectory(libwalletqt)
@@ -22,9 +21,6 @@ file(GLOB SOURCE_FILES
"libwalletqt/TransactionHistory.cpp" "libwalletqt/TransactionHistory.cpp"
"libwalletqt/TransactionInfo.cpp" "libwalletqt/TransactionInfo.cpp"
"libwalletqt/QRCodeImageProvider.cpp" QR "libwalletqt/QRCodeImageProvider.cpp" QR
"QR-Code-generator/BitBuffer.cpp"
"QR-Code-generator/QrCode.cpp"
"QR-Code-generator/QrSegment.cpp"
"libwalletqt/AddressBook.cpp" "libwalletqt/AddressBook.cpp"
"libwalletqt/Subaddress.cpp" "libwalletqt/Subaddress.cpp"
"libwalletqt/SubaddressAccount.cpp" "libwalletqt/SubaddressAccount.cpp"
@@ -36,9 +32,6 @@ file(GLOB SOURCE_FILES
"libwalletqt/TransactionHistory.h" "libwalletqt/TransactionHistory.h"
"libwalletqt/TransactionInfo.h" "libwalletqt/TransactionInfo.h"
"libwalletqt/QRCodeImageProvider.h" "libwalletqt/QRCodeImageProvider.h"
"QR-Code-generator/BitBuffer.h"
"QR-Code-generator/QrCode.h"
"QR-Code-generator/QrSegment.h"
"libwalletqt/Transfer.h" "libwalletqt/Transfer.h"
"libwalletqt/AddressBook.h" "libwalletqt/AddressBook.h"
"libwalletqt/Subaddress.h" "libwalletqt/Subaddress.h"
@@ -64,8 +57,6 @@ endif()
if(WITH_SCANNER) if(WITH_SCANNER)
file(GLOB QR_CODE_FILES file(GLOB QR_CODE_FILES
"QR-Code-generator/*.h"
"QR-Code-generator/*.cpp"
"QR-Code-scanner/*.h" "QR-Code-scanner/*.h"
"QR-Code-scanner/*.cpp" "QR-Code-scanner/*.cpp"
) )
@@ -79,7 +70,8 @@ if(MINGW)
set(ICON_RC ${CMAKE_CURRENT_BINARY_DIR}/icon.rc) set(ICON_RC ${CMAKE_CURRENT_BINARY_DIR}/icon.rc)
set(ICON_RES ${CMAKE_CURRENT_BINARY_DIR}/icon.o) set(ICON_RES ${CMAKE_CURRENT_BINARY_DIR}/icon.o)
file(WRITE ${ICON_RC} "IDI_ICON1 ICON DISCARDABLE \"${ICON}\"") file(WRITE ${ICON_RC} "IDI_ICON1 ICON DISCARDABLE \"${ICON}\"")
add_custom_command(OUTPUT ${ICON_RES} COMMAND windres ${ICON_RC} ${ICON_RES} MAIN_DEPENDENCY ${ICON_RC}) find_program(Qt5_WINDRES_EXECUTABLE NAMES windres x86_64-w64-mingw32-windres REQUIRED CMAKE_FIND_ROOT_PATH_BOTH)
add_custom_command(OUTPUT ${ICON_RES} COMMAND ${Qt5_WINDRES_EXECUTABLE} ${ICON_RC} ${ICON_RES} MAIN_DEPENDENCY ${ICON_RC})
list(APPEND RESOURCES ${ICON_RES}) list(APPEND RESOURCES ${ICON_RES})
endif() endif()
@@ -117,11 +109,11 @@ target_include_directories(monero-wallet-gui PUBLIC
${CMAKE_SOURCE_DIR}/monero/src ${CMAKE_SOURCE_DIR}/monero/src
${CMAKE_SOURCE_DIR}/monero/external/easylogging++ ${CMAKE_SOURCE_DIR}/monero/external/easylogging++
${CMAKE_SOURCE_DIR}/monero/contrib/epee/include ${CMAKE_SOURCE_DIR}/monero/contrib/epee/include
${CMAKE_SOURCE_DIR}/monero/external/qrcodegen
${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/daemon ${CMAKE_CURRENT_SOURCE_DIR}/daemon
${CMAKE_CURRENT_SOURCE_DIR}/libwalletqt ${CMAKE_CURRENT_SOURCE_DIR}/libwalletqt
${CMAKE_CURRENT_SOURCE_DIR}/model ${CMAKE_CURRENT_SOURCE_DIR}/model
${CMAKE_CURRENT_SOURCE_DIR}/QR-Code-generator
${CMAKE_CURRENT_SOURCE_DIR}/QR-Code-scanner ${CMAKE_CURRENT_SOURCE_DIR}/QR-Code-scanner
${CMAKE_CURRENT_SOURCE_DIR}/zxcvbn-c ${CMAKE_CURRENT_SOURCE_DIR}/zxcvbn-c
${LibUSB_INCLUDE_DIRS} ${LibUSB_INCLUDE_DIRS}
@@ -144,6 +136,7 @@ target_link_libraries(monero-wallet-gui
wallet_merged wallet_merged
${LMDB_LIBRARY} ${LMDB_LIBRARY}
epee epee
qrcodegen
${UNBOUND_LIBRARY} ${UNBOUND_LIBRARY}
${SODIUM_LIBRARY} ${SODIUM_LIBRARY}
easylogging easylogging
@@ -180,6 +173,10 @@ if(WITH_SCANNER)
) )
endif() endif()
add_custom_command(TARGET monero-wallet-gui POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:daemon> $<TARGET_FILE_DIR:monero-wallet-gui>)
include(Deploy)
install(TARGETS monero-wallet-gui install(TARGETS monero-wallet-gui
DESTINATION ${CMAKE_INSTALL_PREFIX} DESTINATION bin
) )

View File

@@ -1,91 +0,0 @@
// Copyright (c) 2014-2019, The Monero Project
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification, are
// permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice, this list of
// conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
// of conditions and the following disclaimer in the documentation and/or other
// materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of its contributors may be
// used to endorse or promote products derived from this software without specific
// prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/*
* QR Code generator library (C++)
*
* Copyright (c) 2016 Project Nayuki
* https://www.nayuki.io/page/qr-code-generator-library
*
* (MIT License)
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
* the Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
* - The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
* - The Software is provided "as is", without warranty of any kind, express or
* implied, including but not limited to the warranties of merchantability,
* fitness for a particular purpose and noninfringement. In no event shall the
* authors or copyright holders be liable for any claim, damages or other
* liability, whether in an action of contract, tort or otherwise, arising from,
* out of or in connection with the Software or the use or other dealings in the
* Software.
*/
#include <cstddef>
#include "BitBuffer.hpp"
qrcodegen::BitBuffer::BitBuffer() :
data(),
bitLength(0) {}
int qrcodegen::BitBuffer::getBitLength() const {
return bitLength;
}
std::vector<uint8_t> qrcodegen::BitBuffer::getBytes() const {
return data;
}
void qrcodegen::BitBuffer::appendBits(uint32_t val, int len) {
if (len < 0 || len > 32 || (len < 32 && (val >> len) != 0))
throw "Value out of range";
size_t newBitLen = bitLength + len;
while (data.size() * 8 < newBitLen)
data.push_back(0);
for (int i = len - 1; i >= 0; i--, bitLength++) // Append bit by bit
data.at(bitLength >> 3) |= ((val >> i) & 1) << (7 - (bitLength & 7));
}
void qrcodegen::BitBuffer::appendData(const QrSegment &seg) {
size_t newBitLen = bitLength + seg.bitLength;
while (data.size() * 8 < newBitLen)
data.push_back(0);
for (int i = 0; i < seg.bitLength; i++, bitLength++) { // Append bit by bit
int bit = (seg.data.at(i >> 3) >> (7 - (i & 7))) & 1;
data.at(bitLength >> 3) |= bit << (7 - (bitLength & 7));
}
}

View File

@@ -1,104 +0,0 @@
// Copyright (c) 2014-2019, The Monero Project
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification, are
// permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice, this list of
// conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
// of conditions and the following disclaimer in the documentation and/or other
// materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of its contributors may be
// used to endorse or promote products derived from this software without specific
// prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/*
* QR Code generator library (C++)
*
* Copyright (c) 2016 Project Nayuki
* https://www.nayuki.io/page/qr-code-generator-library
*
* (MIT License)
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
* the Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
* - The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
* - The Software is provided "as is", without warranty of any kind, express or
* implied, including but not limited to the warranties of merchantability,
* fitness for a particular purpose and noninfringement. In no event shall the
* authors or copyright holders be liable for any claim, damages or other
* liability, whether in an action of contract, tort or otherwise, arising from,
* out of or in connection with the Software or the use or other dealings in the
* Software.
*/
#pragma once
#include <cstdint>
#include <vector>
#include "QrSegment.hpp"
namespace qrcodegen {
/*
* An appendable sequence of bits. Bits are packed in big endian within a byte.
*/
class BitBuffer final {
/*---- Fields ----*/
private:
std::vector<uint8_t> data;
int bitLength;
/*---- Constructor ----*/
public:
// Creates an empty bit buffer (length 0).
BitBuffer();
/*---- Methods ----*/
public:
// Returns the number of bits in the buffer, which is a non-negative value.
int getBitLength() const;
// Returns a copy of all bytes, padding up to the nearest byte.
std::vector<uint8_t> getBytes() const;
// Appends the given number of bits of the given value to this sequence.
// If 0 <= len <= 31, then this requires 0 <= val < 2^len.
void appendBits(uint32_t val, int len);
// Appends the data of the given segment to this bit buffer.
void appendData(const QrSegment &seg);
};
}

View File

@@ -1,4 +0,0 @@
file(GLOB_RECURSE SRC_SOURCES *.cpp)
file(GLOB_RECURSE SRC_HEADERS *.h)

View File

@@ -1,644 +0,0 @@
// Copyright (c) 2014-2019, The Monero Project
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification, are
// permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice, this list of
// conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
// of conditions and the following disclaimer in the documentation and/or other
// materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of its contributors may be
// used to endorse or promote products derived from this software without specific
// prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/*
* QR Code generator library (C++)
*
* Copyright (c) 2016 Project Nayuki
* https://www.nayuki.io/page/qr-code-generator-library
*
* (MIT License)
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
* the Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
* - The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
* - The Software is provided "as is", without warranty of any kind, express or
* implied, including but not limited to the warranties of merchantability,
* fitness for a particular purpose and noninfringement. In no event shall the
* authors or copyright holders be liable for any claim, damages or other
* liability, whether in an action of contract, tort or otherwise, arising from,
* out of or in connection with the Software or the use or other dealings in the
* Software.
*/
#include <algorithm>
#include <climits>
#include <cmath>
#include <cstddef>
#include <sstream>
#include "BitBuffer.hpp"
#include "QrCode.hpp"
qrcodegen::QrCode::Ecc::Ecc(int ord, int fb) :
ordinal(ord),
formatBits(fb) {}
const qrcodegen::QrCode::Ecc qrcodegen::QrCode::Ecc::LOW (0, 1);
const qrcodegen::QrCode::Ecc qrcodegen::QrCode::Ecc::MEDIUM (1, 0);
const qrcodegen::QrCode::Ecc qrcodegen::QrCode::Ecc::QUARTILE(2, 3);
const qrcodegen::QrCode::Ecc qrcodegen::QrCode::Ecc::HIGH (3, 2);
qrcodegen::QrCode qrcodegen::QrCode::encodeText(const char *text, const Ecc &ecl) {
std::vector<QrSegment> segs(QrSegment::makeSegments(text));
return encodeSegments(segs, ecl);
}
qrcodegen::QrCode qrcodegen::QrCode::encodeBinary(const std::vector<uint8_t> &data, const Ecc &ecl) {
std::vector<QrSegment> segs;
segs.push_back(QrSegment::makeBytes(data));
return encodeSegments(segs, ecl);
}
qrcodegen::QrCode qrcodegen::QrCode::encodeSegments(const std::vector<QrSegment> &segs, const Ecc &ecl,
int minVersion, int maxVersion, int mask, bool boostEcl) {
if (!(1 <= minVersion && minVersion <= maxVersion && maxVersion <= 40) || mask < -1 || mask > 7)
throw "Invalid value";
// Find the minimal version number to use
int version, dataUsedBits;
for (version = minVersion; ; version++) {
int dataCapacityBits = getNumDataCodewords(version, ecl) * 8; // Number of data bits available
dataUsedBits = QrSegment::getTotalBits(segs, version);
if (dataUsedBits != -1 && dataUsedBits <= dataCapacityBits)
break; // This version number is found to be suitable
if (version >= maxVersion) // All versions in the range could not fit the given data
throw "Data too long";
}
if (dataUsedBits == -1)
throw "Assertion error";
// Increase the error correction level while the data still fits in the current version number
const Ecc *newEcl = &ecl;
if (boostEcl) {
if (dataUsedBits <= getNumDataCodewords(version, Ecc::MEDIUM ) * 8) newEcl = &Ecc::MEDIUM ;
if (dataUsedBits <= getNumDataCodewords(version, Ecc::QUARTILE) * 8) newEcl = &Ecc::QUARTILE;
if (dataUsedBits <= getNumDataCodewords(version, Ecc::HIGH ) * 8) newEcl = &Ecc::HIGH ;
}
// Create the data bit string by concatenating all segments
int dataCapacityBits = getNumDataCodewords(version, *newEcl) * 8;
BitBuffer bb;
for (size_t i = 0; i < segs.size(); i++) {
const QrSegment &seg(segs.at(i));
bb.appendBits(seg.mode.modeBits, 4);
bb.appendBits(seg.numChars, seg.mode.numCharCountBits(version));
bb.appendData(seg);
}
// Add terminator and pad up to a byte if applicable
bb.appendBits(0, std::min(4, dataCapacityBits - bb.getBitLength()));
bb.appendBits(0, (8 - bb.getBitLength() % 8) % 8);
// Pad with alternate bytes until data capacity is reached
for (uint8_t padByte = 0xEC; bb.getBitLength() < dataCapacityBits; padByte ^= 0xEC ^ 0x11)
bb.appendBits(padByte, 8);
if (bb.getBitLength() % 8 != 0)
throw "Assertion error";
// Create the QR Code symbol
return QrCode(version, *newEcl, bb.getBytes(), mask);
}
qrcodegen::QrCode::QrCode(int ver, const Ecc &ecl, const std::vector<uint8_t> &dataCodewords, int mask) :
// Initialize scalar fields
version(ver),
size(1 <= ver && ver <= 40 ? ver * 4 + 17 : -1), // Avoid signed overflow undefined behavior
errorCorrectionLevel(ecl) {
// Check arguments
if (ver < 1 || ver > 40 || mask < -1 || mask > 7)
throw "Value out of range";
std::vector<bool> row(size);
for (int i = 0; i < size; i++) {
modules.push_back(row);
isFunction.push_back(row);
}
// Draw function patterns, draw all codewords, do masking
drawFunctionPatterns();
const std::vector<uint8_t> allCodewords(appendErrorCorrection(dataCodewords));
drawCodewords(allCodewords);
this->mask = handleConstructorMasking(mask);
}
qrcodegen::QrCode::QrCode(const QrCode &qr, int mask) :
// Copy scalar fields
version(qr.version),
size(qr.size),
errorCorrectionLevel(qr.errorCorrectionLevel) {
// Check arguments
if (mask < -1 || mask > 7)
throw "Mask value out of range";
// Handle grid fields
modules = qr.modules;
isFunction = qr.isFunction;
// Handle masking
applyMask(qr.mask); // Undo old mask
this->mask = handleConstructorMasking(mask);
}
int qrcodegen::QrCode::getMask() const {
return mask;
}
int qrcodegen::QrCode::getModule(int x, int y) const {
if (0 <= x && x < size && 0 <= y && y < size)
return modules.at(y).at(x) ? 1 : 0;
else
return 0; // Infinite white border
}
std::string qrcodegen::QrCode::toSvgString(int border) const {
if (border < 0)
throw "Border must be non-negative";
std::ostringstream sb;
sb << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
sb << "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n";
sb << "<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" viewBox=\"0 0 ";
sb << (size + border * 2) << " " << (size + border * 2) << "\">\n";
sb << "\t<rect width=\"100%\" height=\"100%\" fill=\"#FFFFFF\" stroke-width=\"0\"/>\n";
sb << "\t<path d=\"";
bool head = true;
for (int y = -border; y < size + border; y++) {
for (int x = -border; x < size + border; x++) {
if (getModule(x, y) == 1) {
if (head)
head = false;
else
sb << " ";
sb << "M" << (x + border) << "," << (y + border) << "h1v1h-1z";
}
}
}
sb << "\" fill=\"#000000\" stroke-width=\"0\"/>\n";
sb << "</svg>\n";
return sb.str();
}
void qrcodegen::QrCode::drawFunctionPatterns() {
// Draw the horizontal and vertical timing patterns
for (int i = 0; i < size; i++) {
setFunctionModule(6, i, i % 2 == 0);
setFunctionModule(i, 6, i % 2 == 0);
}
// Draw 3 finder patterns (all corners except bottom right; overwrites some timing modules)
drawFinderPattern(3, 3);
drawFinderPattern(size - 4, 3);
drawFinderPattern(3, size - 4);
// Draw the numerous alignment patterns
const std::vector<int> alignPatPos(getAlignmentPatternPositions(version));
int numAlign = alignPatPos.size();
for (int i = 0; i < numAlign; i++) {
for (int j = 0; j < numAlign; j++) {
if ((i == 0 && j == 0) || (i == 0 && j == numAlign - 1) || (i == numAlign - 1 && j == 0))
continue; // Skip the three finder corners
else
drawAlignmentPattern(alignPatPos.at(i), alignPatPos.at(j));
}
}
// Draw configuration data
drawFormatBits(0); // Dummy mask value; overwritten later in the constructor
drawVersion();
}
void qrcodegen::QrCode::drawFormatBits(int mask) {
// Calculate error correction code and pack bits
int data = errorCorrectionLevel.formatBits << 3 | mask; // errCorrLvl is uint2, mask is uint3
int rem = data;
for (int i = 0; i < 10; i++)
rem = (rem << 1) ^ ((rem >> 9) * 0x537);
data = data << 10 | rem;
data ^= 0x5412; // uint15
if (data >> 15 != 0)
throw "Assertion error";
// Draw first copy
for (int i = 0; i <= 5; i++)
setFunctionModule(8, i, ((data >> i) & 1) != 0);
setFunctionModule(8, 7, ((data >> 6) & 1) != 0);
setFunctionModule(8, 8, ((data >> 7) & 1) != 0);
setFunctionModule(7, 8, ((data >> 8) & 1) != 0);
for (int i = 9; i < 15; i++)
setFunctionModule(14 - i, 8, ((data >> i) & 1) != 0);
// Draw second copy
for (int i = 0; i <= 7; i++)
setFunctionModule(size - 1 - i, 8, ((data >> i) & 1) != 0);
for (int i = 8; i < 15; i++)
setFunctionModule(8, size - 15 + i, ((data >> i) & 1) != 0);
setFunctionModule(8, size - 8, true);
}
void qrcodegen::QrCode::drawVersion() {
if (version < 7)
return;
// Calculate error correction code and pack bits
int rem = version; // version is uint6, in the range [7, 40]
for (int i = 0; i < 12; i++)
rem = (rem << 1) ^ ((rem >> 11) * 0x1F25);
int data = version << 12 | rem; // uint18
if (data >> 18 != 0)
throw "Assertion error";
// Draw two copies
for (int i = 0; i < 18; i++) {
bool bit = ((data >> i) & 1) != 0;
int a = size - 11 + i % 3, b = i / 3;
setFunctionModule(a, b, bit);
setFunctionModule(b, a, bit);
}
}
void qrcodegen::QrCode::drawFinderPattern(int x, int y) {
for (int i = -4; i <= 4; i++) {
for (int j = -4; j <= 4; j++) {
int dist = std::max(std::abs(i), std::abs(j)); // Chebyshev/infinity norm
int xx = x + j, yy = y + i;
if (0 <= xx && xx < size && 0 <= yy && yy < size)
setFunctionModule(xx, yy, dist != 2 && dist != 4);
}
}
}
void qrcodegen::QrCode::drawAlignmentPattern(int x, int y) {
for (int i = -2; i <= 2; i++) {
for (int j = -2; j <= 2; j++)
setFunctionModule(x + j, y + i, std::max(std::abs(i), std::abs(j)) != 1);
}
}
void qrcodegen::QrCode::setFunctionModule(int x, int y, bool isBlack) {
modules.at(y).at(x) = isBlack;
isFunction.at(y).at(x) = true;
}
std::vector<uint8_t> qrcodegen::QrCode::appendErrorCorrection(const std::vector<uint8_t> &data) const {
if (data.size() != static_cast<unsigned int>(getNumDataCodewords(version, errorCorrectionLevel)))
throw "Invalid argument";
// Calculate parameter numbers
int numBlocks = NUM_ERROR_CORRECTION_BLOCKS[errorCorrectionLevel.ordinal][version];
int totalEcc = NUM_ERROR_CORRECTION_CODEWORDS[errorCorrectionLevel.ordinal][version];
if (totalEcc % numBlocks != 0)
throw "Assertion error";
int blockEccLen = totalEcc / numBlocks;
int numShortBlocks = numBlocks - getNumRawDataModules(version) / 8 % numBlocks;
int shortBlockLen = getNumRawDataModules(version) / 8 / numBlocks;
// Split data into blocks and append ECC to each block
std::vector<std::vector<uint8_t>> blocks;
const ReedSolomonGenerator rs(blockEccLen);
for (int i = 0, k = 0; i < numBlocks; i++) {
std::vector<uint8_t> dat;
dat.insert(dat.begin(), data.begin() + k, data.begin() + (k + shortBlockLen - blockEccLen + (i < numShortBlocks ? 0 : 1)));
k += dat.size();
const std::vector<uint8_t> ecc(rs.getRemainder(dat));
if (i < numShortBlocks)
dat.push_back(0);
dat.insert(dat.end(), ecc.begin(), ecc.end());
blocks.push_back(dat);
}
// Interleave (not concatenate) the bytes from every block into a single sequence
std::vector<uint8_t> result;
for (int i = 0; static_cast<unsigned int>(i) < blocks.at(0).size(); i++) {
for (int j = 0; static_cast<unsigned int>(j) < blocks.size(); j++) {
// Skip the padding byte in short blocks
if (i != shortBlockLen - blockEccLen || j >= numShortBlocks)
result.push_back(blocks.at(j).at(i));
}
}
if (result.size() != static_cast<unsigned int>(getNumRawDataModules(version) / 8))
throw "Assertion error";
return result;
}
void qrcodegen::QrCode::drawCodewords(const std::vector<uint8_t> &data) {
if (data.size() != static_cast<unsigned int>(getNumRawDataModules(version) / 8))
throw "Invalid argument";
size_t i = 0; // Bit index into the data
// Do the funny zigzag scan
for (int right = size - 1; right >= 1; right -= 2) { // Index of right column in each column pair
if (right == 6)
right = 5;
for (int vert = 0; vert < size; vert++) { // Vertical counter
for (int j = 0; j < 2; j++) {
int x = right - j; // Actual x coordinate
bool upwards = ((right & 2) == 0) ^ (x < 6);
int y = upwards ? size - 1 - vert : vert; // Actual y coordinate
if (!isFunction.at(y).at(x) && i < data.size() * 8) {
modules.at(y).at(x) = ((data.at(i >> 3) >> (7 - (i & 7))) & 1) != 0;
i++;
}
// If there are any remainder bits (0 to 7), they are already
// set to 0/false/white when the grid of modules was initialized
}
}
}
if (static_cast<unsigned int>(i) != data.size() * 8)
throw "Assertion error";
}
void qrcodegen::QrCode::applyMask(int mask) {
if (mask < 0 || mask > 7)
throw "Mask value out of range";
for (int y = 0; y < size; y++) {
for (int x = 0; x < size; x++) {
bool invert;
switch (mask) {
case 0: invert = (x + y) % 2 == 0; break;
case 1: invert = y % 2 == 0; break;
case 2: invert = x % 3 == 0; break;
case 3: invert = (x + y) % 3 == 0; break;
case 4: invert = (x / 3 + y / 2) % 2 == 0; break;
case 5: invert = x * y % 2 + x * y % 3 == 0; break;
case 6: invert = (x * y % 2 + x * y % 3) % 2 == 0; break;
case 7: invert = ((x + y) % 2 + x * y % 3) % 2 == 0; break;
default: throw "Assertion error";
}
modules.at(y).at(x) = modules.at(y).at(x) ^ (invert & !isFunction.at(y).at(x));
}
}
}
int qrcodegen::QrCode::handleConstructorMasking(int mask) {
if (mask == -1) { // Automatically choose best mask
int32_t minPenalty = INT32_MAX;
for (int i = 0; i < 8; i++) {
drawFormatBits(i);
applyMask(i);
int penalty = getPenaltyScore();
if (penalty < minPenalty) {
mask = i;
minPenalty = penalty;
}
applyMask(i); // Undoes the mask due to XOR
}
}
if (mask < 0 || mask > 7)
throw "Assertion error";
drawFormatBits(mask); // Overwrite old format bits
applyMask(mask); // Apply the final choice of mask
return mask; // The caller shall assign this value to the final-declared field
}
int qrcodegen::QrCode::getPenaltyScore() const {
int result = 0;
// Adjacent modules in row having same color
for (int y = 0; y < size; y++) {
bool colorX = modules.at(y).at(0);
for (int x = 1, runX = 1; x < size; x++) {
if (modules.at(y).at(x) != colorX) {
colorX = modules.at(y).at(x);
runX = 1;
} else {
runX++;
if (runX == 5)
result += PENALTY_N1;
else if (runX > 5)
result++;
}
}
}
// Adjacent modules in column having same color
for (int x = 0; x < size; x++) {
bool colorY = modules.at(0).at(x);
for (int y = 1, runY = 1; y < size; y++) {
if (modules.at(y).at(x) != colorY) {
colorY = modules.at(y).at(x);
runY = 1;
} else {
runY++;
if (runY == 5)
result += PENALTY_N1;
else if (runY > 5)
result++;
}
}
}
// 2*2 blocks of modules having same color
for (int y = 0; y < size - 1; y++) {
for (int x = 0; x < size - 1; x++) {
bool color = modules.at(y).at(x);
if ( color == modules.at(y).at(x + 1) &&
color == modules.at(y + 1).at(x) &&
color == modules.at(y + 1).at(x + 1))
result += PENALTY_N2;
}
}
// Finder-like pattern in rows
for (int y = 0; y < size; y++) {
for (int x = 0, bits = 0; x < size; x++) {
bits = ((bits << 1) & 0x7FF) | (modules.at(y).at(x) ? 1 : 0);
if (x >= 10 && (bits == 0x05D || bits == 0x5D0)) // Needs 11 bits accumulated
result += PENALTY_N3;
}
}
// Finder-like pattern in columns
for (int x = 0; x < size; x++) {
for (int y = 0, bits = 0; y < size; y++) {
bits = ((bits << 1) & 0x7FF) | (modules.at(y).at(x) ? 1 : 0);
if (y >= 10 && (bits == 0x05D || bits == 0x5D0)) // Needs 11 bits accumulated
result += PENALTY_N3;
}
}
// Balance of black and white modules
int black = 0;
for (int y = 0; y < size; y++) {
for (int x = 0; x < size; x++) {
if (modules.at(y).at(x))
black++;
}
}
int total = size * size;
// Find smallest k such that (45-5k)% <= dark/total <= (55+5k)%
for (int k = 0; black*20 < (9-k)*total || black*20 > (11+k)*total; k++)
result += PENALTY_N4;
return result;
}
std::vector<int> qrcodegen::QrCode::getAlignmentPatternPositions(int ver) {
if (ver < 1 || ver > 40)
throw "Version number out of range";
else if (ver == 1)
return std::vector<int>();
else {
int numAlign = ver / 7 + 2;
int step;
if (ver != 32)
step = (ver * 4 + numAlign * 2 + 1) / (2 * numAlign - 2) * 2; // ceil((size - 13) / (2*numAlign - 2)) * 2
else // C-C-C-Combo breaker!
step = 26;
std::vector<int> result;
int size = ver * 4 + 17;
for (int i = 0, pos = size - 7; i < numAlign - 1; i++, pos -= step)
result.insert(result.begin(), pos);
result.insert(result.begin(), 6);
return result;
}
}
int qrcodegen::QrCode::getNumRawDataModules(int ver) {
if (ver < 1 || ver > 40)
throw "Version number out of range";
int result = (16 * ver + 128) * ver + 64;
if (ver >= 2) {
int numAlign = ver / 7 + 2;
result -= (25 * numAlign - 10) * numAlign - 55;
if (ver >= 7)
result -= 18 * 2; // Subtract version information
}
return result;
}
int qrcodegen::QrCode::getNumDataCodewords(int ver, const Ecc &ecl) {
if (ver < 1 || ver > 40)
throw "Version number out of range";
return getNumRawDataModules(ver) / 8 - NUM_ERROR_CORRECTION_CODEWORDS[ecl.ordinal][ver];
}
/*---- Tables of constants ----*/
const int qrcodegen::QrCode::PENALTY_N1 = 3;
const int qrcodegen::QrCode::PENALTY_N2 = 3;
const int qrcodegen::QrCode::PENALTY_N3 = 40;
const int qrcodegen::QrCode::PENALTY_N4 = 10;
const int16_t qrcodegen::QrCode::NUM_ERROR_CORRECTION_CODEWORDS[4][41] = {
// Version: (note that index 0 is for padding, and is set to an illegal value)
//0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level
{-1, 7, 10, 15, 20, 26, 36, 40, 48, 60, 72, 80, 96, 104, 120, 132, 144, 168, 180, 196, 224, 224, 252, 270, 300, 312, 336, 360, 390, 420, 450, 480, 510, 540, 570, 570, 600, 630, 660, 720, 750}, // Low
{-1, 10, 16, 26, 36, 48, 64, 72, 88, 110, 130, 150, 176, 198, 216, 240, 280, 308, 338, 364, 416, 442, 476, 504, 560, 588, 644, 700, 728, 784, 812, 868, 924, 980, 1036, 1064, 1120, 1204, 1260, 1316, 1372}, // Medium
{-1, 13, 22, 36, 52, 72, 96, 108, 132, 160, 192, 224, 260, 288, 320, 360, 408, 448, 504, 546, 600, 644, 690, 750, 810, 870, 952, 1020, 1050, 1140, 1200, 1290, 1350, 1440, 1530, 1590, 1680, 1770, 1860, 1950, 2040}, // Quartile
{-1, 17, 28, 44, 64, 88, 112, 130, 156, 192, 224, 264, 308, 352, 384, 432, 480, 532, 588, 650, 700, 750, 816, 900, 960, 1050, 1110, 1200, 1260, 1350, 1440, 1530, 1620, 1710, 1800, 1890, 1980, 2100, 2220, 2310, 2430}, // High
};
const int8_t qrcodegen::QrCode::NUM_ERROR_CORRECTION_BLOCKS[4][41] = {
// Version: (note that index 0 is for padding, and is set to an illegal value)
//0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level
{-1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25}, // Low
{-1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 21, 23, 25, 26, 28, 29, 31, 33, 35, 37, 38, 40, 43, 45, 47, 49}, // Medium
{-1, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 27, 29, 34, 34, 35, 38, 40, 43, 45, 48, 51, 53, 56, 59, 62, 65, 68}, // Quartile
{-1, 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, 32, 35, 37, 40, 42, 45, 48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81}, // High
};
qrcodegen::QrCode::ReedSolomonGenerator::ReedSolomonGenerator(int degree) :
coefficients() {
if (degree < 1 || degree > 255)
throw "Degree out of range";
// Start with the monomial x^0
coefficients.resize(degree);
coefficients.at(degree - 1) = 1;
// Compute the product polynomial (x - r^0) * (x - r^1) * (x - r^2) * ... * (x - r^{degree-1}),
// drop the highest term, and store the rest of the coefficients in order of descending powers.
// Note that r = 0x02, which is a generator element of this field GF(2^8/0x11D).
int root = 1;
for (int i = 0; i < degree; i++) {
// Multiply the current product by (x - r^i)
for (size_t j = 0; j < coefficients.size(); j++) {
coefficients.at(j) = multiply(coefficients.at(j), static_cast<uint8_t>(root));
if (j + 1 < coefficients.size())
coefficients.at(j) ^= coefficients.at(j + 1);
}
root = (root << 1) ^ ((root >> 7) * 0x11D); // Multiply by 0x02 mod GF(2^8/0x11D)
}
}
std::vector<uint8_t> qrcodegen::QrCode::ReedSolomonGenerator::getRemainder(const std::vector<uint8_t> &data) const {
// Compute the remainder by performing polynomial division
std::vector<uint8_t> result(coefficients.size());
for (size_t i = 0; i < data.size(); i++) {
uint8_t factor = data.at(i) ^ result.at(0);
result.erase(result.begin());
result.push_back(0);
for (size_t j = 0; j < result.size(); j++)
result.at(j) ^= multiply(coefficients.at(j), factor);
}
return result;
}
uint8_t qrcodegen::QrCode::ReedSolomonGenerator::multiply(uint8_t x, uint8_t y) {
// Russian peasant multiplication
int z = 0;
for (int i = 7; i >= 0; i--) {
z = (z << 1) ^ ((z >> 7) * 0x11D);
z ^= ((y >> i) & 1) * x;
}
if (z >> 8 != 0)
throw "Assertion error";
return static_cast<uint8_t>(z);
}

View File

@@ -1,342 +0,0 @@
// Copyright (c) 2014-2019, The Monero Project
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification, are
// permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice, this list of
// conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
// of conditions and the following disclaimer in the documentation and/or other
// materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of its contributors may be
// used to endorse or promote products derived from this software without specific
// prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/*
* QR Code generator library (C++)
*
* Copyright (c) 2016 Project Nayuki
* https://www.nayuki.io/page/qr-code-generator-library
*
* (MIT License)
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
* the Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
* - The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
* - The Software is provided "as is", without warranty of any kind, express or
* implied, including but not limited to the warranties of merchantability,
* fitness for a particular purpose and noninfringement. In no event shall the
* authors or copyright holders be liable for any claim, damages or other
* liability, whether in an action of contract, tort or otherwise, arising from,
* out of or in connection with the Software or the use or other dealings in the
* Software.
*/
#pragma once
#include <cstdint>
#include <string>
#include <vector>
#include "QrSegment.hpp"
namespace qrcodegen {
/*
* Represents an immutable square grid of black and white cells for a QR Code symbol, and
* provides static functions to create a QR Code from user-supplied textual or binary data.
* This class covers the QR Code model 2 specification, supporting all versions (sizes)
* from 1 to 40, all 4 error correction levels, and only 3 character encoding modes.
*/
class QrCode final {
/*---- Public helper enumeration ----*/
public:
/*
* Represents the error correction level used in a QR Code symbol.
*/
class Ecc final {
// Constants declared in ascending order of error protection.
public:
const static Ecc LOW, MEDIUM, QUARTILE, HIGH;
// Fields.
public:
const int ordinal; // (Public) In the range 0 to 3 (unsigned 2-bit integer).
const int formatBits; // (Package-private) In the range 0 to 3 (unsigned 2-bit integer).
// Constructor.
private:
Ecc(int ord, int fb);
};
/*---- Public static factory functions ----*/
public:
/*
* Returns a QR Code symbol representing the given Unicode text string at the given error correction level.
* As a conservative upper bound, this function is guaranteed to succeed for strings that have 738 or fewer Unicode
* code points (not UTF-16 code units). The smallest possible QR Code version is automatically chosen for the output.
* The ECC level of the result may be higher than the ecl argument if it can be done without increasing the version.
*/
static QrCode encodeText(const char *text, const Ecc &ecl);
/*
* Returns a QR Code symbol representing the given binary data string at the given error correction level.
* This function always encodes using the binary segment mode, not any text mode. The maximum number of
* bytes allowed is 2953. The smallest possible QR Code version is automatically chosen for the output.
* The ECC level of the result may be higher than the ecl argument if it can be done without increasing the version.
*/
static QrCode encodeBinary(const std::vector<uint8_t> &data, const Ecc &ecl);
/*
* Returns a QR Code symbol representing the specified data segments with the specified encoding parameters.
* The smallest possible QR Code version within the specified range is automatically chosen for the output.
* This function allows the user to create a custom sequence of segments that switches
* between modes (such as alphanumeric and binary) to encode text more efficiently.
* This function is considered to be lower level than simply encoding text or binary data.
*/
static QrCode encodeSegments(const std::vector<QrSegment> &segs, const Ecc &ecl,
int minVersion=1, int maxVersion=40, int mask=-1, bool boostEcl=true); // All optional parameters
/*---- Instance fields ----*/
// Public immutable scalar parameters
public:
/* This QR Code symbol's version number, which is always between 1 and 40 (inclusive). */
const int version;
/* The width and height of this QR Code symbol, measured in modules.
* Always equal to version &times; 4 + 17, in the range 21 to 177. */
const int size;
/* The error correction level used in this QR Code symbol. */
const Ecc &errorCorrectionLevel;
/* The mask pattern used in this QR Code symbol, in the range 0 to 7 (i.e. unsigned 3-bit integer).
* Note that even if a constructor was called with automatic masking requested
* (mask = -1), the resulting object will still have a mask value between 0 and 7. */
private:
int mask;
// Private grids of modules/pixels (conceptually immutable)
private:
std::vector<std::vector<bool>> modules; // The modules of this QR Code symbol (false = white, true = black)
std::vector<std::vector<bool>> isFunction; // Indicates function modules that are not subjected to masking
/*---- Constructors ----*/
public:
/*
* Creates a new QR Code symbol with the given version number, error correction level, binary data array,
* and mask number. This is a cumbersome low-level constructor that should not be invoked directly by the user.
* To go one level up, see the encodeSegments() function.
*/
QrCode(int ver, const Ecc &ecl, const std::vector<uint8_t> &dataCodewords, int mask);
/*
* Creates a new QR Code symbol based on the given existing object, but with a potentially
* different mask pattern. The version, error correction level, codewords, etc. of the newly
* created object are all identical to the argument object; only the mask may differ.
*/
QrCode(const QrCode &qr, int mask);
/*---- Public instance methods ----*/
public:
int getMask() const;
/*
* Returns the color of the module (pixel) at the given coordinates, which is either 0 for white or 1 for black. The top
* left corner has the coordinates (x=0, y=0). If the given coordinates are out of bounds, then 0 (white) is returned.
*/
int getModule(int x, int y) const;
/*
* Based on the given number of border modules to add as padding, this returns a
* string whose contents represents an SVG XML file that depicts this QR Code symbol.
* Note that Unix newlines (\n) are always used, regardless of the platform.
*/
std::string toSvgString(int border) const;
/*---- Private helper methods for constructor: Drawing function modules ----*/
private:
void drawFunctionPatterns();
// Draws two copies of the format bits (with its own error correction code)
// based on the given mask and this object's error correction level field.
void drawFormatBits(int mask);
// Draws two copies of the version bits (with its own error correction code),
// based on this object's version field (which only has an effect for 7 <= version <= 40).
void drawVersion();
// Draws a 9*9 finder pattern including the border separator, with the center module at (x, y).
void drawFinderPattern(int x, int y);
// Draws a 5*5 alignment pattern, with the center module at (x, y).
void drawAlignmentPattern(int x, int y);
// Sets the color of a module and marks it as a function module.
// Only used by the constructor. Coordinates must be in range.
void setFunctionModule(int x, int y, bool isBlack);
/*---- Private helper methods for constructor: Codewords and masking ----*/
private:
// Returns a new byte string representing the given data with the appropriate error correction
// codewords appended to it, based on this object's version and error correction level.
std::vector<uint8_t> appendErrorCorrection(const std::vector<uint8_t> &data) const;
// Draws the given sequence of 8-bit codewords (data and error correction) onto the entire
// data area of this QR Code symbol. Function modules need to be marked off before this is called.
void drawCodewords(const std::vector<uint8_t> &data);
// XORs the data modules in this QR Code with the given mask pattern. Due to XOR's mathematical
// properties, calling applyMask(m) twice with the same value is equivalent to no change at all.
// This means it is possible to apply a mask, undo it, and try another mask. Note that a final
// well-formed QR Code symbol needs exactly one mask applied (not zero, not two, etc.).
void applyMask(int mask);
// A messy helper function for the constructors. This QR Code must be in an unmasked state when this
// method is called. The given argument is the requested mask, which is -1 for auto or 0 to 7 for fixed.
// This method applies and returns the actual mask chosen, from 0 to 7.
int handleConstructorMasking(int mask);
// Calculates and returns the penalty score based on state of this QR Code's current modules.
// This is used by the automatic mask choice algorithm to find the mask pattern that yields the lowest score.
int getPenaltyScore() const;
/*---- Private static helper functions ----*/
private:
// Returns a set of positions of the alignment patterns in ascending order. These positions are
// used on both the x and y axes. Each value in the resulting array is in the range [0, 177).
// This stateless pure function could be implemented as table of 40 variable-length lists of unsigned bytes.
static std::vector<int> getAlignmentPatternPositions(int ver);
// Returns the number of raw data modules (bits) available at the given version number.
// These data modules are used for both user data codewords and error correction codewords.
// This stateless pure function could be implemented as a 40-entry lookup table.
static int getNumRawDataModules(int ver);
// Returns the number of 8-bit data (i.e. not error correction) codewords contained in any
// QR Code of the given version number and error correction level, with remainder bits discarded.
// This stateless pure function could be implemented as a (40*4)-cell lookup table.
static int getNumDataCodewords(int ver, const Ecc &ecl);
/*---- Private tables of constants ----*/
private:
// For use in getPenaltyScore(), when evaluating which mask is best.
static const int PENALTY_N1;
static const int PENALTY_N2;
static const int PENALTY_N3;
static const int PENALTY_N4;
static const int16_t NUM_ERROR_CORRECTION_CODEWORDS[4][41];
static const int8_t NUM_ERROR_CORRECTION_BLOCKS[4][41];
/*---- Private helper class ----*/
private:
/*
* Computes the Reed-Solomon error correction codewords for a sequence of data codewords
* at a given degree. Objects are immutable, and the state only depends on the degree.
* This class exists because the divisor polynomial does not need to be recalculated for every input.
*/
class ReedSolomonGenerator final {
/*-- Immutable field --*/
private:
// Coefficients of the divisor polynomial, stored from highest to lowest power, excluding the leading term which
// is always 1. For example the polynomial x^3 + 255x^2 + 8x + 93 is stored as the uint8 array {255, 8, 93}.
std::vector<uint8_t> coefficients;
/*-- Constructor --*/
public:
/*
* Creates a Reed-Solomon ECC generator for the given degree. This could be implemented
* as a lookup table over all possible parameter values, instead of as an algorithm.
*/
ReedSolomonGenerator(int degree);
/*-- Method --*/
public:
/*
* Computes and returns the Reed-Solomon error correction codewords for the given sequence of data codewords.
* The returned object is always a new byte array. This method does not alter this object's state (because it is immutable).
*/
std::vector<uint8_t> getRemainder(const std::vector<uint8_t> &data) const;
/*-- Static function --*/
private:
// Returns the product of the two given field elements modulo GF(2^8/0x11D). The arguments and result
// are unsigned 8-bit integers. This could be implemented as a lookup table of 256*256 entries of uint8.
static uint8_t multiply(uint8_t x, uint8_t y);
};
};
}

View File

@@ -1,201 +0,0 @@
// Copyright (c) 2014-2019, The Monero Project
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification, are
// permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice, this list of
// conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
// of conditions and the following disclaimer in the documentation and/or other
// materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of its contributors may be
// used to endorse or promote products derived from this software without specific
// prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/*
* QR Code generator library (C++)
*
* Copyright (c) 2016 Project Nayuki
* https://www.nayuki.io/page/qr-code-generator-library
*
* (MIT License)
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
* the Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
* - The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
* - The Software is provided "as is", without warranty of any kind, express or
* implied, including but not limited to the warranties of merchantability,
* fitness for a particular purpose and noninfringement. In no event shall the
* authors or copyright holders be liable for any claim, damages or other
* liability, whether in an action of contract, tort or otherwise, arising from,
* out of or in connection with the Software or the use or other dealings in the
* Software.
*/
#include <cstddef>
#include "BitBuffer.hpp"
#include "QrSegment.hpp"
qrcodegen::QrSegment::Mode::Mode(int mode, int cc0, int cc1, int cc2) :
modeBits(mode) {
numBitsCharCount[0] = cc0;
numBitsCharCount[1] = cc1;
numBitsCharCount[2] = cc2;
}
int qrcodegen::QrSegment::Mode::numCharCountBits(int ver) const {
if ( 1 <= ver && ver <= 9) return numBitsCharCount[0];
else if (10 <= ver && ver <= 26) return numBitsCharCount[1];
else if (27 <= ver && ver <= 40) return numBitsCharCount[2];
else throw "Version number out of range";
}
const qrcodegen::QrSegment::Mode qrcodegen::QrSegment::Mode::NUMERIC (0x1, 10, 12, 14);
const qrcodegen::QrSegment::Mode qrcodegen::QrSegment::Mode::ALPHANUMERIC(0x2, 9, 11, 13);
const qrcodegen::QrSegment::Mode qrcodegen::QrSegment::Mode::BYTE (0x4, 8, 16, 16);
const qrcodegen::QrSegment::Mode qrcodegen::QrSegment::Mode::KANJI (0x8, 8, 10, 12);
qrcodegen::QrSegment qrcodegen::QrSegment::makeBytes(const std::vector<uint8_t> &data) {
return QrSegment(Mode::BYTE, data.size(), data, data.size() * 8);
}
qrcodegen::QrSegment qrcodegen::QrSegment::makeNumeric(const char *digits) {
BitBuffer bb;
int accumData = 0;
int accumCount = 0;
int charCount = 0;
for (; *digits != '\0'; digits++, charCount++) {
char c = *digits;
if (c < '0' || c > '9')
throw "String contains non-numeric characters";
accumData = accumData * 10 + (c - '0');
accumCount++;
if (accumCount == 3) {
bb.appendBits(accumData, 10);
accumData = 0;
accumCount = 0;
}
}
if (accumCount > 0) // 1 or 2 digits remaining
bb.appendBits(accumData, accumCount * 3 + 1);
return QrSegment(Mode::NUMERIC, charCount, bb.getBytes(), bb.getBitLength());
}
qrcodegen::QrSegment qrcodegen::QrSegment::makeAlphanumeric(const char *text) {
BitBuffer bb;
int accumData = 0;
int accumCount = 0;
int charCount = 0;
for (; *text != '\0'; text++, charCount++) {
char c = *text;
if (c < ' ' || c > 'Z')
throw "String contains unencodable characters in alphanumeric mode";
accumData = accumData * 45 + ALPHANUMERIC_ENCODING_TABLE[c - ' '];
accumCount++;
if (accumCount == 2) {
bb.appendBits(accumData, 11);
accumData = 0;
accumCount = 0;
}
}
if (accumCount > 0) // 1 character remaining
bb.appendBits(accumData, 6);
return QrSegment(Mode::ALPHANUMERIC, charCount, bb.getBytes(), bb.getBitLength());
}
std::vector<qrcodegen::QrSegment> qrcodegen::QrSegment::makeSegments(const char *text) {
// Select the most efficient segment encoding automatically
std::vector<QrSegment> result;
if (*text == '\0'); // Leave the vector empty
else if (QrSegment::isNumeric(text))
result.push_back(QrSegment::makeNumeric(text));
else if (QrSegment::isAlphanumeric(text))
result.push_back(QrSegment::makeAlphanumeric(text));
else {
std::vector<uint8_t> bytes;
for (; *text != '\0'; text++)
bytes.push_back(static_cast<uint8_t>(*text));
result.push_back(QrSegment::makeBytes(bytes));
}
return result;
}
qrcodegen::QrSegment::QrSegment(const Mode &md, int numCh, const std::vector<uint8_t> &b, int bitLen) :
mode(md),
numChars(numCh),
data(b),
bitLength(bitLen) {
if (numCh < 0 || bitLen < 0 || b.size() != static_cast<unsigned int>((bitLen + 7) / 8))
throw "Invalid value";
}
int qrcodegen::QrSegment::getTotalBits(const std::vector<QrSegment> &segs, int version) {
if (version < 1 || version > 40)
throw "Version number out of range";
int result = 0;
for (size_t i = 0; i < segs.size(); i++) {
const QrSegment &seg(segs.at(i));
int ccbits = seg.mode.numCharCountBits(version);
// Fail if segment length value doesn't fit in the length field's bit-width
if (seg.numChars >= (1 << ccbits))
return -1;
result += 4 + ccbits + seg.bitLength;
}
return result;
}
bool qrcodegen::QrSegment::isAlphanumeric(const char *text) {
for (; *text != '\0'; text++) {
char c = *text;
if (c < ' ' || c > 'Z' || ALPHANUMERIC_ENCODING_TABLE[c - ' '] == -1)
return false;
}
return true;
}
bool qrcodegen::QrSegment::isNumeric(const char *text) {
for (; *text != '\0'; text++) {
char c = *text;
if (c < '0' || c > '9')
return false;
}
return true;
}
const int8_t qrcodegen::QrSegment::ALPHANUMERIC_ENCODING_TABLE[59] = {
// SP, !, ", #, $, %, &, ', (, ), *, +, ,, -, ., /, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, :, ;, <, =, >, ?, @, // ASCII codes 32 to 64
36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 44, -1, -1, -1, -1, -1, -1, // Array indices 0 to 32
10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, // Array indices 33 to 58
// A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, // ASCII codes 65 to 90
};

View File

@@ -1,198 +0,0 @@
// Copyright (c) 2014-2019, The Monero Project
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification, are
// permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice, this list of
// conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
// of conditions and the following disclaimer in the documentation and/or other
// materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of its contributors may be
// used to endorse or promote products derived from this software without specific
// prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/*
* QR Code generator library (C++)
*
* Copyright (c) 2016 Project Nayuki
* https://www.nayuki.io/page/qr-code-generator-library
*
* (MIT License)
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
* the Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
* - The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
* - The Software is provided "as is", without warranty of any kind, express or
* implied, including but not limited to the warranties of merchantability,
* fitness for a particular purpose and noninfringement. In no event shall the
* authors or copyright holders be liable for any claim, damages or other
* liability, whether in an action of contract, tort or otherwise, arising from,
* out of or in connection with the Software or the use or other dealings in the
* Software.
*/
#pragma once
#include <cstdint>
#include <vector>
namespace qrcodegen {
/*
* Represents a character string to be encoded in a QR Code symbol. Each segment has
* a mode, and a sequence of characters that is already encoded as a sequence of bits.
* Instances of this class are immutable.
* This segment class imposes no length restrictions, but QR Codes have restrictions.
* Even in the most favorable conditions, a QR Code can only hold 7089 characters of data.
* Any segment longer than this is meaningless for the purpose of generating QR Codes.
*/
class QrSegment final {
/*---- Public helper enumeration ----*/
/*
* The mode field of a segment. Immutable. Provides methods to retrieve closely related values.
*/
public:
class Mode final {
/*-- Constants --*/
public:
static const Mode NUMERIC;
static const Mode ALPHANUMERIC;
static const Mode BYTE;
static const Mode KANJI;
/*-- Fields --*/
/* (Package-private) An unsigned 4-bit integer value (range 0 to 15) representing the mode indicator bits for this mode object. */
public:
const int modeBits;
private:
int numBitsCharCount[3];
/*-- Constructor --*/
private:
Mode(int mode, int cc0, int cc1, int cc2);
/*-- Method --*/
/*
* (Package-private) Returns the bit width of the segment character count field for this mode object at the given version number.
*/
public:
int numCharCountBits(int ver) const;
};
/*---- Public static factory functions ----*/
public:
/*
* Returns a segment representing the given binary data encoded in byte mode.
*/
static QrSegment makeBytes(const std::vector<uint8_t> &data);
/*
* Returns a segment representing the given string of decimal digits encoded in numeric mode.
*/
static QrSegment makeNumeric(const char *digits);
/*
* Returns a segment representing the given text string encoded in alphanumeric mode. The characters allowed are:
* 0 to 9, A to Z (uppercase only), space, dollar, percent, asterisk, plus, hyphen, period, slash, colon.
*/
static QrSegment makeAlphanumeric(const char *text);
/*
* Returns a list of zero or more segments to represent the given text string.
* The result may use various segment modes and switch modes to optimize the length of the bit stream.
*/
static std::vector<QrSegment> makeSegments(const char *text);
/*---- Public static helper functions ----*/
public:
/*
* Tests whether the given string can be encoded as a segment in alphanumeric mode.
*/
static bool isAlphanumeric(const char *text);
/*
* Tests whether the given string can be encoded as a segment in numeric mode.
*/
static bool isNumeric(const char *text);
/*---- Instance fields ----*/
public:
/* The mode indicator for this segment. */
const Mode mode;
/* The length of this segment's unencoded data, measured in characters. Always zero or positive. */
const int numChars;
/* The bits of this segment packed into a byte array in big endian. */
const std::vector<uint8_t> data;
/* The length of this segment's encoded data, measured in bits. Satisfies ceil(bitLength / 8) = data.size(). */
const int bitLength;
/*---- Constructor ----*/
public:
/*
* Creates a new QR Code data segment with the given parameters and data.
*/
QrSegment(const Mode &md, int numCh, const std::vector<uint8_t> &b, int bitLen);
// Package-private helper function.
static int getTotalBits(const std::vector<QrSegment> &segs, int version);
/*---- Private constant ----*/
private:
/* Maps shifted ASCII codes to alphanumeric mode character codes. */
static const int8_t ALPHANUMERIC_ENCODING_TABLE[59];
};
}

View File

@@ -1,119 +0,0 @@
QR Code generator library
=========================
Introduction
------------
This project aims to provide the best and clearest QR Code generator library. The primary goals are flexible options and absolute correctness. The secondary goals are compact implementation size and good documentation comments.
Home page with live JavaScript demo and extensive description: [https://www.nayuki.io/page/qr-code-generator-library](https://www.nayuki.io/page/qr-code-generator-library)
Features
--------
Core features:
* Available in 4 programming languages, all with nearly equal functionality: Java, JavaScript, Python, C++
* Significantly shorter code but more documentation comments compared to competing libraries
* Supports encoding all 40 versions (sizes) and all 4 error correction levels, as per the QR Code Model 2 standard
* Output formats: Raw modules/pixels of the QR symbol (all languages), SVG XML string (all languages), BufferedImage raster bitmap (Java only)
* Encodes numeric and special-alphanumeric text in less space than general text
* Open source code under the permissive MIT License
Manual parameters:
* User can specify minimum and maximum version numbers allowed, then library will automatically choose smallest version in the range that fits the data
* User can specify mask pattern manually, otherwise library will automatically evaluate all 8 masks and select the optimal one
* User can specify absolute error correction level, or allow the library to boost it if it doesn't increase the version number
Optional advanced features (Java only):
* Encodes Japanese Unicode text in kanji mode to save a lot of space compared to UTF-8 bytes
* Computes optimal segment mode switching for text with mixed numeric/alphanumeric/general parts
Examples
--------
Java language:
import io.nayuki.qrcodegen.*;
// Simple operation
QrCode qr0 = QrCode.encodeText("Hello, world!", QrCode.Ecc.MEDIUM);
BufferedImage img = qr0.toImage(4, 10);
ImageIO.write(img, "png", new File("qr-code.png"));
// Manual operation
List<QrSegment> segs = QrSegment.makeSegments("3141592653589793238462643383");
QrCode qr1 = QrCode.encodeSegments(segs, QrCode.Ecc.HIGH, 5, 5, 2, false);
JavaScript language:
// Name abbreviated for the sake of these examples here
var QRC = qrcodegen.QrCode;
// Simple operation
var qr0 = QRC.encodeText("Hello, world!", QRC.Ecc.MEDIUM);
var svg = qr0.toSvgString(4);
// Manual operation
var segs = qrcodegen.QrSegment.makeSegments("3141592653589793238462643383");
var qr1 = QRC.encodeSegments(segs, QRC.Ecc.HIGH, 5, 5, 2, false);
Python language:
from qrcodegen import *
# Simple operation
qr0 = QrCode.encode_text("Hello, world!", QrCode.Ecc.MEDIUM)
svg = qr0.to_svg_str(4)
# Manual operation
segs = QrSegment.make_segments("3141592653589793238462643383")
qr1 = QrCode.encode_segments(segs, QrCode.Ecc.HIGH, 5, 5, 2, False)
C++ language:
#include <string>
#include <vector>
#include "QrCode.hpp"
using namespace qrcodegen;
// Simple operation
QrCode qr0 = QrCode::encodeText("Hello, world!", QrCode::Ecc::MEDIUM);
std::string svg = qr0.toSvgString(4);
// Manual operation
std::vector<QrSegment> segs =
QrSegment::makeSegments("3141592653589793238462643383");
QrCode qr1 = QrCode::encodeSegments(segs, QrCode::Ecc::HIGH, 5, 5, 2, false);
License
-------
Copyright © 2016 Project Nayuki
[https://www.nayuki.io/page/qr-code-generator-library](https://www.nayuki.io/page/qr-code-generator-library)
(MIT License)
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
* The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
* The Software is provided "as is", without warranty of any kind, express or
implied, including but not limited to the warranties of merchantability,
fitness for a particular purpose and noninfringement. In no event shall the
authors or copyright holders be liable for any claim, damages or other
liability, whether in an action of contract, tort or otherwise, arising from,
out of or in connection with the Software or the use or other dealings in the
Software.

View File

@@ -112,6 +112,10 @@ bool DaemonManager::start(const QString &flags, NetworkType::Type nettype, const
arguments << "--no-sync"; arguments << "--no-sync";
} }
if (!flags.contains("--out-peers", Qt::CaseSensitive) && bootstrapNodeAddress == "auto") {
arguments << "--out-peers" << "16";
}
arguments << "--check-updates" << "disabled"; arguments << "--check-updates" << "disabled";
// --max-concurrency based on threads available. // --max-concurrency based on threads available.

View File

@@ -38,7 +38,7 @@ QImage QRCodeImageProvider::genQrImage(const QString &id, QSize *size)
unsigned int black = 0; unsigned int black = 0;
unsigned int white = 1; unsigned int white = 1;
unsigned int borderSize = 4; unsigned int borderSize = 4;
unsigned int imageSize = qrcode.size + (2 * borderSize); unsigned int imageSize = qrcode.getSize() + (2 * borderSize);
QImage img = QImage(imageSize, imageSize, QImage::Format_Mono); QImage img = QImage(imageSize, imageSize, QImage::Format_Mono);
for (unsigned int y = 0; y < imageSize; ++y) for (unsigned int y = 0; y < imageSize; ++y)

View File

@@ -27,6 +27,11 @@
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "Wallet.h" #include "Wallet.h"
#include <chrono>
#include <stdexcept>
#include <thread>
#include "PendingTransaction.h" #include "PendingTransaction.h"
#include "UnsignedTransaction.h" #include "UnsignedTransaction.h"
#include "TransactionHistory.h" #include "TransactionHistory.h"
@@ -50,6 +55,8 @@
#include <QVector> #include <QVector>
#include <QMutexLocker> #include <QMutexLocker>
#include "qt/ScopeGuard.h"
namespace { namespace {
static const int DAEMON_BLOCKCHAIN_HEIGHT_CACHE_TTL_SECONDS = 5; static const int DAEMON_BLOCKCHAIN_HEIGHT_CACHE_TTL_SECONDS = 5;
static const int DAEMON_BLOCKCHAIN_TARGET_HEIGHT_CACHE_TTL_SECONDS = 30; static const int DAEMON_BLOCKCHAIN_TARGET_HEIGHT_CACHE_TTL_SECONDS = 30;
@@ -124,6 +131,19 @@ bool Wallet::disconnected() const
return m_disconnected; return m_disconnected;
} }
bool Wallet::refreshing() const
{
return m_refreshing;
}
void Wallet::refreshingSet(bool value)
{
if (m_refreshing.exchange(value) != value)
{
emit refreshingChanged();
}
}
void Wallet::setConnectionStatus(ConnectionStatus value) void Wallet::setConnectionStatus(ConnectionStatus value)
{ {
if (m_connectionStatus == value) if (m_connectionStatus == value)
@@ -144,6 +164,29 @@ void Wallet::setConnectionStatus(ConnectionStatus value)
} }
} }
QString Wallet::getProxyAddress() const
{
QMutexLocker locker(&m_proxyMutex);
return m_proxyAddress;
}
void Wallet::setProxyAddress(QString address)
{
m_scheduler.run([this, address] {
{
QMutexLocker locker(&m_proxyMutex);
if (!m_walletImpl->setProxy(address.toStdString()))
{
qCritical() << "failed to set proxy" << address;
}
m_proxyAddress = address;
}
emit proxyAddressChanged();
});
}
bool Wallet::synchronized() const bool Wallet::synchronized() const
{ {
return m_walletImpl->synchronized(); return m_walletImpl->synchronized();
@@ -173,7 +216,7 @@ void Wallet::storeAsync(const QJSValue &callback, const QString &path /* = "" */
{ {
const auto future = m_scheduler.run( const auto future = m_scheduler.run(
[this, path] { [this, path] {
QMutexLocker locker(&m_storeMutex); QMutexLocker locker(&m_asyncMutex);
return QJSValueList({m_walletImpl->store(path.toStdString())}); return QJSValueList({m_walletImpl->store(path.toStdString())});
}, },
@@ -184,7 +227,7 @@ void Wallet::storeAsync(const QJSValue &callback, const QString &path /* = "" */
} }
} }
bool Wallet::init(const QString &daemonAddress, bool trustedDaemon, quint64 upperTransactionLimit, bool isRecovering, bool isRecoveringFromDevice, quint64 restoreHeight) bool Wallet::init(const QString &daemonAddress, bool trustedDaemon, quint64 upperTransactionLimit, bool isRecovering, bool isRecoveringFromDevice, quint64 restoreHeight, const QString& proxyAddress)
{ {
qDebug() << "init non async"; qDebug() << "init non async";
if (isRecovering){ if (isRecovering){
@@ -198,7 +241,20 @@ bool Wallet::init(const QString &daemonAddress, bool trustedDaemon, quint64 uppe
if (isRecovering || isRecoveringFromDevice) { if (isRecovering || isRecoveringFromDevice) {
m_walletImpl->setRefreshFromBlockHeight(restoreHeight); m_walletImpl->setRefreshFromBlockHeight(restoreHeight);
} }
m_walletImpl->init(daemonAddress.toStdString(), upperTransactionLimit, m_daemonUsername.toStdString(), m_daemonPassword.toStdString());
{
QMutexLocker locker(&m_proxyMutex);
if (!m_walletImpl->init(daemonAddress.toStdString(), upperTransactionLimit, m_daemonUsername.toStdString(), m_daemonPassword.toStdString(), false, false, proxyAddress.toStdString()))
{
return false;
}
m_proxyAddress = proxyAddress;
}
emit proxyAddressChanged();
setTrustedDaemon(trustedDaemon); setTrustedDaemon(trustedDaemon);
return true; return true;
} }
@@ -210,17 +266,24 @@ void Wallet::setDaemonLogin(const QString &daemonUsername, const QString &daemon
m_daemonPassword = daemonPassword; m_daemonPassword = daemonPassword;
} }
void Wallet::initAsync(const QString &daemonAddress, bool trustedDaemon, quint64 upperTransactionLimit, bool isRecovering, bool isRecoveringFromDevice, quint64 restoreHeight) void Wallet::initAsync(
const QString &daemonAddress,
bool trustedDaemon /* = false */,
quint64 upperTransactionLimit /* = 0 */,
bool isRecovering /* = false */,
bool isRecoveringFromDevice /* = false */,
quint64 restoreHeight /* = 0 */,
const QString &proxyAddress /* = "" */)
{ {
qDebug() << "initAsync: " + daemonAddress; qDebug() << "initAsync: " + daemonAddress;
const auto future = m_scheduler.run([this, daemonAddress, trustedDaemon, upperTransactionLimit, isRecovering, isRecoveringFromDevice, restoreHeight] { const auto future = m_scheduler.run([this, daemonAddress, trustedDaemon, upperTransactionLimit, isRecovering, isRecoveringFromDevice, restoreHeight, proxyAddress] {
bool success = init(daemonAddress, trustedDaemon, upperTransactionLimit, isRecovering, isRecoveringFromDevice, restoreHeight); bool success = init(daemonAddress, trustedDaemon, upperTransactionLimit, isRecovering, isRecoveringFromDevice, restoreHeight, proxyAddress);
if (success) if (success)
{ {
emit walletCreationHeightChanged(); emit walletCreationHeightChanged();
qDebug() << "init async finished - starting refresh"; qDebug() << "init async finished - starting refresh";
connected(true); connected(true);
m_walletImpl->startRefresh(); startRefresh();
} }
}); });
if (future.first) if (future.first)
@@ -423,41 +486,37 @@ bool Wallet::importKeyImages(const QString& path)
return m_walletImpl->importKeyImages(path.toStdString()); return m_walletImpl->importKeyImages(path.toStdString());
} }
bool Wallet::refresh() bool Wallet::refresh(bool historyAndSubaddresses /* = true */)
{ {
bool result = m_walletImpl->refresh(); refreshingSet(true);
m_history->refresh(currentSubaddressAccount()); const auto cleanup = sg::make_scope_guard([this]() noexcept {
m_subaddress->refresh(currentSubaddressAccount()); refreshingSet(false);
m_subaddressAccount->getAll(); });
if (result)
emit updated(); {
return result; QMutexLocker locker(&m_asyncMutex);
bool result = m_walletImpl->refresh();
if (historyAndSubaddresses)
{
m_history->refresh(currentSubaddressAccount());
m_subaddress->refresh(currentSubaddressAccount());
m_subaddressAccount->getAll();
}
if (result)
emit updated();
return result;
}
} }
void Wallet::refreshAsync() void Wallet::startRefresh()
{ {
qDebug() << "refresh async"; m_refreshEnabled = true;
m_walletImpl->refreshAsync();
} }
void Wallet::setAutoRefreshInterval(int seconds) void Wallet::pauseRefresh()
{ {
m_walletImpl->setAutoRefreshInterval(seconds); m_refreshEnabled = false;
}
int Wallet::autoRefreshInterval() const
{
return m_walletImpl->autoRefreshInterval();
}
void Wallet::startRefresh() const
{
m_walletImpl->startRefresh();
}
void Wallet::pauseRefresh() const
{
m_walletImpl->pauseRefresh();
} }
PendingTransaction *Wallet::createTransaction(const QString &dst_addr, const QString &payment_id, PendingTransaction *Wallet::createTransaction(const QString &dst_addr, const QString &payment_id,
@@ -831,6 +890,8 @@ bool Wallet::parse_uri(const QString &uri, QString &address, QString &payment_id
bool Wallet::rescanSpent() bool Wallet::rescanSpent()
{ {
QMutexLocker locker(&m_asyncMutex);
return m_walletImpl->rescanSpent(); return m_walletImpl->rescanSpent();
} }
@@ -998,6 +1059,8 @@ Wallet::Wallet(Monero::Wallet *w, QObject *parent)
, m_subaddressModel(nullptr) , m_subaddressModel(nullptr)
, m_subaddressAccount(nullptr) , m_subaddressAccount(nullptr)
, m_subaddressAccountModel(nullptr) , m_subaddressAccountModel(nullptr)
, m_refreshEnabled(false)
, m_refreshing(false)
, m_scheduler(this) , m_scheduler(this)
{ {
m_history = new TransactionHistory(m_walletImpl->history(), this); m_history = new TransactionHistory(m_walletImpl->history(), this);
@@ -1015,12 +1078,16 @@ Wallet::Wallet(Monero::Wallet *w, QObject *parent)
m_connectionStatusRunning = false; m_connectionStatusRunning = false;
m_daemonUsername = ""; m_daemonUsername = "";
m_daemonPassword = ""; m_daemonPassword = "";
startRefreshThread();
} }
Wallet::~Wallet() Wallet::~Wallet()
{ {
qDebug("~Wallet: Closing wallet"); qDebug("~Wallet: Closing wallet");
pauseRefresh();
m_walletImpl->stop();
m_scheduler.shutdownWaitForFinished(); m_scheduler.shutdownWaitForFinished();
delete m_addressBook; delete m_addressBook;
@@ -1047,3 +1114,32 @@ Wallet::~Wallet()
m_walletListener = NULL; m_walletListener = NULL;
qDebug("m_walletImpl deleted"); qDebug("m_walletImpl deleted");
} }
void Wallet::startRefreshThread()
{
const auto future = m_scheduler.run([this] {
constexpr const std::chrono::seconds refreshInterval{10};
constexpr const std::chrono::milliseconds intervalResolution{100};
auto last = std::chrono::steady_clock::now();
while (!m_scheduler.stopping())
{
if (m_refreshEnabled)
{
const auto now = std::chrono::steady_clock::now();
const auto elapsed = now - last;
if (elapsed >= refreshInterval)
{
refresh(false);
last = std::chrono::steady_clock::now();
}
}
std::this_thread::sleep_for(intervalResolution);
}
});
if (!future.first)
{
throw std::runtime_error("failed to start auto refresh thread");
}
}

View File

@@ -63,6 +63,7 @@ class Wallet : public QObject, public PassprasePrompter
{ {
Q_OBJECT Q_OBJECT
Q_PROPERTY(bool disconnected READ disconnected NOTIFY disconnectedChanged) Q_PROPERTY(bool disconnected READ disconnected NOTIFY disconnectedChanged)
Q_PROPERTY(bool refreshing READ refreshing NOTIFY refreshingChanged)
Q_PROPERTY(QString seed READ getSeed) Q_PROPERTY(QString seed READ getSeed)
Q_PROPERTY(QString seedLanguage READ getSeedLanguage) Q_PROPERTY(QString seedLanguage READ getSeedLanguage)
Q_PROPERTY(Status status READ status) Q_PROPERTY(Status status READ status)
@@ -87,6 +88,7 @@ class Wallet : public QObject, public PassprasePrompter
Q_PROPERTY(QString secretSpendKey READ getSecretSpendKey) Q_PROPERTY(QString secretSpendKey READ getSecretSpendKey)
Q_PROPERTY(QString publicSpendKey READ getPublicSpendKey) Q_PROPERTY(QString publicSpendKey READ getPublicSpendKey)
Q_PROPERTY(QString daemonLogPath READ getDaemonLogPath CONSTANT) Q_PROPERTY(QString daemonLogPath READ getDaemonLogPath CONSTANT)
Q_PROPERTY(QString proxyAddress READ getProxyAddress WRITE setProxyAddress NOTIFY proxyAddressChanged)
Q_PROPERTY(quint64 walletCreationHeight READ getWalletCreationHeight WRITE setWalletCreationHeight NOTIFY walletCreationHeightChanged) Q_PROPERTY(quint64 walletCreationHeight READ getWalletCreationHeight WRITE setWalletCreationHeight NOTIFY walletCreationHeightChanged)
public: public:
@@ -149,7 +151,14 @@ public:
Q_INVOKABLE void storeAsync(const QJSValue &callback, const QString &path = ""); Q_INVOKABLE void storeAsync(const QJSValue &callback, const QString &path = "");
//! initializes wallet asynchronously //! initializes wallet asynchronously
Q_INVOKABLE void initAsync(const QString &daemonAddress, bool trustedDaemon = false, quint64 upperTransactionLimit = 0, bool isRecovering = false, bool isRecoveringFromDevice = false, quint64 restoreHeight = 0); Q_INVOKABLE void initAsync(
const QString &daemonAddress,
bool trustedDaemon = false,
quint64 upperTransactionLimit = 0,
bool isRecovering = false,
bool isRecoveringFromDevice = false,
quint64 restoreHeight = 0,
const QString &proxyAddress = "");
// Set daemon rpc user/pass // Set daemon rpc user/pass
Q_INVOKABLE void setDaemonLogin(const QString &daemonUsername = "", const QString &daemonPassword = ""); Q_INVOKABLE void setDaemonLogin(const QString &daemonUsername = "", const QString &daemonPassword = "");
@@ -199,20 +208,11 @@ public:
Q_INVOKABLE bool importKeyImages(const QString& path); Q_INVOKABLE bool importKeyImages(const QString& path);
//! refreshes the wallet //! refreshes the wallet
Q_INVOKABLE bool refresh(); Q_INVOKABLE bool refresh(bool historyAndSubaddresses = true);
//! refreshes the wallet asynchronously
Q_INVOKABLE void refreshAsync();
//! setup auto-refresh interval in seconds
Q_INVOKABLE void setAutoRefreshInterval(int seconds);
//! return auto-refresh interval in seconds
Q_INVOKABLE int autoRefreshInterval() const;
// pause/resume refresh // pause/resume refresh
Q_INVOKABLE void startRefresh() const; Q_INVOKABLE void startRefresh();
Q_INVOKABLE void pauseRefresh() const; Q_INVOKABLE void pauseRefresh();
//! creates transaction //! creates transaction
Q_INVOKABLE PendingTransaction * createTransaction(const QString &dst_addr, const QString &payment_id, Q_INVOKABLE PendingTransaction * createTransaction(const QString &dst_addr, const QString &payment_id,
@@ -385,6 +385,8 @@ signals:
void connectionStatusChanged(int status) const; void connectionStatusChanged(int status) const;
void currentSubaddressAccountChanged() const; void currentSubaddressAccountChanged() const;
void disconnectedChanged() const; void disconnectedChanged() const;
void proxyAddressChanged() const;
void refreshingChanged() const;
private: private:
Wallet(QObject * parent = nullptr); Wallet(QObject * parent = nullptr);
@@ -402,10 +404,22 @@ private:
quint64 daemonBlockChainTargetHeight() const; quint64 daemonBlockChainTargetHeight() const;
//! initializes wallet //! initializes wallet
bool init(const QString &daemonAddress, bool trustedDaemon, quint64 upperTransactionLimit, bool isRecovering, bool isRecoveringFromDevice, quint64 restoreHeight); bool init(
const QString &daemonAddress,
bool trustedDaemon,
quint64 upperTransactionLimit,
bool isRecovering,
bool isRecoveringFromDevice,
quint64 restoreHeight,
const QString& proxyAddress);
bool disconnected() const; bool disconnected() const;
bool refreshing() const;
void refreshingSet(bool value);
void setConnectionStatus(ConnectionStatus value); void setConnectionStatus(ConnectionStatus value);
QString getProxyAddress() const;
void setProxyAddress(QString address);
void startRefreshThread();
private: private:
friend class WalletManager; friend class WalletManager;
@@ -436,13 +450,17 @@ private:
mutable SubaddressModel * m_subaddressModel; mutable SubaddressModel * m_subaddressModel;
SubaddressAccount * m_subaddressAccount; SubaddressAccount * m_subaddressAccount;
mutable SubaddressAccountModel * m_subaddressAccountModel; mutable SubaddressAccountModel * m_subaddressAccountModel;
QMutex m_asyncMutex;
QMutex m_connectionStatusMutex; QMutex m_connectionStatusMutex;
bool m_connectionStatusRunning; bool m_connectionStatusRunning;
QString m_daemonUsername; QString m_daemonUsername;
QString m_daemonPassword; QString m_daemonPassword;
QString m_proxyAddress;
mutable QMutex m_proxyMutex;
std::atomic<bool> m_refreshEnabled;
std::atomic<bool> m_refreshing;
WalletListenerImpl *m_walletListener; WalletListenerImpl *m_walletListener;
FutureScheduler m_scheduler; FutureScheduler m_scheduler;
QMutex m_storeMutex;
}; };

View File

@@ -561,3 +561,26 @@ void WalletManager::onPassphraseEntered(const QString &passphrase, bool enter_on
m_passphraseReceiver->onPassphraseEntered(passphrase, enter_on_device, entry_abort); m_passphraseReceiver->onPassphraseEntered(passphrase, enter_on_device, entry_abort);
} }
} }
QString WalletManager::proxyAddress() const
{
QMutexLocker locker(&m_proxyMutex);
return m_proxyAddress;
}
void WalletManager::setProxyAddress(QString address)
{
m_scheduler.run([this, address] {
{
QMutexLocker locker(&m_proxyMutex);
if (!m_pimpl->setProxy(address.toStdString()))
{
qCritical() << "Failed to set proxy address" << address;
}
m_proxyAddress = std::move(address);
}
emit proxyAddressChanged();
});
}

View File

@@ -49,6 +49,7 @@ class WalletManager : public QObject, public PassprasePrompter
{ {
Q_OBJECT Q_OBJECT
Q_PROPERTY(bool connected READ connected) Q_PROPERTY(bool connected READ connected)
Q_PROPERTY(QString proxyAddress READ proxyAddress WRITE setProxyAddress NOTIFY proxyAddressChanged)
public: public:
explicit WalletManager(QObject *parent = 0); explicit WalletManager(QObject *parent = 0);
@@ -191,6 +192,9 @@ public:
Q_INVOKABLE void onPassphraseEntered(const QString &passphrase, bool enter_on_device, bool entry_abort=false); Q_INVOKABLE void onPassphraseEntered(const QString &passphrase, bool enter_on_device, bool entry_abort=false);
virtual void onWalletPassphraseNeeded(bool on_device) override; virtual void onWalletPassphraseNeeded(bool on_device) override;
QString proxyAddress() const;
void setProxyAddress(QString address);
signals: signals:
void walletOpened(Wallet * wallet); void walletOpened(Wallet * wallet);
@@ -205,6 +209,7 @@ signals:
const QString &firstSigner, const QString &firstSigner,
const QString &secondSigner) const; const QString &secondSigner) const;
void miningStatus(bool isMining) const; void miningStatus(bool isMining) const;
void proxyAddressChanged() const;
public slots: public slots:
private: private:
@@ -218,6 +223,8 @@ private:
QPointer<Wallet> m_currentWallet; QPointer<Wallet> m_currentWallet;
PassphraseReceiver * m_passphraseReceiver; PassphraseReceiver * m_passphraseReceiver;
QMutex m_mutex_passphraseReceiver; QMutex m_mutex_passphraseReceiver;
QString m_proxyAddress;
mutable QMutex m_proxyMutex;
FutureScheduler m_scheduler; FutureScheduler m_scheduler;
}; };

View File

@@ -26,6 +26,8 @@
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "Logger.h"
#include <QCoreApplication> #include <QCoreApplication>
#include <QStandardPaths> #include <QStandardPaths>
#include <QFileInfo> #include <QFileInfo>
@@ -33,9 +35,11 @@
#include <QDir> #include <QDir>
#include <QDebug> #include <QDebug>
#include "Logger.h" #include <easylogging++.h>
#include <wallet/api/wallet2_api.h>
#include "qt/MoneroSettings.h"
#include "qt/TailsOS.h" #include "qt/TailsOS.h"
#include "wallet/api/wallet2_api.h"
// default log path by OS (should be writable) // default log path by OS (should be writable)
static const QString defaultLogName = "monero-wallet-gui.log"; static const QString defaultLogName = "monero-wallet-gui.log";
@@ -63,15 +67,21 @@ static const QString defaultLogName = "monero-wallet-gui.log";
// return the absolute path of the logfile and ensure path folder exists // return the absolute path of the logfile and ensure path folder exists
const QString getLogPath(const QString logPath) const QString getLogPath(const QString &userDefinedLogFilePath, bool portable)
{ {
const QFileInfo fi(logPath); const QFileInfo fi(userDefinedLogFilePath);
if (!userDefinedLogFilePath.isEmpty() && !fi.isDir())
{
return fi.absoluteFilePath();
}
if (portable)
{
return QDir(MoneroSettings::portableFolderName()).filePath(defaultLogName);
}
if(TailsOS::detect() && TailsOS::usePersistence) if(TailsOS::detect() && TailsOS::usePersistence)
return QDir::homePath() + "/Persistent/Monero/logs/" + defaultLogName; return QDir::homePath() + "/Persistent/Monero/logs/" + defaultLogName;
if(!logPath.isEmpty() && !fi.isDir())
return fi.absoluteFilePath();
else { else {
QDir appDir(osPath + "/" + appFolder); QDir appDir(osPath + "/" + appFolder);
if(!appDir.exists()) if(!appDir.exists())
@@ -98,3 +108,26 @@ void messageHandler(QtMsgType type, const QMessageLogContext &context, const QSt
} }
} }
Logger::Logger(QCoreApplication &parent, QString userDefinedLogFilePath)
: QObject(&parent)
, m_applicationFilePath(parent.applicationFilePath().toStdString())
, m_userDefinedLogFilePath(std::move(userDefinedLogFilePath))
{
el::Configurations c;
c.setGlobally(el::ConfigurationType::ToFile, "false");
c.setGlobally(el::ConfigurationType::ToStandardOutput, "true");
el::Loggers::setDefaultConfigurations(c, true);
}
void Logger::resetLogFilePath(bool portable)
{
m_logFilePath = QDir::toNativeSeparators(getLogPath(m_userDefinedLogFilePath, portable));
Monero::Wallet::init(m_applicationFilePath.c_str(), "monero-wallet-gui", m_logFilePath.toStdString(), true);
qInstallMessageHandler(messageHandler);
emit logFilePathChanged();
}
QString Logger::logFilePath() const
{
return m_logFilePath;
}

View File

@@ -26,11 +26,28 @@
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef LOGGER_H #pragma once
#define LOGGER_H
const QString getLogPath(const QString logPath); #include <QCoreApplication>
void messageHandler(QtMsgType type, const QMessageLogContext &context, const QString &message); #include <QObject>
#include <QString>
#endif // LOGGER_H class Logger : public QObject
{
Q_OBJECT
Q_PROPERTY(QString logFilePath READ logFilePath NOTIFY logFilePathChanged)
public:
Logger(QCoreApplication &parent, QString userDefinedLogFilePath);
Q_INVOKABLE void resetLogFilePath(bool portable);
QString logFilePath() const;
signals:
void logFilePathChanged() const;
private:
const std::string m_applicationFilePath;
QString m_logFilePath;
const QString m_userDefinedLogFilePath;
};

View File

@@ -61,7 +61,6 @@
#include "model/SubaddressModel.h" #include "model/SubaddressModel.h"
#include "SubaddressAccount.h" #include "SubaddressAccount.h"
#include "model/SubaddressAccountModel.h" #include "model/SubaddressAccountModel.h"
#include "wallet/api/wallet2_api.h"
#include "Logger.h" #include "Logger.h"
#include "MainApp.h" #include "MainApp.h"
#include "qt/downloader.h" #include "qt/downloader.h"
@@ -81,6 +80,8 @@
#if defined(Q_OS_WIN) #if defined(Q_OS_WIN)
#include <QOpenGLContext> #include <QOpenGLContext>
#elif defined(Q_OS_MACOS)
#include "qt/macoshelper.h"
#endif #endif
#ifdef WITH_SCANNER #ifdef WITH_SCANNER
@@ -256,6 +257,8 @@ Verify update binary using 'shasum'-compatible (SHA256 algo) output signed by tw
QCommandLineOption disableCheckUpdatesOption("disable-check-updates", "Disable automatic check for updates."); QCommandLineOption disableCheckUpdatesOption("disable-check-updates", "Disable automatic check for updates.");
parser.addOption(disableCheckUpdatesOption); parser.addOption(disableCheckUpdatesOption);
QCommandLineOption socksProxyOption("socks5-proxy", "Enable socks5 proxy. Used for remote node connection (advanced mode), updates downloading and fetching price sources.", "address:port");
parser.addOption(socksProxyOption);
QCommandLineOption testQmlOption("test-qml"); QCommandLineOption testQmlOption("test-qml");
testQmlOption.setFlags(QCommandLineOption::HiddenFromHelp); testQmlOption.setFlags(QCommandLineOption::HiddenFromHelp);
parser.addOption(logPathOption); parser.addOption(logPathOption);
@@ -265,10 +268,7 @@ Verify update binary using 'shasum'-compatible (SHA256 algo) output signed by tw
Monero::Utils::onStartup(); Monero::Utils::onStartup();
// Log settings Logger logger(app, parser.value(logPathOption));
const QString logPath = QDir::toNativeSeparators(getLogPath(parser.value(logPathOption)));
Monero::Wallet::init(argv[0], "monero-wallet-gui", logPath.toStdString().c_str(), true);
qInstallMessageHandler(messageHandler);
// loglevel is configured in main.qml. Anything lower than // loglevel is configured in main.qml. Anything lower than
// qWarning is not shown here unless MONERO_LOG_LEVEL env var is set // qWarning is not shown here unless MONERO_LOG_LEVEL env var is set
@@ -277,7 +277,7 @@ Verify update binary using 'shasum'-compatible (SHA256 algo) output signed by tw
if (logLevelOk && logLevel >= 0 && logLevel <= Monero::WalletManagerFactory::LogLevel_Max){ if (logLevelOk && logLevel >= 0 && logLevel <= Monero::WalletManagerFactory::LogLevel_Max){
Monero::WalletManagerFactory::setLogLevel(logLevel); Monero::WalletManagerFactory::setLogLevel(logLevel);
} }
qWarning().noquote() << "app startd" << "(log: " + logPath + ")"; qWarning().noquote() << "app startd" << "(log: " + logger.logFilePath() + ")";
if (parser.isSet(verifyUpdateOption)) if (parser.isSet(verifyUpdateOption))
{ {
@@ -326,6 +326,10 @@ Verify update binary using 'shasum'-compatible (SHA256 algo) output signed by tw
// start listening // start listening
QTimer::singleShot(0, ipc, SLOT(bind())); QTimer::singleShot(0, ipc, SLOT(bind()));
#if defined(Q_OS_MACOS)
QDir::setCurrent(QDir(MacOSHelper::bundlePath() + QDir::separator() + "..").canonicalPath());
#endif
// screen settings // screen settings
// Mobile is designed on 128dpi // Mobile is designed on 128dpi
qreal ref_dpi = 128; qreal ref_dpi = 128;
@@ -357,6 +361,7 @@ Verify update binary using 'shasum'-compatible (SHA256 algo) output signed by tw
// registering types for QML // registering types for QML
qmlRegisterType<clipboardAdapter>("moneroComponents.Clipboard", 1, 0, "Clipboard"); qmlRegisterType<clipboardAdapter>("moneroComponents.Clipboard", 1, 0, "Clipboard");
qmlRegisterType<Downloader>("moneroComponents.Downloader", 1, 0, "Downloader"); qmlRegisterType<Downloader>("moneroComponents.Downloader", 1, 0, "Downloader");
qmlRegisterType<Network>("moneroComponents.Network", 1, 0, "Network");
qmlRegisterType<WalletKeysFilesModel>("moneroComponents.WalletKeysFilesModel", 1, 0, "WalletKeysFilesModel"); qmlRegisterType<WalletKeysFilesModel>("moneroComponents.WalletKeysFilesModel", 1, 0, "WalletKeysFilesModel");
qmlRegisterType<WalletManager>("moneroComponents.WalletManager", 1, 0, "WalletManager"); qmlRegisterType<WalletManager>("moneroComponents.WalletManager", 1, 0, "WalletManager");
@@ -437,14 +442,14 @@ Verify update binary using 'shasum'-compatible (SHA256 algo) output signed by tw
engine.addImageProvider(QLatin1String("qrcode"), new QRCodeImageProvider()); engine.addImageProvider(QLatin1String("qrcode"), new QRCodeImageProvider());
engine.rootContext()->setContextProperty("logger", &logger);
engine.rootContext()->setContextProperty("mainApp", &app); engine.rootContext()->setContextProperty("mainApp", &app);
engine.rootContext()->setContextProperty("IPC", ipc); engine.rootContext()->setContextProperty("IPC", ipc);
engine.rootContext()->setContextProperty("qtRuntimeVersion", qVersion()); engine.rootContext()->setContextProperty("qtRuntimeVersion", qVersion());
engine.rootContext()->setContextProperty("walletLogPath", logPath);
engine.rootContext()->setContextProperty("tailsUsePersistence", TailsOS::usePersistence); engine.rootContext()->setContextProperty("tailsUsePersistence", TailsOS::usePersistence);
// Exclude daemon manager from IOS // Exclude daemon manager from IOS
@@ -482,6 +487,8 @@ Verify update binary using 'shasum'-compatible (SHA256 algo) output signed by tw
engine.rootContext()->setContextProperty("applicationDirectory", QApplication::applicationDirPath()); engine.rootContext()->setContextProperty("applicationDirectory", QApplication::applicationDirPath());
engine.rootContext()->setContextProperty("idealThreadCount", QThread::idealThreadCount()); engine.rootContext()->setContextProperty("idealThreadCount", QThread::idealThreadCount());
engine.rootContext()->setContextProperty("disableCheckUpdatesFlag", parser.isSet(disableCheckUpdatesOption)); engine.rootContext()->setContextProperty("disableCheckUpdatesFlag", parser.isSet(disableCheckUpdatesOption));
engine.rootContext()->setContextProperty("socksProxyFlag", parser.value(socksProxyOption));
engine.rootContext()->setContextProperty("socksProxyFlagSet", parser.isSet(socksProxyOption));
bool builtWithScanner = false; bool builtWithScanner = false;
#ifdef WITH_SCANNER #ifdef WITH_SCANNER
@@ -491,9 +498,6 @@ Verify update binary using 'shasum'-compatible (SHA256 algo) output signed by tw
engine.rootContext()->setContextProperty("moneroVersion", MONERO_VERSION_FULL); engine.rootContext()->setContextProperty("moneroVersion", MONERO_VERSION_FULL);
Network network;
engine.rootContext()->setContextProperty("Network", &network);
// Load main window (context properties needs to be defined obove this line) // Load main window (context properties needs to be defined obove this line)
engine.load(QUrl(QStringLiteral("qrc:///main.qml"))); engine.load(QUrl(QStringLiteral("qrc:///main.qml")));
if (engine.rootObjects().isEmpty()) if (engine.rootObjects().isEmpty())

View File

@@ -41,7 +41,7 @@
#include "qt/macoshelper.h" #include "qt/macoshelper.h"
#endif #endif
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
#include <Shlobj.h> #include <shlobj.h>
#include <windows.h> #include <windows.h>
#endif #endif
#if defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID) #if defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID)
@@ -92,22 +92,23 @@ QString OSHelper::downloadLocation() const
bool OSHelper::openContainingFolder(const QString &filePath) const bool OSHelper::openContainingFolder(const QString &filePath) const
{ {
QString canonicalFilePath = QFileInfo(filePath).canonicalFilePath();
#if defined(Q_OS_WIN) #if defined(Q_OS_WIN)
if (openFolderAndSelectItem(QDir::toNativeSeparators(filePath))) if (openFolderAndSelectItem(QDir::toNativeSeparators(canonicalFilePath)))
{ {
return true; return true;
} }
#elif defined(Q_OS_MAC) #elif defined(Q_OS_MAC)
if (MacOSHelper::openFolderAndSelectItem(QUrl::fromLocalFile(filePath))) if (MacOSHelper::openFolderAndSelectItem(QUrl::fromLocalFile(canonicalFilePath)))
{ {
return true; return true;
} }
#endif #endif
QUrl url = QUrl::fromLocalFile(QFileInfo(filePath).absolutePath()); QUrl url = QUrl::fromLocalFile(canonicalFilePath);
if (!url.isValid()) if (!url.isValid())
{ {
qWarning() << "Malformed file path" << filePath << url.errorString(); qWarning() << "Malformed file path" << canonicalFilePath << url.errorString();
return false; return false;
} }
return QDesktopServices::openUrl(url); return QDesktopServices::openUrl(url);

View File

@@ -65,6 +65,11 @@ QPair<bool, QFuture<QJSValueList>> FutureScheduler::run(std::function<QJSValueLi
}); });
} }
bool FutureScheduler::stopping() const noexcept
{
return Stopping;
}
bool FutureScheduler::add() noexcept bool FutureScheduler::add() noexcept
{ {
QMutexLocker locker(&Mutex); QMutexLocker locker(&Mutex);

View File

@@ -23,6 +23,7 @@ public:
QPair<bool, QFuture<void>> run(std::function<void()> function) noexcept; QPair<bool, QFuture<void>> run(std::function<void()> function) noexcept;
QPair<bool, QFuture<QJSValueList>> run(std::function<QJSValueList()> function, const QJSValue &callback); QPair<bool, QFuture<QJSValueList>> run(std::function<QJSValueList()> function, const QJSValue &callback);
bool stopping() const noexcept;
private: private:
bool add() noexcept; bool add() noexcept;
@@ -59,7 +60,7 @@ private:
size_t Alive; size_t Alive;
QWaitCondition Condition; QWaitCondition Condition;
QMutex Mutex; QMutex Mutex;
bool Stopping; std::atomic<bool> Stopping;
}; };
#endif // FUTURE_SCHEDULER_H #endif // FUTURE_SCHEDULER_H

View File

@@ -46,7 +46,7 @@
WalletKeysFiles::WalletKeysFiles(const QFileInfo &info, quint8 networkType, QString address) WalletKeysFiles::WalletKeysFiles(const QFileInfo &info, quint8 networkType, QString address)
: m_fileName(info.fileName()) : m_fileName(info.fileName())
, m_modified(info.lastModified().toSecsSinceEpoch()) , m_modified(info.lastModified().toSecsSinceEpoch())
, m_path(QDir::toNativeSeparators(info.absoluteFilePath())) , m_path(QDir::toNativeSeparators(info.filePath()))
, m_networkType(networkType) , m_networkType(networkType)
, m_address(std::move(address)) , m_address(std::move(address))
{ {
@@ -108,8 +108,10 @@ void WalletKeysFilesModel::refresh(const QString &moneroAccountsDir)
void WalletKeysFilesModel::findWallets(const QString &moneroAccountsDir) void WalletKeysFilesModel::findWallets(const QString &moneroAccountsDir)
{ {
QDirIterator it(moneroAccountsDir, QDirIterator::Subdirectories); QDirIterator it(moneroAccountsDir, QDirIterator::Subdirectories);
for (; it.hasNext(); it.next()) while (it.hasNext())
{ {
it.next();
QFileInfo keysFileinfo = it.fileInfo(); QFileInfo keysFileinfo = it.fileInfo();
constexpr const char keysFileExtension[] = "keys"; constexpr const char keysFileExtension[] = "keys";
@@ -118,7 +120,7 @@ void WalletKeysFilesModel::findWallets(const QString &moneroAccountsDir)
continue; continue;
} }
QString wallet(keysFileinfo.absolutePath() + QDir::separator() + keysFileinfo.baseName()); QString wallet(keysFileinfo.path() + QDir::separator() + keysFileinfo.baseName());
quint8 networkType = NetworkType::MAINNET; quint8 networkType = NetworkType::MAINNET;
QString address = QString(""); QString address = QString("");

View File

@@ -134,12 +134,13 @@ QVariant MoneroSettings::readProperty(const QMetaProperty &property) const
void MoneroSettings::init() void MoneroSettings::init()
{ {
if (!this->m_initialized) { if (!this->m_initialized) {
this->m_settings = this->m_fileName.isEmpty() ? new QSettings() : new QSettings(this->m_fileName, QSettings::IniFormat); this->m_settings = portableConfigExists() ? portableSettings() : unportableSettings();
#ifdef QT_DEBUG #ifdef QT_DEBUG
qDebug() << "QQmlSettings: stored at" << this->m_settings->fileName(); qDebug() << "QQmlSettings: stored at" << this->m_settings->fileName();
#endif #endif
this->load(); this->load();
this->m_initialized = true; this->m_initialized = true;
emit portableChanged();
} }
} }
@@ -148,11 +149,16 @@ void MoneroSettings::reset()
if (this->m_initialized && this->m_settings && !this->m_changedProperties.isEmpty()) if (this->m_initialized && this->m_settings && !this->m_changedProperties.isEmpty())
this->store(); this->store();
if (this->m_settings) if (this->m_settings)
delete this->m_settings; this->m_settings.reset();
} }
void MoneroSettings::store() void MoneroSettings::store()
{ {
if (!m_writable)
{
return;
}
QHash<const char *, QVariant>::const_iterator it = this->m_changedProperties.constBegin(); QHash<const char *, QVariant>::const_iterator it = this->m_changedProperties.constBegin();
while (it != this->m_changedProperties.constEnd()) { while (it != this->m_changedProperties.constEnd()) {
@@ -168,6 +174,58 @@ void MoneroSettings::store()
this->m_changedProperties.clear(); this->m_changedProperties.clear();
} }
bool MoneroSettings::portable() const
{
return this->m_settings && this->m_settings->fileName() == portableFilePath();
}
bool MoneroSettings::portableConfigExists() const
{
QFileInfo info(portableFilePath());
return info.exists() && info.isFile();
}
QString MoneroSettings::portableFilePath() const
{
static QString filename(QDir(portableFolderName()).absoluteFilePath("settings.ini"));
return filename;
}
QString MoneroSettings::portableFolderName()
{
return "monero-storage";
}
std::unique_ptr<QSettings> MoneroSettings::portableSettings() const
{
return std::unique_ptr<QSettings>(new QSettings(portableFilePath(), QSettings::IniFormat));
}
std::unique_ptr<QSettings> MoneroSettings::unportableSettings() const
{
if (this->m_fileName.isEmpty())
{
return std::unique_ptr<QSettings>(new QSettings());
}
return std::unique_ptr<QSettings>(new QSettings(this->m_fileName, QSettings::IniFormat));
}
void MoneroSettings::swap(std::unique_ptr<QSettings> newSettings)
{
const QMetaObject *mo = this->metaObject();
const int count = mo->propertyCount();
for (int offset = mo->propertyOffset(); offset < count; ++offset)
{
const QMetaProperty &property = mo->property(offset);
const QVariant value = readProperty(property);
newSettings->setValue(property.name(), value);
}
this->m_settings.swap(newSettings);
this->m_settings->sync();
emit portableChanged();
}
void MoneroSettings::setFileName(const QString &fileName) void MoneroSettings::setFileName(const QString &fileName)
{ {
if (fileName != this->m_fileName) { if (fileName != this->m_fileName) {
@@ -183,6 +241,30 @@ QString MoneroSettings::fileName() const
return this->m_fileName; return this->m_fileName;
} }
bool MoneroSettings::setPortable(bool enabled)
{
std::unique_ptr<QSettings> newSettings = enabled ? portableSettings() : unportableSettings();
if (newSettings->status() != QSettings::NoError)
{
return false;
}
setWritable(true);
swap(std::move(newSettings));
if (!enabled)
{
QFile::remove(portableFilePath());
}
return true;
}
void MoneroSettings::setWritable(bool enabled)
{
m_writable = enabled;
}
void MoneroSettings::timerEvent(QTimerEvent *event) void MoneroSettings::timerEvent(QTimerEvent *event)
{ {
if (event->timerId() == this->m_timerId) { if (event->timerId() == this->m_timerId) {

View File

@@ -36,6 +36,8 @@
#ifndef MONEROSETTINGS_H #ifndef MONEROSETTINGS_H
#define MONEROSETTINGS_H #define MONEROSETTINGS_H
#include <memory>
#include <QtQml/qqmlparserstatus.h> #include <QtQml/qqmlparserstatus.h>
#include <QGuiApplication> #include <QGuiApplication>
#include <QClipboard> #include <QClipboard>
@@ -50,15 +52,25 @@ class MoneroSettings : public QObject, public QQmlParserStatus
Q_OBJECT Q_OBJECT
Q_INTERFACES(QQmlParserStatus) Q_INTERFACES(QQmlParserStatus)
Q_PROPERTY(QString fileName READ fileName WRITE setFileName FINAL) Q_PROPERTY(QString fileName READ fileName WRITE setFileName FINAL)
Q_PROPERTY(bool portable READ portable NOTIFY portableChanged)
Q_PROPERTY(QString portableFolderName READ portableFolderName CONSTANT)
public: public:
explicit MoneroSettings(QObject *parent = nullptr); explicit MoneroSettings(QObject *parent = nullptr);
QString fileName() const; QString fileName() const;
void setFileName(const QString &fileName); void setFileName(const QString &fileName);
Q_INVOKABLE bool setPortable(bool enabled);
Q_INVOKABLE void setWritable(bool enabled);
static QString portableFolderName();
public slots: public slots:
void _q_propertyChanged(); void _q_propertyChanged();
signals:
void portableChanged() const;
protected: protected:
void timerEvent(QTimerEvent *event) override; void timerEvent(QTimerEvent *event) override;
void classBegin() override; void classBegin() override;
@@ -71,10 +83,18 @@ private:
void load(); void load();
void store(); void store();
bool portable() const;
bool portableConfigExists() const;
QString portableFilePath() const;
std::unique_ptr<QSettings> portableSettings() const;
std::unique_ptr<QSettings> unportableSettings() const;
void swap(std::unique_ptr<QSettings> newSettings);
QHash<const char *, QVariant> m_changedProperties; QHash<const char *, QVariant> m_changedProperties;
QSettings *m_settings = NULL; std::unique_ptr<QSettings> m_settings;
QString m_fileName = QString(""); QString m_fileName = QString("");
bool m_initialized = false; bool m_initialized = false;
bool m_writable = true;
int m_timerId = 0; int m_timerId = 0;
}; };

View File

@@ -220,3 +220,23 @@ quint64 Downloader::total() const
{ {
return m_httpClient->contentLength(); return m_httpClient->contentLength();
} }
QString Downloader::proxyAddress() const
{
QMutexLocker locker(&m_proxyMutex);
return m_proxyAddress;
}
void Downloader::setProxyAddress(QString address)
{
m_scheduler.run([this, address] {
if (!m_httpClient->set_proxy(address.toStdString()))
{
qCritical() << "Failed to set proxy address" << address;
}
QMutexLocker locker(&m_proxyMutex);
m_proxyAddress = address;
emit proxyAddressChanged();
});
}

View File

@@ -38,6 +38,7 @@ class Downloader : public QObject
Q_PROPERTY(bool active READ active NOTIFY activeChanged); Q_PROPERTY(bool active READ active NOTIFY activeChanged);
Q_PROPERTY(quint64 loaded READ loaded NOTIFY loadedChanged); Q_PROPERTY(quint64 loaded READ loaded NOTIFY loadedChanged);
Q_PROPERTY(quint64 total READ total NOTIFY totalChanged); Q_PROPERTY(quint64 total READ total NOTIFY totalChanged);
Q_PROPERTY(QString proxyAddress READ proxyAddress WRITE setProxyAddress NOTIFY proxyAddressChanged)
public: public:
Downloader(QObject *parent = nullptr); Downloader(QObject *parent = nullptr);
@@ -51,11 +52,14 @@ signals:
void activeChanged() const; void activeChanged() const;
void loadedChanged() const; void loadedChanged() const;
void totalChanged() const; void totalChanged() const;
void proxyAddressChanged() const;
private: private:
bool active() const; bool active() const;
quint64 loaded() const; quint64 loaded() const;
quint64 total() const; quint64 total() const;
QString proxyAddress() const;
void setProxyAddress(QString address);
private: private:
bool m_active; bool m_active;
@@ -63,5 +67,7 @@ private:
std::shared_ptr<HttpClient> m_httpClient; std::shared_ptr<HttpClient> m_httpClient;
mutable QReadWriteLock m_mutex; mutable QReadWriteLock m_mutex;
Network m_network; Network m_network;
QString m_proxyAddress;
mutable QMutex m_proxyMutex;
mutable FutureScheduler m_scheduler; mutable FutureScheduler m_scheduler;
}; };

View File

@@ -76,7 +76,7 @@ bool IPC::saveCommand(QString cmdString){
QLocalSocket ls; QLocalSocket ls;
QByteArray buffer; QByteArray buffer;
buffer = buffer.append(cmdString); buffer = buffer.append(cmdString.toUtf8());
QString socketFilePath = this->socketFile().filePath(); QString socketFilePath = this->socketFile().filePath();
ls.connectToServer(socketFilePath, QIODevice::WriteOnly); ls.connectToServer(socketFilePath, QIODevice::WriteOnly);

View File

@@ -36,6 +36,7 @@ class MacOSHelper
public: public:
static bool isCapsLock(); static bool isCapsLock();
static bool openFolderAndSelectItem(const QUrl &path); static bool openFolderAndSelectItem(const QUrl &path);
static QString bundlePath();
}; };
#endif //MACOSHELPER_H #endif //MACOSHELPER_H

View File

@@ -55,3 +55,18 @@ bool MacOSHelper::openFolderAndSelectItem(const QUrl &path)
[[NSWorkspace sharedWorkspace] activateFileViewerSelectingURLs:fileURLs]; [[NSWorkspace sharedWorkspace] activateFileViewerSelectingURLs:fileURLs];
return true; return true;
} }
QString MacOSHelper::bundlePath()
{
NSBundle *main = [NSBundle mainBundle];
if (!main)
{
return {};
}
NSString *bundlePathString = [main bundlePath];
if (!bundlePathString)
{
return {};
}
return QString::fromCFString(reinterpret_cast<const CFStringRef>(bundlePathString));
}

View File

@@ -35,7 +35,7 @@
using epee::net_utils::http::fields_list; using epee::net_utils::http::fields_list;
using epee::net_utils::http::http_response_info; using epee::net_utils::http::http_response_info;
using epee::net_utils::http::http_simple_client; using epee::net_utils::http::abstract_http_client;
HttpClient::HttpClient(QObject *parent /* = nullptr */) HttpClient::HttpClient(QObject *parent /* = nullptr */)
: QObject(parent) : QObject(parent)
@@ -78,7 +78,7 @@ bool HttpClient::on_header(const http_response_info &headers)
m_received = 0; m_received = 0;
emit receivedChanged(); emit receivedChanged();
return http_simple_client::on_header(headers); return net::http::client::on_header(headers);
} }
bool HttpClient::handle_target_data(std::string &piece_of_transfer) bool HttpClient::handle_target_data(std::string &piece_of_transfer)
@@ -91,7 +91,7 @@ bool HttpClient::handle_target_data(std::string &piece_of_transfer)
m_received += piece_of_transfer.size(); m_received += piece_of_transfer.size();
emit receivedChanged(); emit receivedChanged();
return http_simple_client::handle_target_data(piece_of_transfer); return net::http::client::handle_target_data(piece_of_transfer);
} }
Network::Network(QObject *parent) Network::Network(QObject *parent)
@@ -104,8 +104,12 @@ void Network::get(const QString &url, const QJSValue &callback, const QString &c
{ {
m_scheduler.run( m_scheduler.run(
[this, url, contentType] { [this, url, contentType] {
std::shared_ptr<abstract_http_client> httpClient = newClient();
if (httpClient.get() == nullptr)
{
return QJSValueList({url, "", "failed to initialize a client"});
}
std::string response; std::string response;
std::shared_ptr<http_simple_client> httpClient(new http_simple_client());
QString error = get(httpClient, url, response, contentType); QString error = get(httpClient, url, response, contentType);
return QJSValueList({url, QString::fromStdString(response), error}); return QJSValueList({url, QString::fromStdString(response), error});
}, },
@@ -120,7 +124,12 @@ void Network::getJSON(const QString &url, const QJSValue &callback) const
std::string Network::get(const QString &url, const QString &contentType /* = {} */) const std::string Network::get(const QString &url, const QString &contentType /* = {} */) const
{ {
std::string response; std::string response;
QString error = get(std::shared_ptr<http_simple_client>(new http_simple_client()), url, response, contentType); std::shared_ptr<abstract_http_client> httpClient = newClient();
if (httpClient.get() == nullptr)
{
throw std::runtime_error("failed to initialize a client");
}
QString error = get(httpClient, url, response, contentType);
if (!error.isEmpty()) if (!error.isEmpty())
{ {
throw std::runtime_error(QString("failed to fetch %1: %2").arg(url).arg(error).toStdString()); throw std::runtime_error(QString("failed to fetch %1: %2").arg(url).arg(error).toStdString());
@@ -129,7 +138,7 @@ std::string Network::get(const QString &url, const QString &contentType /* = {}
} }
QString Network::get( QString Network::get(
std::shared_ptr<http_simple_client> httpClient, std::shared_ptr<abstract_http_client> httpClient,
const QString &url, const QString &url,
std::string &response, std::string &response,
const QString &contentType /* = {} */) const const QString &contentType /* = {} */) const
@@ -163,3 +172,13 @@ QString Network::get(
response = std::move(pri->m_body); response = std::move(pri->m_body);
return {}; return {};
} }
std::shared_ptr<abstract_http_client> Network::newClient() const
{
std::shared_ptr<abstract_http_client> client(new net::http::client());
if (!client->set_proxy(m_proxyAddress.toStdString()))
{
throw std::runtime_error("failed to set proxy address");
}
return client;
}

View File

@@ -35,12 +35,12 @@
#pragma GCC diagnostic push #pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-parameter" #pragma GCC diagnostic ignored "-Wunused-parameter"
#pragma GCC diagnostic ignored "-Wreorder" #pragma GCC diagnostic ignored "-Wreorder"
#include <net/http_client.h> #include <net/http.h>
#pragma GCC diagnostic pop #pragma GCC diagnostic pop
#include "FutureScheduler.h" #include "FutureScheduler.h"
class HttpClient : public QObject, public epee::net_utils::http::http_simple_client class HttpClient : public QObject, public net::http::client
{ {
Q_OBJECT Q_OBJECT
Q_PROPERTY(quint64 contentLength READ contentLength NOTIFY contentLengthChanged); Q_PROPERTY(quint64 contentLength READ contentLength NOTIFY contentLengthChanged);
@@ -70,6 +70,8 @@ private:
class Network : public QObject class Network : public QObject
{ {
Q_OBJECT Q_OBJECT
Q_PROPERTY(QString proxyAddress MEMBER m_proxyAddress NOTIFY proxyAddressChanged)
public: public:
Network(QObject *parent = nullptr); Network(QObject *parent = nullptr);
@@ -79,11 +81,18 @@ public:
std::string get(const QString &url, const QString &contentType = {}) const; std::string get(const QString &url, const QString &contentType = {}) const;
QString get( QString get(
std::shared_ptr<epee::net_utils::http::http_simple_client> httpClient, std::shared_ptr<epee::net_utils::http::abstract_http_client> httpClient,
const QString &url, const QString &url,
std::string &response, std::string &response,
const QString &contentType = {}) const; const QString &contentType = {}) const;
signals:
void proxyAddressChanged() const;
private: private:
std::shared_ptr<epee::net_utils::http::abstract_http_client> newClient() const;
private:
QString m_proxyAddress;
mutable FutureScheduler m_scheduler; mutable FutureScheduler m_scheduler;
}; };

View File

@@ -1 +0,0 @@
qt5_add_resources(RESOURCE_FILES *.qrc)

View File

@@ -2,7 +2,7 @@ find_package(Qt5Core REQUIRED)
find_package(Qt5LinguistTools QUIET) find_package(Qt5LinguistTools QUIET)
if(NOT Qt5_LRELEASE_EXECUTABLE) if(NOT Qt5_LRELEASE_EXECUTABLE)
find_program(Qt5_LRELEASE_EXECUTABLE lrelease REQUIRED) find_program(Qt5_LRELEASE_EXECUTABLE lrelease REQUIRED CMAKE_FIND_ROOT_PATH_BOTH)
endif() endif()
file(GLOB TS_FILES *.ts) file(GLOB TS_FILES *.ts)

View File

@@ -4,53 +4,53 @@
<context> <context>
<name>Account</name> <name>Account</name>
<message> <message>
<location filename="../pages/Account.qml" line="55"/> <location filename="../pages/Account.qml" line="57"/>
<source>Set the label of the selected account:</source> <source>Set the label of the selected account:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="87"/> <location filename="../pages/Account.qml" line="89"/>
<source>Balance All</source> <source>Balance All</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="94"/> <location filename="../pages/Account.qml" line="96"/>
<source>Total balance: </source> <source>Total balance: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="117"/> <location filename="../pages/Account.qml" line="119"/>
<location filename="../pages/Account.qml" line="150"/> <location filename="../pages/Account.qml" line="152"/>
<source>Copied to clipboard</source> <source>Copied to clipboard</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="127"/> <location filename="../pages/Account.qml" line="129"/>
<source>Total unlocked balance: </source> <source>Total unlocked balance: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="165"/> <location filename="../pages/Account.qml" line="167"/>
<source>Accounts</source> <source>Accounts</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="258"/> <location filename="../pages/Account.qml" line="260"/>
<source>Balance: </source> <source>Balance: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="319"/> <location filename="../pages/Account.qml" line="321"/>
<source>Address copied to clipboard</source> <source>Address copied to clipboard</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="354"/> <location filename="../pages/Account.qml" line="356"/>
<source>Create new account</source> <source>Create new account</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="356"/> <location filename="../pages/Account.qml" line="358"/>
<source>Set the label of the new account:</source> <source>Set the label of the new account:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -1137,57 +1137,57 @@ Mining also gives you a small chance to earn some Monero. Your computer will cre
<context> <context>
<name>PasswordDialog</name> <name>PasswordDialog</name>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="155"/> <location filename="../components/PasswordDialog.qml" line="159"/>
<source>Please enter new wallet password</source> <source>Please enter new wallet password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="157"/> <location filename="../components/PasswordDialog.qml" line="161"/>
<source>wallet password</source> <source>wallet password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="157"/> <location filename="../components/PasswordDialog.qml" line="161"/>
<source>wallet device passphrase</source> <source>wallet device passphrase</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="158"/> <location filename="../components/PasswordDialog.qml" line="162"/>
<source>Please enter %1 for: </source> <source>Please enter %1 for: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="158"/> <location filename="../components/PasswordDialog.qml" line="162"/>
<source>Please enter %1</source> <source>Please enter %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="170"/> <location filename="../components/PasswordDialog.qml" line="174"/>
<source>Warning: passphrase entry on host is a security risk as it can be captured by malware. It is advised to prefer device-based passphrase entry.</source> <source>Warning: passphrase entry on host is a security risk as it can be captured by malware. It is advised to prefer device-based passphrase entry.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="199"/> <location filename="../components/PasswordDialog.qml" line="203"/>
<source>CAPSLOCKS IS ON.</source> <source>CAPSLOCKS IS ON.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="234"/> <location filename="../components/PasswordDialog.qml" line="238"/>
<source>Please confirm new password</source> <source>Please confirm new password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="234"/> <location filename="../components/PasswordDialog.qml" line="238"/>
<source>Please confirm wallet device passphrase</source> <source>Please confirm wallet device passphrase</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="278"/> <location filename="../components/PasswordDialog.qml" line="283"/>
<source>Cancel</source> <source>Cancel</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="286"/> <location filename="../components/PasswordDialog.qml" line="293"/>
<source>Ok</source> <source>Ok</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -1399,12 +1399,12 @@ The old wallet cache file will be renamed and can be restored later.
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsInfo.qml" line="406"/> <location filename="../pages/settings/SettingsInfo.qml" line="408"/>
<source>Copied to clipboard</source> <source>Copied to clipboard</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsInfo.qml" line="412"/> <location filename="../pages/settings/SettingsInfo.qml" line="414"/>
<source>Donate to Monero</source> <source>Donate to Monero</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -1502,7 +1502,32 @@ The old wallet cache file will be renamed and can be restored later.
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsLayout.qml" line="258"/> <location filename="../pages/settings/SettingsLayout.qml" line="262"/>
<source>Socks5 proxy (%1%2)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="263"/>
<source>remote node connections, </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="264"/>
<source>updates downloading, fetching price sources</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="276"/>
<source>IP address</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="277"/>
<source>Port</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="289"/>
<source>Change language</source> <source>Change language</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -2788,27 +2813,27 @@ For the case with Spend Proof, you don&apos;t need to specify the recipient addr
<context> <context>
<name>WizardController</name> <name>WizardController</name>
<message> <message>
<location filename="../wizard/WizardController.qml" line="310"/> <location filename="../wizard/WizardController.qml" line="309"/>
<source>Please choose a file</source> <source>Please choose a file</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="356"/> <location filename="../wizard/WizardController.qml" line="355"/>
<source>Failed to store the wallet</source> <source>Failed to store the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="440"/> <location filename="../wizard/WizardController.qml" line="439"/>
<source>Please proceed to the device...</source> <source>Please proceed to the device...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="444"/> <location filename="../wizard/WizardController.qml" line="443"/>
<source>Creating wallet from device...</source> <source>Creating wallet from device...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="445"/> <location filename="../wizard/WizardController.qml" line="444"/>
<source> <source>
Please check your hardware wallet Please check your hardware wallet
@@ -3394,173 +3419,173 @@ If you don&apos;t have the option to run your own node, there&apos;s an option t
<context> <context>
<name>main</name> <name>main</name>
<message> <message>
<location filename="../main.qml" line="334"/> <location filename="../main.qml" line="337"/>
<location filename="../main.qml" line="794"/> <location filename="../main.qml" line="818"/>
<location filename="../main.qml" line="806"/> <location filename="../main.qml" line="830"/>
<location filename="../main.qml" line="861"/> <location filename="../main.qml" line="885"/>
<location filename="../main.qml" line="873"/> <location filename="../main.qml" line="897"/>
<location filename="../main.qml" line="915"/> <location filename="../main.qml" line="939"/>
<location filename="../main.qml" line="924"/> <location filename="../main.qml" line="948"/>
<location filename="../main.qml" line="972"/> <location filename="../main.qml" line="996"/>
<location filename="../main.qml" line="1084"/> <location filename="../main.qml" line="1108"/>
<location filename="../main.qml" line="1546"/> <location filename="../main.qml" line="1593"/>
<source>Error</source> <source>Error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="335"/> <location filename="../main.qml" line="338"/>
<location filename="../main.qml" line="541"/> <location filename="../main.qml" line="551"/>
<source>Couldn&apos;t open wallet: </source> <source>Couldn&apos;t open wallet: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="690"/> <location filename="../main.qml" line="714"/>
<source>Waiting for daemon to start...</source> <source>Waiting for daemon to start...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="698"/> <location filename="../main.qml" line="722"/>
<source>Waiting for daemon to stop...</source> <source>Waiting for daemon to stop...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="726"/> <location filename="../main.qml" line="750"/>
<source>Daemon failed to start</source> <source>Daemon failed to start</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="727"/> <location filename="../main.qml" line="751"/>
<source>Please check your wallet and daemon log for errors. You can also try to start %1 manually.</source> <source>Please check your wallet and daemon log for errors. You can also try to start %1 manually.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="796"/> <location filename="../main.qml" line="820"/>
<source>Can&apos;t create transaction: Wrong daemon version: </source> <source>Can&apos;t create transaction: Wrong daemon version: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="798"/> <location filename="../main.qml" line="822"/>
<location filename="../main.qml" line="916"/> <location filename="../main.qml" line="940"/>
<source>Can&apos;t create transaction: </source> <source>Can&apos;t create transaction: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="807"/> <location filename="../main.qml" line="831"/>
<location filename="../main.qml" line="925"/> <location filename="../main.qml" line="949"/>
<source>No unmixable outputs to sweep</source> <source>No unmixable outputs to sweep</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="937"/> <location filename="../main.qml" line="961"/>
<source>Confirmation</source> <source>Confirmation</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="818"/> <location filename="../main.qml" line="842"/>
<location filename="../main.qml" line="938"/> <location filename="../main.qml" line="962"/>
<source>Please confirm transaction: <source>Please confirm transaction:
</source> </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="307"/> <location filename="../main.qml" line="310"/>
<source>Closing wallet...</source> <source>Closing wallet...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="821"/> <location filename="../main.qml" line="845"/>
<source> <source>
Payment ID: </source> Payment ID: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="822"/> <location filename="../main.qml" line="846"/>
<location filename="../main.qml" line="939"/> <location filename="../main.qml" line="963"/>
<source> <source>
Amount: </source> Amount: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="823"/> <location filename="../main.qml" line="847"/>
<location filename="../main.qml" line="940"/> <location filename="../main.qml" line="964"/>
<source> <source>
Fee: </source> Fee: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="645"/> <location filename="../main.qml" line="669"/>
<source>Waiting for daemon to sync</source> <source>Waiting for daemon to sync</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="502"/> <location filename="../main.qml" line="512"/>
<source>Please proceed to the device...</source> <source>Please proceed to the device...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="514"/> <location filename="../main.qml" line="524"/>
<source>Opening wallet ...</source> <source>Opening wallet ...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="529"/> <location filename="../main.qml" line="539"/>
<location filename="../main.qml" line="536"/> <location filename="../main.qml" line="546"/>
<source>Repairing incompatible wallet cache. Resyncing wallet.</source> <source>Repairing incompatible wallet cache. Resyncing wallet.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="647"/> <location filename="../main.qml" line="671"/>
<source>Daemon is synchronized (%1)</source> <source>Daemon is synchronized (%1)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="649"/> <location filename="../main.qml" line="673"/>
<source>Wallet is synchronized</source> <source>Wallet is synchronized</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="743"/> <location filename="../main.qml" line="767"/>
<source>Daemon is synchronized</source> <source>Daemon is synchronized</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="820"/> <location filename="../main.qml" line="844"/>
<source>Address: </source> <source>Address: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="824"/> <location filename="../main.qml" line="848"/>
<source> <source>
Ringsize: </source> Ringsize: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="825"/> <location filename="../main.qml" line="849"/>
<source> <source>
Number of transactions: </source> Number of transactions: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="826"/> <location filename="../main.qml" line="850"/>
<source> <source>
Description: </source> Description: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="828"/> <location filename="../main.qml" line="852"/>
<source> <source>
Spending address index: </source> Spending address index: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="848"/> <location filename="../main.qml" line="872"/>
<source>Creating transaction...</source> <source>Creating transaction...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="849"/> <location filename="../main.qml" line="873"/>
<source> <source>
Please check your hardware wallet Please check your hardware wallet
@@ -3568,177 +3593,187 @@ your input may be required.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="964"/> <location filename="../main.qml" line="988"/>
<source>Sending transaction ...</source> <source>Sending transaction ...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="983"/> <location filename="../main.qml" line="1007"/>
<source>Monero sent successfully: %1 transaction(s) </source> <source>Monero sent successfully: %1 transaction(s) </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1000"/> <location filename="../main.qml" line="1024"/>
<source>Failed to store the wallet</source> <source>Failed to store the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1027"/> <location filename="../main.qml" line="1051"/>
<source>Payment proof</source> <source>Payment proof</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1030"/> <location filename="../main.qml" line="1054"/>
<source>Couldn&apos;t generate a proof because of the following reason: <source>Couldn&apos;t generate a proof because of the following reason:
</source> </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1060"/> <location filename="../main.qml" line="1084"/>
<location filename="../main.qml" line="1079"/> <location filename="../main.qml" line="1103"/>
<source>Payment proof check</source> <source>Payment proof check</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1063"/> <location filename="../main.qml" line="1087"/>
<location filename="../main.qml" line="1081"/> <location filename="../main.qml" line="1105"/>
<source>Bad signature</source> <source>Bad signature</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1070"/> <location filename="../main.qml" line="1094"/>
<source>This address received %1 monero, with %2 confirmation(s).</source> <source>This address received %1 monero, with %2 confirmation(s).</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1081"/> <location filename="../main.qml" line="1105"/>
<source>Good signature</source> <source>Good signature</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1443"/> <location filename="../main.qml" line="1486"/>
<location filename="../main.qml" line="2111"/> <location filename="../main.qml" line="2158"/>
<source>Wrong password</source> <source>Wrong password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1496"/> <location filename="../main.qml" line="1496"/>
<source>Warning</source> <source>Save transaction file</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1499"/> <location filename="../main.qml" line="1496"/>
<source>Error: Filesystem is read only</source> <source>Send transaction</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1501"/>
<source>Warning: There&apos;s only %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1503"/>
<source>Note: There&apos;s %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1505"/>
<source>Note: lmdb folder not found. A new folder will be created.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1543"/> <location filename="../main.qml" line="1543"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1546"/>
<source>Error: Filesystem is read only</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1548"/>
<source>Warning: There&apos;s only %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1550"/>
<source>Note: There&apos;s %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1552"/>
<source>Note: lmdb folder not found. A new folder will be created.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1590"/>
<source>Password changed successfully</source> <source>Password changed successfully</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1547"/> <location filename="../main.qml" line="1594"/>
<source>Error: </source> <source>Error: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1635"/> <location filename="../main.qml" line="1682"/>
<source>Primary account</source> <source>Primary account</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1846"/> <location filename="../main.qml" line="1893"/>
<source>Autosaved the wallet</source> <source>Autosaved the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1848"/> <location filename="../main.qml" line="1895"/>
<source>Failed to autosave the wallet</source> <source>Failed to autosave the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1963"/> <location filename="../main.qml" line="2010"/>
<source>Local node is running</source> <source>Local node is running</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1964"/> <location filename="../main.qml" line="2011"/>
<source>Do you want to stop local node or keep it running in the background?</source> <source>Do you want to stop local node or keep it running in the background?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1966"/> <location filename="../main.qml" line="2013"/>
<source>Force stop</source> <source>Force stop</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1967"/> <location filename="../main.qml" line="2014"/>
<source>Keep it running</source> <source>Keep it running</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1987"/> <location filename="../main.qml" line="2034"/>
<source>Tap again to close...</source> <source>Tap again to close...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="2002"/> <location filename="../main.qml" line="2049"/>
<source>Checking local node status...</source> <source>Checking local node status...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="862"/> <location filename="../main.qml" line="886"/>
<source>Amount is wrong: expected number from %1 to %2</source> <source>Amount is wrong: expected number from %1 to %2</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="874"/> <location filename="../main.qml" line="898"/>
<source>Insufficient funds. Unlocked balance: %1</source> <source>Insufficient funds. Unlocked balance: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="973"/> <location filename="../main.qml" line="997"/>
<source>Couldn&apos;t send the money: </source> <source>Couldn&apos;t send the money: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="977"/> <location filename="../main.qml" line="1001"/>
<location filename="../main.qml" line="1542"/> <location filename="../main.qml" line="1589"/>
<source>Information</source> <source>Information</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="983"/> <location filename="../main.qml" line="1007"/>
<source>Transaction saved to file: %1</source> <source>Transaction saved to file: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1067"/> <location filename="../main.qml" line="1091"/>
<source>This address received %1 monero, but the transaction is not yet mined</source> <source>This address received %1 monero, but the transaction is not yet mined</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1074"/> <location filename="../main.qml" line="1098"/>
<source>This address received nothing</source> <source>This address received nothing</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1595"/> <location filename="../main.qml" line="1642"/>
<source>Please wait...</source> <source>Please wait...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

View File

@@ -4,53 +4,53 @@
<context> <context>
<name>Account</name> <name>Account</name>
<message> <message>
<location filename="../pages/Account.qml" line="55"/> <location filename="../pages/Account.qml" line="57"/>
<source>Set the label of the selected account:</source> <source>Set the label of the selected account:</source>
<translation>إختر تصنيف الحساب المحدد</translation> <translation>إختر تصنيف الحساب المحدد</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="87"/> <location filename="../pages/Account.qml" line="89"/>
<source>Balance All</source> <source>Balance All</source>
<translation>توازن الرصيد</translation> <translation>توازن الرصيد</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="94"/> <location filename="../pages/Account.qml" line="96"/>
<source>Total balance: </source> <source>Total balance: </source>
<translation>الرصيد الاجمالي</translation> <translation>الرصيد الاجمالي</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="117"/> <location filename="../pages/Account.qml" line="119"/>
<location filename="../pages/Account.qml" line="150"/> <location filename="../pages/Account.qml" line="152"/>
<source>Copied to clipboard</source> <source>Copied to clipboard</source>
<translation>تم نسخها إلى الحافظة</translation> <translation>تم نسخها إلى الحافظة</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="127"/> <location filename="../pages/Account.qml" line="129"/>
<source>Total unlocked balance: </source> <source>Total unlocked balance: </source>
<translation>إجمالي الرصيد غير المقفل</translation> <translation>إجمالي الرصيد غير المقفل</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="165"/> <location filename="../pages/Account.qml" line="167"/>
<source>Accounts</source> <source>Accounts</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="258"/> <location filename="../pages/Account.qml" line="260"/>
<source>Balance: </source> <source>Balance: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="319"/> <location filename="../pages/Account.qml" line="321"/>
<source>Address copied to clipboard</source> <source>Address copied to clipboard</source>
<translation>تم نسخ العنوان إلى الحافظة</translation> <translation>تم نسخ العنوان إلى الحافظة</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="354"/> <location filename="../pages/Account.qml" line="356"/>
<source>Create new account</source> <source>Create new account</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="356"/> <location filename="../pages/Account.qml" line="358"/>
<source>Set the label of the new account:</source> <source>Set the label of the new account:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -1139,57 +1139,57 @@ Mining also gives you a small chance to earn some Monero. Your computer will cre
<context> <context>
<name>PasswordDialog</name> <name>PasswordDialog</name>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="155"/> <location filename="../components/PasswordDialog.qml" line="159"/>
<source>Please enter new wallet password</source> <source>Please enter new wallet password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="157"/> <location filename="../components/PasswordDialog.qml" line="161"/>
<source>wallet password</source> <source>wallet password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="157"/> <location filename="../components/PasswordDialog.qml" line="161"/>
<source>wallet device passphrase</source> <source>wallet device passphrase</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="158"/> <location filename="../components/PasswordDialog.qml" line="162"/>
<source>Please enter %1 for: </source> <source>Please enter %1 for: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="158"/> <location filename="../components/PasswordDialog.qml" line="162"/>
<source>Please enter %1</source> <source>Please enter %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="170"/> <location filename="../components/PasswordDialog.qml" line="174"/>
<source>Warning: passphrase entry on host is a security risk as it can be captured by malware. It is advised to prefer device-based passphrase entry.</source> <source>Warning: passphrase entry on host is a security risk as it can be captured by malware. It is advised to prefer device-based passphrase entry.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="199"/> <location filename="../components/PasswordDialog.qml" line="203"/>
<source>CAPSLOCKS IS ON.</source> <source>CAPSLOCKS IS ON.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="234"/> <location filename="../components/PasswordDialog.qml" line="238"/>
<source>Please confirm new password</source> <source>Please confirm new password</source>
<translation>من فضلك اكد كلمه السر الجديده</translation> <translation>من فضلك اكد كلمه السر الجديده</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="234"/> <location filename="../components/PasswordDialog.qml" line="238"/>
<source>Please confirm wallet device passphrase</source> <source>Please confirm wallet device passphrase</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="278"/> <location filename="../components/PasswordDialog.qml" line="283"/>
<source>Cancel</source> <source>Cancel</source>
<translation>إلغاء</translation> <translation>إلغاء</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="286"/> <location filename="../components/PasswordDialog.qml" line="293"/>
<source>Ok</source> <source>Ok</source>
<translation>حسنا</translation> <translation>حسنا</translation>
</message> </message>
@@ -1407,12 +1407,12 @@ The old wallet cache file will be renamed and can be restored later.
<translation>تم النسخ للحافظه</translation> <translation>تم النسخ للحافظه</translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsInfo.qml" line="406"/> <location filename="../pages/settings/SettingsInfo.qml" line="408"/>
<source>Copied to clipboard</source> <source>Copied to clipboard</source>
<translation>تم النسخ للحافظه</translation> <translation>تم النسخ للحافظه</translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsInfo.qml" line="412"/> <location filename="../pages/settings/SettingsInfo.qml" line="414"/>
<source>Donate to Monero</source> <source>Donate to Monero</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -1510,7 +1510,32 @@ The old wallet cache file will be renamed and can be restored later.
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsLayout.qml" line="258"/> <location filename="../pages/settings/SettingsLayout.qml" line="262"/>
<source>Socks5 proxy (%1%2)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="263"/>
<source>remote node connections, </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="264"/>
<source>updates downloading, fetching price sources</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="276"/>
<source>IP address</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="277"/>
<source>Port</source>
<translation type="unfinished"> المنفذ</translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="289"/>
<source>Change language</source> <source>Change language</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -2832,27 +2857,27 @@ For the case with Spend Proof, you don&apos;t need to specify the recipient addr
<context> <context>
<name>WizardController</name> <name>WizardController</name>
<message> <message>
<location filename="../wizard/WizardController.qml" line="310"/> <location filename="../wizard/WizardController.qml" line="309"/>
<source>Please choose a file</source> <source>Please choose a file</source>
<translation>إختر ملف من فضلك</translation> <translation>إختر ملف من فضلك</translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="356"/> <location filename="../wizard/WizardController.qml" line="355"/>
<source>Failed to store the wallet</source> <source>Failed to store the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="440"/> <location filename="../wizard/WizardController.qml" line="439"/>
<source>Please proceed to the device...</source> <source>Please proceed to the device...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="444"/> <location filename="../wizard/WizardController.qml" line="443"/>
<source>Creating wallet from device...</source> <source>Creating wallet from device...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="445"/> <location filename="../wizard/WizardController.qml" line="444"/>
<source> <source>
Please check your hardware wallet Please check your hardware wallet
@@ -3439,85 +3464,85 @@ If you don&apos;t have the option to run your own node, there&apos;s an option t
<context> <context>
<name>main</name> <name>main</name>
<message> <message>
<location filename="../main.qml" line="334"/> <location filename="../main.qml" line="337"/>
<location filename="../main.qml" line="794"/> <location filename="../main.qml" line="818"/>
<location filename="../main.qml" line="806"/> <location filename="../main.qml" line="830"/>
<location filename="../main.qml" line="861"/> <location filename="../main.qml" line="885"/>
<location filename="../main.qml" line="873"/> <location filename="../main.qml" line="897"/>
<location filename="../main.qml" line="915"/> <location filename="../main.qml" line="939"/>
<location filename="../main.qml" line="924"/> <location filename="../main.qml" line="948"/>
<location filename="../main.qml" line="972"/> <location filename="../main.qml" line="996"/>
<location filename="../main.qml" line="1084"/> <location filename="../main.qml" line="1108"/>
<location filename="../main.qml" line="1546"/> <location filename="../main.qml" line="1593"/>
<source>Error</source> <source>Error</source>
<translation>خطأ</translation> <translation>خطأ</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="335"/> <location filename="../main.qml" line="338"/>
<location filename="../main.qml" line="541"/> <location filename="../main.qml" line="551"/>
<source>Couldn&apos;t open wallet: </source> <source>Couldn&apos;t open wallet: </source>
<translation>لا يمكن فتح المحفظه:</translation> <translation>لا يمكن فتح المحفظه:</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="690"/> <location filename="../main.qml" line="714"/>
<source>Waiting for daemon to start...</source> <source>Waiting for daemon to start...</source>
<translation>بإنتظار أن يبدأ الخادم..</translation> <translation>بإنتظار أن يبدأ الخادم..</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="698"/> <location filename="../main.qml" line="722"/>
<source>Waiting for daemon to stop...</source> <source>Waiting for daemon to stop...</source>
<translation>بإنتظار أن يتوقف الخادم..</translation> <translation>بإنتظار أن يتوقف الخادم..</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="726"/> <location filename="../main.qml" line="750"/>
<source>Daemon failed to start</source> <source>Daemon failed to start</source>
<translation>فشل بدء الخادم</translation> <translation>فشل بدء الخادم</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="727"/> <location filename="../main.qml" line="751"/>
<source>Please check your wallet and daemon log for errors. You can also try to start %1 manually.</source> <source>Please check your wallet and daemon log for errors. You can also try to start %1 manually.</source>
<translation>من فضلك تأكد من تسجيلات محفظتك وتسجيلات الخادم وابحث عن الخطأ. ممكن ايضا ان تبدأ %1 يدوياً</translation> <translation>من فضلك تأكد من تسجيلات محفظتك وتسجيلات الخادم وابحث عن الخطأ. ممكن ايضا ان تبدأ %1 يدوياً</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="796"/> <location filename="../main.qml" line="820"/>
<source>Can&apos;t create transaction: Wrong daemon version: </source> <source>Can&apos;t create transaction: Wrong daemon version: </source>
<translation>لا يمكن إنشاء معامله: نسخه الخادم خاطئه</translation> <translation>لا يمكن إنشاء معامله: نسخه الخادم خاطئه</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="798"/> <location filename="../main.qml" line="822"/>
<location filename="../main.qml" line="916"/> <location filename="../main.qml" line="940"/>
<source>Can&apos;t create transaction: </source> <source>Can&apos;t create transaction: </source>
<translation>لا يمكن إنشاء معامله</translation> <translation>لا يمكن إنشاء معامله</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="807"/> <location filename="../main.qml" line="831"/>
<location filename="../main.qml" line="925"/> <location filename="../main.qml" line="949"/>
<source>No unmixable outputs to sweep</source> <source>No unmixable outputs to sweep</source>
<translation>لا مخرجات غير قابلة للتجزئة للمسح</translation> <translation>لا مخرجات غير قابلة للتجزئة للمسح</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="937"/> <location filename="../main.qml" line="961"/>
<source>Confirmation</source> <source>Confirmation</source>
<translation>التأكيدات</translation> <translation>التأكيدات</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="818"/> <location filename="../main.qml" line="842"/>
<location filename="../main.qml" line="938"/> <location filename="../main.qml" line="962"/>
<source>Please confirm transaction: <source>Please confirm transaction:
</source> </source>
<translation>من فضلك أكد المعامله: <translation>من فضلك أكد المعامله:
</translation> </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="821"/> <location filename="../main.qml" line="845"/>
<source> <source>
Payment ID: </source> Payment ID: </source>
<translation> <translation>
هويه المعامله:</translation> هويه المعامله:</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="822"/> <location filename="../main.qml" line="846"/>
<location filename="../main.qml" line="939"/> <location filename="../main.qml" line="963"/>
<source> <source>
Amount: </source> Amount: </source>
@@ -3525,68 +3550,68 @@ Amount: </source>
الكميه:</translation> الكميه:</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="823"/> <location filename="../main.qml" line="847"/>
<location filename="../main.qml" line="940"/> <location filename="../main.qml" line="964"/>
<source> <source>
Fee: </source> Fee: </source>
<translation> <translation>
الرسوم:</translation> الرسوم:</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="645"/> <location filename="../main.qml" line="669"/>
<source>Waiting for daemon to sync</source> <source>Waiting for daemon to sync</source>
<translation>بانتظار تزامن الخادم</translation> <translation>بانتظار تزامن الخادم</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="307"/> <location filename="../main.qml" line="310"/>
<source>Closing wallet...</source> <source>Closing wallet...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="502"/> <location filename="../main.qml" line="512"/>
<source>Please proceed to the device...</source> <source>Please proceed to the device...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="514"/> <location filename="../main.qml" line="524"/>
<source>Opening wallet ...</source> <source>Opening wallet ...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="529"/> <location filename="../main.qml" line="539"/>
<location filename="../main.qml" line="536"/> <location filename="../main.qml" line="546"/>
<source>Repairing incompatible wallet cache. Resyncing wallet.</source> <source>Repairing incompatible wallet cache. Resyncing wallet.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="647"/> <location filename="../main.qml" line="671"/>
<source>Daemon is synchronized (%1)</source> <source>Daemon is synchronized (%1)</source>
<translation>تزامن الخادم (%1)</translation> <translation>تزامن الخادم (%1)</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="649"/> <location filename="../main.qml" line="673"/>
<source>Wallet is synchronized</source> <source>Wallet is synchronized</source>
<translation>تمت مزامنه المحفظه</translation> <translation>تمت مزامنه المحفظه</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="743"/> <location filename="../main.qml" line="767"/>
<source>Daemon is synchronized</source> <source>Daemon is synchronized</source>
<translation>تمت مزامنه الخادم</translation> <translation>تمت مزامنه الخادم</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="820"/> <location filename="../main.qml" line="844"/>
<source>Address: </source> <source>Address: </source>
<translation>العنوان:</translation> <translation>العنوان:</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="824"/> <location filename="../main.qml" line="848"/>
<source> <source>
Ringsize: </source> Ringsize: </source>
<translation> <translation>
حجم الطوق:</translation> حجم الطوق:</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="825"/> <location filename="../main.qml" line="849"/>
<source> <source>
Number of transactions: </source> Number of transactions: </source>
@@ -3594,25 +3619,25 @@ Number of transactions: </source>
عدد المعاملات:</translation> عدد المعاملات:</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="826"/> <location filename="../main.qml" line="850"/>
<source> <source>
Description: </source> Description: </source>
<translation> <translation>
الوصف:</translation> الوصف:</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="828"/> <location filename="../main.qml" line="852"/>
<source> <source>
Spending address index: </source> Spending address index: </source>
<translation>مؤشر عنوان الإنفاق:</translation> <translation>مؤشر عنوان الإنفاق:</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="848"/> <location filename="../main.qml" line="872"/>
<source>Creating transaction...</source> <source>Creating transaction...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="849"/> <location filename="../main.qml" line="873"/>
<source> <source>
Please check your hardware wallet Please check your hardware wallet
@@ -3620,177 +3645,187 @@ your input may be required.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="964"/> <location filename="../main.qml" line="988"/>
<source>Sending transaction ...</source> <source>Sending transaction ...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="983"/> <location filename="../main.qml" line="1007"/>
<source>Monero sent successfully: %1 transaction(s) </source> <source>Monero sent successfully: %1 transaction(s) </source>
<translation>تم إرسال مونيرو بنجاح: %1 معاملات</translation> <translation>تم إرسال مونيرو بنجاح: %1 معاملات</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1000"/> <location filename="../main.qml" line="1024"/>
<source>Failed to store the wallet</source> <source>Failed to store the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1027"/> <location filename="../main.qml" line="1051"/>
<source>Payment proof</source> <source>Payment proof</source>
<translation>دليل الدفع</translation> <translation>دليل الدفع</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1030"/> <location filename="../main.qml" line="1054"/>
<source>Couldn&apos;t generate a proof because of the following reason: <source>Couldn&apos;t generate a proof because of the following reason:
</source> </source>
<translation>لم نتمكن من إنشاء دليل الدفع للسبب التالي:</translation> <translation>لم نتمكن من إنشاء دليل الدفع للسبب التالي:</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1060"/> <location filename="../main.qml" line="1084"/>
<location filename="../main.qml" line="1079"/> <location filename="../main.qml" line="1103"/>
<source>Payment proof check</source> <source>Payment proof check</source>
<translation>تحقق من دليل الدفع</translation> <translation>تحقق من دليل الدفع</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1063"/> <location filename="../main.qml" line="1087"/>
<location filename="../main.qml" line="1081"/> <location filename="../main.qml" line="1105"/>
<source>Bad signature</source> <source>Bad signature</source>
<translation>توقيع سيء</translation> <translation>توقيع سيء</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1070"/> <location filename="../main.qml" line="1094"/>
<source>This address received %1 monero, with %2 confirmation(s).</source> <source>This address received %1 monero, with %2 confirmation(s).</source>
<translation>هذا العنوان استلم %1 مونيرو , مع %2 تأكيدات</translation> <translation>هذا العنوان استلم %1 مونيرو , مع %2 تأكيدات</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1081"/> <location filename="../main.qml" line="1105"/>
<source>Good signature</source> <source>Good signature</source>
<translation>توقيع جيد</translation> <translation>توقيع جيد</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1443"/> <location filename="../main.qml" line="1486"/>
<location filename="../main.qml" line="2111"/> <location filename="../main.qml" line="2158"/>
<source>Wrong password</source> <source>Wrong password</source>
<translation>كلمه السر خاطئه</translation> <translation>كلمه السر خاطئه</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1496"/> <location filename="../main.qml" line="1496"/>
<source>Save transaction file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1496"/>
<source>Send transaction</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1543"/>
<source>Warning</source> <source>Warning</source>
<translation>تحذير</translation> <translation>تحذير</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1499"/> <location filename="../main.qml" line="1546"/>
<source>Error: Filesystem is read only</source> <source>Error: Filesystem is read only</source>
<translation>حطأ : نظام الملفات فراءة فقط</translation> <translation>حطأ : نظام الملفات فراءة فقط</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1501"/> <location filename="../main.qml" line="1548"/>
<source>Warning: There&apos;s only %1 GB available on the device. Blockchain requires ~%2 GB of data.</source> <source>Warning: There&apos;s only %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation>تحذير : هناك فقط %1 جيجا مساحه خاليه علي الجهاز. سلسله الكتل تحتاج علي الاقل ~%2 جيجا من البيانات</translation> <translation>تحذير : هناك فقط %1 جيجا مساحه خاليه علي الجهاز. سلسله الكتل تحتاج علي الاقل ~%2 جيجا من البيانات</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1503"/> <location filename="../main.qml" line="1550"/>
<source>Note: There&apos;s %1 GB available on the device. Blockchain requires ~%2 GB of data.</source> <source>Note: There&apos;s %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation>تحذير : هناك فقط %1 مساحه خاليه علي الجهاز. سلسله الكتل تحتاج علي الاقل ~%2 جيجا من البيانات</translation> <translation>تحذير : هناك فقط %1 مساحه خاليه علي الجهاز. سلسله الكتل تحتاج علي الاقل ~%2 جيجا من البيانات</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1505"/> <location filename="../main.qml" line="1552"/>
<source>Note: lmdb folder not found. A new folder will be created.</source> <source>Note: lmdb folder not found. A new folder will be created.</source>
<translation>ملاحظه : lmdb مجلد الخاصه بسلسله الكتل غير موجود سيتم انشاء مجلد جديد</translation> <translation>ملاحظه : lmdb مجلد الخاصه بسلسله الكتل غير موجود سيتم انشاء مجلد جديد</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1543"/> <location filename="../main.qml" line="1590"/>
<source>Password changed successfully</source> <source>Password changed successfully</source>
<translation>تم تغيير كلمه السر بنجاح</translation> <translation>تم تغيير كلمه السر بنجاح</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1547"/> <location filename="../main.qml" line="1594"/>
<source>Error: </source> <source>Error: </source>
<translation>حطأ:</translation> <translation>حطأ:</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1635"/> <location filename="../main.qml" line="1682"/>
<source>Primary account</source> <source>Primary account</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1846"/> <location filename="../main.qml" line="1893"/>
<source>Autosaved the wallet</source> <source>Autosaved the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1848"/> <location filename="../main.qml" line="1895"/>
<source>Failed to autosave the wallet</source> <source>Failed to autosave the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1963"/> <location filename="../main.qml" line="2010"/>
<source>Local node is running</source> <source>Local node is running</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1964"/> <location filename="../main.qml" line="2011"/>
<source>Do you want to stop local node or keep it running in the background?</source> <source>Do you want to stop local node or keep it running in the background?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1966"/> <location filename="../main.qml" line="2013"/>
<source>Force stop</source> <source>Force stop</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1967"/> <location filename="../main.qml" line="2014"/>
<source>Keep it running</source> <source>Keep it running</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1987"/> <location filename="../main.qml" line="2034"/>
<source>Tap again to close...</source> <source>Tap again to close...</source>
<translation>اضغط مجددا للإغلاق..</translation> <translation>اضغط مجددا للإغلاق..</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="2002"/> <location filename="../main.qml" line="2049"/>
<source>Checking local node status...</source> <source>Checking local node status...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="862"/> <location filename="../main.qml" line="886"/>
<source>Amount is wrong: expected number from %1 to %2</source> <source>Amount is wrong: expected number from %1 to %2</source>
<translation>الكميه خطأ: الرقم المتوقع من %1 إلي %2</translation> <translation>الكميه خطأ: الرقم المتوقع من %1 إلي %2</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="874"/> <location filename="../main.qml" line="898"/>
<source>Insufficient funds. Unlocked balance: %1</source> <source>Insufficient funds. Unlocked balance: %1</source>
<translation>لا يوجد اموال كافيه. الرصيد المتاح: %1</translation> <translation>لا يوجد اموال كافيه. الرصيد المتاح: %1</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="973"/> <location filename="../main.qml" line="997"/>
<source>Couldn&apos;t send the money: </source> <source>Couldn&apos;t send the money: </source>
<translation>لم يمكن ارسال الاموال:</translation> <translation>لم يمكن ارسال الاموال:</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="977"/> <location filename="../main.qml" line="1001"/>
<location filename="../main.qml" line="1542"/> <location filename="../main.qml" line="1589"/>
<source>Information</source> <source>Information</source>
<translation>معلومات</translation> <translation>معلومات</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="983"/> <location filename="../main.qml" line="1007"/>
<source>Transaction saved to file: %1</source> <source>Transaction saved to file: %1</source>
<translation>تم حفظ المعاملات إلي ملف : %1</translation> <translation>تم حفظ المعاملات إلي ملف : %1</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1067"/> <location filename="../main.qml" line="1091"/>
<source>This address received %1 monero, but the transaction is not yet mined</source> <source>This address received %1 monero, but the transaction is not yet mined</source>
<translation>هذا العنوان استلم %1 مونيرو, لكن المعامله لم يتم تعدينها بعد</translation> <translation>هذا العنوان استلم %1 مونيرو, لكن المعامله لم يتم تعدينها بعد</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1074"/> <location filename="../main.qml" line="1098"/>
<source>This address received nothing</source> <source>This address received nothing</source>
<translation>هذا العنوان لم يستلم شيء</translation> <translation>هذا العنوان لم يستلم شيء</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1595"/> <location filename="../main.qml" line="1642"/>
<source>Please wait...</source> <source>Please wait...</source>
<translation>من فضلك إنتظر..</translation> <translation>من فضلك إنتظر..</translation>
</message> </message>

View File

@@ -4,53 +4,53 @@
<context> <context>
<name>Account</name> <name>Account</name>
<message> <message>
<location filename="../pages/Account.qml" line="55"/> <location filename="../pages/Account.qml" line="57"/>
<source>Set the label of the selected account:</source> <source>Set the label of the selected account:</source>
<translation>Избери наименование на сметката:</translation> <translation>Избери наименование на сметката:</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="87"/> <location filename="../pages/Account.qml" line="89"/>
<source>Balance All</source> <source>Balance All</source>
<translation>Общ Баланс</translation> <translation>Общ Баланс</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="94"/> <location filename="../pages/Account.qml" line="96"/>
<source>Total balance: </source> <source>Total balance: </source>
<translation>Общ баланс: </translation> <translation>Общ баланс: </translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="117"/> <location filename="../pages/Account.qml" line="119"/>
<location filename="../pages/Account.qml" line="150"/> <location filename="../pages/Account.qml" line="152"/>
<source>Copied to clipboard</source> <source>Copied to clipboard</source>
<translation>Копирано в клипборда</translation> <translation>Копирано в клипборда</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="127"/> <location filename="../pages/Account.qml" line="129"/>
<source>Total unlocked balance: </source> <source>Total unlocked balance: </source>
<translation>Общ отключен баланс: </translation> <translation>Общ отключен баланс: </translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="165"/> <location filename="../pages/Account.qml" line="167"/>
<source>Accounts</source> <source>Accounts</source>
<translation>Сметки</translation> <translation>Сметки</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="258"/> <location filename="../pages/Account.qml" line="260"/>
<source>Balance: </source> <source>Balance: </source>
<translation>Баланс: </translation> <translation>Баланс: </translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="319"/> <location filename="../pages/Account.qml" line="321"/>
<source>Address copied to clipboard</source> <source>Address copied to clipboard</source>
<translation>Адресът е копиран в клипборда</translation> <translation>Адресът е копиран в клипборда</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="354"/> <location filename="../pages/Account.qml" line="356"/>
<source>Create new account</source> <source>Create new account</source>
<translation>Създай нова сметка</translation> <translation>Създай нова сметка</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="356"/> <location filename="../pages/Account.qml" line="358"/>
<source>Set the label of the new account:</source> <source>Set the label of the new account:</source>
<translation>Наименувай новата сметка:</translation> <translation>Наименувай новата сметка:</translation>
</message> </message>
@@ -1137,57 +1137,57 @@ Mining also gives you a small chance to earn some Monero. Your computer will cre
<context> <context>
<name>PasswordDialog</name> <name>PasswordDialog</name>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="155"/> <location filename="../components/PasswordDialog.qml" line="159"/>
<source>Please enter new wallet password</source> <source>Please enter new wallet password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="157"/> <location filename="../components/PasswordDialog.qml" line="161"/>
<source>wallet password</source> <source>wallet password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="157"/> <location filename="../components/PasswordDialog.qml" line="161"/>
<source>wallet device passphrase</source> <source>wallet device passphrase</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="158"/> <location filename="../components/PasswordDialog.qml" line="162"/>
<source>Please enter %1 for: </source> <source>Please enter %1 for: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="158"/> <location filename="../components/PasswordDialog.qml" line="162"/>
<source>Please enter %1</source> <source>Please enter %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="170"/> <location filename="../components/PasswordDialog.qml" line="174"/>
<source>Warning: passphrase entry on host is a security risk as it can be captured by malware. It is advised to prefer device-based passphrase entry.</source> <source>Warning: passphrase entry on host is a security risk as it can be captured by malware. It is advised to prefer device-based passphrase entry.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="199"/> <location filename="../components/PasswordDialog.qml" line="203"/>
<source>CAPSLOCKS IS ON.</source> <source>CAPSLOCKS IS ON.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="234"/> <location filename="../components/PasswordDialog.qml" line="238"/>
<source>Please confirm new password</source> <source>Please confirm new password</source>
<translation>Моля потвърдете новата парола</translation> <translation>Моля потвърдете новата парола</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="234"/> <location filename="../components/PasswordDialog.qml" line="238"/>
<source>Please confirm wallet device passphrase</source> <source>Please confirm wallet device passphrase</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="278"/> <location filename="../components/PasswordDialog.qml" line="283"/>
<source>Cancel</source> <source>Cancel</source>
<translation>Отказ</translation> <translation>Отказ</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="286"/> <location filename="../components/PasswordDialog.qml" line="293"/>
<source>Ok</source> <source>Ok</source>
<translation>Добре</translation> <translation>Добре</translation>
</message> </message>
@@ -1405,12 +1405,12 @@ The old wallet cache file will be renamed and can be restored later.
<translation>Копирай в клипборда</translation> <translation>Копирай в клипборда</translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsInfo.qml" line="406"/> <location filename="../pages/settings/SettingsInfo.qml" line="408"/>
<source>Copied to clipboard</source> <source>Copied to clipboard</source>
<translation>Копирано в клипборда</translation> <translation>Копирано в клипборда</translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsInfo.qml" line="412"/> <location filename="../pages/settings/SettingsInfo.qml" line="414"/>
<source>Donate to Monero</source> <source>Donate to Monero</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -1508,7 +1508,32 @@ The old wallet cache file will be renamed and can be restored later.
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsLayout.qml" line="258"/> <location filename="../pages/settings/SettingsLayout.qml" line="262"/>
<source>Socks5 proxy (%1%2)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="263"/>
<source>remote node connections, </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="264"/>
<source>updates downloading, fetching price sources</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="276"/>
<source>IP address</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="277"/>
<source>Port</source>
<translation type="unfinished">Порт</translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="289"/>
<source>Change language</source> <source>Change language</source>
<translation>Смени езика</translation> <translation>Смени езика</translation>
</message> </message>
@@ -2800,27 +2825,27 @@ For the case with Spend Proof, you don&apos;t need to specify the recipient addr
<context> <context>
<name>WizardController</name> <name>WizardController</name>
<message> <message>
<location filename="../wizard/WizardController.qml" line="310"/> <location filename="../wizard/WizardController.qml" line="309"/>
<source>Please choose a file</source> <source>Please choose a file</source>
<translation>Моля изберете файл</translation> <translation>Моля изберете файл</translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="356"/> <location filename="../wizard/WizardController.qml" line="355"/>
<source>Failed to store the wallet</source> <source>Failed to store the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="440"/> <location filename="../wizard/WizardController.qml" line="439"/>
<source>Please proceed to the device...</source> <source>Please proceed to the device...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="444"/> <location filename="../wizard/WizardController.qml" line="443"/>
<source>Creating wallet from device...</source> <source>Creating wallet from device...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="445"/> <location filename="../wizard/WizardController.qml" line="444"/>
<source> <source>
Please check your hardware wallet Please check your hardware wallet
@@ -3408,173 +3433,173 @@ If you don&apos;t have the option to run your own node, there&apos;s an option t
<context> <context>
<name>main</name> <name>main</name>
<message> <message>
<location filename="../main.qml" line="334"/> <location filename="../main.qml" line="337"/>
<location filename="../main.qml" line="794"/> <location filename="../main.qml" line="818"/>
<location filename="../main.qml" line="806"/> <location filename="../main.qml" line="830"/>
<location filename="../main.qml" line="861"/> <location filename="../main.qml" line="885"/>
<location filename="../main.qml" line="873"/> <location filename="../main.qml" line="897"/>
<location filename="../main.qml" line="915"/> <location filename="../main.qml" line="939"/>
<location filename="../main.qml" line="924"/> <location filename="../main.qml" line="948"/>
<location filename="../main.qml" line="972"/> <location filename="../main.qml" line="996"/>
<location filename="../main.qml" line="1084"/> <location filename="../main.qml" line="1108"/>
<location filename="../main.qml" line="1546"/> <location filename="../main.qml" line="1593"/>
<source>Error</source> <source>Error</source>
<translation>Грешка</translation> <translation>Грешка</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="335"/> <location filename="../main.qml" line="338"/>
<location filename="../main.qml" line="541"/> <location filename="../main.qml" line="551"/>
<source>Couldn&apos;t open wallet: </source> <source>Couldn&apos;t open wallet: </source>
<translation>Не можа да отвори портфейла: </translation> <translation>Не можа да отвори портфейла: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="690"/> <location filename="../main.qml" line="714"/>
<source>Waiting for daemon to start...</source> <source>Waiting for daemon to start...</source>
<translation>Изчакване на демона да стартира...</translation> <translation>Изчакване на демона да стартира...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="698"/> <location filename="../main.qml" line="722"/>
<source>Waiting for daemon to stop...</source> <source>Waiting for daemon to stop...</source>
<translation>Изчакване на демона да спре...</translation> <translation>Изчакване на демона да спре...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="726"/> <location filename="../main.qml" line="750"/>
<source>Daemon failed to start</source> <source>Daemon failed to start</source>
<translation>Демонът не успя да стартира</translation> <translation>Демонът не успя да стартира</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="727"/> <location filename="../main.qml" line="751"/>
<source>Please check your wallet and daemon log for errors. You can also try to start %1 manually.</source> <source>Please check your wallet and daemon log for errors. You can also try to start %1 manually.</source>
<translation>Моля проверете портфейла и системните записи на демона за грешки. Можете да опитате също и да стартирате %1 ръчно.</translation> <translation>Моля проверете портфейла и системните записи на демона за грешки. Можете да опитате също и да стартирате %1 ръчно.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="796"/> <location filename="../main.qml" line="820"/>
<source>Can&apos;t create transaction: Wrong daemon version: </source> <source>Can&apos;t create transaction: Wrong daemon version: </source>
<translation>Не може да създаде транзакция: Грешна версия на демона: </translation> <translation>Не може да създаде транзакция: Грешна версия на демона: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="798"/> <location filename="../main.qml" line="822"/>
<location filename="../main.qml" line="916"/> <location filename="../main.qml" line="940"/>
<source>Can&apos;t create transaction: </source> <source>Can&apos;t create transaction: </source>
<translation>Не може да създаде транзакция: </translation> <translation>Не може да създаде транзакция: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="807"/> <location filename="../main.qml" line="831"/>
<location filename="../main.qml" line="925"/> <location filename="../main.qml" line="949"/>
<source>No unmixable outputs to sweep</source> <source>No unmixable outputs to sweep</source>
<translation>Няма налични несмесваеми заявки за събиране</translation> <translation>Няма налични несмесваеми заявки за събиране</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="937"/> <location filename="../main.qml" line="961"/>
<source>Confirmation</source> <source>Confirmation</source>
<translation>Потвърждение</translation> <translation>Потвърждение</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="818"/> <location filename="../main.qml" line="842"/>
<location filename="../main.qml" line="938"/> <location filename="../main.qml" line="962"/>
<source>Please confirm transaction: <source>Please confirm transaction:
</source> </source>
<translation>Моля потвърдете транзакция:</translation> <translation>Моля потвърдете транзакция:</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="821"/> <location filename="../main.qml" line="845"/>
<source> <source>
Payment ID: </source> Payment ID: </source>
<translation>Платежно ID: </translation> <translation>Платежно ID: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="822"/> <location filename="../main.qml" line="846"/>
<location filename="../main.qml" line="939"/> <location filename="../main.qml" line="963"/>
<source> <source>
Amount: </source> Amount: </source>
<translation>Сума: </translation> <translation>Сума: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="823"/> <location filename="../main.qml" line="847"/>
<location filename="../main.qml" line="940"/> <location filename="../main.qml" line="964"/>
<source> <source>
Fee: </source> Fee: </source>
<translation>Такса: </translation> <translation>Такса: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="645"/> <location filename="../main.qml" line="669"/>
<source>Waiting for daemon to sync</source> <source>Waiting for daemon to sync</source>
<translation>Изчакване на демона да синхронизира</translation> <translation>Изчакване на демона да синхронизира</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="307"/> <location filename="../main.qml" line="310"/>
<source>Closing wallet...</source> <source>Closing wallet...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="502"/> <location filename="../main.qml" line="512"/>
<source>Please proceed to the device...</source> <source>Please proceed to the device...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="514"/> <location filename="../main.qml" line="524"/>
<source>Opening wallet ...</source> <source>Opening wallet ...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="529"/> <location filename="../main.qml" line="539"/>
<location filename="../main.qml" line="536"/> <location filename="../main.qml" line="546"/>
<source>Repairing incompatible wallet cache. Resyncing wallet.</source> <source>Repairing incompatible wallet cache. Resyncing wallet.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="647"/> <location filename="../main.qml" line="671"/>
<source>Daemon is synchronized (%1)</source> <source>Daemon is synchronized (%1)</source>
<translation>Демонът е синхронизиран (%1)</translation> <translation>Демонът е синхронизиран (%1)</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="649"/> <location filename="../main.qml" line="673"/>
<source>Wallet is synchronized</source> <source>Wallet is synchronized</source>
<translation>Демонът е синхронизиран</translation> <translation>Демонът е синхронизиран</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="743"/> <location filename="../main.qml" line="767"/>
<source>Daemon is synchronized</source> <source>Daemon is synchronized</source>
<translation>Демонът е синхронизиран</translation> <translation>Демонът е синхронизиран</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="820"/> <location filename="../main.qml" line="844"/>
<source>Address: </source> <source>Address: </source>
<translation>Адрес: </translation> <translation>Адрес: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="824"/> <location filename="../main.qml" line="848"/>
<source> <source>
Ringsize: </source> Ringsize: </source>
<translation>Размер на пръстен: </translation> <translation>Размер на пръстен: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="825"/> <location filename="../main.qml" line="849"/>
<source> <source>
Number of transactions: </source> Number of transactions: </source>
<translation>Брой транзакции: </translation> <translation>Брой транзакции: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="826"/> <location filename="../main.qml" line="850"/>
<source> <source>
Description: </source> Description: </source>
<translation>Описание: </translation> <translation>Описание: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="828"/> <location filename="../main.qml" line="852"/>
<source> <source>
Spending address index: </source> Spending address index: </source>
<translation>Индекс на адреса за харчене: </translation> <translation>Индекс на адреса за харчене: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="848"/> <location filename="../main.qml" line="872"/>
<source>Creating transaction...</source> <source>Creating transaction...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="849"/> <location filename="../main.qml" line="873"/>
<source> <source>
Please check your hardware wallet Please check your hardware wallet
@@ -3582,177 +3607,187 @@ your input may be required.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="964"/> <location filename="../main.qml" line="988"/>
<source>Sending transaction ...</source> <source>Sending transaction ...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="983"/> <location filename="../main.qml" line="1007"/>
<source>Monero sent successfully: %1 transaction(s) </source> <source>Monero sent successfully: %1 transaction(s) </source>
<translation>Монеро изпратени успешно: %1 транзакция(и)</translation> <translation>Монеро изпратени успешно: %1 транзакция(и)</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1000"/> <location filename="../main.qml" line="1024"/>
<source>Failed to store the wallet</source> <source>Failed to store the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1027"/> <location filename="../main.qml" line="1051"/>
<source>Payment proof</source> <source>Payment proof</source>
<translation>Платежно доказателство</translation> <translation>Платежно доказателство</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1030"/> <location filename="../main.qml" line="1054"/>
<source>Couldn&apos;t generate a proof because of the following reason: <source>Couldn&apos;t generate a proof because of the following reason:
</source> </source>
<translation>Не може да генерира доказателство заради следната причина: </translation> <translation>Не може да генерира доказателство заради следната причина: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1060"/> <location filename="../main.qml" line="1084"/>
<location filename="../main.qml" line="1079"/> <location filename="../main.qml" line="1103"/>
<source>Payment proof check</source> <source>Payment proof check</source>
<translation>Проверка на платежно доказателство</translation> <translation>Проверка на платежно доказателство</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1063"/> <location filename="../main.qml" line="1087"/>
<location filename="../main.qml" line="1081"/> <location filename="../main.qml" line="1105"/>
<source>Bad signature</source> <source>Bad signature</source>
<translation>Неверен подпис</translation> <translation>Неверен подпис</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1070"/> <location filename="../main.qml" line="1094"/>
<source>This address received %1 monero, with %2 confirmation(s).</source> <source>This address received %1 monero, with %2 confirmation(s).</source>
<translation>Този адрес получи %1 монеро с %2 потвърждение(я).</translation> <translation>Този адрес получи %1 монеро с %2 потвърждение(я).</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1081"/> <location filename="../main.qml" line="1105"/>
<source>Good signature</source> <source>Good signature</source>
<translation>Верен подпис</translation> <translation>Верен подпис</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1443"/> <location filename="../main.qml" line="1486"/>
<location filename="../main.qml" line="2111"/> <location filename="../main.qml" line="2158"/>
<source>Wrong password</source> <source>Wrong password</source>
<translation>Грешна парола</translation> <translation>Грешна парола</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1496"/> <location filename="../main.qml" line="1496"/>
<source>Save transaction file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1496"/>
<source>Send transaction</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1543"/>
<source>Warning</source> <source>Warning</source>
<translation>Предупреждение</translation> <translation>Предупреждение</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1499"/> <location filename="../main.qml" line="1546"/>
<source>Error: Filesystem is read only</source> <source>Error: Filesystem is read only</source>
<translation>Грешка: Файловата система е само за четене</translation> <translation>Грешка: Файловата система е само за четене</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1501"/> <location filename="../main.qml" line="1548"/>
<source>Warning: There&apos;s only %1 GB available on the device. Blockchain requires ~%2 GB of data.</source> <source>Warning: There&apos;s only %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation>Предупреждение: Има само %1 ГБ свободно място на устройството. Блокчейнът заема ~%2 ГБ.</translation> <translation>Предупреждение: Има само %1 ГБ свободно място на устройството. Блокчейнът заема ~%2 ГБ.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1503"/> <location filename="../main.qml" line="1550"/>
<source>Note: There&apos;s %1 GB available on the device. Blockchain requires ~%2 GB of data.</source> <source>Note: There&apos;s %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation>Забележка: Има само %1 ГБ свободно място на устройството. Блокчейнът заема ~%2 ГБ.</translation> <translation>Забележка: Има само %1 ГБ свободно място на устройството. Блокчейнът заема ~%2 ГБ.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1505"/> <location filename="../main.qml" line="1552"/>
<source>Note: lmdb folder not found. A new folder will be created.</source> <source>Note: lmdb folder not found. A new folder will be created.</source>
<translation>Забележка: папката lmdb не е открита. Ще бъде създадена нова папка.</translation> <translation>Забележка: папката lmdb не е открита. Ще бъде създадена нова папка.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1543"/> <location filename="../main.qml" line="1590"/>
<source>Password changed successfully</source> <source>Password changed successfully</source>
<translation>Паролата сменена успешно</translation> <translation>Паролата сменена успешно</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1547"/> <location filename="../main.qml" line="1594"/>
<source>Error: </source> <source>Error: </source>
<translation>Грешка: </translation> <translation>Грешка: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1635"/> <location filename="../main.qml" line="1682"/>
<source>Primary account</source> <source>Primary account</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1846"/> <location filename="../main.qml" line="1893"/>
<source>Autosaved the wallet</source> <source>Autosaved the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1848"/> <location filename="../main.qml" line="1895"/>
<source>Failed to autosave the wallet</source> <source>Failed to autosave the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1963"/> <location filename="../main.qml" line="2010"/>
<source>Local node is running</source> <source>Local node is running</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1964"/> <location filename="../main.qml" line="2011"/>
<source>Do you want to stop local node or keep it running in the background?</source> <source>Do you want to stop local node or keep it running in the background?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1966"/> <location filename="../main.qml" line="2013"/>
<source>Force stop</source> <source>Force stop</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1967"/> <location filename="../main.qml" line="2014"/>
<source>Keep it running</source> <source>Keep it running</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1987"/> <location filename="../main.qml" line="2034"/>
<source>Tap again to close...</source> <source>Tap again to close...</source>
<translation>Чукнете веднъж за да затворите...</translation> <translation>Чукнете веднъж за да затворите...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="2002"/> <location filename="../main.qml" line="2049"/>
<source>Checking local node status...</source> <source>Checking local node status...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="862"/> <location filename="../main.qml" line="886"/>
<source>Amount is wrong: expected number from %1 to %2</source> <source>Amount is wrong: expected number from %1 to %2</source>
<translation>Сумата е грешна: очакваната цифра е от %1 до %2</translation> <translation>Сумата е грешна: очакваната цифра е от %1 до %2</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="874"/> <location filename="../main.qml" line="898"/>
<source>Insufficient funds. Unlocked balance: %1</source> <source>Insufficient funds. Unlocked balance: %1</source>
<translation>Недостатъчна наличност. Отключен баланс: %1</translation> <translation>Недостатъчна наличност. Отключен баланс: %1</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="973"/> <location filename="../main.qml" line="997"/>
<source>Couldn&apos;t send the money: </source> <source>Couldn&apos;t send the money: </source>
<translation>Не можа да изпрати парите</translation> <translation>Не можа да изпрати парите</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="977"/> <location filename="../main.qml" line="1001"/>
<location filename="../main.qml" line="1542"/> <location filename="../main.qml" line="1589"/>
<source>Information</source> <source>Information</source>
<translation>Информация</translation> <translation>Информация</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="983"/> <location filename="../main.qml" line="1007"/>
<source>Transaction saved to file: %1</source> <source>Transaction saved to file: %1</source>
<translation>Транзакцията записана във файл: %1</translation> <translation>Транзакцията записана във файл: %1</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1067"/> <location filename="../main.qml" line="1091"/>
<source>This address received %1 monero, but the transaction is not yet mined</source> <source>This address received %1 monero, but the transaction is not yet mined</source>
<translation>Този адрес получи %1 монеро, но транзакцията все-още не е изкопана</translation> <translation>Този адрес получи %1 монеро, но транзакцията все-още не е изкопана</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1074"/> <location filename="../main.qml" line="1098"/>
<source>This address received nothing</source> <source>This address received nothing</source>
<translation>Този адрес не е получил нищо</translation> <translation>Този адрес не е получил нищо</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1595"/> <location filename="../main.qml" line="1642"/>
<source>Please wait...</source> <source>Please wait...</source>
<translation>Моля изчакайте...</translation> <translation>Моля изчакайте...</translation>
</message> </message>

View File

@@ -4,53 +4,53 @@
<context> <context>
<name>Account</name> <name>Account</name>
<message> <message>
<location filename="../pages/Account.qml" line="55"/> <location filename="../pages/Account.qml" line="57"/>
<source>Set the label of the selected account:</source> <source>Set the label of the selected account:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="87"/> <location filename="../pages/Account.qml" line="89"/>
<source>Balance All</source> <source>Balance All</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="94"/> <location filename="../pages/Account.qml" line="96"/>
<source>Total balance: </source> <source>Total balance: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="117"/> <location filename="../pages/Account.qml" line="119"/>
<location filename="../pages/Account.qml" line="150"/> <location filename="../pages/Account.qml" line="152"/>
<source>Copied to clipboard</source> <source>Copied to clipboard</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="127"/> <location filename="../pages/Account.qml" line="129"/>
<source>Total unlocked balance: </source> <source>Total unlocked balance: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="165"/> <location filename="../pages/Account.qml" line="167"/>
<source>Accounts</source> <source>Accounts</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="258"/> <location filename="../pages/Account.qml" line="260"/>
<source>Balance: </source> <source>Balance: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="319"/> <location filename="../pages/Account.qml" line="321"/>
<source>Address copied to clipboard</source> <source>Address copied to clipboard</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="354"/> <location filename="../pages/Account.qml" line="356"/>
<source>Create new account</source> <source>Create new account</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="356"/> <location filename="../pages/Account.qml" line="358"/>
<source>Set the label of the new account:</source> <source>Set the label of the new account:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -1137,57 +1137,57 @@ Mining also gives you a small chance to earn some Monero. Your computer will cre
<context> <context>
<name>PasswordDialog</name> <name>PasswordDialog</name>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="155"/> <location filename="../components/PasswordDialog.qml" line="159"/>
<source>Please enter new wallet password</source> <source>Please enter new wallet password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="157"/> <location filename="../components/PasswordDialog.qml" line="161"/>
<source>wallet password</source> <source>wallet password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="157"/> <location filename="../components/PasswordDialog.qml" line="161"/>
<source>wallet device passphrase</source> <source>wallet device passphrase</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="158"/> <location filename="../components/PasswordDialog.qml" line="162"/>
<source>Please enter %1 for: </source> <source>Please enter %1 for: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="158"/> <location filename="../components/PasswordDialog.qml" line="162"/>
<source>Please enter %1</source> <source>Please enter %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="170"/> <location filename="../components/PasswordDialog.qml" line="174"/>
<source>Warning: passphrase entry on host is a security risk as it can be captured by malware. It is advised to prefer device-based passphrase entry.</source> <source>Warning: passphrase entry on host is a security risk as it can be captured by malware. It is advised to prefer device-based passphrase entry.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="199"/> <location filename="../components/PasswordDialog.qml" line="203"/>
<source>CAPSLOCKS IS ON.</source> <source>CAPSLOCKS IS ON.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="234"/> <location filename="../components/PasswordDialog.qml" line="238"/>
<source>Please confirm new password</source> <source>Please confirm new password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="234"/> <location filename="../components/PasswordDialog.qml" line="238"/>
<source>Please confirm wallet device passphrase</source> <source>Please confirm wallet device passphrase</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="278"/> <location filename="../components/PasswordDialog.qml" line="283"/>
<source>Cancel</source> <source>Cancel</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="286"/> <location filename="../components/PasswordDialog.qml" line="293"/>
<source>Ok</source> <source>Ok</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -1399,12 +1399,12 @@ The old wallet cache file will be renamed and can be restored later.
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsInfo.qml" line="406"/> <location filename="../pages/settings/SettingsInfo.qml" line="408"/>
<source>Copied to clipboard</source> <source>Copied to clipboard</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsInfo.qml" line="412"/> <location filename="../pages/settings/SettingsInfo.qml" line="414"/>
<source>Donate to Monero</source> <source>Donate to Monero</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -1502,7 +1502,32 @@ The old wallet cache file will be renamed and can be restored later.
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsLayout.qml" line="258"/> <location filename="../pages/settings/SettingsLayout.qml" line="262"/>
<source>Socks5 proxy (%1%2)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="263"/>
<source>remote node connections, </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="264"/>
<source>updates downloading, fetching price sources</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="276"/>
<source>IP address</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="277"/>
<source>Port</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="289"/>
<source>Change language</source> <source>Change language</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -2792,27 +2817,27 @@ For the case with Spend Proof, you don&apos;t need to specify the recipient addr
<context> <context>
<name>WizardController</name> <name>WizardController</name>
<message> <message>
<location filename="../wizard/WizardController.qml" line="310"/> <location filename="../wizard/WizardController.qml" line="309"/>
<source>Please choose a file</source> <source>Please choose a file</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="356"/> <location filename="../wizard/WizardController.qml" line="355"/>
<source>Failed to store the wallet</source> <source>Failed to store the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="440"/> <location filename="../wizard/WizardController.qml" line="439"/>
<source>Please proceed to the device...</source> <source>Please proceed to the device...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="444"/> <location filename="../wizard/WizardController.qml" line="443"/>
<source>Creating wallet from device...</source> <source>Creating wallet from device...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="445"/> <location filename="../wizard/WizardController.qml" line="444"/>
<source> <source>
Please check your hardware wallet Please check your hardware wallet
@@ -3398,173 +3423,173 @@ If you don&apos;t have the option to run your own node, there&apos;s an option t
<context> <context>
<name>main</name> <name>main</name>
<message> <message>
<location filename="../main.qml" line="334"/> <location filename="../main.qml" line="337"/>
<location filename="../main.qml" line="794"/> <location filename="../main.qml" line="818"/>
<location filename="../main.qml" line="806"/> <location filename="../main.qml" line="830"/>
<location filename="../main.qml" line="861"/> <location filename="../main.qml" line="885"/>
<location filename="../main.qml" line="873"/> <location filename="../main.qml" line="897"/>
<location filename="../main.qml" line="915"/> <location filename="../main.qml" line="939"/>
<location filename="../main.qml" line="924"/> <location filename="../main.qml" line="948"/>
<location filename="../main.qml" line="972"/> <location filename="../main.qml" line="996"/>
<location filename="../main.qml" line="1084"/> <location filename="../main.qml" line="1108"/>
<location filename="../main.qml" line="1546"/> <location filename="../main.qml" line="1593"/>
<source>Error</source> <source>Error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="335"/> <location filename="../main.qml" line="338"/>
<location filename="../main.qml" line="541"/> <location filename="../main.qml" line="551"/>
<source>Couldn&apos;t open wallet: </source> <source>Couldn&apos;t open wallet: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="690"/> <location filename="../main.qml" line="714"/>
<source>Waiting for daemon to start...</source> <source>Waiting for daemon to start...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="698"/> <location filename="../main.qml" line="722"/>
<source>Waiting for daemon to stop...</source> <source>Waiting for daemon to stop...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="726"/> <location filename="../main.qml" line="750"/>
<source>Daemon failed to start</source> <source>Daemon failed to start</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="727"/> <location filename="../main.qml" line="751"/>
<source>Please check your wallet and daemon log for errors. You can also try to start %1 manually.</source> <source>Please check your wallet and daemon log for errors. You can also try to start %1 manually.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="796"/> <location filename="../main.qml" line="820"/>
<source>Can&apos;t create transaction: Wrong daemon version: </source> <source>Can&apos;t create transaction: Wrong daemon version: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="798"/> <location filename="../main.qml" line="822"/>
<location filename="../main.qml" line="916"/> <location filename="../main.qml" line="940"/>
<source>Can&apos;t create transaction: </source> <source>Can&apos;t create transaction: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="807"/> <location filename="../main.qml" line="831"/>
<location filename="../main.qml" line="925"/> <location filename="../main.qml" line="949"/>
<source>No unmixable outputs to sweep</source> <source>No unmixable outputs to sweep</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="937"/> <location filename="../main.qml" line="961"/>
<source>Confirmation</source> <source>Confirmation</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="818"/> <location filename="../main.qml" line="842"/>
<location filename="../main.qml" line="938"/> <location filename="../main.qml" line="962"/>
<source>Please confirm transaction: <source>Please confirm transaction:
</source> </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="821"/> <location filename="../main.qml" line="845"/>
<source> <source>
Payment ID: </source> Payment ID: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="822"/> <location filename="../main.qml" line="846"/>
<location filename="../main.qml" line="939"/> <location filename="../main.qml" line="963"/>
<source> <source>
Amount: </source> Amount: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="823"/> <location filename="../main.qml" line="847"/>
<location filename="../main.qml" line="940"/> <location filename="../main.qml" line="964"/>
<source> <source>
Fee: </source> Fee: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="645"/> <location filename="../main.qml" line="669"/>
<source>Waiting for daemon to sync</source> <source>Waiting for daemon to sync</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="307"/> <location filename="../main.qml" line="310"/>
<source>Closing wallet...</source> <source>Closing wallet...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="502"/> <location filename="../main.qml" line="512"/>
<source>Please proceed to the device...</source> <source>Please proceed to the device...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="514"/> <location filename="../main.qml" line="524"/>
<source>Opening wallet ...</source> <source>Opening wallet ...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="529"/> <location filename="../main.qml" line="539"/>
<location filename="../main.qml" line="536"/> <location filename="../main.qml" line="546"/>
<source>Repairing incompatible wallet cache. Resyncing wallet.</source> <source>Repairing incompatible wallet cache. Resyncing wallet.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="647"/> <location filename="../main.qml" line="671"/>
<source>Daemon is synchronized (%1)</source> <source>Daemon is synchronized (%1)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="649"/> <location filename="../main.qml" line="673"/>
<source>Wallet is synchronized</source> <source>Wallet is synchronized</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="743"/> <location filename="../main.qml" line="767"/>
<source>Daemon is synchronized</source> <source>Daemon is synchronized</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="820"/> <location filename="../main.qml" line="844"/>
<source>Address: </source> <source>Address: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="824"/> <location filename="../main.qml" line="848"/>
<source> <source>
Ringsize: </source> Ringsize: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="825"/> <location filename="../main.qml" line="849"/>
<source> <source>
Number of transactions: </source> Number of transactions: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="826"/> <location filename="../main.qml" line="850"/>
<source> <source>
Description: </source> Description: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="828"/> <location filename="../main.qml" line="852"/>
<source> <source>
Spending address index: </source> Spending address index: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="848"/> <location filename="../main.qml" line="872"/>
<source>Creating transaction...</source> <source>Creating transaction...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="849"/> <location filename="../main.qml" line="873"/>
<source> <source>
Please check your hardware wallet Please check your hardware wallet
@@ -3572,177 +3597,187 @@ your input may be required.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="964"/> <location filename="../main.qml" line="988"/>
<source>Sending transaction ...</source> <source>Sending transaction ...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="983"/> <location filename="../main.qml" line="1007"/>
<source>Monero sent successfully: %1 transaction(s) </source> <source>Monero sent successfully: %1 transaction(s) </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1000"/> <location filename="../main.qml" line="1024"/>
<source>Failed to store the wallet</source> <source>Failed to store the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1027"/> <location filename="../main.qml" line="1051"/>
<source>Payment proof</source> <source>Payment proof</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1030"/> <location filename="../main.qml" line="1054"/>
<source>Couldn&apos;t generate a proof because of the following reason: <source>Couldn&apos;t generate a proof because of the following reason:
</source> </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1060"/> <location filename="../main.qml" line="1084"/>
<location filename="../main.qml" line="1079"/> <location filename="../main.qml" line="1103"/>
<source>Payment proof check</source> <source>Payment proof check</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1063"/> <location filename="../main.qml" line="1087"/>
<location filename="../main.qml" line="1081"/> <location filename="../main.qml" line="1105"/>
<source>Bad signature</source> <source>Bad signature</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1070"/> <location filename="../main.qml" line="1094"/>
<source>This address received %1 monero, with %2 confirmation(s).</source> <source>This address received %1 monero, with %2 confirmation(s).</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1081"/> <location filename="../main.qml" line="1105"/>
<source>Good signature</source> <source>Good signature</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1443"/> <location filename="../main.qml" line="1486"/>
<location filename="../main.qml" line="2111"/> <location filename="../main.qml" line="2158"/>
<source>Wrong password</source> <source>Wrong password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1496"/> <location filename="../main.qml" line="1496"/>
<source>Warning</source> <source>Save transaction file</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1499"/> <location filename="../main.qml" line="1496"/>
<source>Error: Filesystem is read only</source> <source>Send transaction</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1501"/>
<source>Warning: There&apos;s only %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1503"/>
<source>Note: There&apos;s %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1505"/>
<source>Note: lmdb folder not found. A new folder will be created.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1543"/> <location filename="../main.qml" line="1543"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1546"/>
<source>Error: Filesystem is read only</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1548"/>
<source>Warning: There&apos;s only %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1550"/>
<source>Note: There&apos;s %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1552"/>
<source>Note: lmdb folder not found. A new folder will be created.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1590"/>
<source>Password changed successfully</source> <source>Password changed successfully</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1547"/> <location filename="../main.qml" line="1594"/>
<source>Error: </source> <source>Error: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1635"/> <location filename="../main.qml" line="1682"/>
<source>Primary account</source> <source>Primary account</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1846"/> <location filename="../main.qml" line="1893"/>
<source>Autosaved the wallet</source> <source>Autosaved the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1848"/> <location filename="../main.qml" line="1895"/>
<source>Failed to autosave the wallet</source> <source>Failed to autosave the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1963"/> <location filename="../main.qml" line="2010"/>
<source>Local node is running</source> <source>Local node is running</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1964"/> <location filename="../main.qml" line="2011"/>
<source>Do you want to stop local node or keep it running in the background?</source> <source>Do you want to stop local node or keep it running in the background?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1966"/> <location filename="../main.qml" line="2013"/>
<source>Force stop</source> <source>Force stop</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1967"/> <location filename="../main.qml" line="2014"/>
<source>Keep it running</source> <source>Keep it running</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1987"/> <location filename="../main.qml" line="2034"/>
<source>Tap again to close...</source> <source>Tap again to close...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="2002"/> <location filename="../main.qml" line="2049"/>
<source>Checking local node status...</source> <source>Checking local node status...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="862"/> <location filename="../main.qml" line="886"/>
<source>Amount is wrong: expected number from %1 to %2</source> <source>Amount is wrong: expected number from %1 to %2</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="874"/> <location filename="../main.qml" line="898"/>
<source>Insufficient funds. Unlocked balance: %1</source> <source>Insufficient funds. Unlocked balance: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="973"/> <location filename="../main.qml" line="997"/>
<source>Couldn&apos;t send the money: </source> <source>Couldn&apos;t send the money: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="977"/> <location filename="../main.qml" line="1001"/>
<location filename="../main.qml" line="1542"/> <location filename="../main.qml" line="1589"/>
<source>Information</source> <source>Information</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="983"/> <location filename="../main.qml" line="1007"/>
<source>Transaction saved to file: %1</source> <source>Transaction saved to file: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1067"/> <location filename="../main.qml" line="1091"/>
<source>This address received %1 monero, but the transaction is not yet mined</source> <source>This address received %1 monero, but the transaction is not yet mined</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1074"/> <location filename="../main.qml" line="1098"/>
<source>This address received nothing</source> <source>This address received nothing</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1595"/> <location filename="../main.qml" line="1642"/>
<source>Please wait...</source> <source>Please wait...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

View File

@@ -4,53 +4,53 @@
<context> <context>
<name>Account</name> <name>Account</name>
<message> <message>
<location filename="../pages/Account.qml" line="55"/> <location filename="../pages/Account.qml" line="57"/>
<source>Set the label of the selected account:</source> <source>Set the label of the selected account:</source>
<translation>Configureu l&apos;etiqueta del compte seleccionat:</translation> <translation>Configureu l&apos;etiqueta del compte seleccionat:</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="87"/> <location filename="../pages/Account.qml" line="89"/>
<source>Balance All</source> <source>Balance All</source>
<translation>Balanç complet</translation> <translation>Balanç complet</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="94"/> <location filename="../pages/Account.qml" line="96"/>
<source>Total balance: </source> <source>Total balance: </source>
<translation>Balanç total: </translation> <translation>Balanç total: </translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="117"/> <location filename="../pages/Account.qml" line="119"/>
<location filename="../pages/Account.qml" line="150"/> <location filename="../pages/Account.qml" line="152"/>
<source>Copied to clipboard</source> <source>Copied to clipboard</source>
<translation>S&apos;ha copiat al porta-retalls</translation> <translation>S&apos;ha copiat al porta-retalls</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="127"/> <location filename="../pages/Account.qml" line="129"/>
<source>Total unlocked balance: </source> <source>Total unlocked balance: </source>
<translation>Balanç total desbloquejat: </translation> <translation>Balanç total desbloquejat: </translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="165"/> <location filename="../pages/Account.qml" line="167"/>
<source>Accounts</source> <source>Accounts</source>
<translation>Comptes</translation> <translation>Comptes</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="258"/> <location filename="../pages/Account.qml" line="260"/>
<source>Balance: </source> <source>Balance: </source>
<translation>Balanç: </translation> <translation>Balanç: </translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="319"/> <location filename="../pages/Account.qml" line="321"/>
<source>Address copied to clipboard</source> <source>Address copied to clipboard</source>
<translation>L&apos;adreça s&apos;ha copiat al porta-retalls</translation> <translation>L&apos;adreça s&apos;ha copiat al porta-retalls</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="354"/> <location filename="../pages/Account.qml" line="356"/>
<source>Create new account</source> <source>Create new account</source>
<translation>Crea un compte nou</translation> <translation>Crea un compte nou</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="356"/> <location filename="../pages/Account.qml" line="358"/>
<source>Set the label of the new account:</source> <source>Set the label of the new account:</source>
<translation>Estableix l&apos;etiqueta del compte nou:</translation> <translation>Estableix l&apos;etiqueta del compte nou:</translation>
</message> </message>
@@ -1139,57 +1139,57 @@ Minar també li ofereix una petita possibilitat d&apos;aconseguir Monero. El seu
<context> <context>
<name>PasswordDialog</name> <name>PasswordDialog</name>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="155"/> <location filename="../components/PasswordDialog.qml" line="159"/>
<source>Please enter new wallet password</source> <source>Please enter new wallet password</source>
<translation>Introduïu una contrasenya nova per a la cartera</translation> <translation>Introduïu una contrasenya nova per a la cartera</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="157"/> <location filename="../components/PasswordDialog.qml" line="161"/>
<source>wallet password</source> <source>wallet password</source>
<translation>contrasenya de cartera</translation> <translation>contrasenya de cartera</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="157"/> <location filename="../components/PasswordDialog.qml" line="161"/>
<source>wallet device passphrase</source> <source>wallet device passphrase</source>
<translation>frase de pas de l&apos;aparell de cartera</translation> <translation>frase de pas de l&apos;aparell de cartera</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="158"/> <location filename="../components/PasswordDialog.qml" line="162"/>
<source>Please enter %1 for: </source> <source>Please enter %1 for: </source>
<translation>Introduïu %1 per a: </translation> <translation>Introduïu %1 per a: </translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="158"/> <location filename="../components/PasswordDialog.qml" line="162"/>
<source>Please enter %1</source> <source>Please enter %1</source>
<translation>Introduïu %1</translation> <translation>Introduïu %1</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="170"/> <location filename="../components/PasswordDialog.qml" line="174"/>
<source>Warning: passphrase entry on host is a security risk as it can be captured by malware. It is advised to prefer device-based passphrase entry.</source> <source>Warning: passphrase entry on host is a security risk as it can be captured by malware. It is advised to prefer device-based passphrase entry.</source>
<translation>Advertència: introduir la contrasenya en un servidor és un risc de seguretat, ja que pot ser interceptada per programari maliciós. És preferible introduir la contrasenya a través d&apos;un dispositiu.</translation> <translation>Advertència: introduir la contrasenya en un servidor és un risc de seguretat, ja que pot ser interceptada per programari maliciós. És preferible introduir la contrasenya a través d&apos;un dispositiu.</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="199"/> <location filename="../components/PasswordDialog.qml" line="203"/>
<source>CAPSLOCKS IS ON.</source> <source>CAPSLOCKS IS ON.</source>
<translation>Bloqueig de majúscules activat.</translation> <translation>Bloqueig de majúscules activat.</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="234"/> <location filename="../components/PasswordDialog.qml" line="238"/>
<source>Please confirm new password</source> <source>Please confirm new password</source>
<translation>Confirmeu la contrasenya nova</translation> <translation>Confirmeu la contrasenya nova</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="234"/> <location filename="../components/PasswordDialog.qml" line="238"/>
<source>Please confirm wallet device passphrase</source> <source>Please confirm wallet device passphrase</source>
<translation>Confirmeu la frase de pas de l&apos;aparell de cartera</translation> <translation>Confirmeu la frase de pas de l&apos;aparell de cartera</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="278"/> <location filename="../components/PasswordDialog.qml" line="283"/>
<source>Cancel</source> <source>Cancel</source>
<translation>Cancel·lar</translation> <translation>Cancel·lar</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="286"/> <location filename="../components/PasswordDialog.qml" line="293"/>
<source>Ok</source> <source>Ok</source>
<translation>D&apos;acord</translation> <translation>D&apos;acord</translation>
</message> </message>
@@ -1409,12 +1409,12 @@ L&apos;antic arxiu de la memòria cau del portamonedes serà renombrat i es podr
<translation>Copiar al porta-retalls</translation> <translation>Copiar al porta-retalls</translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsInfo.qml" line="406"/> <location filename="../pages/settings/SettingsInfo.qml" line="408"/>
<source>Copied to clipboard</source> <source>Copied to clipboard</source>
<translation>Copiat al porta-retalls</translation> <translation>Copiat al porta-retalls</translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsInfo.qml" line="412"/> <location filename="../pages/settings/SettingsInfo.qml" line="414"/>
<source>Donate to Monero</source> <source>Donate to Monero</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -1512,7 +1512,32 @@ L&apos;antic arxiu de la memòria cau del portamonedes serà renombrat i es podr
<translation>Confirmat y habilitat</translation> <translation>Confirmat y habilitat</translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsLayout.qml" line="258"/> <location filename="../pages/settings/SettingsLayout.qml" line="262"/>
<source>Socks5 proxy (%1%2)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="263"/>
<source>remote node connections, </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="264"/>
<source>updates downloading, fetching price sources</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="276"/>
<source>IP address</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="277"/>
<source>Port</source>
<translation type="unfinished">Port</translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="289"/>
<source>Change language</source> <source>Change language</source>
<translation>Canvi d&apos;idioma</translation> <translation>Canvi d&apos;idioma</translation>
</message> </message>
@@ -2810,27 +2835,27 @@ Per al cas dels pagaments de sortida, podeu obtenir una &quot;Prova de Despesa&q
<context> <context>
<name>WizardController</name> <name>WizardController</name>
<message> <message>
<location filename="../wizard/WizardController.qml" line="310"/> <location filename="../wizard/WizardController.qml" line="309"/>
<source>Please choose a file</source> <source>Please choose a file</source>
<translation>Trieu un fitxer</translation> <translation>Trieu un fitxer</translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="356"/> <location filename="../wizard/WizardController.qml" line="355"/>
<source>Failed to store the wallet</source> <source>Failed to store the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="440"/> <location filename="../wizard/WizardController.qml" line="439"/>
<source>Please proceed to the device...</source> <source>Please proceed to the device...</source>
<translation>Procediu amb el dispositiu...</translation> <translation>Procediu amb el dispositiu...</translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="444"/> <location filename="../wizard/WizardController.qml" line="443"/>
<source>Creating wallet from device...</source> <source>Creating wallet from device...</source>
<translation>Crear un portamonedes desde el dispositiu...</translation> <translation>Crear un portamonedes desde el dispositiu...</translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="445"/> <location filename="../wizard/WizardController.qml" line="444"/>
<source> <source>
Please check your hardware wallet Please check your hardware wallet
@@ -3421,102 +3446,102 @@ Si vostè no disposa de la opció de executar el seu propi node, hi ha la opció
<context> <context>
<name>main</name> <name>main</name>
<message> <message>
<location filename="../main.qml" line="334"/> <location filename="../main.qml" line="337"/>
<location filename="../main.qml" line="794"/> <location filename="../main.qml" line="818"/>
<location filename="../main.qml" line="806"/> <location filename="../main.qml" line="830"/>
<location filename="../main.qml" line="861"/> <location filename="../main.qml" line="885"/>
<location filename="../main.qml" line="873"/> <location filename="../main.qml" line="897"/>
<location filename="../main.qml" line="915"/> <location filename="../main.qml" line="939"/>
<location filename="../main.qml" line="924"/> <location filename="../main.qml" line="948"/>
<location filename="../main.qml" line="972"/> <location filename="../main.qml" line="996"/>
<location filename="../main.qml" line="1084"/> <location filename="../main.qml" line="1108"/>
<location filename="../main.qml" line="1546"/> <location filename="../main.qml" line="1593"/>
<source>Error</source> <source>Error</source>
<translation>Error</translation> <translation>Error</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="335"/> <location filename="../main.qml" line="338"/>
<location filename="../main.qml" line="541"/> <location filename="../main.qml" line="551"/>
<source>Couldn&apos;t open wallet: </source> <source>Couldn&apos;t open wallet: </source>
<translation>No s&apos;ha pogut obrir el portamonedes: </translation> <translation>No s&apos;ha pogut obrir el portamonedes: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="502"/> <location filename="../main.qml" line="512"/>
<source>Please proceed to the device...</source> <source>Please proceed to the device...</source>
<translation>Procedeixi al dispositiu...</translation> <translation>Procedeixi al dispositiu...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="514"/> <location filename="../main.qml" line="524"/>
<source>Opening wallet ...</source> <source>Opening wallet ...</source>
<translation>Obrint portamonedes ...</translation> <translation>Obrint portamonedes ...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="529"/> <location filename="../main.qml" line="539"/>
<location filename="../main.qml" line="536"/> <location filename="../main.qml" line="546"/>
<source>Repairing incompatible wallet cache. Resyncing wallet.</source> <source>Repairing incompatible wallet cache. Resyncing wallet.</source>
<translation>Reparant incompatibilitats amb la memòria cau del portamonedes. Resincronitzant portamonedes.</translation> <translation>Reparant incompatibilitats amb la memòria cau del portamonedes. Resincronitzant portamonedes.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="645"/> <location filename="../main.qml" line="669"/>
<source>Waiting for daemon to sync</source> <source>Waiting for daemon to sync</source>
<translation>Esperant a la sincronització del daemon</translation> <translation>Esperant a la sincronització del daemon</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="647"/> <location filename="../main.qml" line="671"/>
<source>Daemon is synchronized (%1)</source> <source>Daemon is synchronized (%1)</source>
<translation>Daemon sincronitzat (%1)</translation> <translation>Daemon sincronitzat (%1)</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="649"/> <location filename="../main.qml" line="673"/>
<source>Wallet is synchronized</source> <source>Wallet is synchronized</source>
<translation>Portamonedes sincronitzat</translation> <translation>Portamonedes sincronitzat</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="690"/> <location filename="../main.qml" line="714"/>
<source>Waiting for daemon to start...</source> <source>Waiting for daemon to start...</source>
<translation>Esperant l&apos;inici del daemon...</translation> <translation>Esperant l&apos;inici del daemon...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="698"/> <location filename="../main.qml" line="722"/>
<source>Waiting for daemon to stop...</source> <source>Waiting for daemon to stop...</source>
<translation>Esperant a que el daemon s&apos;aturi...</translation> <translation>Esperant a que el daemon s&apos;aturi...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="743"/> <location filename="../main.qml" line="767"/>
<source>Daemon is synchronized</source> <source>Daemon is synchronized</source>
<translation>Daemon sincronitzat</translation> <translation>Daemon sincronitzat</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="796"/> <location filename="../main.qml" line="820"/>
<source>Can&apos;t create transaction: Wrong daemon version: </source> <source>Can&apos;t create transaction: Wrong daemon version: </source>
<translation>No s&apos;ha pogut crear la transacció: Versió de daemon incorrecta: </translation> <translation>No s&apos;ha pogut crear la transacció: Versió de daemon incorrecta: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="798"/> <location filename="../main.qml" line="822"/>
<location filename="../main.qml" line="916"/> <location filename="../main.qml" line="940"/>
<source>Can&apos;t create transaction: </source> <source>Can&apos;t create transaction: </source>
<translation>No es pot crear la transacció: </translation> <translation>No es pot crear la transacció: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="807"/> <location filename="../main.qml" line="831"/>
<location filename="../main.qml" line="925"/> <location filename="../main.qml" line="949"/>
<source>No unmixable outputs to sweep</source> <source>No unmixable outputs to sweep</source>
<translation>No hi ha sortides no-mesclables per escombrar</translation> <translation>No hi ha sortides no-mesclables per escombrar</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="820"/> <location filename="../main.qml" line="844"/>
<source>Address: </source> <source>Address: </source>
<translation>Adreça: </translation> <translation>Adreça: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="824"/> <location filename="../main.qml" line="848"/>
<source> <source>
Ringsize: </source> Ringsize: </source>
<translation> <translation>
Tamany d&apos;anell: </translation> Tamany d&apos;anell: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="825"/> <location filename="../main.qml" line="849"/>
<source> <source>
Number of transactions: </source> Number of transactions: </source>
@@ -3525,35 +3550,35 @@ Number of transactions: </source>
Número de transaccions: </translation> Número de transaccions: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="826"/> <location filename="../main.qml" line="850"/>
<source> <source>
Description: </source> Description: </source>
<translation> <translation>
Descripció: </translation> Descripció: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="937"/> <location filename="../main.qml" line="961"/>
<source>Confirmation</source> <source>Confirmation</source>
<translation>Confirmació</translation> <translation>Confirmació</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="818"/> <location filename="../main.qml" line="842"/>
<location filename="../main.qml" line="938"/> <location filename="../main.qml" line="962"/>
<source>Please confirm transaction: <source>Please confirm transaction:
</source> </source>
<translation>Confirmar transacció: <translation>Confirmar transacció:
</translation> </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="821"/> <location filename="../main.qml" line="845"/>
<source> <source>
Payment ID: </source> Payment ID: </source>
<translation> <translation>
ID de pagament: </translation> ID de pagament: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="822"/> <location filename="../main.qml" line="846"/>
<location filename="../main.qml" line="939"/> <location filename="../main.qml" line="963"/>
<source> <source>
Amount: </source> Amount: </source>
@@ -3562,71 +3587,71 @@ Amount: </source>
Quantitat: </translation> Quantitat: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="823"/> <location filename="../main.qml" line="847"/>
<location filename="../main.qml" line="940"/> <location filename="../main.qml" line="964"/>
<source> <source>
Fee: </source> Fee: </source>
<translation> <translation>
Comissió: </translation> Comissió: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1027"/> <location filename="../main.qml" line="1051"/>
<source>Payment proof</source> <source>Payment proof</source>
<translation>Comprovant de pagament</translation> <translation>Comprovant de pagament</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1030"/> <location filename="../main.qml" line="1054"/>
<source>Couldn&apos;t generate a proof because of the following reason: <source>Couldn&apos;t generate a proof because of the following reason:
</source> </source>
<translation>No s&apos;ha pogut generar un comprovant per la següent raó: <translation>No s&apos;ha pogut generar un comprovant per la següent raó:
</translation> </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1060"/> <location filename="../main.qml" line="1084"/>
<location filename="../main.qml" line="1079"/> <location filename="../main.qml" line="1103"/>
<source>Payment proof check</source> <source>Payment proof check</source>
<translation>Revisar comprovant de pagament</translation> <translation>Revisar comprovant de pagament</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1063"/> <location filename="../main.qml" line="1087"/>
<location filename="../main.qml" line="1081"/> <location filename="../main.qml" line="1105"/>
<source>Bad signature</source> <source>Bad signature</source>
<translation>Signatura incorrecta</translation> <translation>Signatura incorrecta</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1070"/> <location filename="../main.qml" line="1094"/>
<source>This address received %1 monero, with %2 confirmation(s).</source> <source>This address received %1 monero, with %2 confirmation(s).</source>
<translation>Aquesta adreça ha rebut %1 monero, amb %2 confirmacion(s).</translation> <translation>Aquesta adreça ha rebut %1 monero, amb %2 confirmacion(s).</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="307"/> <location filename="../main.qml" line="310"/>
<source>Closing wallet...</source> <source>Closing wallet...</source>
<translation>S&apos;està tancant la cartera...</translation> <translation>S&apos;està tancant la cartera...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="726"/> <location filename="../main.qml" line="750"/>
<source>Daemon failed to start</source> <source>Daemon failed to start</source>
<translation>El daemon ha fallat al arrencar</translation> <translation>El daemon ha fallat al arrencar</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="727"/> <location filename="../main.qml" line="751"/>
<source>Please check your wallet and daemon log for errors. You can also try to start %1 manually.</source> <source>Please check your wallet and daemon log for errors. You can also try to start %1 manually.</source>
<translation>Comprovi si hi ha errors al portamonedes i als registres del daemon. També pots provar d&apos;iniciar %1 manualment.</translation> <translation>Comprovi si hi ha errors al portamonedes i als registres del daemon. També pots provar d&apos;iniciar %1 manualment.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="828"/> <location filename="../main.qml" line="852"/>
<source> <source>
Spending address index: </source> Spending address index: </source>
<translation> <translation>
Índex d&apos;adreça de despeses: </translation> Índex d&apos;adreça de despeses: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="848"/> <location filename="../main.qml" line="872"/>
<source>Creating transaction...</source> <source>Creating transaction...</source>
<translation>S&apos;està creant la transacció...</translation> <translation>S&apos;està creant la transacció...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="849"/> <location filename="../main.qml" line="873"/>
<source> <source>
Please check your hardware wallet Please check your hardware wallet
@@ -3637,149 +3662,159 @@ Reviseu la cartera de maquinari
potser se us requereix la participació.</translation> potser se us requereix la participació.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="862"/> <location filename="../main.qml" line="886"/>
<source>Amount is wrong: expected number from %1 to %2</source> <source>Amount is wrong: expected number from %1 to %2</source>
<translation>Quantitat errònea: s&apos;espera un número de %1 a %2</translation> <translation>Quantitat errònea: s&apos;espera un número de %1 a %2</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="874"/> <location filename="../main.qml" line="898"/>
<source>Insufficient funds. Unlocked balance: %1</source> <source>Insufficient funds. Unlocked balance: %1</source>
<translation>Fons insuficients. Balanç desbloquejat %1</translation> <translation>Fons insuficients. Balanç desbloquejat %1</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="964"/> <location filename="../main.qml" line="988"/>
<source>Sending transaction ...</source> <source>Sending transaction ...</source>
<translation>Enviant transacció ...</translation> <translation>Enviant transacció ...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="973"/> <location filename="../main.qml" line="997"/>
<source>Couldn&apos;t send the money: </source> <source>Couldn&apos;t send the money: </source>
<translation>No s&apos;han pogut enviar els diners: </translation> <translation>No s&apos;han pogut enviar els diners: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="977"/> <location filename="../main.qml" line="1001"/>
<location filename="../main.qml" line="1542"/> <location filename="../main.qml" line="1589"/>
<source>Information</source> <source>Information</source>
<translation>Informació</translation> <translation>Informació</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="983"/> <location filename="../main.qml" line="1007"/>
<source>Transaction saved to file: %1</source> <source>Transaction saved to file: %1</source>
<translation>Transacció guardada al fitxer: %1</translation> <translation>Transacció guardada al fitxer: %1</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="983"/> <location filename="../main.qml" line="1007"/>
<source>Monero sent successfully: %1 transaction(s) </source> <source>Monero sent successfully: %1 transaction(s) </source>
<translation>Monero ha enviat amb èxit: %1 transaccions </translation> <translation>Monero ha enviat amb èxit: %1 transaccions </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1000"/> <location filename="../main.qml" line="1024"/>
<source>Failed to store the wallet</source> <source>Failed to store the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1067"/> <location filename="../main.qml" line="1091"/>
<source>This address received %1 monero, but the transaction is not yet mined</source> <source>This address received %1 monero, but the transaction is not yet mined</source>
<translation>Aquesta adreça ha rebut %1 monero, però la transacció encara no ha estat minada</translation> <translation>Aquesta adreça ha rebut %1 monero, però la transacció encara no ha estat minada</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1074"/> <location filename="../main.qml" line="1098"/>
<source>This address received nothing</source> <source>This address received nothing</source>
<translation>Aquesta adreça no ha rebut res</translation> <translation>Aquesta adreça no ha rebut res</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1081"/> <location filename="../main.qml" line="1105"/>
<source>Good signature</source> <source>Good signature</source>
<translation>Signatura correcta</translation> <translation>Signatura correcta</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1635"/> <location filename="../main.qml" line="1496"/>
<source>Save transaction file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1496"/>
<source>Send transaction</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1682"/>
<source>Primary account</source> <source>Primary account</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1846"/> <location filename="../main.qml" line="1893"/>
<source>Autosaved the wallet</source> <source>Autosaved the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1848"/> <location filename="../main.qml" line="1895"/>
<source>Failed to autosave the wallet</source> <source>Failed to autosave the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1963"/> <location filename="../main.qml" line="2010"/>
<source>Local node is running</source> <source>Local node is running</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1964"/> <location filename="../main.qml" line="2011"/>
<source>Do you want to stop local node or keep it running in the background?</source> <source>Do you want to stop local node or keep it running in the background?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1966"/> <location filename="../main.qml" line="2013"/>
<source>Force stop</source> <source>Force stop</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1967"/> <location filename="../main.qml" line="2014"/>
<source>Keep it running</source> <source>Keep it running</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="2002"/> <location filename="../main.qml" line="2049"/>
<source>Checking local node status...</source> <source>Checking local node status...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1443"/> <location filename="../main.qml" line="1486"/>
<location filename="../main.qml" line="2111"/> <location filename="../main.qml" line="2158"/>
<source>Wrong password</source> <source>Wrong password</source>
<translation>Contrasenya incorrecta</translation> <translation>Contrasenya incorrecta</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1496"/> <location filename="../main.qml" line="1543"/>
<source>Warning</source> <source>Warning</source>
<translation>Advertència</translation> <translation>Advertència</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1499"/> <location filename="../main.qml" line="1546"/>
<source>Error: Filesystem is read only</source> <source>Error: Filesystem is read only</source>
<translation>Error: El sistema d&apos;arxius és només de lectura</translation> <translation>Error: El sistema d&apos;arxius és només de lectura</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1501"/> <location filename="../main.qml" line="1548"/>
<source>Warning: There&apos;s only %1 GB available on the device. Blockchain requires ~%2 GB of data.</source> <source>Warning: There&apos;s only %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation>Advertència: Hi ha només %1 GB disponible al dispositiu. La blockchain requereix ~%2 GB de dades.</translation> <translation>Advertència: Hi ha només %1 GB disponible al dispositiu. La blockchain requereix ~%2 GB de dades.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1503"/> <location filename="../main.qml" line="1550"/>
<source>Note: There&apos;s %1 GB available on the device. Blockchain requires ~%2 GB of data.</source> <source>Note: There&apos;s %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation>Nota: Hi ha %1 GB disponible al dispositiu. La blockchain requereix ~%2 GB de dades.</translation> <translation>Nota: Hi ha %1 GB disponible al dispositiu. La blockchain requereix ~%2 GB de dades.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1505"/> <location filename="../main.qml" line="1552"/>
<source>Note: lmdb folder not found. A new folder will be created.</source> <source>Note: lmdb folder not found. A new folder will be created.</source>
<translation>Nota: no s&apos;ha trobat la carpeta lmdb. Es crearà una nova carpeta.</translation> <translation>Nota: no s&apos;ha trobat la carpeta lmdb. Es crearà una nova carpeta.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1543"/> <location filename="../main.qml" line="1590"/>
<source>Password changed successfully</source> <source>Password changed successfully</source>
<translation>Contrasenya canviada amb èxit</translation> <translation>Contrasenya canviada amb èxit</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1547"/> <location filename="../main.qml" line="1594"/>
<source>Error: </source> <source>Error: </source>
<translation>Error: </translation> <translation>Error: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1595"/> <location filename="../main.qml" line="1642"/>
<source>Please wait...</source> <source>Please wait...</source>
<translation>Esperi si us plau...</translation> <translation>Esperi si us plau...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1987"/> <location filename="../main.qml" line="2034"/>
<source>Tap again to close...</source> <source>Tap again to close...</source>
<translation>Premi de nou per tancar...</translation> <translation>Premi de nou per tancar...</translation>
</message> </message>

View File

@@ -4,53 +4,53 @@
<context> <context>
<name>Account</name> <name>Account</name>
<message> <message>
<location filename="../pages/Account.qml" line="55"/> <location filename="../pages/Account.qml" line="57"/>
<source>Set the label of the selected account:</source> <source>Set the label of the selected account:</source>
<translation>Pojmenujte vybraný účet:</translation> <translation>Pojmenujte vybraný účet:</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="87"/> <location filename="../pages/Account.qml" line="89"/>
<source>Balance All</source> <source>Balance All</source>
<translation>Zůstatky</translation> <translation>Zůstatky</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="94"/> <location filename="../pages/Account.qml" line="96"/>
<source>Total balance: </source> <source>Total balance: </source>
<translation>Celkový zůstatek</translation> <translation>Celkový zůstatek</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="117"/> <location filename="../pages/Account.qml" line="119"/>
<location filename="../pages/Account.qml" line="150"/> <location filename="../pages/Account.qml" line="152"/>
<source>Copied to clipboard</source> <source>Copied to clipboard</source>
<translation>Zkopírováno do schránky</translation> <translation>Zkopírováno do schránky</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="127"/> <location filename="../pages/Account.qml" line="129"/>
<source>Total unlocked balance: </source> <source>Total unlocked balance: </source>
<translation>Zůstatek k dispozici:</translation> <translation>Zůstatek k dispozici:</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="165"/> <location filename="../pages/Account.qml" line="167"/>
<source>Accounts</source> <source>Accounts</source>
<translation>Účty</translation> <translation>Účty</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="258"/> <location filename="../pages/Account.qml" line="260"/>
<source>Balance: </source> <source>Balance: </source>
<translation>Zůstatek:</translation> <translation>Zůstatek:</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="319"/> <location filename="../pages/Account.qml" line="321"/>
<source>Address copied to clipboard</source> <source>Address copied to clipboard</source>
<translation>Adresa zkopírována do schránky</translation> <translation>Adresa zkopírována do schránky</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="354"/> <location filename="../pages/Account.qml" line="356"/>
<source>Create new account</source> <source>Create new account</source>
<translation>Vytvořit nový účet</translation> <translation>Vytvořit nový účet</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="356"/> <location filename="../pages/Account.qml" line="358"/>
<source>Set the label of the new account:</source> <source>Set the label of the new account:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -1137,57 +1137,57 @@ Mining also gives you a small chance to earn some Monero. Your computer will cre
<context> <context>
<name>PasswordDialog</name> <name>PasswordDialog</name>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="155"/> <location filename="../components/PasswordDialog.qml" line="159"/>
<source>Please enter new wallet password</source> <source>Please enter new wallet password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="157"/> <location filename="../components/PasswordDialog.qml" line="161"/>
<source>wallet password</source> <source>wallet password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="157"/> <location filename="../components/PasswordDialog.qml" line="161"/>
<source>wallet device passphrase</source> <source>wallet device passphrase</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="158"/> <location filename="../components/PasswordDialog.qml" line="162"/>
<source>Please enter %1 for: </source> <source>Please enter %1 for: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="158"/> <location filename="../components/PasswordDialog.qml" line="162"/>
<source>Please enter %1</source> <source>Please enter %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="170"/> <location filename="../components/PasswordDialog.qml" line="174"/>
<source>Warning: passphrase entry on host is a security risk as it can be captured by malware. It is advised to prefer device-based passphrase entry.</source> <source>Warning: passphrase entry on host is a security risk as it can be captured by malware. It is advised to prefer device-based passphrase entry.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="199"/> <location filename="../components/PasswordDialog.qml" line="203"/>
<source>CAPSLOCKS IS ON.</source> <source>CAPSLOCKS IS ON.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="234"/> <location filename="../components/PasswordDialog.qml" line="238"/>
<source>Please confirm new password</source> <source>Please confirm new password</source>
<translation>Prosím, potvrďte nové heslo</translation> <translation>Prosím, potvrďte nové heslo</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="234"/> <location filename="../components/PasswordDialog.qml" line="238"/>
<source>Please confirm wallet device passphrase</source> <source>Please confirm wallet device passphrase</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="278"/> <location filename="../components/PasswordDialog.qml" line="283"/>
<source>Cancel</source> <source>Cancel</source>
<translation>Zrušit</translation> <translation>Zrušit</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="286"/> <location filename="../components/PasswordDialog.qml" line="293"/>
<source>Ok</source> <source>Ok</source>
<translation>OK</translation> <translation>OK</translation>
</message> </message>
@@ -1406,12 +1406,12 @@ Starý soubor s cache pamětí bude přejmenován a může být následně obnov
<translation>Zkopírovat do schránky</translation> <translation>Zkopírovat do schránky</translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsInfo.qml" line="406"/> <location filename="../pages/settings/SettingsInfo.qml" line="408"/>
<source>Copied to clipboard</source> <source>Copied to clipboard</source>
<translation>Zkopírováno do schránky</translation> <translation>Zkopírováno do schránky</translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsInfo.qml" line="412"/> <location filename="../pages/settings/SettingsInfo.qml" line="414"/>
<source>Donate to Monero</source> <source>Donate to Monero</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -1509,7 +1509,32 @@ Starý soubor s cache pamětí bude přejmenován a může být následně obnov
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsLayout.qml" line="258"/> <location filename="../pages/settings/SettingsLayout.qml" line="262"/>
<source>Socks5 proxy (%1%2)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="263"/>
<source>remote node connections, </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="264"/>
<source>updates downloading, fetching price sources</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="276"/>
<source>IP address</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="277"/>
<source>Port</source>
<translation type="unfinished">Port</translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="289"/>
<source>Change language</source> <source>Change language</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -2819,27 +2844,27 @@ V případě odchozích plateb můžete získat doklad o výdajích, který dokl
<context> <context>
<name>WizardController</name> <name>WizardController</name>
<message> <message>
<location filename="../wizard/WizardController.qml" line="310"/> <location filename="../wizard/WizardController.qml" line="309"/>
<source>Please choose a file</source> <source>Please choose a file</source>
<translation>Prosím vyberte soubor</translation> <translation>Prosím vyberte soubor</translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="356"/> <location filename="../wizard/WizardController.qml" line="355"/>
<source>Failed to store the wallet</source> <source>Failed to store the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="440"/> <location filename="../wizard/WizardController.qml" line="439"/>
<source>Please proceed to the device...</source> <source>Please proceed to the device...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="444"/> <location filename="../wizard/WizardController.qml" line="443"/>
<source>Creating wallet from device...</source> <source>Creating wallet from device...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="445"/> <location filename="../wizard/WizardController.qml" line="444"/>
<source> <source>
Please check your hardware wallet Please check your hardware wallet
@@ -3425,92 +3450,92 @@ If you don&apos;t have the option to run your own node, there&apos;s an option t
<context> <context>
<name>main</name> <name>main</name>
<message> <message>
<location filename="../main.qml" line="334"/> <location filename="../main.qml" line="337"/>
<location filename="../main.qml" line="794"/> <location filename="../main.qml" line="818"/>
<location filename="../main.qml" line="806"/> <location filename="../main.qml" line="830"/>
<location filename="../main.qml" line="861"/> <location filename="../main.qml" line="885"/>
<location filename="../main.qml" line="873"/> <location filename="../main.qml" line="897"/>
<location filename="../main.qml" line="915"/> <location filename="../main.qml" line="939"/>
<location filename="../main.qml" line="924"/> <location filename="../main.qml" line="948"/>
<location filename="../main.qml" line="972"/> <location filename="../main.qml" line="996"/>
<location filename="../main.qml" line="1084"/> <location filename="../main.qml" line="1108"/>
<location filename="../main.qml" line="1546"/> <location filename="../main.qml" line="1593"/>
<source>Error</source> <source>Error</source>
<translation>Chyba</translation> <translation>Chyba</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="335"/> <location filename="../main.qml" line="338"/>
<location filename="../main.qml" line="541"/> <location filename="../main.qml" line="551"/>
<source>Couldn&apos;t open wallet: </source> <source>Couldn&apos;t open wallet: </source>
<translation>Nemohu otevřít peněženku: </translation> <translation>Nemohu otevřít peněženku: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="690"/> <location filename="../main.qml" line="714"/>
<source>Waiting for daemon to start...</source> <source>Waiting for daemon to start...</source>
<translation>Čekám na nastartování démona...</translation> <translation>Čekám na nastartování démona...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="698"/> <location filename="../main.qml" line="722"/>
<source>Waiting for daemon to stop...</source> <source>Waiting for daemon to stop...</source>
<translation>Čekám na zastavení démona...</translation> <translation>Čekám na zastavení démona...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="726"/> <location filename="../main.qml" line="750"/>
<source>Daemon failed to start</source> <source>Daemon failed to start</source>
<translation>Démona se nepodařilo nastartovat</translation> <translation>Démona se nepodařilo nastartovat</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="727"/> <location filename="../main.qml" line="751"/>
<source>Please check your wallet and daemon log for errors. You can also try to start %1 manually.</source> <source>Please check your wallet and daemon log for errors. You can also try to start %1 manually.</source>
<translation>Prosím, zkontrolujte případné chyby v log peněženky a démona. Taktéž se můžete pokusit nastartovat %1 manuálně.</translation> <translation>Prosím, zkontrolujte případné chyby v log peněženky a démona. Taktéž se můžete pokusit nastartovat %1 manuálně.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="796"/> <location filename="../main.qml" line="820"/>
<source>Can&apos;t create transaction: Wrong daemon version: </source> <source>Can&apos;t create transaction: Wrong daemon version: </source>
<translation>Nelze vytvořit transakci: Špatná verze démona: </translation> <translation>Nelze vytvořit transakci: Špatná verze démona: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="798"/> <location filename="../main.qml" line="822"/>
<location filename="../main.qml" line="916"/> <location filename="../main.qml" line="940"/>
<source>Can&apos;t create transaction: </source> <source>Can&apos;t create transaction: </source>
<translation>Nelze vytvořit transakci: </translation> <translation>Nelze vytvořit transakci: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="807"/> <location filename="../main.qml" line="831"/>
<location filename="../main.qml" line="925"/> <location filename="../main.qml" line="949"/>
<source>No unmixable outputs to sweep</source> <source>No unmixable outputs to sweep</source>
<translation>Nemixovatelné výstupy ve sweep</translation> <translation>Nemixovatelné výstupy ve sweep</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="826"/> <location filename="../main.qml" line="850"/>
<source> <source>
Description: </source> Description: </source>
<translation> <translation>
Popisek: </translation> Popisek: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="937"/> <location filename="../main.qml" line="961"/>
<source>Confirmation</source> <source>Confirmation</source>
<translation>Potvrzení</translation> <translation>Potvrzení</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="818"/> <location filename="../main.qml" line="842"/>
<location filename="../main.qml" line="938"/> <location filename="../main.qml" line="962"/>
<source>Please confirm transaction: <source>Please confirm transaction:
</source> </source>
<translation>Prosím, potvrďte transakci: <translation>Prosím, potvrďte transakci:
</translation> </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="821"/> <location filename="../main.qml" line="845"/>
<source> <source>
Payment ID: </source> Payment ID: </source>
<translation> <translation>
ID platby: </translation> ID platby: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="822"/> <location filename="../main.qml" line="846"/>
<location filename="../main.qml" line="939"/> <location filename="../main.qml" line="963"/>
<source> <source>
Amount: </source> Amount: </source>
@@ -3519,68 +3544,68 @@ Amount: </source>
Částka: </translation> Částka: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="823"/> <location filename="../main.qml" line="847"/>
<location filename="../main.qml" line="940"/> <location filename="../main.qml" line="964"/>
<source> <source>
Fee: </source> Fee: </source>
<translation> <translation>
Poplatek: </translation> Poplatek: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="645"/> <location filename="../main.qml" line="669"/>
<source>Waiting for daemon to sync</source> <source>Waiting for daemon to sync</source>
<translation>Čekám na dokončení synchronizace démona</translation> <translation>Čekám na dokončení synchronizace démona</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="307"/> <location filename="../main.qml" line="310"/>
<source>Closing wallet...</source> <source>Closing wallet...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="502"/> <location filename="../main.qml" line="512"/>
<source>Please proceed to the device...</source> <source>Please proceed to the device...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="514"/> <location filename="../main.qml" line="524"/>
<source>Opening wallet ...</source> <source>Opening wallet ...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="529"/> <location filename="../main.qml" line="539"/>
<location filename="../main.qml" line="536"/> <location filename="../main.qml" line="546"/>
<source>Repairing incompatible wallet cache. Resyncing wallet.</source> <source>Repairing incompatible wallet cache. Resyncing wallet.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="647"/> <location filename="../main.qml" line="671"/>
<source>Daemon is synchronized (%1)</source> <source>Daemon is synchronized (%1)</source>
<translation>Démon je synchronizovaný (%1)</translation> <translation>Démon je synchronizovaný (%1)</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="649"/> <location filename="../main.qml" line="673"/>
<source>Wallet is synchronized</source> <source>Wallet is synchronized</source>
<translation>Peněženka je synchonizovaná</translation> <translation>Peněženka je synchonizovaná</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="743"/> <location filename="../main.qml" line="767"/>
<source>Daemon is synchronized</source> <source>Daemon is synchronized</source>
<translation>Démon je synchronizovaný</translation> <translation>Démon je synchronizovaný</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="820"/> <location filename="../main.qml" line="844"/>
<source>Address: </source> <source>Address: </source>
<translation>Adresa: </translation> <translation>Adresa: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="824"/> <location filename="../main.qml" line="848"/>
<source> <source>
Ringsize: </source> Ringsize: </source>
<translation> <translation>
Počet podpisovatelů: </translation> Počet podpisovatelů: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="825"/> <location filename="../main.qml" line="849"/>
<source> <source>
Number of transactions: </source> Number of transactions: </source>
@@ -3589,19 +3614,19 @@ Number of transactions: </source>
Počet transakcí: </translation> Počet transakcí: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="828"/> <location filename="../main.qml" line="852"/>
<source> <source>
Spending address index: </source> Spending address index: </source>
<translation> <translation>
Index výdajů: </translation> Index výdajů: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="848"/> <location filename="../main.qml" line="872"/>
<source>Creating transaction...</source> <source>Creating transaction...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="849"/> <location filename="../main.qml" line="873"/>
<source> <source>
Please check your hardware wallet Please check your hardware wallet
@@ -3609,178 +3634,188 @@ your input may be required.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="964"/> <location filename="../main.qml" line="988"/>
<source>Sending transaction ...</source> <source>Sending transaction ...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="983"/> <location filename="../main.qml" line="1007"/>
<source>Monero sent successfully: %1 transaction(s) </source> <source>Monero sent successfully: %1 transaction(s) </source>
<translation>Monero úspěšně odesláno: %1 transakce </translation> <translation>Monero úspěšně odesláno: %1 transakce </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1000"/> <location filename="../main.qml" line="1024"/>
<source>Failed to store the wallet</source> <source>Failed to store the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1027"/> <location filename="../main.qml" line="1051"/>
<source>Payment proof</source> <source>Payment proof</source>
<translation>Důkaz platby</translation> <translation>Důkaz platby</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1030"/> <location filename="../main.qml" line="1054"/>
<source>Couldn&apos;t generate a proof because of the following reason: <source>Couldn&apos;t generate a proof because of the following reason:
</source> </source>
<translation>Nemohu vygenerovat důkaz z následujícího důvodu: <translation>Nemohu vygenerovat důkaz z následujícího důvodu:
</translation> </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1060"/> <location filename="../main.qml" line="1084"/>
<location filename="../main.qml" line="1079"/> <location filename="../main.qml" line="1103"/>
<source>Payment proof check</source> <source>Payment proof check</source>
<translation>Zkontrolovat důkaz platby</translation> <translation>Zkontrolovat důkaz platby</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1063"/> <location filename="../main.qml" line="1087"/>
<location filename="../main.qml" line="1081"/> <location filename="../main.qml" line="1105"/>
<source>Bad signature</source> <source>Bad signature</source>
<translation>Špatný podpis</translation> <translation>Špatný podpis</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1070"/> <location filename="../main.qml" line="1094"/>
<source>This address received %1 monero, with %2 confirmation(s).</source> <source>This address received %1 monero, with %2 confirmation(s).</source>
<translation>Tato adresa obdržela %1 monero a %2 potvrzení.</translation> <translation>Tato adresa obdržela %1 monero a %2 potvrzení.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1081"/> <location filename="../main.qml" line="1105"/>
<source>Good signature</source> <source>Good signature</source>
<translation>Správný podpis</translation> <translation>Správný podpis</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1443"/> <location filename="../main.qml" line="1486"/>
<location filename="../main.qml" line="2111"/> <location filename="../main.qml" line="2158"/>
<source>Wrong password</source> <source>Wrong password</source>
<translation>Špatné heslo</translation> <translation>Špatné heslo</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1496"/> <location filename="../main.qml" line="1496"/>
<source>Save transaction file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1496"/>
<source>Send transaction</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1543"/>
<source>Warning</source> <source>Warning</source>
<translation>Varování</translation> <translation>Varování</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1499"/> <location filename="../main.qml" line="1546"/>
<source>Error: Filesystem is read only</source> <source>Error: Filesystem is read only</source>
<translation>Chyba: Souborový systém je v módu pouze pro čtení</translation> <translation>Chyba: Souborový systém je v módu pouze pro čtení</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1501"/> <location filename="../main.qml" line="1548"/>
<source>Warning: There&apos;s only %1 GB available on the device. Blockchain requires ~%2 GB of data.</source> <source>Warning: There&apos;s only %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation>Varování: na diskovém oddílu zbývá pouze %1 GB místa. Blockchain potřebuje ~%2 GB místa.</translation> <translation>Varování: na diskovém oddílu zbývá pouze %1 GB místa. Blockchain potřebuje ~%2 GB místa.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1503"/> <location filename="../main.qml" line="1550"/>
<source>Note: There&apos;s %1 GB available on the device. Blockchain requires ~%2 GB of data.</source> <source>Note: There&apos;s %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation>Poznámka: na diskovém oddílu zbývá pouze %1 GB místa. Blockchain potřebuje ~%2 GB místa.</translation> <translation>Poznámka: na diskovém oddílu zbývá pouze %1 GB místa. Blockchain potřebuje ~%2 GB místa.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1505"/> <location filename="../main.qml" line="1552"/>
<source>Note: lmdb folder not found. A new folder will be created.</source> <source>Note: lmdb folder not found. A new folder will be created.</source>
<translation>Poznánka: lmdb adresář nenalezen. Vytvořím nový.</translation> <translation>Poznánka: lmdb adresář nenalezen. Vytvořím nový.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1543"/> <location filename="../main.qml" line="1590"/>
<source>Password changed successfully</source> <source>Password changed successfully</source>
<translation>Heslo úspěšně změněno</translation> <translation>Heslo úspěšně změněno</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1547"/> <location filename="../main.qml" line="1594"/>
<source>Error: </source> <source>Error: </source>
<translation>Chyba: </translation> <translation>Chyba: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1635"/> <location filename="../main.qml" line="1682"/>
<source>Primary account</source> <source>Primary account</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1846"/> <location filename="../main.qml" line="1893"/>
<source>Autosaved the wallet</source> <source>Autosaved the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1848"/> <location filename="../main.qml" line="1895"/>
<source>Failed to autosave the wallet</source> <source>Failed to autosave the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1963"/> <location filename="../main.qml" line="2010"/>
<source>Local node is running</source> <source>Local node is running</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1964"/> <location filename="../main.qml" line="2011"/>
<source>Do you want to stop local node or keep it running in the background?</source> <source>Do you want to stop local node or keep it running in the background?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1966"/> <location filename="../main.qml" line="2013"/>
<source>Force stop</source> <source>Force stop</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1967"/> <location filename="../main.qml" line="2014"/>
<source>Keep it running</source> <source>Keep it running</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1987"/> <location filename="../main.qml" line="2034"/>
<source>Tap again to close...</source> <source>Tap again to close...</source>
<translation>Klepnutím znovu zavřete...</translation> <translation>Klepnutím znovu zavřete...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="2002"/> <location filename="../main.qml" line="2049"/>
<source>Checking local node status...</source> <source>Checking local node status...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="862"/> <location filename="../main.qml" line="886"/>
<source>Amount is wrong: expected number from %1 to %2</source> <source>Amount is wrong: expected number from %1 to %2</source>
<translation>Částka není správně: předpokládaná částka být mezi %1 %2</translation> <translation>Částka není správně: předpokládaná částka být mezi %1 %2</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="874"/> <location filename="../main.qml" line="898"/>
<source>Insufficient funds. Unlocked balance: %1</source> <source>Insufficient funds. Unlocked balance: %1</source>
<translation>Nedostatečné finanční prostředky. Neblokovaný zůstatek: %1</translation> <translation>Nedostatečné finanční prostředky. Neblokovaný zůstatek: %1</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="973"/> <location filename="../main.qml" line="997"/>
<source>Couldn&apos;t send the money: </source> <source>Couldn&apos;t send the money: </source>
<translation>Částku nelze odeslat: </translation> <translation>Částku nelze odeslat: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="977"/> <location filename="../main.qml" line="1001"/>
<location filename="../main.qml" line="1542"/> <location filename="../main.qml" line="1589"/>
<source>Information</source> <source>Information</source>
<translation>Informace</translation> <translation>Informace</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="983"/> <location filename="../main.qml" line="1007"/>
<source>Transaction saved to file: %1</source> <source>Transaction saved to file: %1</source>
<translation>Transakce uložena do souboru: %1</translation> <translation>Transakce uložena do souboru: %1</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1067"/> <location filename="../main.qml" line="1091"/>
<source>This address received %1 monero, but the transaction is not yet mined</source> <source>This address received %1 monero, but the transaction is not yet mined</source>
<translation>Tato adresa obdžela %1 monero, ale transakce jestě není potvrzená vytěžením</translation> <translation>Tato adresa obdžela %1 monero, ale transakce jestě není potvrzená vytěžením</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1074"/> <location filename="../main.qml" line="1098"/>
<source>This address received nothing</source> <source>This address received nothing</source>
<translation>Tato adresa zatím nic neobdržela</translation> <translation>Tato adresa zatím nic neobdržela</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1595"/> <location filename="../main.qml" line="1642"/>
<source>Please wait...</source> <source>Please wait...</source>
<translation>Prosím čekejte...</translation> <translation>Prosím čekejte...</translation>
</message> </message>

View File

@@ -4,53 +4,53 @@
<context> <context>
<name>Account</name> <name>Account</name>
<message> <message>
<location filename="../pages/Account.qml" line="55"/> <location filename="../pages/Account.qml" line="57"/>
<source>Set the label of the selected account:</source> <source>Set the label of the selected account:</source>
<translation>Vælg etiket af den valgte konto:</translation> <translation>Vælg etiket af den valgte konto:</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="87"/> <location filename="../pages/Account.qml" line="89"/>
<source>Balance All</source> <source>Balance All</source>
<translation>Saldo i alt</translation> <translation>Saldo i alt</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="94"/> <location filename="../pages/Account.qml" line="96"/>
<source>Total balance: </source> <source>Total balance: </source>
<translation>Saldo i alt:</translation> <translation>Saldo i alt:</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="117"/> <location filename="../pages/Account.qml" line="119"/>
<location filename="../pages/Account.qml" line="150"/> <location filename="../pages/Account.qml" line="152"/>
<source>Copied to clipboard</source> <source>Copied to clipboard</source>
<translation>Kopieret til udklipsholderen</translation> <translation>Kopieret til udklipsholderen</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="127"/> <location filename="../pages/Account.qml" line="129"/>
<source>Total unlocked balance: </source> <source>Total unlocked balance: </source>
<translation>Total ulåste balance: </translation> <translation>Total ulåste balance: </translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="165"/> <location filename="../pages/Account.qml" line="167"/>
<source>Accounts</source> <source>Accounts</source>
<translation>Kontoer</translation> <translation>Kontoer</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="258"/> <location filename="../pages/Account.qml" line="260"/>
<source>Balance: </source> <source>Balance: </source>
<translation>Saldo:</translation> <translation>Saldo:</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="319"/> <location filename="../pages/Account.qml" line="321"/>
<source>Address copied to clipboard</source> <source>Address copied to clipboard</source>
<translation>Adresse kopieret til udklipsholderen</translation> <translation>Adresse kopieret til udklipsholderen</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="354"/> <location filename="../pages/Account.qml" line="356"/>
<source>Create new account</source> <source>Create new account</source>
<translation>Opret ny konto</translation> <translation>Opret ny konto</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="356"/> <location filename="../pages/Account.qml" line="358"/>
<source>Set the label of the new account:</source> <source>Set the label of the new account:</source>
<translation>Vælg etiketten til den nye konto:</translation> <translation>Vælg etiketten til den nye konto:</translation>
</message> </message>
@@ -1140,57 +1140,57 @@ Mining giver dig også en lille chance for at tjene nogen Monero. Din computer v
<context> <context>
<name>PasswordDialog</name> <name>PasswordDialog</name>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="155"/> <location filename="../components/PasswordDialog.qml" line="159"/>
<source>Please enter new wallet password</source> <source>Please enter new wallet password</source>
<translation>Indtast venligst nyt tegnebogs-kodeord</translation> <translation>Indtast venligst nyt tegnebogs-kodeord</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="157"/> <location filename="../components/PasswordDialog.qml" line="161"/>
<source>wallet password</source> <source>wallet password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="157"/> <location filename="../components/PasswordDialog.qml" line="161"/>
<source>wallet device passphrase</source> <source>wallet device passphrase</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="158"/> <location filename="../components/PasswordDialog.qml" line="162"/>
<source>Please enter %1 for: </source> <source>Please enter %1 for: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="158"/> <location filename="../components/PasswordDialog.qml" line="162"/>
<source>Please enter %1</source> <source>Please enter %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="170"/> <location filename="../components/PasswordDialog.qml" line="174"/>
<source>Warning: passphrase entry on host is a security risk as it can be captured by malware. It is advised to prefer device-based passphrase entry.</source> <source>Warning: passphrase entry on host is a security risk as it can be captured by malware. It is advised to prefer device-based passphrase entry.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="199"/> <location filename="../components/PasswordDialog.qml" line="203"/>
<source>CAPSLOCKS IS ON.</source> <source>CAPSLOCKS IS ON.</source>
<translation>CAPS LOCK er slået til.</translation> <translation>CAPS LOCK er slået til.</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="234"/> <location filename="../components/PasswordDialog.qml" line="238"/>
<source>Please confirm new password</source> <source>Please confirm new password</source>
<translation>Venligst bekræft nye kodeord</translation> <translation>Venligst bekræft nye kodeord</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="234"/> <location filename="../components/PasswordDialog.qml" line="238"/>
<source>Please confirm wallet device passphrase</source> <source>Please confirm wallet device passphrase</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="278"/> <location filename="../components/PasswordDialog.qml" line="283"/>
<source>Cancel</source> <source>Cancel</source>
<translation>Afbryd</translation> <translation>Afbryd</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="286"/> <location filename="../components/PasswordDialog.qml" line="293"/>
<source>Ok</source> <source>Ok</source>
<translation>Ok</translation> <translation>Ok</translation>
</message> </message>
@@ -1408,12 +1408,12 @@ The old wallet cache file will be renamed and can be restored later.
<translation>Kopier til udklipsholder</translation> <translation>Kopier til udklipsholder</translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsInfo.qml" line="406"/> <location filename="../pages/settings/SettingsInfo.qml" line="408"/>
<source>Copied to clipboard</source> <source>Copied to clipboard</source>
<translation>Kopieret til udklipsholderen</translation> <translation>Kopieret til udklipsholderen</translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsInfo.qml" line="412"/> <location filename="../pages/settings/SettingsInfo.qml" line="414"/>
<source>Donate to Monero</source> <source>Donate to Monero</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -1511,7 +1511,32 @@ The old wallet cache file will be renamed and can be restored later.
<translation>Bekræft og slå til</translation> <translation>Bekræft og slå til</translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsLayout.qml" line="258"/> <location filename="../pages/settings/SettingsLayout.qml" line="262"/>
<source>Socks5 proxy (%1%2)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="263"/>
<source>remote node connections, </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="264"/>
<source>updates downloading, fetching price sources</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="276"/>
<source>IP address</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="277"/>
<source>Port</source>
<translation type="unfinished">Port</translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="289"/>
<source>Change language</source> <source>Change language</source>
<translation>Vælg sprog</translation> <translation>Vælg sprog</translation>
</message> </message>
@@ -2804,27 +2829,27 @@ For the case of outgoing payments, you can get a &apos;Spend Proof&apos; that pr
<context> <context>
<name>WizardController</name> <name>WizardController</name>
<message> <message>
<location filename="../wizard/WizardController.qml" line="310"/> <location filename="../wizard/WizardController.qml" line="309"/>
<source>Please choose a file</source> <source>Please choose a file</source>
<translation>Vælg venligst en fil</translation> <translation>Vælg venligst en fil</translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="356"/> <location filename="../wizard/WizardController.qml" line="355"/>
<source>Failed to store the wallet</source> <source>Failed to store the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="440"/> <location filename="../wizard/WizardController.qml" line="439"/>
<source>Please proceed to the device...</source> <source>Please proceed to the device...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="444"/> <location filename="../wizard/WizardController.qml" line="443"/>
<source>Creating wallet from device...</source> <source>Creating wallet from device...</source>
<translation>Opretter tegnebog fra enhed...</translation> <translation>Opretter tegnebog fra enhed...</translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="445"/> <location filename="../wizard/WizardController.qml" line="444"/>
<source> <source>
Please check your hardware wallet Please check your hardware wallet
@@ -3410,178 +3435,178 @@ If you don&apos;t have the option to run your own node, there&apos;s an option t
<context> <context>
<name>main</name> <name>main</name>
<message> <message>
<location filename="../main.qml" line="334"/> <location filename="../main.qml" line="337"/>
<location filename="../main.qml" line="794"/> <location filename="../main.qml" line="818"/>
<location filename="../main.qml" line="806"/> <location filename="../main.qml" line="830"/>
<location filename="../main.qml" line="861"/> <location filename="../main.qml" line="885"/>
<location filename="../main.qml" line="873"/> <location filename="../main.qml" line="897"/>
<location filename="../main.qml" line="915"/> <location filename="../main.qml" line="939"/>
<location filename="../main.qml" line="924"/> <location filename="../main.qml" line="948"/>
<location filename="../main.qml" line="972"/> <location filename="../main.qml" line="996"/>
<location filename="../main.qml" line="1084"/> <location filename="../main.qml" line="1108"/>
<location filename="../main.qml" line="1546"/> <location filename="../main.qml" line="1593"/>
<source>Error</source> <source>Error</source>
<translation>Fejl</translation> <translation>Fejl</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="335"/> <location filename="../main.qml" line="338"/>
<location filename="../main.qml" line="541"/> <location filename="../main.qml" line="551"/>
<source>Couldn&apos;t open wallet: </source> <source>Couldn&apos;t open wallet: </source>
<translation>Kunne ikke åbne tegnebog: </translation> <translation>Kunne ikke åbne tegnebog: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="690"/> <location filename="../main.qml" line="714"/>
<source>Waiting for daemon to start...</source> <source>Waiting for daemon to start...</source>
<translation>Venter at daemonen starter...</translation> <translation>Venter at daemonen starter...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="698"/> <location filename="../main.qml" line="722"/>
<source>Waiting for daemon to stop...</source> <source>Waiting for daemon to stop...</source>
<translation>Venter daemonen stopper...</translation> <translation>Venter daemonen stopper...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="726"/> <location filename="../main.qml" line="750"/>
<source>Daemon failed to start</source> <source>Daemon failed to start</source>
<translation>Daemonen fejlede i at starte</translation> <translation>Daemonen fejlede i at starte</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="727"/> <location filename="../main.qml" line="751"/>
<source>Please check your wallet and daemon log for errors. You can also try to start %1 manually.</source> <source>Please check your wallet and daemon log for errors. You can also try to start %1 manually.</source>
<translation>Tjek din tegnebog og daemon for fejl. Du kan også prøve at starte %1 manuelt.</translation> <translation>Tjek din tegnebog og daemon for fejl. Du kan også prøve at starte %1 manuelt.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="796"/> <location filename="../main.qml" line="820"/>
<source>Can&apos;t create transaction: Wrong daemon version: </source> <source>Can&apos;t create transaction: Wrong daemon version: </source>
<translation>Kan ikke oprette transaktion. Forkert daemon version: </translation> <translation>Kan ikke oprette transaktion. Forkert daemon version: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="798"/> <location filename="../main.qml" line="822"/>
<location filename="../main.qml" line="916"/> <location filename="../main.qml" line="940"/>
<source>Can&apos;t create transaction: </source> <source>Can&apos;t create transaction: </source>
<translation>Kan ikke oprette transaktion: </translation> <translation>Kan ikke oprette transaktion: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="807"/> <location filename="../main.qml" line="831"/>
<location filename="../main.qml" line="925"/> <location filename="../main.qml" line="949"/>
<source>No unmixable outputs to sweep</source> <source>No unmixable outputs to sweep</source>
<translation>Kan ikke blande outputs til sweep</translation> <translation>Kan ikke blande outputs til sweep</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="937"/> <location filename="../main.qml" line="961"/>
<source>Confirmation</source> <source>Confirmation</source>
<translation>Bekræftelse</translation> <translation>Bekræftelse</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="818"/> <location filename="../main.qml" line="842"/>
<location filename="../main.qml" line="938"/> <location filename="../main.qml" line="962"/>
<source>Please confirm transaction: <source>Please confirm transaction:
</source> </source>
<translation>Vælg bekæft transaktion:</translation> <translation>Vælg bekæft transaktion:</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="821"/> <location filename="../main.qml" line="845"/>
<source> <source>
Payment ID: </source> Payment ID: </source>
<translation>Betalings ID:</translation> <translation>Betalings ID:</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="822"/> <location filename="../main.qml" line="846"/>
<location filename="../main.qml" line="939"/> <location filename="../main.qml" line="963"/>
<source> <source>
Amount: </source> Amount: </source>
<translation>Beløb: </translation> <translation>Beløb: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="823"/> <location filename="../main.qml" line="847"/>
<location filename="../main.qml" line="940"/> <location filename="../main.qml" line="964"/>
<source> <source>
Fee: </source> Fee: </source>
<translation>Gebyr: </translation> <translation>Gebyr: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1027"/> <location filename="../main.qml" line="1051"/>
<source>Payment proof</source> <source>Payment proof</source>
<translation>Betalings bevis</translation> <translation>Betalings bevis</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="645"/> <location filename="../main.qml" line="669"/>
<source>Waiting for daemon to sync</source> <source>Waiting for daemon to sync</source>
<translation>Venter daemonen synkroniserer</translation> <translation>Venter daemonen synkroniserer</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="307"/> <location filename="../main.qml" line="310"/>
<source>Closing wallet...</source> <source>Closing wallet...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="502"/> <location filename="../main.qml" line="512"/>
<source>Please proceed to the device...</source> <source>Please proceed to the device...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="514"/> <location filename="../main.qml" line="524"/>
<source>Opening wallet ...</source> <source>Opening wallet ...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="529"/> <location filename="../main.qml" line="539"/>
<location filename="../main.qml" line="536"/> <location filename="../main.qml" line="546"/>
<source>Repairing incompatible wallet cache. Resyncing wallet.</source> <source>Repairing incompatible wallet cache. Resyncing wallet.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="647"/> <location filename="../main.qml" line="671"/>
<source>Daemon is synchronized (%1)</source> <source>Daemon is synchronized (%1)</source>
<translation>Daemon er synkroniseret (%1)</translation> <translation>Daemon er synkroniseret (%1)</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="649"/> <location filename="../main.qml" line="673"/>
<source>Wallet is synchronized</source> <source>Wallet is synchronized</source>
<translation>Tegnebog er synkroniseret</translation> <translation>Tegnebog er synkroniseret</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="743"/> <location filename="../main.qml" line="767"/>
<source>Daemon is synchronized</source> <source>Daemon is synchronized</source>
<translation>Daemon er synkroniseret</translation> <translation>Daemon er synkroniseret</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="820"/> <location filename="../main.qml" line="844"/>
<source>Address: </source> <source>Address: </source>
<translation>Adresse: </translation> <translation>Adresse: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="824"/> <location filename="../main.qml" line="848"/>
<source> <source>
Ringsize: </source> Ringsize: </source>
<translation>Ringstørrelse:</translation> <translation>Ringstørrelse:</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="825"/> <location filename="../main.qml" line="849"/>
<source> <source>
Number of transactions: </source> Number of transactions: </source>
<translation>Antal af transaktioner: </translation> <translation>Antal af transaktioner: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="826"/> <location filename="../main.qml" line="850"/>
<source> <source>
Description: </source> Description: </source>
<translation>Beskrivelse: </translation> <translation>Beskrivelse: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="828"/> <location filename="../main.qml" line="852"/>
<source> <source>
Spending address index: </source> Spending address index: </source>
<translation>Brugs adresse indeks: </translation> <translation>Brugs adresse indeks: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="848"/> <location filename="../main.qml" line="872"/>
<source>Creating transaction...</source> <source>Creating transaction...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="849"/> <location filename="../main.qml" line="873"/>
<source> <source>
Please check your hardware wallet Please check your hardware wallet
@@ -3589,172 +3614,182 @@ your input may be required.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="964"/> <location filename="../main.qml" line="988"/>
<source>Sending transaction ...</source> <source>Sending transaction ...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="983"/> <location filename="../main.qml" line="1007"/>
<source>Monero sent successfully: %1 transaction(s) </source> <source>Monero sent successfully: %1 transaction(s) </source>
<translation>Monero sendt med succes: %1 transkation(er)</translation> <translation>Monero sendt med succes: %1 transkation(er)</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1000"/> <location filename="../main.qml" line="1024"/>
<source>Failed to store the wallet</source> <source>Failed to store the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1030"/> <location filename="../main.qml" line="1054"/>
<source>Couldn&apos;t generate a proof because of the following reason: <source>Couldn&apos;t generate a proof because of the following reason:
</source> </source>
<translation>Kunne ikke generer et bevis grund af følgende: </translation> <translation>Kunne ikke generer et bevis grund af følgende: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1060"/> <location filename="../main.qml" line="1084"/>
<location filename="../main.qml" line="1079"/> <location filename="../main.qml" line="1103"/>
<source>Payment proof check</source> <source>Payment proof check</source>
<translation>Betalings bevis check</translation> <translation>Betalings bevis check</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1063"/> <location filename="../main.qml" line="1087"/>
<location filename="../main.qml" line="1081"/> <location filename="../main.qml" line="1105"/>
<source>Bad signature</source> <source>Bad signature</source>
<translation>Dårlig signatur</translation> <translation>Dårlig signatur</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1070"/> <location filename="../main.qml" line="1094"/>
<source>This address received %1 monero, with %2 confirmation(s).</source> <source>This address received %1 monero, with %2 confirmation(s).</source>
<translation>Denne adresse modtog %1 monero, med %2 bekræftelse(r).</translation> <translation>Denne adresse modtog %1 monero, med %2 bekræftelse(r).</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1081"/> <location filename="../main.qml" line="1105"/>
<source>Good signature</source> <source>Good signature</source>
<translation>God signatur</translation> <translation>God signatur</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1443"/> <location filename="../main.qml" line="1486"/>
<location filename="../main.qml" line="2111"/> <location filename="../main.qml" line="2158"/>
<source>Wrong password</source> <source>Wrong password</source>
<translation>Forkert kodeord</translation> <translation>Forkert kodeord</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1496"/> <location filename="../main.qml" line="1496"/>
<source>Save transaction file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1496"/>
<source>Send transaction</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1543"/>
<source>Warning</source> <source>Warning</source>
<translation>Advarsel</translation> <translation>Advarsel</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1499"/> <location filename="../main.qml" line="1546"/>
<source>Error: Filesystem is read only</source> <source>Error: Filesystem is read only</source>
<translation>Fejl: Filsystem er kun læseligt</translation> <translation>Fejl: Filsystem er kun læseligt</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1501"/> <location filename="../main.qml" line="1548"/>
<source>Warning: There&apos;s only %1 GB available on the device. Blockchain requires ~%2 GB of data.</source> <source>Warning: There&apos;s only %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation>Advarsel: Der er kun %1 GB ledigt din enhed. Blockchainen kræver ~%2 GB data.</translation> <translation>Advarsel: Der er kun %1 GB ledigt din enhed. Blockchainen kræver ~%2 GB data.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1503"/> <location filename="../main.qml" line="1550"/>
<source>Note: There&apos;s %1 GB available on the device. Blockchain requires ~%2 GB of data.</source> <source>Note: There&apos;s %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation>Note: Der er %1 GB ledigt denne enhed. Blockchainen kræver ~%2 GB af data.</translation> <translation>Note: Der er %1 GB ledigt denne enhed. Blockchainen kræver ~%2 GB af data.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1505"/> <location filename="../main.qml" line="1552"/>
<source>Note: lmdb folder not found. A new folder will be created.</source> <source>Note: lmdb folder not found. A new folder will be created.</source>
<translation>Note: lmdb mappe ikke fundet. En ny mappe ville blive oprettet.</translation> <translation>Note: lmdb mappe ikke fundet. En ny mappe ville blive oprettet.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1543"/> <location filename="../main.qml" line="1590"/>
<source>Password changed successfully</source> <source>Password changed successfully</source>
<translation>Kodeord skiftet med succes</translation> <translation>Kodeord skiftet med succes</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1547"/> <location filename="../main.qml" line="1594"/>
<source>Error: </source> <source>Error: </source>
<translation>Fejl: </translation> <translation>Fejl: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1635"/> <location filename="../main.qml" line="1682"/>
<source>Primary account</source> <source>Primary account</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1846"/> <location filename="../main.qml" line="1893"/>
<source>Autosaved the wallet</source> <source>Autosaved the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1848"/> <location filename="../main.qml" line="1895"/>
<source>Failed to autosave the wallet</source> <source>Failed to autosave the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1963"/> <location filename="../main.qml" line="2010"/>
<source>Local node is running</source> <source>Local node is running</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1964"/> <location filename="../main.qml" line="2011"/>
<source>Do you want to stop local node or keep it running in the background?</source> <source>Do you want to stop local node or keep it running in the background?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1966"/> <location filename="../main.qml" line="2013"/>
<source>Force stop</source> <source>Force stop</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1967"/> <location filename="../main.qml" line="2014"/>
<source>Keep it running</source> <source>Keep it running</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1987"/> <location filename="../main.qml" line="2034"/>
<source>Tap again to close...</source> <source>Tap again to close...</source>
<translation>Tryk igen for at lukke...</translation> <translation>Tryk igen for at lukke...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="2002"/> <location filename="../main.qml" line="2049"/>
<source>Checking local node status...</source> <source>Checking local node status...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="862"/> <location filename="../main.qml" line="886"/>
<source>Amount is wrong: expected number from %1 to %2</source> <source>Amount is wrong: expected number from %1 to %2</source>
<translation>Beløb er forkert: Forventede nummer fra %1 til %2</translation> <translation>Beløb er forkert: Forventede nummer fra %1 til %2</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="874"/> <location filename="../main.qml" line="898"/>
<source>Insufficient funds. Unlocked balance: %1</source> <source>Insufficient funds. Unlocked balance: %1</source>
<translation>Utilstrækkelig saldo. Oplåst saldo: %1</translation> <translation>Utilstrækkelig saldo. Oplåst saldo: %1</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="973"/> <location filename="../main.qml" line="997"/>
<source>Couldn&apos;t send the money: </source> <source>Couldn&apos;t send the money: </source>
<translation>Kunne ikke sende penge: </translation> <translation>Kunne ikke sende penge: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="977"/> <location filename="../main.qml" line="1001"/>
<location filename="../main.qml" line="1542"/> <location filename="../main.qml" line="1589"/>
<source>Information</source> <source>Information</source>
<translation>Information</translation> <translation>Information</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="983"/> <location filename="../main.qml" line="1007"/>
<source>Transaction saved to file: %1</source> <source>Transaction saved to file: %1</source>
<translation>Transaktion gemt til fil: %1</translation> <translation>Transaktion gemt til fil: %1</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1067"/> <location filename="../main.qml" line="1091"/>
<source>This address received %1 monero, but the transaction is not yet mined</source> <source>This address received %1 monero, but the transaction is not yet mined</source>
<translation>Denne adresse modtog %1 monero, men transaktionen er ikke minet endnu</translation> <translation>Denne adresse modtog %1 monero, men transaktionen er ikke minet endnu</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1074"/> <location filename="../main.qml" line="1098"/>
<source>This address received nothing</source> <source>This address received nothing</source>
<translation>Denne adresse modtog ingenting</translation> <translation>Denne adresse modtog ingenting</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1595"/> <location filename="../main.qml" line="1642"/>
<source>Please wait...</source> <source>Please wait...</source>
<translation>Vent venligst...</translation> <translation>Vent venligst...</translation>
</message> </message>

View File

@@ -4,53 +4,53 @@
<context> <context>
<name>Account</name> <name>Account</name>
<message> <message>
<location filename="../pages/Account.qml" line="55"/> <location filename="../pages/Account.qml" line="57"/>
<source>Set the label of the selected account:</source> <source>Set the label of the selected account:</source>
<translation>Setze eine Beschreibung für das ausgewählte Konto:</translation> <translation>Setze eine Beschreibung für das ausgewählte Konto:</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="87"/> <location filename="../pages/Account.qml" line="89"/>
<source>Balance All</source> <source>Balance All</source>
<translation>Gesamtguthaben</translation> <translation>Gesamtguthaben</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="94"/> <location filename="../pages/Account.qml" line="96"/>
<source>Total balance: </source> <source>Total balance: </source>
<translation>Gesamtguthaben: </translation> <translation>Gesamtguthaben: </translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="117"/> <location filename="../pages/Account.qml" line="119"/>
<location filename="../pages/Account.qml" line="150"/> <location filename="../pages/Account.qml" line="152"/>
<source>Copied to clipboard</source> <source>Copied to clipboard</source>
<translation>In die Zwischenablage kopiert</translation> <translation>In die Zwischenablage kopiert</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="127"/> <location filename="../pages/Account.qml" line="129"/>
<source>Total unlocked balance: </source> <source>Total unlocked balance: </source>
<translation>momentan verfügbar: </translation> <translation>momentan verfügbar: </translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="165"/> <location filename="../pages/Account.qml" line="167"/>
<source>Accounts</source> <source>Accounts</source>
<translation>Konten</translation> <translation>Konten</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="258"/> <location filename="../pages/Account.qml" line="260"/>
<source>Balance: </source> <source>Balance: </source>
<translation>Guthaben: </translation> <translation>Guthaben: </translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="319"/> <location filename="../pages/Account.qml" line="321"/>
<source>Address copied to clipboard</source> <source>Address copied to clipboard</source>
<translation>Adresse in Zwischenablage kopiert</translation> <translation>Adresse in Zwischenablage kopiert</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="354"/> <location filename="../pages/Account.qml" line="356"/>
<source>Create new account</source> <source>Create new account</source>
<translation>Neues Konto anlegen</translation> <translation>Neues Konto anlegen</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="356"/> <location filename="../pages/Account.qml" line="358"/>
<source>Set the label of the new account:</source> <source>Set the label of the new account:</source>
<translation>Vergebe eine Beschreibung für das neue Konto:</translation> <translation>Vergebe eine Beschreibung für das neue Konto:</translation>
</message> </message>
@@ -1140,57 +1140,57 @@ Wechsle zu einem anderen öffentlichen Node</translation>
<context> <context>
<name>PasswordDialog</name> <name>PasswordDialog</name>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="155"/> <location filename="../components/PasswordDialog.qml" line="159"/>
<source>Please enter new wallet password</source> <source>Please enter new wallet password</source>
<translation>Bitte gib ein neues Wallet-Passwort ein</translation> <translation>Bitte gib ein neues Wallet-Passwort ein</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="157"/> <location filename="../components/PasswordDialog.qml" line="161"/>
<source>wallet password</source> <source>wallet password</source>
<translation>Wallet Passwort</translation> <translation>Wallet Passwort</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="157"/> <location filename="../components/PasswordDialog.qml" line="161"/>
<source>wallet device passphrase</source> <source>wallet device passphrase</source>
<translation>Passphrase der Hardware-Wallet</translation> <translation>Passphrase der Hardware-Wallet</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="158"/> <location filename="../components/PasswordDialog.qml" line="162"/>
<source>Please enter %1 for: </source> <source>Please enter %1 for: </source>
<translation>Bitte gebe %1 ein für: </translation> <translation>Bitte gebe %1 ein für: </translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="158"/> <location filename="../components/PasswordDialog.qml" line="162"/>
<source>Please enter %1</source> <source>Please enter %1</source>
<translation>Bitte gebe %1 ein</translation> <translation>Bitte gebe %1 ein</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="170"/> <location filename="../components/PasswordDialog.qml" line="174"/>
<source>Warning: passphrase entry on host is a security risk as it can be captured by malware. It is advised to prefer device-based passphrase entry.</source> <source>Warning: passphrase entry on host is a security risk as it can be captured by malware. It is advised to prefer device-based passphrase entry.</source>
<translation>Warnung: Die Eingabe der Passphrase auf dem Host ist ein Sicherheitsrisiko, da es von Malware erfasst werden kann. Es wird empfohlen, die Passphrase auf dem Gerät (Device) einzugeben.</translation> <translation>Warnung: Die Eingabe der Passphrase auf dem Host ist ein Sicherheitsrisiko, da es von Malware erfasst werden kann. Es wird empfohlen, die Passphrase auf dem Gerät (Device) einzugeben.</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="199"/> <location filename="../components/PasswordDialog.qml" line="203"/>
<source>CAPSLOCKS IS ON.</source> <source>CAPSLOCKS IS ON.</source>
<translation>FESTSTELLTASTE IST AKTIVIERT.</translation> <translation>FESTSTELLTASTE IST AKTIVIERT.</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="234"/> <location filename="../components/PasswordDialog.qml" line="238"/>
<source>Please confirm new password</source> <source>Please confirm new password</source>
<translation>Bitte neues Passwort bestätigen</translation> <translation>Bitte neues Passwort bestätigen</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="234"/> <location filename="../components/PasswordDialog.qml" line="238"/>
<source>Please confirm wallet device passphrase</source> <source>Please confirm wallet device passphrase</source>
<translation>Bitte bestätige die Passphrase der Hardware-Wallet</translation> <translation>Bitte bestätige die Passphrase der Hardware-Wallet</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="278"/> <location filename="../components/PasswordDialog.qml" line="283"/>
<source>Cancel</source> <source>Cancel</source>
<translation>Abbrechen</translation> <translation>Abbrechen</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="286"/> <location filename="../components/PasswordDialog.qml" line="293"/>
<source>Ok</source> <source>Ok</source>
<translation>OK</translation> <translation>OK</translation>
</message> </message>
@@ -1410,12 +1410,12 @@ Die alte Wallet-Cache-Datei wird umbenannt und kann später wiederhergestellt we
<translation>In Zwischenablage kopieren</translation> <translation>In Zwischenablage kopieren</translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsInfo.qml" line="406"/> <location filename="../pages/settings/SettingsInfo.qml" line="408"/>
<source>Copied to clipboard</source> <source>Copied to clipboard</source>
<translation>In Zwischenablage kopiert</translation> <translation>In Zwischenablage kopiert</translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsInfo.qml" line="412"/> <location filename="../pages/settings/SettingsInfo.qml" line="414"/>
<source>Donate to Monero</source> <source>Donate to Monero</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -1513,7 +1513,32 @@ Die alte Wallet-Cache-Datei wird umbenannt und kann später wiederhergestellt we
<translation>Bestätigen und einschalten</translation> <translation>Bestätigen und einschalten</translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsLayout.qml" line="258"/> <location filename="../pages/settings/SettingsLayout.qml" line="262"/>
<source>Socks5 proxy (%1%2)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="263"/>
<source>remote node connections, </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="264"/>
<source>updates downloading, fetching price sources</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="276"/>
<source>IP address</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="277"/>
<source>Port</source>
<translation type="unfinished">Port</translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="289"/>
<source>Change language</source> <source>Change language</source>
<translation>Sprache ändern</translation> <translation>Sprache ändern</translation>
</message> </message>
@@ -2817,27 +2842,27 @@ Für einen reinen Sendenachweis muss die Empfängeradresse nicht angegeben werde
<context> <context>
<name>WizardController</name> <name>WizardController</name>
<message> <message>
<location filename="../wizard/WizardController.qml" line="310"/> <location filename="../wizard/WizardController.qml" line="309"/>
<source>Please choose a file</source> <source>Please choose a file</source>
<translation>Bitte wähle eine Datei aus</translation> <translation>Bitte wähle eine Datei aus</translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="356"/> <location filename="../wizard/WizardController.qml" line="355"/>
<source>Failed to store the wallet</source> <source>Failed to store the wallet</source>
<translation>Abspeichern der Wallet fehlgeschlagen</translation> <translation>Abspeichern der Wallet fehlgeschlagen</translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="440"/> <location filename="../wizard/WizardController.qml" line="439"/>
<source>Please proceed to the device...</source> <source>Please proceed to the device...</source>
<translation>Bitte fahre am Hardwaregerät fort...</translation> <translation>Bitte fahre am Hardwaregerät fort...</translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="444"/> <location filename="../wizard/WizardController.qml" line="443"/>
<source>Creating wallet from device...</source> <source>Creating wallet from device...</source>
<translation>Wallet wird vom Hardwaregerät erstellt...</translation> <translation>Wallet wird vom Hardwaregerät erstellt...</translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="445"/> <location filename="../wizard/WizardController.qml" line="444"/>
<source> <source>
Please check your hardware wallet Please check your hardware wallet
@@ -3430,186 +3455,186 @@ Wenn du keinen eigenen Node betreiben kannst, gibt es die Möglichkeit, sich mit
<context> <context>
<name>main</name> <name>main</name>
<message> <message>
<location filename="../main.qml" line="334"/> <location filename="../main.qml" line="337"/>
<location filename="../main.qml" line="794"/> <location filename="../main.qml" line="818"/>
<location filename="../main.qml" line="806"/> <location filename="../main.qml" line="830"/>
<location filename="../main.qml" line="861"/> <location filename="../main.qml" line="885"/>
<location filename="../main.qml" line="873"/> <location filename="../main.qml" line="897"/>
<location filename="../main.qml" line="915"/> <location filename="../main.qml" line="939"/>
<location filename="../main.qml" line="924"/> <location filename="../main.qml" line="948"/>
<location filename="../main.qml" line="972"/> <location filename="../main.qml" line="996"/>
<location filename="../main.qml" line="1084"/> <location filename="../main.qml" line="1108"/>
<location filename="../main.qml" line="1546"/> <location filename="../main.qml" line="1593"/>
<source>Error</source> <source>Error</source>
<translation>Fehler</translation> <translation>Fehler</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="335"/> <location filename="../main.qml" line="338"/>
<location filename="../main.qml" line="541"/> <location filename="../main.qml" line="551"/>
<source>Couldn&apos;t open wallet: </source> <source>Couldn&apos;t open wallet: </source>
<translation>Wallet konnte nicht geöffnet werden: </translation> <translation>Wallet konnte nicht geöffnet werden: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="645"/> <location filename="../main.qml" line="669"/>
<source>Waiting for daemon to sync</source> <source>Waiting for daemon to sync</source>
<translation>Warte auf Synchronisation des Hintergrunddienstes</translation> <translation>Warte auf Synchronisation des Hintergrunddienstes</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="647"/> <location filename="../main.qml" line="671"/>
<source>Daemon is synchronized (%1)</source> <source>Daemon is synchronized (%1)</source>
<translation>Hintergrunddienst ist synchronisiert (%1)</translation> <translation>Hintergrunddienst ist synchronisiert (%1)</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="649"/> <location filename="../main.qml" line="673"/>
<source>Wallet is synchronized</source> <source>Wallet is synchronized</source>
<translation>Wallet ist synchronisiert</translation> <translation>Wallet ist synchronisiert</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="743"/> <location filename="../main.qml" line="767"/>
<source>Daemon is synchronized</source> <source>Daemon is synchronized</source>
<translation>Hintergrunddienst ist synchronisiert</translation> <translation>Hintergrunddienst ist synchronisiert</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="796"/> <location filename="../main.qml" line="820"/>
<source>Can&apos;t create transaction: Wrong daemon version: </source> <source>Can&apos;t create transaction: Wrong daemon version: </source>
<translation>Transaktion konnte nicht erstellt werden: Falsche Version des Hintergrunddienstes: </translation> <translation>Transaktion konnte nicht erstellt werden: Falsche Version des Hintergrunddienstes: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="807"/> <location filename="../main.qml" line="831"/>
<location filename="../main.qml" line="925"/> <location filename="../main.qml" line="949"/>
<source>No unmixable outputs to sweep</source> <source>No unmixable outputs to sweep</source>
<translation>Keine verschleierungsunfähigen Kleinstbeträge zum zusammenführen</translation> <translation>Keine verschleierungsunfähigen Kleinstbeträge zum zusammenführen</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="820"/> <location filename="../main.qml" line="844"/>
<source>Address: </source> <source>Address: </source>
<translation>Adresse: </translation> <translation>Adresse: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="862"/> <location filename="../main.qml" line="886"/>
<source>Amount is wrong: expected number from %1 to %2</source> <source>Amount is wrong: expected number from %1 to %2</source>
<translation>Betrag ist falsch: Zahl muss zwischen %1 und %2 liegen</translation> <translation>Betrag ist falsch: Zahl muss zwischen %1 und %2 liegen</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1067"/> <location filename="../main.qml" line="1091"/>
<source>This address received %1 monero, but the transaction is not yet mined</source> <source>This address received %1 monero, but the transaction is not yet mined</source>
<translation>Diese Adresse hat %1 Monero empfangen, aber die Transaktion wurde noch nicht bestätigt</translation> <translation>Diese Adresse hat %1 Monero empfangen, aber die Transaktion wurde noch nicht bestätigt</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1635"/> <location filename="../main.qml" line="1682"/>
<source>Primary account</source> <source>Primary account</source>
<translation>Hauptkonto</translation> <translation>Hauptkonto</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1846"/> <location filename="../main.qml" line="1893"/>
<source>Autosaved the wallet</source> <source>Autosaved the wallet</source>
<translation>Wallet automatisch gespeichert</translation> <translation>Wallet automatisch gespeichert</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1848"/> <location filename="../main.qml" line="1895"/>
<source>Failed to autosave the wallet</source> <source>Failed to autosave the wallet</source>
<translation>Automatisches Speichern der Wallet fehlgeschlagen</translation> <translation>Automatisches Speichern der Wallet fehlgeschlagen</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1963"/> <location filename="../main.qml" line="2010"/>
<source>Local node is running</source> <source>Local node is running</source>
<translation>Lokaler Node läuft</translation> <translation>Lokaler Node läuft</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1964"/> <location filename="../main.qml" line="2011"/>
<source>Do you want to stop local node or keep it running in the background?</source> <source>Do you want to stop local node or keep it running in the background?</source>
<translation>Möchtest du den lokalen Node stoppen oder ihn im Hintergrund weiterlaufen lassen?</translation> <translation>Möchtest du den lokalen Node stoppen oder ihn im Hintergrund weiterlaufen lassen?</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1966"/> <location filename="../main.qml" line="2013"/>
<source>Force stop</source> <source>Force stop</source>
<translation>Stopp erzwingen</translation> <translation>Stopp erzwingen</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1967"/> <location filename="../main.qml" line="2014"/>
<source>Keep it running</source> <source>Keep it running</source>
<translation>Weiterlaufen lassen</translation> <translation>Weiterlaufen lassen</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1987"/> <location filename="../main.qml" line="2034"/>
<source>Tap again to close...</source> <source>Tap again to close...</source>
<translation>Drücke erneut zum schließen...</translation> <translation>Drücke erneut zum schließen...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1074"/> <location filename="../main.qml" line="1098"/>
<source>This address received nothing</source> <source>This address received nothing</source>
<translation>Diese Adresse hat nichts empfangen</translation> <translation>Diese Adresse hat nichts empfangen</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="798"/> <location filename="../main.qml" line="822"/>
<location filename="../main.qml" line="916"/> <location filename="../main.qml" line="940"/>
<source>Can&apos;t create transaction: </source> <source>Can&apos;t create transaction: </source>
<translation>Transaktion konnte nicht erstellt werden: </translation> <translation>Transaktion konnte nicht erstellt werden: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="690"/> <location filename="../main.qml" line="714"/>
<source>Waiting for daemon to start...</source> <source>Waiting for daemon to start...</source>
<translation>Warte bis der Hintergrunddienst gestartet wurde</translation> <translation>Warte bis der Hintergrunddienst gestartet wurde</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="698"/> <location filename="../main.qml" line="722"/>
<source>Waiting for daemon to stop...</source> <source>Waiting for daemon to stop...</source>
<translation>Warte bis der Hintergrunddienst beendet wurde</translation> <translation>Warte bis der Hintergrunddienst beendet wurde</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="726"/> <location filename="../main.qml" line="750"/>
<source>Daemon failed to start</source> <source>Daemon failed to start</source>
<translation>Hintergrunddienst konnte nicht gestartet werden</translation> <translation>Hintergrunddienst konnte nicht gestartet werden</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="727"/> <location filename="../main.qml" line="751"/>
<source>Please check your wallet and daemon log for errors. You can also try to start %1 manually.</source> <source>Please check your wallet and daemon log for errors. You can also try to start %1 manually.</source>
<translation>Bitte überprüfe deinen Wallet- und Hintergrunddienst-Log auf Fehler. Du kannst auch versuchen, %1 manuell zu starten.</translation> <translation>Bitte überprüfe deinen Wallet- und Hintergrunddienst-Log auf Fehler. Du kannst auch versuchen, %1 manuell zu starten.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="937"/> <location filename="../main.qml" line="961"/>
<source>Confirmation</source> <source>Confirmation</source>
<translation>Bestätigung</translation> <translation>Bestätigung</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="818"/> <location filename="../main.qml" line="842"/>
<location filename="../main.qml" line="938"/> <location filename="../main.qml" line="962"/>
<source>Please confirm transaction: <source>Please confirm transaction:
</source> </source>
<translation>Bitte bestätige Transaktion: <translation>Bitte bestätige Transaktion:
</translation> </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="307"/> <location filename="../main.qml" line="310"/>
<source>Closing wallet...</source> <source>Closing wallet...</source>
<translation>Wallet wird geschlossen...</translation> <translation>Wallet wird geschlossen...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="502"/> <location filename="../main.qml" line="512"/>
<source>Please proceed to the device...</source> <source>Please proceed to the device...</source>
<translation>Bitte fahre am Hardwaregerät fort...</translation> <translation>Bitte fahre am Hardwaregerät fort...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="514"/> <location filename="../main.qml" line="524"/>
<source>Opening wallet ...</source> <source>Opening wallet ...</source>
<translation>Wallet wird geöffnet ...</translation> <translation>Wallet wird geöffnet ...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="529"/> <location filename="../main.qml" line="539"/>
<location filename="../main.qml" line="536"/> <location filename="../main.qml" line="546"/>
<source>Repairing incompatible wallet cache. Resyncing wallet.</source> <source>Repairing incompatible wallet cache. Resyncing wallet.</source>
<translation>Inkompatibler Wallet-Cache wird repariert. Wallet wird neu synchronisiert.</translation> <translation>Inkompatibler Wallet-Cache wird repariert. Wallet wird neu synchronisiert.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="821"/> <location filename="../main.qml" line="845"/>
<source> <source>
Payment ID: </source> Payment ID: </source>
<translation> <translation>
Zahlungs-ID: </translation> Zahlungs-ID: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="822"/> <location filename="../main.qml" line="846"/>
<location filename="../main.qml" line="939"/> <location filename="../main.qml" line="963"/>
<source> <source>
Amount: </source> Amount: </source>
@@ -3618,22 +3643,22 @@ Amount: </source>
Betrag: </translation> Betrag: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="823"/> <location filename="../main.qml" line="847"/>
<location filename="../main.qml" line="940"/> <location filename="../main.qml" line="964"/>
<source> <source>
Fee: </source> Fee: </source>
<translation> <translation>
Gebühr: </translation> Gebühr: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="824"/> <location filename="../main.qml" line="848"/>
<source> <source>
Ringsize: </source> Ringsize: </source>
<translation> <translation>
Ringgröße: </translation> Ringgröße: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="825"/> <location filename="../main.qml" line="849"/>
<source> <source>
Number of transactions: </source> Number of transactions: </source>
@@ -3641,26 +3666,26 @@ Number of transactions: </source>
Anzahl der Transaktionen: </translation> Anzahl der Transaktionen: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="826"/> <location filename="../main.qml" line="850"/>
<source> <source>
Description: </source> Description: </source>
<translation> <translation>
Beschreibung: </translation> Beschreibung: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="828"/> <location filename="../main.qml" line="852"/>
<source> <source>
Spending address index: </source> Spending address index: </source>
<translation> <translation>
Indizes der beteiligten Adressen: </translation> Indizes der beteiligten Adressen: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="848"/> <location filename="../main.qml" line="872"/>
<source>Creating transaction...</source> <source>Creating transaction...</source>
<translation>Transaktion wird erstellt...</translation> <translation>Transaktion wird erstellt...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="849"/> <location filename="../main.qml" line="873"/>
<source> <source>
Please check your hardware wallet Please check your hardware wallet
@@ -3671,123 +3696,133 @@ Bitte überprüfe deine Hardware-Wallet
deine Eingabe könnte erforderlich sein.</translation> deine Eingabe könnte erforderlich sein.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="874"/> <location filename="../main.qml" line="898"/>
<source>Insufficient funds. Unlocked balance: %1</source> <source>Insufficient funds. Unlocked balance: %1</source>
<translation>Guthaben reicht nicht aus. Entsperrtes Guthaben: %1</translation> <translation>Guthaben reicht nicht aus. Entsperrtes Guthaben: %1</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="964"/> <location filename="../main.qml" line="988"/>
<source>Sending transaction ...</source> <source>Sending transaction ...</source>
<translation>Sende Transaktion ...</translation> <translation>Sende Transaktion ...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="973"/> <location filename="../main.qml" line="997"/>
<source>Couldn&apos;t send the money: </source> <source>Couldn&apos;t send the money: </source>
<translation>Konnte Geld nicht versenden: </translation> <translation>Konnte Geld nicht versenden: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="977"/> <location filename="../main.qml" line="1001"/>
<location filename="../main.qml" line="1542"/> <location filename="../main.qml" line="1589"/>
<source>Information</source> <source>Information</source>
<translation>Information</translation> <translation>Information</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="983"/> <location filename="../main.qml" line="1007"/>
<source>Transaction saved to file: %1</source> <source>Transaction saved to file: %1</source>
<translation>Transaktion wurde in Datei gespeichert: %1</translation> <translation>Transaktion wurde in Datei gespeichert: %1</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="983"/> <location filename="../main.qml" line="1007"/>
<source>Monero sent successfully: %1 transaction(s) </source> <source>Monero sent successfully: %1 transaction(s) </source>
<translation>Monero erfolgreich gesendet: %1 Transaktion(en)</translation> <translation>Monero erfolgreich gesendet: %1 Transaktion(en)</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1000"/> <location filename="../main.qml" line="1024"/>
<source>Failed to store the wallet</source> <source>Failed to store the wallet</source>
<translation type="unfinished">Abspeichern der Wallet fehlgeschlagen</translation> <translation type="unfinished">Abspeichern der Wallet fehlgeschlagen</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1027"/> <location filename="../main.qml" line="1051"/>
<source>Payment proof</source> <source>Payment proof</source>
<translation>Zahlungsnachweis</translation> <translation>Zahlungsnachweis</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1030"/> <location filename="../main.qml" line="1054"/>
<source>Couldn&apos;t generate a proof because of the following reason: <source>Couldn&apos;t generate a proof because of the following reason:
</source> </source>
<translation>Nachweis konnte aus folgendem Grund nicht generiert werden: <translation>Nachweis konnte aus folgendem Grund nicht generiert werden:
</translation> </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1060"/> <location filename="../main.qml" line="1084"/>
<location filename="../main.qml" line="1079"/> <location filename="../main.qml" line="1103"/>
<source>Payment proof check</source> <source>Payment proof check</source>
<translation>Zahlungsnachweis überprüfen</translation> <translation>Zahlungsnachweis überprüfen</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1063"/> <location filename="../main.qml" line="1087"/>
<location filename="../main.qml" line="1081"/> <location filename="../main.qml" line="1105"/>
<source>Bad signature</source> <source>Bad signature</source>
<translation>Ungültige Signatur</translation> <translation>Ungültige Signatur</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1070"/> <location filename="../main.qml" line="1094"/>
<source>This address received %1 monero, with %2 confirmation(s).</source> <source>This address received %1 monero, with %2 confirmation(s).</source>
<translation>Diese Adresse hat %1 Monero erhalten, mit %2 Bestätigung(en).</translation> <translation>Diese Adresse hat %1 Monero erhalten, mit %2 Bestätigung(en).</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1081"/> <location filename="../main.qml" line="1105"/>
<source>Good signature</source> <source>Good signature</source>
<translation>Gültige Signatur</translation> <translation>Gültige Signatur</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1443"/> <location filename="../main.qml" line="1486"/>
<location filename="../main.qml" line="2111"/> <location filename="../main.qml" line="2158"/>
<source>Wrong password</source> <source>Wrong password</source>
<translation>Falsches Passwort</translation> <translation>Falsches Passwort</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1496"/> <location filename="../main.qml" line="1496"/>
<source>Save transaction file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1496"/>
<source>Send transaction</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1543"/>
<source>Warning</source> <source>Warning</source>
<translation>Warnung</translation> <translation>Warnung</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1499"/> <location filename="../main.qml" line="1546"/>
<source>Error: Filesystem is read only</source> <source>Error: Filesystem is read only</source>
<translation>Fehler: Dateisystem ist schreibgeschützt</translation> <translation>Fehler: Dateisystem ist schreibgeschützt</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1501"/> <location filename="../main.qml" line="1548"/>
<source>Warning: There&apos;s only %1 GB available on the device. Blockchain requires ~%2 GB of data.</source> <source>Warning: There&apos;s only %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation>Warnung: Es sind nur %1 GB Speicherplatz auf diesem Laufwerk verfügbar, die Blockchain benötigt ~%2 GB Speicherplatz.</translation> <translation>Warnung: Es sind nur %1 GB Speicherplatz auf diesem Laufwerk verfügbar, die Blockchain benötigt ~%2 GB Speicherplatz.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1503"/> <location filename="../main.qml" line="1550"/>
<source>Note: There&apos;s %1 GB available on the device. Blockchain requires ~%2 GB of data.</source> <source>Note: There&apos;s %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation>Info: Es sind %1 GB Speicherplatz auf diesem Laufwerk verfügbar. Die Blockchain benötigt ~%2 GB Speicherplatz.</translation> <translation>Info: Es sind %1 GB Speicherplatz auf diesem Laufwerk verfügbar. Die Blockchain benötigt ~%2 GB Speicherplatz.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1505"/> <location filename="../main.qml" line="1552"/>
<source>Note: lmdb folder not found. A new folder will be created.</source> <source>Note: lmdb folder not found. A new folder will be created.</source>
<translation>Info: lmdb-Ordner wurde nicht gefunden. Ein neuer Ordner wird erstellt.</translation> <translation>Info: lmdb-Ordner wurde nicht gefunden. Ein neuer Ordner wird erstellt.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1543"/> <location filename="../main.qml" line="1590"/>
<source>Password changed successfully</source> <source>Password changed successfully</source>
<translation>Passwort erfolgreich geändert</translation> <translation>Passwort erfolgreich geändert</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1547"/> <location filename="../main.qml" line="1594"/>
<source>Error: </source> <source>Error: </source>
<translation>Fehler: </translation> <translation>Fehler: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1595"/> <location filename="../main.qml" line="1642"/>
<source>Please wait...</source> <source>Please wait...</source>
<translation>Bitte warten</translation> <translation>Bitte warten</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="2002"/> <location filename="../main.qml" line="2049"/>
<source>Checking local node status...</source> <source>Checking local node status...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

View File

@@ -4,53 +4,53 @@
<context> <context>
<name>Account</name> <name>Account</name>
<message> <message>
<location filename="../pages/Account.qml" line="55"/> <location filename="../pages/Account.qml" line="57"/>
<source>Set the label of the selected account:</source> <source>Set the label of the selected account:</source>
<translation>Ορίστε την ετικέτα του επιλεγμένου λογαριασμού:</translation> <translation>Ορίστε την ετικέτα του επιλεγμένου λογαριασμού:</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="87"/> <location filename="../pages/Account.qml" line="89"/>
<source>Balance All</source> <source>Balance All</source>
<translation>Ισορροπία Όλα</translation> <translation>Ισορροπία Όλα</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="94"/> <location filename="../pages/Account.qml" line="96"/>
<source>Total balance: </source> <source>Total balance: </source>
<translation>Συνολικό υπόλοιπο: </translation> <translation>Συνολικό υπόλοιπο: </translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="117"/> <location filename="../pages/Account.qml" line="119"/>
<location filename="../pages/Account.qml" line="150"/> <location filename="../pages/Account.qml" line="152"/>
<source>Copied to clipboard</source> <source>Copied to clipboard</source>
<translation>Αντιγράφηκε στο πρόχειρο</translation> <translation>Αντιγράφηκε στο πρόχειρο</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="127"/> <location filename="../pages/Account.qml" line="129"/>
<source>Total unlocked balance: </source> <source>Total unlocked balance: </source>
<translation>Σύνολο ξεκλείδωτου υπολοίπου: </translation> <translation>Σύνολο ξεκλείδωτου υπολοίπου: </translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="165"/> <location filename="../pages/Account.qml" line="167"/>
<source>Accounts</source> <source>Accounts</source>
<translation>Λογαριασμοί</translation> <translation>Λογαριασμοί</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="258"/> <location filename="../pages/Account.qml" line="260"/>
<source>Balance: </source> <source>Balance: </source>
<translation>υπόλοιπο: </translation> <translation>υπόλοιπο: </translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="319"/> <location filename="../pages/Account.qml" line="321"/>
<source>Address copied to clipboard</source> <source>Address copied to clipboard</source>
<translation>Η διεύθυνση αντιγράφηκε στο πρόχειρο</translation> <translation>Η διεύθυνση αντιγράφηκε στο πρόχειρο</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="354"/> <location filename="../pages/Account.qml" line="356"/>
<source>Create new account</source> <source>Create new account</source>
<translation>Δημιουργία νέου λογαριασμού</translation> <translation>Δημιουργία νέου λογαριασμού</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="356"/> <location filename="../pages/Account.qml" line="358"/>
<source>Set the label of the new account:</source> <source>Set the label of the new account:</source>
<translation>Ορίστε την ετικέτα του νέου λογαριασμού:</translation> <translation>Ορίστε την ετικέτα του νέου λογαριασμού:</translation>
</message> </message>
@@ -1139,57 +1139,57 @@ Mining also gives you a small chance to earn some Monero. Your computer will cre
<context> <context>
<name>PasswordDialog</name> <name>PasswordDialog</name>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="155"/> <location filename="../components/PasswordDialog.qml" line="159"/>
<source>Please enter new wallet password</source> <source>Please enter new wallet password</source>
<translation>Παρακαλώ, εισαγάγετε νέο κωδικό πρόσβασης πορτοφολιού</translation> <translation>Παρακαλώ, εισαγάγετε νέο κωδικό πρόσβασης πορτοφολιού</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="157"/> <location filename="../components/PasswordDialog.qml" line="161"/>
<source>wallet password</source> <source>wallet password</source>
<translation>κωδικός πρόσβασης πορτοφολιού</translation> <translation>κωδικός πρόσβασης πορτοφολιού</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="157"/> <location filename="../components/PasswordDialog.qml" line="161"/>
<source>wallet device passphrase</source> <source>wallet device passphrase</source>
<translation>φράση πρόσβασης συσκευής πορτοφολιού</translation> <translation>φράση πρόσβασης συσκευής πορτοφολιού</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="158"/> <location filename="../components/PasswordDialog.qml" line="162"/>
<source>Please enter %1 for: </source> <source>Please enter %1 for: </source>
<translation>Παρακαλώ, εισαγάγετε %1 για:</translation> <translation>Παρακαλώ, εισαγάγετε %1 για:</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="158"/> <location filename="../components/PasswordDialog.qml" line="162"/>
<source>Please enter %1</source> <source>Please enter %1</source>
<translation>Παρακαλώ, εισαγάγετε %1</translation> <translation>Παρακαλώ, εισαγάγετε %1</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="170"/> <location filename="../components/PasswordDialog.qml" line="174"/>
<source>Warning: passphrase entry on host is a security risk as it can be captured by malware. It is advised to prefer device-based passphrase entry.</source> <source>Warning: passphrase entry on host is a security risk as it can be captured by malware. It is advised to prefer device-based passphrase entry.</source>
<translation>Προειδοποίηση: η καταχώριση φράσης πρόσβασης στον κεντρικό υπολογιστή αποτελεί κίνδυνο ασφαλείας, καθώς μπορεί να καταγραφεί από κακόβουλο λογισμικό. Συνιστάται να προτιμάτε την καταχώριση φράσης πρόσβασης βάσει συσκευής.</translation> <translation>Προειδοποίηση: η καταχώριση φράσης πρόσβασης στον κεντρικό υπολογιστή αποτελεί κίνδυνο ασφαλείας, καθώς μπορεί να καταγραφεί από κακόβουλο λογισμικό. Συνιστάται να προτιμάτε την καταχώριση φράσης πρόσβασης βάσει συσκευής.</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="199"/> <location filename="../components/PasswordDialog.qml" line="203"/>
<source>CAPSLOCKS IS ON.</source> <source>CAPSLOCKS IS ON.</source>
<translation>ΤΑ ΚΕΦΑΛΑΊΑ ΕΊΝΑΙ ΕΝΕΡΓΟΠΟΙΗΜΈΝΑ.</translation> <translation>ΤΑ ΚΕΦΑΛΑΊΑ ΕΊΝΑΙ ΕΝΕΡΓΟΠΟΙΗΜΈΝΑ.</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="234"/> <location filename="../components/PasswordDialog.qml" line="238"/>
<source>Please confirm new password</source> <source>Please confirm new password</source>
<translation>Παρακαλώ, επιβεβαιώστε το νέο κωδικό πρόσβασης</translation> <translation>Παρακαλώ, επιβεβαιώστε το νέο κωδικό πρόσβασης</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="234"/> <location filename="../components/PasswordDialog.qml" line="238"/>
<source>Please confirm wallet device passphrase</source> <source>Please confirm wallet device passphrase</source>
<translation>Παρακαλώ, επιβεβαιώστε τη φράση πρόσβασης πορτοφολιού της συσκευής</translation> <translation>Παρακαλώ, επιβεβαιώστε τη φράση πρόσβασης πορτοφολιού της συσκευής</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="278"/> <location filename="../components/PasswordDialog.qml" line="283"/>
<source>Cancel</source> <source>Cancel</source>
<translation>Ακύρωση</translation> <translation>Ακύρωση</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="286"/> <location filename="../components/PasswordDialog.qml" line="293"/>
<source>Ok</source> <source>Ok</source>
<translation>Ok</translation> <translation>Ok</translation>
</message> </message>
@@ -1402,12 +1402,12 @@ The old wallet cache file will be renamed and can be restored later.
<translation type="unfinished">Αντιγραφή στο πρόχειρο</translation> <translation type="unfinished">Αντιγραφή στο πρόχειρο</translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsInfo.qml" line="406"/> <location filename="../pages/settings/SettingsInfo.qml" line="408"/>
<source>Copied to clipboard</source> <source>Copied to clipboard</source>
<translation>Αντιγράφηκε στο πρόχειρο</translation> <translation>Αντιγράφηκε στο πρόχειρο</translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsInfo.qml" line="412"/> <location filename="../pages/settings/SettingsInfo.qml" line="414"/>
<source>Donate to Monero</source> <source>Donate to Monero</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -1505,7 +1505,32 @@ The old wallet cache file will be renamed and can be restored later.
<translation>Επιβεβαίωση και ενεργοποίηση</translation> <translation>Επιβεβαίωση και ενεργοποίηση</translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsLayout.qml" line="258"/> <location filename="../pages/settings/SettingsLayout.qml" line="262"/>
<source>Socks5 proxy (%1%2)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="263"/>
<source>remote node connections, </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="264"/>
<source>updates downloading, fetching price sources</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="276"/>
<source>IP address</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="277"/>
<source>Port</source>
<translation type="unfinished">Θύρα</translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="289"/>
<source>Change language</source> <source>Change language</source>
<translation>Αλλαγή γλώσσας</translation> <translation>Αλλαγή γλώσσας</translation>
</message> </message>
@@ -2795,27 +2820,27 @@ For the case with Spend Proof, you don&apos;t need to specify the recipient addr
<context> <context>
<name>WizardController</name> <name>WizardController</name>
<message> <message>
<location filename="../wizard/WizardController.qml" line="310"/> <location filename="../wizard/WizardController.qml" line="309"/>
<source>Please choose a file</source> <source>Please choose a file</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="356"/> <location filename="../wizard/WizardController.qml" line="355"/>
<source>Failed to store the wallet</source> <source>Failed to store the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="440"/> <location filename="../wizard/WizardController.qml" line="439"/>
<source>Please proceed to the device...</source> <source>Please proceed to the device...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="444"/> <location filename="../wizard/WizardController.qml" line="443"/>
<source>Creating wallet from device...</source> <source>Creating wallet from device...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="445"/> <location filename="../wizard/WizardController.qml" line="444"/>
<source> <source>
Please check your hardware wallet Please check your hardware wallet
@@ -3401,173 +3426,173 @@ If you don&apos;t have the option to run your own node, there&apos;s an option t
<context> <context>
<name>main</name> <name>main</name>
<message> <message>
<location filename="../main.qml" line="334"/> <location filename="../main.qml" line="337"/>
<location filename="../main.qml" line="794"/> <location filename="../main.qml" line="818"/>
<location filename="../main.qml" line="806"/> <location filename="../main.qml" line="830"/>
<location filename="../main.qml" line="861"/> <location filename="../main.qml" line="885"/>
<location filename="../main.qml" line="873"/> <location filename="../main.qml" line="897"/>
<location filename="../main.qml" line="915"/> <location filename="../main.qml" line="939"/>
<location filename="../main.qml" line="924"/> <location filename="../main.qml" line="948"/>
<location filename="../main.qml" line="972"/> <location filename="../main.qml" line="996"/>
<location filename="../main.qml" line="1084"/> <location filename="../main.qml" line="1108"/>
<location filename="../main.qml" line="1546"/> <location filename="../main.qml" line="1593"/>
<source>Error</source> <source>Error</source>
<translation>Ακύρωση</translation> <translation>Ακύρωση</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="335"/> <location filename="../main.qml" line="338"/>
<location filename="../main.qml" line="541"/> <location filename="../main.qml" line="551"/>
<source>Couldn&apos;t open wallet: </source> <source>Couldn&apos;t open wallet: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="690"/> <location filename="../main.qml" line="714"/>
<source>Waiting for daemon to start...</source> <source>Waiting for daemon to start...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="698"/> <location filename="../main.qml" line="722"/>
<source>Waiting for daemon to stop...</source> <source>Waiting for daemon to stop...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="726"/> <location filename="../main.qml" line="750"/>
<source>Daemon failed to start</source> <source>Daemon failed to start</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="727"/> <location filename="../main.qml" line="751"/>
<source>Please check your wallet and daemon log for errors. You can also try to start %1 manually.</source> <source>Please check your wallet and daemon log for errors. You can also try to start %1 manually.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="796"/> <location filename="../main.qml" line="820"/>
<source>Can&apos;t create transaction: Wrong daemon version: </source> <source>Can&apos;t create transaction: Wrong daemon version: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="798"/> <location filename="../main.qml" line="822"/>
<location filename="../main.qml" line="916"/> <location filename="../main.qml" line="940"/>
<source>Can&apos;t create transaction: </source> <source>Can&apos;t create transaction: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="807"/> <location filename="../main.qml" line="831"/>
<location filename="../main.qml" line="925"/> <location filename="../main.qml" line="949"/>
<source>No unmixable outputs to sweep</source> <source>No unmixable outputs to sweep</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="937"/> <location filename="../main.qml" line="961"/>
<source>Confirmation</source> <source>Confirmation</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="818"/> <location filename="../main.qml" line="842"/>
<location filename="../main.qml" line="938"/> <location filename="../main.qml" line="962"/>
<source>Please confirm transaction: <source>Please confirm transaction:
</source> </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="821"/> <location filename="../main.qml" line="845"/>
<source> <source>
Payment ID: </source> Payment ID: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="822"/> <location filename="../main.qml" line="846"/>
<location filename="../main.qml" line="939"/> <location filename="../main.qml" line="963"/>
<source> <source>
Amount: </source> Amount: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="823"/> <location filename="../main.qml" line="847"/>
<location filename="../main.qml" line="940"/> <location filename="../main.qml" line="964"/>
<source> <source>
Fee: </source> Fee: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="645"/> <location filename="../main.qml" line="669"/>
<source>Waiting for daemon to sync</source> <source>Waiting for daemon to sync</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="307"/> <location filename="../main.qml" line="310"/>
<source>Closing wallet...</source> <source>Closing wallet...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="502"/> <location filename="../main.qml" line="512"/>
<source>Please proceed to the device...</source> <source>Please proceed to the device...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="514"/> <location filename="../main.qml" line="524"/>
<source>Opening wallet ...</source> <source>Opening wallet ...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="529"/> <location filename="../main.qml" line="539"/>
<location filename="../main.qml" line="536"/> <location filename="../main.qml" line="546"/>
<source>Repairing incompatible wallet cache. Resyncing wallet.</source> <source>Repairing incompatible wallet cache. Resyncing wallet.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="647"/> <location filename="../main.qml" line="671"/>
<source>Daemon is synchronized (%1)</source> <source>Daemon is synchronized (%1)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="649"/> <location filename="../main.qml" line="673"/>
<source>Wallet is synchronized</source> <source>Wallet is synchronized</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="743"/> <location filename="../main.qml" line="767"/>
<source>Daemon is synchronized</source> <source>Daemon is synchronized</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="820"/> <location filename="../main.qml" line="844"/>
<source>Address: </source> <source>Address: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="824"/> <location filename="../main.qml" line="848"/>
<source> <source>
Ringsize: </source> Ringsize: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="825"/> <location filename="../main.qml" line="849"/>
<source> <source>
Number of transactions: </source> Number of transactions: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="826"/> <location filename="../main.qml" line="850"/>
<source> <source>
Description: </source> Description: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="828"/> <location filename="../main.qml" line="852"/>
<source> <source>
Spending address index: </source> Spending address index: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="848"/> <location filename="../main.qml" line="872"/>
<source>Creating transaction...</source> <source>Creating transaction...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="849"/> <location filename="../main.qml" line="873"/>
<source> <source>
Please check your hardware wallet Please check your hardware wallet
@@ -3575,177 +3600,187 @@ your input may be required.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="964"/> <location filename="../main.qml" line="988"/>
<source>Sending transaction ...</source> <source>Sending transaction ...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="983"/> <location filename="../main.qml" line="1007"/>
<source>Monero sent successfully: %1 transaction(s) </source> <source>Monero sent successfully: %1 transaction(s) </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1000"/> <location filename="../main.qml" line="1024"/>
<source>Failed to store the wallet</source> <source>Failed to store the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1027"/> <location filename="../main.qml" line="1051"/>
<source>Payment proof</source> <source>Payment proof</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1030"/> <location filename="../main.qml" line="1054"/>
<source>Couldn&apos;t generate a proof because of the following reason: <source>Couldn&apos;t generate a proof because of the following reason:
</source> </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1060"/> <location filename="../main.qml" line="1084"/>
<location filename="../main.qml" line="1079"/> <location filename="../main.qml" line="1103"/>
<source>Payment proof check</source> <source>Payment proof check</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1063"/> <location filename="../main.qml" line="1087"/>
<location filename="../main.qml" line="1081"/> <location filename="../main.qml" line="1105"/>
<source>Bad signature</source> <source>Bad signature</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1070"/> <location filename="../main.qml" line="1094"/>
<source>This address received %1 monero, with %2 confirmation(s).</source> <source>This address received %1 monero, with %2 confirmation(s).</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1081"/> <location filename="../main.qml" line="1105"/>
<source>Good signature</source> <source>Good signature</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1443"/> <location filename="../main.qml" line="1486"/>
<location filename="../main.qml" line="2111"/> <location filename="../main.qml" line="2158"/>
<source>Wrong password</source> <source>Wrong password</source>
<translation>Λάθος κωδικός</translation> <translation>Λάθος κωδικός</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1496"/> <location filename="../main.qml" line="1496"/>
<source>Save transaction file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1496"/>
<source>Send transaction</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1543"/>
<source>Warning</source> <source>Warning</source>
<translation>Προειδοποίηση</translation> <translation>Προειδοποίηση</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1499"/> <location filename="../main.qml" line="1546"/>
<source>Error: Filesystem is read only</source> <source>Error: Filesystem is read only</source>
<translation>Σφάλμα: Το σύστημα αρχείων είναι μόνο για ανάγνωση</translation> <translation>Σφάλμα: Το σύστημα αρχείων είναι μόνο για ανάγνωση</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1501"/> <location filename="../main.qml" line="1548"/>
<source>Warning: There&apos;s only %1 GB available on the device. Blockchain requires ~%2 GB of data.</source> <source>Warning: There&apos;s only %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation>Προειδοποίηση: Διατίθεται μόνο %1 GB στη συσκευή. Το Blockchain απαιτεί ~%2 GB δεδομένων.</translation> <translation>Προειδοποίηση: Διατίθεται μόνο %1 GB στη συσκευή. Το Blockchain απαιτεί ~%2 GB δεδομένων.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1503"/> <location filename="../main.qml" line="1550"/>
<source>Note: There&apos;s %1 GB available on the device. Blockchain requires ~%2 GB of data.</source> <source>Note: There&apos;s %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation>Σημείωση: Υπάρχει%1 GB διαθέσιμο στη συσκευή. Το Blockchain απαιτεί ~%2 GB δεδομένων.</translation> <translation>Σημείωση: Υπάρχει%1 GB διαθέσιμο στη συσκευή. Το Blockchain απαιτεί ~%2 GB δεδομένων.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1505"/> <location filename="../main.qml" line="1552"/>
<source>Note: lmdb folder not found. A new folder will be created.</source> <source>Note: lmdb folder not found. A new folder will be created.</source>
<translation>Σημείωση: Ο φάκελος lmdb δεν βρέθηκε. Θα δημιουργηθεί ένας νέος φάκελος.</translation> <translation>Σημείωση: Ο φάκελος lmdb δεν βρέθηκε. Θα δημιουργηθεί ένας νέος φάκελος.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1543"/> <location filename="../main.qml" line="1590"/>
<source>Password changed successfully</source> <source>Password changed successfully</source>
<translation>Ο κωδικός άλλαξε επιτυχώς</translation> <translation>Ο κωδικός άλλαξε επιτυχώς</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1547"/> <location filename="../main.qml" line="1594"/>
<source>Error: </source> <source>Error: </source>
<translation>Σφάλμα:</translation> <translation>Σφάλμα:</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1635"/> <location filename="../main.qml" line="1682"/>
<source>Primary account</source> <source>Primary account</source>
<translation>Κύριος λογαριασμός</translation> <translation>Κύριος λογαριασμός</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1846"/> <location filename="../main.qml" line="1893"/>
<source>Autosaved the wallet</source> <source>Autosaved the wallet</source>
<translation>Αποθηκεύτηκε αυτόματα το πορτοφόλι</translation> <translation>Αποθηκεύτηκε αυτόματα το πορτοφόλι</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1848"/> <location filename="../main.qml" line="1895"/>
<source>Failed to autosave the wallet</source> <source>Failed to autosave the wallet</source>
<translation>Αποτυχία αυτόματης αποθήκευσης του πορτοφολιού</translation> <translation>Αποτυχία αυτόματης αποθήκευσης του πορτοφολιού</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1963"/> <location filename="../main.qml" line="2010"/>
<source>Local node is running</source> <source>Local node is running</source>
<translation>Ο τοπικός κόμβος εκτελείται</translation> <translation>Ο τοπικός κόμβος εκτελείται</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1964"/> <location filename="../main.qml" line="2011"/>
<source>Do you want to stop local node or keep it running in the background?</source> <source>Do you want to stop local node or keep it running in the background?</source>
<translation>Θέλετε να σταματήσετε τον τοπικό κόμβο ή να το συνεχίσετε στο παρασκήνιο;</translation> <translation>Θέλετε να σταματήσετε τον τοπικό κόμβο ή να το συνεχίσετε στο παρασκήνιο;</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1966"/> <location filename="../main.qml" line="2013"/>
<source>Force stop</source> <source>Force stop</source>
<translation>Αναγκαστική διακοπή</translation> <translation>Αναγκαστική διακοπή</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1967"/> <location filename="../main.qml" line="2014"/>
<source>Keep it running</source> <source>Keep it running</source>
<translation>Συνεχίστε να λειτουργεί</translation> <translation>Συνεχίστε να λειτουργεί</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1987"/> <location filename="../main.qml" line="2034"/>
<source>Tap again to close...</source> <source>Tap again to close...</source>
<translation>Πατήστε ξανά για να κλείσετε...</translation> <translation>Πατήστε ξανά για να κλείσετε...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="2002"/> <location filename="../main.qml" line="2049"/>
<source>Checking local node status...</source> <source>Checking local node status...</source>
<translation>Έλεγχος κατάστασης τοπικού κόμβου...</translation> <translation>Έλεγχος κατάστασης τοπικού κόμβου...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="862"/> <location filename="../main.qml" line="886"/>
<source>Amount is wrong: expected number from %1 to %2</source> <source>Amount is wrong: expected number from %1 to %2</source>
<translation>Το ποσό είναι λάθος: αναμενόμενος αριθμός από %1 έως %2</translation> <translation>Το ποσό είναι λάθος: αναμενόμενος αριθμός από %1 έως %2</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="874"/> <location filename="../main.qml" line="898"/>
<source>Insufficient funds. Unlocked balance: %1</source> <source>Insufficient funds. Unlocked balance: %1</source>
<translation>Ανεπαρκείς πόροι. Ξεκλείδωτο υπόλοιπο: %1</translation> <translation>Ανεπαρκείς πόροι. Ξεκλείδωτο υπόλοιπο: %1</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="973"/> <location filename="../main.qml" line="997"/>
<source>Couldn&apos;t send the money: </source> <source>Couldn&apos;t send the money: </source>
<translation>Δεν ήταν δυνατή η αποστολή των χρημάτων:</translation> <translation>Δεν ήταν δυνατή η αποστολή των χρημάτων:</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="977"/> <location filename="../main.qml" line="1001"/>
<location filename="../main.qml" line="1542"/> <location filename="../main.qml" line="1589"/>
<source>Information</source> <source>Information</source>
<translation>Πληροφορίες</translation> <translation>Πληροφορίες</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="983"/> <location filename="../main.qml" line="1007"/>
<source>Transaction saved to file: %1</source> <source>Transaction saved to file: %1</source>
<translation>Η συναλλαγή αποθηκεύτηκε στο αρχείο: %1</translation> <translation>Η συναλλαγή αποθηκεύτηκε στο αρχείο: %1</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1067"/> <location filename="../main.qml" line="1091"/>
<source>This address received %1 monero, but the transaction is not yet mined</source> <source>This address received %1 monero, but the transaction is not yet mined</source>
<translation>Αυτή η διεύθυνση έλαβε %1 monero, αλλά η συναλλαγή δεν εξορύχθηκε ακόμα</translation> <translation>Αυτή η διεύθυνση έλαβε %1 monero, αλλά η συναλλαγή δεν εξορύχθηκε ακόμα</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1074"/> <location filename="../main.qml" line="1098"/>
<source>This address received nothing</source> <source>This address received nothing</source>
<translation>Αυτή η διεύθυνση δεν έλαβε τίποτα</translation> <translation>Αυτή η διεύθυνση δεν έλαβε τίποτα</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1595"/> <location filename="../main.qml" line="1642"/>
<source>Please wait...</source> <source>Please wait...</source>
<translation>Παρακαλώ περιμένετε...</translation> <translation>Παρακαλώ περιμένετε...</translation>
</message> </message>

View File

@@ -4,53 +4,53 @@
<context> <context>
<name>Account</name> <name>Account</name>
<message> <message>
<location filename="../pages/Account.qml" line="55"/> <location filename="../pages/Account.qml" line="57"/>
<source>Set the label of the selected account:</source> <source>Set the label of the selected account:</source>
<translation>Agordi la etikedon de la elektita konto:</translation> <translation>Agordi la etikedon de la elektita konto:</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="87"/> <location filename="../pages/Account.qml" line="89"/>
<source>Balance All</source> <source>Balance All</source>
<translation>Ĉiuj saldoj</translation> <translation>Ĉiuj saldoj</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="94"/> <location filename="../pages/Account.qml" line="96"/>
<source>Total balance: </source> <source>Total balance: </source>
<translation>Suma saldo: </translation> <translation>Suma saldo: </translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="117"/> <location filename="../pages/Account.qml" line="119"/>
<location filename="../pages/Account.qml" line="150"/> <location filename="../pages/Account.qml" line="152"/>
<source>Copied to clipboard</source> <source>Copied to clipboard</source>
<translation>Kopiiĝis en la poŝon</translation> <translation>Kopiiĝis en la poŝon</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="127"/> <location filename="../pages/Account.qml" line="129"/>
<source>Total unlocked balance: </source> <source>Total unlocked balance: </source>
<translation>Suma neŝlosita saldo: </translation> <translation>Suma neŝlosita saldo: </translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="165"/> <location filename="../pages/Account.qml" line="167"/>
<source>Accounts</source> <source>Accounts</source>
<translation>Kontoj</translation> <translation>Kontoj</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="258"/> <location filename="../pages/Account.qml" line="260"/>
<source>Balance: </source> <source>Balance: </source>
<translation>Saldo: </translation> <translation>Saldo: </translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="319"/> <location filename="../pages/Account.qml" line="321"/>
<source>Address copied to clipboard</source> <source>Address copied to clipboard</source>
<translation>La adreso kopiiĝis en la poŝon</translation> <translation>La adreso kopiiĝis en la poŝon</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="354"/> <location filename="../pages/Account.qml" line="356"/>
<source>Create new account</source> <source>Create new account</source>
<translation>Krei novan konton</translation> <translation>Krei novan konton</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="356"/> <location filename="../pages/Account.qml" line="358"/>
<source>Set the label of the new account:</source> <source>Set the label of the new account:</source>
<translation>Agordi la etikedo de la nova konto: </translation> <translation>Agordi la etikedo de la nova konto: </translation>
</message> </message>
@@ -1137,57 +1137,57 @@ Mining also gives you a small chance to earn some Monero. Your computer will cre
<context> <context>
<name>PasswordDialog</name> <name>PasswordDialog</name>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="155"/> <location filename="../components/PasswordDialog.qml" line="159"/>
<source>Please enter new wallet password</source> <source>Please enter new wallet password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="157"/> <location filename="../components/PasswordDialog.qml" line="161"/>
<source>wallet password</source> <source>wallet password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="157"/> <location filename="../components/PasswordDialog.qml" line="161"/>
<source>wallet device passphrase</source> <source>wallet device passphrase</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="158"/> <location filename="../components/PasswordDialog.qml" line="162"/>
<source>Please enter %1 for: </source> <source>Please enter %1 for: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="158"/> <location filename="../components/PasswordDialog.qml" line="162"/>
<source>Please enter %1</source> <source>Please enter %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="170"/> <location filename="../components/PasswordDialog.qml" line="174"/>
<source>Warning: passphrase entry on host is a security risk as it can be captured by malware. It is advised to prefer device-based passphrase entry.</source> <source>Warning: passphrase entry on host is a security risk as it can be captured by malware. It is advised to prefer device-based passphrase entry.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="199"/> <location filename="../components/PasswordDialog.qml" line="203"/>
<source>CAPSLOCKS IS ON.</source> <source>CAPSLOCKS IS ON.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="234"/> <location filename="../components/PasswordDialog.qml" line="238"/>
<source>Please confirm new password</source> <source>Please confirm new password</source>
<translation>Bonvolu konfirmi la novan pasvorton</translation> <translation>Bonvolu konfirmi la novan pasvorton</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="234"/> <location filename="../components/PasswordDialog.qml" line="238"/>
<source>Please confirm wallet device passphrase</source> <source>Please confirm wallet device passphrase</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="278"/> <location filename="../components/PasswordDialog.qml" line="283"/>
<source>Cancel</source> <source>Cancel</source>
<translation>Nuligi</translation> <translation>Nuligi</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="286"/> <location filename="../components/PasswordDialog.qml" line="293"/>
<source>Ok</source> <source>Ok</source>
<translation>OK</translation> <translation>OK</translation>
</message> </message>
@@ -1406,12 +1406,12 @@ La malnova monuj-kaŝmemoro renomiĝos kaj restaŭreblos poste.
<translation>Kopii en la poŝon</translation> <translation>Kopii en la poŝon</translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsInfo.qml" line="406"/> <location filename="../pages/settings/SettingsInfo.qml" line="408"/>
<source>Copied to clipboard</source> <source>Copied to clipboard</source>
<translation>Kopiiĝis en la poŝon</translation> <translation>Kopiiĝis en la poŝon</translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsInfo.qml" line="412"/> <location filename="../pages/settings/SettingsInfo.qml" line="414"/>
<source>Donate to Monero</source> <source>Donate to Monero</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -1509,7 +1509,32 @@ La malnova monuj-kaŝmemoro renomiĝos kaj restaŭreblos poste.
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsLayout.qml" line="258"/> <location filename="../pages/settings/SettingsLayout.qml" line="262"/>
<source>Socks5 proxy (%1%2)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="263"/>
<source>remote node connections, </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="264"/>
<source>updates downloading, fetching price sources</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="276"/>
<source>IP address</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="277"/>
<source>Port</source>
<translation type="unfinished">Pordo</translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="289"/>
<source>Change language</source> <source>Change language</source>
<translation>Ŝanĝi lingvon</translation> <translation>Ŝanĝi lingvon</translation>
</message> </message>
@@ -2809,27 +2834,27 @@ Kaze de Elspezpruvo, vi ne bezonas precizi la ricevantan adreson.</translation>
<context> <context>
<name>WizardController</name> <name>WizardController</name>
<message> <message>
<location filename="../wizard/WizardController.qml" line="310"/> <location filename="../wizard/WizardController.qml" line="309"/>
<source>Please choose a file</source> <source>Please choose a file</source>
<translation>Bonvolu elekti dosieron</translation> <translation>Bonvolu elekti dosieron</translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="356"/> <location filename="../wizard/WizardController.qml" line="355"/>
<source>Failed to store the wallet</source> <source>Failed to store the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="440"/> <location filename="../wizard/WizardController.qml" line="439"/>
<source>Please proceed to the device...</source> <source>Please proceed to the device...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="444"/> <location filename="../wizard/WizardController.qml" line="443"/>
<source>Creating wallet from device...</source> <source>Creating wallet from device...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="445"/> <location filename="../wizard/WizardController.qml" line="444"/>
<source> <source>
Please check your hardware wallet Please check your hardware wallet
@@ -3417,116 +3442,116 @@ Se vi ne havas eblecon funkciigi vian propra nodon, estas opcio konektiĝi kun f
<context> <context>
<name>main</name> <name>main</name>
<message> <message>
<location filename="../main.qml" line="334"/> <location filename="../main.qml" line="337"/>
<location filename="../main.qml" line="794"/> <location filename="../main.qml" line="818"/>
<location filename="../main.qml" line="806"/> <location filename="../main.qml" line="830"/>
<location filename="../main.qml" line="861"/> <location filename="../main.qml" line="885"/>
<location filename="../main.qml" line="873"/> <location filename="../main.qml" line="897"/>
<location filename="../main.qml" line="915"/> <location filename="../main.qml" line="939"/>
<location filename="../main.qml" line="924"/> <location filename="../main.qml" line="948"/>
<location filename="../main.qml" line="972"/> <location filename="../main.qml" line="996"/>
<location filename="../main.qml" line="1084"/> <location filename="../main.qml" line="1108"/>
<location filename="../main.qml" line="1546"/> <location filename="../main.qml" line="1593"/>
<source>Error</source> <source>Error</source>
<translation>Eraro</translation> <translation>Eraro</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="335"/> <location filename="../main.qml" line="338"/>
<location filename="../main.qml" line="541"/> <location filename="../main.qml" line="551"/>
<source>Couldn&apos;t open wallet: </source> <source>Couldn&apos;t open wallet: </source>
<translation>Ne sukcesis malfermi monujon: </translation> <translation>Ne sukcesis malfermi monujon: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="796"/> <location filename="../main.qml" line="820"/>
<source>Can&apos;t create transaction: Wrong daemon version: </source> <source>Can&apos;t create transaction: Wrong daemon version: </source>
<translation>Ne sukcesas krei transakcion: Malĝusta demonversio:</translation> <translation>Ne sukcesas krei transakcion: Malĝusta demonversio:</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="807"/> <location filename="../main.qml" line="831"/>
<location filename="../main.qml" line="925"/> <location filename="../main.qml" line="949"/>
<source>No unmixable outputs to sweep</source> <source>No unmixable outputs to sweep</source>
<translation>Ne malmikseblaj eligoj por balai</translation> <translation>Ne malmikseblaj eligoj por balai</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="862"/> <location filename="../main.qml" line="886"/>
<source>Amount is wrong: expected number from %1 to %2</source> <source>Amount is wrong: expected number from %1 to %2</source>
<translation>Kvanto malĝustas: oni postulas nombron de %1 al %2</translation> <translation>Kvanto malĝustas: oni postulas nombron de %1 al %2</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1067"/> <location filename="../main.qml" line="1091"/>
<source>This address received %1 monero, but the transaction is not yet mined</source> <source>This address received %1 monero, but the transaction is not yet mined</source>
<translation>Tiu ĉi adreso ricevis %1 moneron; sed la transakcio ankoraŭ ne estas minata</translation> <translation>Tiu ĉi adreso ricevis %1 moneron; sed la transakcio ankoraŭ ne estas minata</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1074"/> <location filename="../main.qml" line="1098"/>
<source>This address received nothing</source> <source>This address received nothing</source>
<translation>Tiu ĉi adreso ricevis nenion</translation> <translation>Tiu ĉi adreso ricevis nenion</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="798"/> <location filename="../main.qml" line="822"/>
<location filename="../main.qml" line="916"/> <location filename="../main.qml" line="940"/>
<source>Can&apos;t create transaction: </source> <source>Can&apos;t create transaction: </source>
<translation>Ne sukcesas krei transakcion:</translation> <translation>Ne sukcesas krei transakcion:</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="307"/> <location filename="../main.qml" line="310"/>
<source>Closing wallet...</source> <source>Closing wallet...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="502"/> <location filename="../main.qml" line="512"/>
<source>Please proceed to the device...</source> <source>Please proceed to the device...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="514"/> <location filename="../main.qml" line="524"/>
<source>Opening wallet ...</source> <source>Opening wallet ...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="529"/> <location filename="../main.qml" line="539"/>
<location filename="../main.qml" line="536"/> <location filename="../main.qml" line="546"/>
<source>Repairing incompatible wallet cache. Resyncing wallet.</source> <source>Repairing incompatible wallet cache. Resyncing wallet.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="690"/> <location filename="../main.qml" line="714"/>
<source>Waiting for daemon to start...</source> <source>Waiting for daemon to start...</source>
<translation>Atendante komencon de la demono</translation> <translation>Atendante komencon de la demono</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="698"/> <location filename="../main.qml" line="722"/>
<source>Waiting for daemon to stop...</source> <source>Waiting for daemon to stop...</source>
<translation>Atendante halton de la demono</translation> <translation>Atendante halton de la demono</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="726"/> <location filename="../main.qml" line="750"/>
<source>Daemon failed to start</source> <source>Daemon failed to start</source>
<translation>Demono ne sukcesis lanĉi</translation> <translation>Demono ne sukcesis lanĉi</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="727"/> <location filename="../main.qml" line="751"/>
<source>Please check your wallet and daemon log for errors. You can also try to start %1 manually.</source> <source>Please check your wallet and daemon log for errors. You can also try to start %1 manually.</source>
<translation>Bonvolu kontroli la taglibrojn de viaj monujo kaj demonlogo por eraroj. Vi ankaŭ povas provi komenci %1 permane.</translation> <translation>Bonvolu kontroli la taglibrojn de viaj monujo kaj demonlogo por eraroj. Vi ankaŭ povas provi komenci %1 permane.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="818"/> <location filename="../main.qml" line="842"/>
<location filename="../main.qml" line="938"/> <location filename="../main.qml" line="962"/>
<source>Please confirm transaction: <source>Please confirm transaction:
</source> </source>
<translation>Bonvolu konfirmi la transakcion: <translation>Bonvolu konfirmi la transakcion:
</translation> </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="821"/> <location filename="../main.qml" line="845"/>
<source> <source>
Payment ID: </source> Payment ID: </source>
<translation> <translation>
Paga-ID: </translation> Paga-ID: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="822"/> <location filename="../main.qml" line="846"/>
<location filename="../main.qml" line="939"/> <location filename="../main.qml" line="963"/>
<source> <source>
Amount: </source> Amount: </source>
@@ -3535,22 +3560,22 @@ Amount: </source>
Kvanto: </translation> Kvanto: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="823"/> <location filename="../main.qml" line="847"/>
<location filename="../main.qml" line="940"/> <location filename="../main.qml" line="964"/>
<source> <source>
Fee: </source> Fee: </source>
<translation> <translation>
Kosto: </translation> Kosto: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="824"/> <location filename="../main.qml" line="848"/>
<source> <source>
Ringsize: </source> Ringsize: </source>
<translation> <translation>
Ringograndeco: </translation> Ringograndeco: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="825"/> <location filename="../main.qml" line="849"/>
<source> <source>
Number of transactions: </source> Number of transactions: </source>
@@ -3559,26 +3584,26 @@ Number of transactions: </source>
Nombro de transakcioj: </translation> Nombro de transakcioj: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="826"/> <location filename="../main.qml" line="850"/>
<source> <source>
Description: </source> Description: </source>
<translation> <translation>
Priskribo: </translation> Priskribo: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="828"/> <location filename="../main.qml" line="852"/>
<source> <source>
Spending address index: </source> Spending address index: </source>
<translation> <translation>
Elspezadresindekso: </translation> Elspezadresindekso: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="848"/> <location filename="../main.qml" line="872"/>
<source>Creating transaction...</source> <source>Creating transaction...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="849"/> <location filename="../main.qml" line="873"/>
<source> <source>
Please check your hardware wallet Please check your hardware wallet
@@ -3586,193 +3611,203 @@ your input may be required.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="937"/> <location filename="../main.qml" line="961"/>
<source>Confirmation</source> <source>Confirmation</source>
<translation>Konfirmo</translation> <translation>Konfirmo</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="964"/> <location filename="../main.qml" line="988"/>
<source>Sending transaction ...</source> <source>Sending transaction ...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1000"/> <location filename="../main.qml" line="1024"/>
<source>Failed to store the wallet</source> <source>Failed to store the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1027"/> <location filename="../main.qml" line="1051"/>
<source>Payment proof</source> <source>Payment proof</source>
<translation>Pagopruvo</translation> <translation>Pagopruvo</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1060"/> <location filename="../main.qml" line="1084"/>
<location filename="../main.qml" line="1079"/> <location filename="../main.qml" line="1103"/>
<source>Payment proof check</source> <source>Payment proof check</source>
<translation>Kontrolo de pagopruvo</translation> <translation>Kontrolo de pagopruvo</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1063"/> <location filename="../main.qml" line="1087"/>
<location filename="../main.qml" line="1081"/> <location filename="../main.qml" line="1105"/>
<source>Bad signature</source> <source>Bad signature</source>
<translation>Malbona subskribo</translation> <translation>Malbona subskribo</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1081"/> <location filename="../main.qml" line="1105"/>
<source>Good signature</source> <source>Good signature</source>
<translation>Bona subskribo</translation> <translation>Bona subskribo</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1443"/> <location filename="../main.qml" line="1486"/>
<location filename="../main.qml" line="2111"/> <location filename="../main.qml" line="2158"/>
<source>Wrong password</source> <source>Wrong password</source>
<translation>Malĝusta pasvorto</translation> <translation>Malĝusta pasvorto</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1496"/> <location filename="../main.qml" line="1496"/>
<source>Save transaction file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1496"/>
<source>Send transaction</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1543"/>
<source>Warning</source> <source>Warning</source>
<translation>Averto</translation> <translation>Averto</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1499"/> <location filename="../main.qml" line="1546"/>
<source>Error: Filesystem is read only</source> <source>Error: Filesystem is read only</source>
<translation>Eraro: dosiersistemo estas nurlegebla</translation> <translation>Eraro: dosiersistemo estas nurlegebla</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1501"/> <location filename="../main.qml" line="1548"/>
<source>Warning: There&apos;s only %1 GB available on the device. Blockchain requires ~%2 GB of data.</source> <source>Warning: There&apos;s only %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation>Averto: estas nur %1 GigaBajto da disponebla spaco sur la aparato. La blokĉeno postulas ~%2 Gigabajtojn da spaco.</translation> <translation>Averto: estas nur %1 GigaBajto da disponebla spaco sur la aparato. La blokĉeno postulas ~%2 Gigabajtojn da spaco.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1503"/> <location filename="../main.qml" line="1550"/>
<source>Note: There&apos;s %1 GB available on the device. Blockchain requires ~%2 GB of data.</source> <source>Note: There&apos;s %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation>Noto: estas nur %1 GigaBajto da disponebla spaco sur la aparato. La blokĉeno postulas ~%2 Gigabajtojn da spaco.</translation> <translation>Noto: estas nur %1 GigaBajto da disponebla spaco sur la aparato. La blokĉeno postulas ~%2 Gigabajtojn da spaco.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1505"/> <location filename="../main.qml" line="1552"/>
<source>Note: lmdb folder not found. A new folder will be created.</source> <source>Note: lmdb folder not found. A new folder will be created.</source>
<translation>Noto: lmdb-dosierujo ne troviĝis. Nova dosierujo kreiĝos.</translation> <translation>Noto: lmdb-dosierujo ne troviĝis. Nova dosierujo kreiĝos.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1543"/> <location filename="../main.qml" line="1590"/>
<source>Password changed successfully</source> <source>Password changed successfully</source>
<translation>Sukcese ŝanĝis pasvorton</translation> <translation>Sukcese ŝanĝis pasvorton</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1547"/> <location filename="../main.qml" line="1594"/>
<source>Error: </source> <source>Error: </source>
<translation>Eraro: </translation> <translation>Eraro: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1635"/> <location filename="../main.qml" line="1682"/>
<source>Primary account</source> <source>Primary account</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1846"/> <location filename="../main.qml" line="1893"/>
<source>Autosaved the wallet</source> <source>Autosaved the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1848"/> <location filename="../main.qml" line="1895"/>
<source>Failed to autosave the wallet</source> <source>Failed to autosave the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1963"/> <location filename="../main.qml" line="2010"/>
<source>Local node is running</source> <source>Local node is running</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1964"/> <location filename="../main.qml" line="2011"/>
<source>Do you want to stop local node or keep it running in the background?</source> <source>Do you want to stop local node or keep it running in the background?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1966"/> <location filename="../main.qml" line="2013"/>
<source>Force stop</source> <source>Force stop</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1967"/> <location filename="../main.qml" line="2014"/>
<source>Keep it running</source> <source>Keep it running</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1987"/> <location filename="../main.qml" line="2034"/>
<source>Tap again to close...</source> <source>Tap again to close...</source>
<translation>Denove klaku por fermi...</translation> <translation>Denove klaku por fermi...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="2002"/> <location filename="../main.qml" line="2049"/>
<source>Checking local node status...</source> <source>Checking local node status...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="874"/> <location filename="../main.qml" line="898"/>
<source>Insufficient funds. Unlocked balance: %1</source> <source>Insufficient funds. Unlocked balance: %1</source>
<translation>Nesufiĉe da mono. Disponebla saldo: %1</translation> <translation>Nesufiĉe da mono. Disponebla saldo: %1</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="645"/> <location filename="../main.qml" line="669"/>
<source>Waiting for daemon to sync</source> <source>Waiting for daemon to sync</source>
<translation>Atendante sinkroniziĝon de la demono</translation> <translation>Atendante sinkroniziĝon de la demono</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="647"/> <location filename="../main.qml" line="671"/>
<source>Daemon is synchronized (%1)</source> <source>Daemon is synchronized (%1)</source>
<translation>Demono sinkronizas (%1)</translation> <translation>Demono sinkronizas (%1)</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="649"/> <location filename="../main.qml" line="673"/>
<source>Wallet is synchronized</source> <source>Wallet is synchronized</source>
<translation>Monujo sinkronizas</translation> <translation>Monujo sinkronizas</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="743"/> <location filename="../main.qml" line="767"/>
<source>Daemon is synchronized</source> <source>Daemon is synchronized</source>
<translation>Demono sinkronizas</translation> <translation>Demono sinkronizas</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="820"/> <location filename="../main.qml" line="844"/>
<source>Address: </source> <source>Address: </source>
<translation>Adreso:</translation> <translation>Adreso:</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="973"/> <location filename="../main.qml" line="997"/>
<source>Couldn&apos;t send the money: </source> <source>Couldn&apos;t send the money: </source>
<translation>Ne sukcesis sendi la monon:</translation> <translation>Ne sukcesis sendi la monon:</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="977"/> <location filename="../main.qml" line="1001"/>
<location filename="../main.qml" line="1542"/> <location filename="../main.qml" line="1589"/>
<source>Information</source> <source>Information</source>
<translation>Informo</translation> <translation>Informo</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="983"/> <location filename="../main.qml" line="1007"/>
<source>Transaction saved to file: %1</source> <source>Transaction saved to file: %1</source>
<translation>La transakcio estas konservita en la dosiero %1</translation> <translation>La transakcio estas konservita en la dosiero %1</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="983"/> <location filename="../main.qml" line="1007"/>
<source>Monero sent successfully: %1 transaction(s) </source> <source>Monero sent successfully: %1 transaction(s) </source>
<translation>Sukcese sendis Moneron: %1 transakcio(j)</translation> <translation>Sukcese sendis Moneron: %1 transakcio(j)</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1030"/> <location filename="../main.qml" line="1054"/>
<source>Couldn&apos;t generate a proof because of the following reason: <source>Couldn&apos;t generate a proof because of the following reason:
</source> </source>
<translation>Ne sukcesis generi pruvon, pro la jena kialo: <translation>Ne sukcesis generi pruvon, pro la jena kialo:
</translation> </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1070"/> <location filename="../main.qml" line="1094"/>
<source>This address received %1 monero, with %2 confirmation(s).</source> <source>This address received %1 monero, with %2 confirmation(s).</source>
<translation>Tiu adreso ricevis %1 monerojn, kun %2 konfirmo(j)</translation> <translation>Tiu adreso ricevis %1 monerojn, kun %2 konfirmo(j)</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1595"/> <location filename="../main.qml" line="1642"/>
<source>Please wait...</source> <source>Please wait...</source>
<translation>Bonvolu atendi...</translation> <translation>Bonvolu atendi...</translation>
</message> </message>

View File

@@ -4,53 +4,53 @@
<context> <context>
<name>Account</name> <name>Account</name>
<message> <message>
<location filename="../pages/Account.qml" line="55"/> <location filename="../pages/Account.qml" line="57"/>
<source>Set the label of the selected account:</source> <source>Set the label of the selected account:</source>
<translation>Defina la etiqueta de la cuenta seleccionada:</translation> <translation>Defina la etiqueta de la cuenta seleccionada:</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="87"/> <location filename="../pages/Account.qml" line="89"/>
<source>Balance All</source> <source>Balance All</source>
<translation>Balance Total</translation> <translation>Balance Total</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="94"/> <location filename="../pages/Account.qml" line="96"/>
<source>Total balance: </source> <source>Total balance: </source>
<translation>Balance Total: </translation> <translation>Balance Total: </translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="117"/> <location filename="../pages/Account.qml" line="119"/>
<location filename="../pages/Account.qml" line="150"/> <location filename="../pages/Account.qml" line="152"/>
<source>Copied to clipboard</source> <source>Copied to clipboard</source>
<translation>Copiado al portapapeles</translation> <translation>Copiado al portapapeles</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="127"/> <location filename="../pages/Account.qml" line="129"/>
<source>Total unlocked balance: </source> <source>Total unlocked balance: </source>
<translation>Total del balance desbloqueado: </translation> <translation>Total del balance desbloqueado: </translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="165"/> <location filename="../pages/Account.qml" line="167"/>
<source>Accounts</source> <source>Accounts</source>
<translation>Cuentas</translation> <translation>Cuentas</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="258"/> <location filename="../pages/Account.qml" line="260"/>
<source>Balance: </source> <source>Balance: </source>
<translation>Saldo: </translation> <translation>Saldo: </translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="319"/> <location filename="../pages/Account.qml" line="321"/>
<source>Address copied to clipboard</source> <source>Address copied to clipboard</source>
<translation>Dirección copiada al portapapeles</translation> <translation>Dirección copiada al portapapeles</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="354"/> <location filename="../pages/Account.qml" line="356"/>
<source>Create new account</source> <source>Create new account</source>
<translation>Crear una nueva cuenta</translation> <translation>Crear una nueva cuenta</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="356"/> <location filename="../pages/Account.qml" line="358"/>
<source>Set the label of the new account:</source> <source>Set the label of the new account:</source>
<translation>Establezca la etiqueta de la nueva cuenta:</translation> <translation>Establezca la etiqueta de la nueva cuenta:</translation>
</message> </message>
@@ -1141,57 +1141,57 @@ La minería también te da una pequeña oportunidad de ganar algo de Monero. Su
<context> <context>
<name>PasswordDialog</name> <name>PasswordDialog</name>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="155"/> <location filename="../components/PasswordDialog.qml" line="159"/>
<source>Please enter new wallet password</source> <source>Please enter new wallet password</source>
<translation>Ingrese la nueva contraseña del monedero</translation> <translation>Ingrese la nueva contraseña del monedero</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="157"/> <location filename="../components/PasswordDialog.qml" line="161"/>
<source>wallet password</source> <source>wallet password</source>
<translation>contraseña de monedero</translation> <translation>contraseña de monedero</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="157"/> <location filename="../components/PasswordDialog.qml" line="161"/>
<source>wallet device passphrase</source> <source>wallet device passphrase</source>
<translation>frase de contraseña del dispositivo del monedero</translation> <translation>frase de contraseña del dispositivo del monedero</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="158"/> <location filename="../components/PasswordDialog.qml" line="162"/>
<source>Please enter %1 for: </source> <source>Please enter %1 for: </source>
<translation>Ingrese %1 para:</translation> <translation>Ingrese %1 para:</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="158"/> <location filename="../components/PasswordDialog.qml" line="162"/>
<source>Please enter %1</source> <source>Please enter %1</source>
<translation>Por favor, introduzca %1</translation> <translation>Por favor, introduzca %1</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="170"/> <location filename="../components/PasswordDialog.qml" line="174"/>
<source>Warning: passphrase entry on host is a security risk as it can be captured by malware. It is advised to prefer device-based passphrase entry.</source> <source>Warning: passphrase entry on host is a security risk as it can be captured by malware. It is advised to prefer device-based passphrase entry.</source>
<translation>Advertencia: la entrada de frase de contraseña en el host es un riesgo de seguridad, ya que puede ser capturada por un malware. Se recomienda usar la entrada de frase de contraseña basada en dispositivo.</translation> <translation>Advertencia: la entrada de frase de contraseña en el host es un riesgo de seguridad, ya que puede ser capturada por un malware. Se recomienda usar la entrada de frase de contraseña basada en dispositivo.</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="199"/> <location filename="../components/PasswordDialog.qml" line="203"/>
<source>CAPSLOCKS IS ON.</source> <source>CAPSLOCKS IS ON.</source>
<translation>EL BLOQUEO DE MAYÚSCULAS ESTÁ ACTIVADO.</translation> <translation>EL BLOQUEO DE MAYÚSCULAS ESTÁ ACTIVADO.</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="234"/> <location filename="../components/PasswordDialog.qml" line="238"/>
<source>Please confirm new password</source> <source>Please confirm new password</source>
<translation>Confirmar nueva contraseña</translation> <translation>Confirmar nueva contraseña</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="234"/> <location filename="../components/PasswordDialog.qml" line="238"/>
<source>Please confirm wallet device passphrase</source> <source>Please confirm wallet device passphrase</source>
<translation>Confirme la frase de contraseña del dispositivo del monedero</translation> <translation>Confirme la frase de contraseña del dispositivo del monedero</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="278"/> <location filename="../components/PasswordDialog.qml" line="283"/>
<source>Cancel</source> <source>Cancel</source>
<translation>Cancelar</translation> <translation>Cancelar</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="286"/> <location filename="../components/PasswordDialog.qml" line="293"/>
<source>Ok</source> <source>Ok</source>
<translation>OK</translation> <translation>OK</translation>
</message> </message>
@@ -1411,12 +1411,12 @@ El archivo de caché anterior del monedero será renombrado y puede ser posterio
<translation>Copiar al portapapeles</translation> <translation>Copiar al portapapeles</translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsInfo.qml" line="406"/> <location filename="../pages/settings/SettingsInfo.qml" line="408"/>
<source>Copied to clipboard</source> <source>Copied to clipboard</source>
<translation>Copiado al portapapeles</translation> <translation>Copiado al portapapeles</translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsInfo.qml" line="412"/> <location filename="../pages/settings/SettingsInfo.qml" line="414"/>
<source>Donate to Monero</source> <source>Donate to Monero</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -1514,7 +1514,32 @@ El archivo de caché anterior del monedero será renombrado y puede ser posterio
<translation>Confirmar y habilitar</translation> <translation>Confirmar y habilitar</translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsLayout.qml" line="258"/> <location filename="../pages/settings/SettingsLayout.qml" line="262"/>
<source>Socks5 proxy (%1%2)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="263"/>
<source>remote node connections, </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="264"/>
<source>updates downloading, fetching price sources</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="276"/>
<source>IP address</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="277"/>
<source>Port</source>
<translation type="unfinished">Puerto</translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="289"/>
<source>Change language</source> <source>Change language</source>
<translation>Cambiar el lenguaje</translation> <translation>Cambiar el lenguaje</translation>
</message> </message>
@@ -2824,27 +2849,27 @@ Para el caso de pagos salientes, puedes obtener una &quot;Prueba de pago&quot; q
<context> <context>
<name>WizardController</name> <name>WizardController</name>
<message> <message>
<location filename="../wizard/WizardController.qml" line="310"/> <location filename="../wizard/WizardController.qml" line="309"/>
<source>Please choose a file</source> <source>Please choose a file</source>
<translation>Escoja un archivo</translation> <translation>Escoja un archivo</translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="356"/> <location filename="../wizard/WizardController.qml" line="355"/>
<source>Failed to store the wallet</source> <source>Failed to store the wallet</source>
<translation>Falló de guardar el monedero</translation> <translation>Falló de guardar el monedero</translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="440"/> <location filename="../wizard/WizardController.qml" line="439"/>
<source>Please proceed to the device...</source> <source>Please proceed to the device...</source>
<translation>Vaya al dispositivo ...</translation> <translation>Vaya al dispositivo ...</translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="444"/> <location filename="../wizard/WizardController.qml" line="443"/>
<source>Creating wallet from device...</source> <source>Creating wallet from device...</source>
<translation>Creando billetera desde el dispositivo ...</translation> <translation>Creando billetera desde el dispositivo ...</translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="445"/> <location filename="../wizard/WizardController.qml" line="444"/>
<source> <source>
Please check your hardware wallet Please check your hardware wallet
@@ -3435,71 +3460,71 @@ Si no tienes la opción de ejecutar tu propio nodo, hay una opción de conectars
<context> <context>
<name>main</name> <name>main</name>
<message> <message>
<location filename="../main.qml" line="334"/> <location filename="../main.qml" line="337"/>
<location filename="../main.qml" line="794"/> <location filename="../main.qml" line="818"/>
<location filename="../main.qml" line="806"/> <location filename="../main.qml" line="830"/>
<location filename="../main.qml" line="861"/> <location filename="../main.qml" line="885"/>
<location filename="../main.qml" line="873"/> <location filename="../main.qml" line="897"/>
<location filename="../main.qml" line="915"/> <location filename="../main.qml" line="939"/>
<location filename="../main.qml" line="924"/> <location filename="../main.qml" line="948"/>
<location filename="../main.qml" line="972"/> <location filename="../main.qml" line="996"/>
<location filename="../main.qml" line="1084"/> <location filename="../main.qml" line="1108"/>
<location filename="../main.qml" line="1546"/> <location filename="../main.qml" line="1593"/>
<source>Error</source> <source>Error</source>
<translation>Error</translation> <translation>Error</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="335"/> <location filename="../main.qml" line="338"/>
<location filename="../main.qml" line="541"/> <location filename="../main.qml" line="551"/>
<source>Couldn&apos;t open wallet: </source> <source>Couldn&apos;t open wallet: </source>
<translation>No se pudo abrir el monedero: </translation> <translation>No se pudo abrir el monedero: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="690"/> <location filename="../main.qml" line="714"/>
<source>Waiting for daemon to start...</source> <source>Waiting for daemon to start...</source>
<translation>Esperando a que el daemon se inicie...</translation> <translation>Esperando a que el daemon se inicie...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="698"/> <location filename="../main.qml" line="722"/>
<source>Waiting for daemon to stop...</source> <source>Waiting for daemon to stop...</source>
<translation>Esperando a que el daemon se detenga...</translation> <translation>Esperando a que el daemon se detenga...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="743"/> <location filename="../main.qml" line="767"/>
<source>Daemon is synchronized</source> <source>Daemon is synchronized</source>
<translation>Daemon sincronizado</translation> <translation>Daemon sincronizado</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="796"/> <location filename="../main.qml" line="820"/>
<source>Can&apos;t create transaction: Wrong daemon version: </source> <source>Can&apos;t create transaction: Wrong daemon version: </source>
<translation>No se pudo crear la transacción: Versión del daemon incorrecta: </translation> <translation>No se pudo crear la transacción: Versión del daemon incorrecta: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="798"/> <location filename="../main.qml" line="822"/>
<location filename="../main.qml" line="916"/> <location filename="../main.qml" line="940"/>
<source>Can&apos;t create transaction: </source> <source>Can&apos;t create transaction: </source>
<translation>No se puede crear la transacción: </translation> <translation>No se puede crear la transacción: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="807"/> <location filename="../main.qml" line="831"/>
<location filename="../main.qml" line="925"/> <location filename="../main.qml" line="949"/>
<source>No unmixable outputs to sweep</source> <source>No unmixable outputs to sweep</source>
<translation>No hay salidas no-mezclables que barrer</translation> <translation>No hay salidas no-mezclables que barrer</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="820"/> <location filename="../main.qml" line="844"/>
<source>Address: </source> <source>Address: </source>
<translation>Dirección: </translation> <translation>Dirección: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="824"/> <location filename="../main.qml" line="848"/>
<source> <source>
Ringsize: </source> Ringsize: </source>
<translation> <translation>
Tamaño de la firma circular: </translation> Tamaño de la firma circular: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="825"/> <location filename="../main.qml" line="849"/>
<source> <source>
Number of transactions: </source> Number of transactions: </source>
@@ -3508,42 +3533,42 @@ Number of transactions: </source>
Número de transacciones: </translation> Número de transacciones: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="826"/> <location filename="../main.qml" line="850"/>
<source> <source>
Description: </source> Description: </source>
<translation> <translation>
Descripción: </translation> Descripción: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="828"/> <location filename="../main.qml" line="852"/>
<source> <source>
Spending address index: </source> Spending address index: </source>
<translation> <translation>
Índice de dirección de gasto: </translation> Índice de dirección de gasto: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="937"/> <location filename="../main.qml" line="961"/>
<source>Confirmation</source> <source>Confirmation</source>
<translation>Confirmación</translation> <translation>Confirmación</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="818"/> <location filename="../main.qml" line="842"/>
<location filename="../main.qml" line="938"/> <location filename="../main.qml" line="962"/>
<source>Please confirm transaction: <source>Please confirm transaction:
</source> </source>
<translation>Confirme la transacción: <translation>Confirme la transacción:
</translation> </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="821"/> <location filename="../main.qml" line="845"/>
<source> <source>
Payment ID: </source> Payment ID: </source>
<translation> <translation>
ID de pago: </translation> ID de pago: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="822"/> <location filename="../main.qml" line="846"/>
<location filename="../main.qml" line="939"/> <location filename="../main.qml" line="963"/>
<source> <source>
Amount: </source> Amount: </source>
@@ -3552,88 +3577,88 @@ Amount: </source>
Cantidad: </translation> Cantidad: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="823"/> <location filename="../main.qml" line="847"/>
<location filename="../main.qml" line="940"/> <location filename="../main.qml" line="964"/>
<source> <source>
Fee: </source> Fee: </source>
<translation> <translation>
Comisión: </translation> Comisión: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1027"/> <location filename="../main.qml" line="1051"/>
<source>Payment proof</source> <source>Payment proof</source>
<translation>Prueba de pago</translation> <translation>Prueba de pago</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1060"/> <location filename="../main.qml" line="1084"/>
<location filename="../main.qml" line="1079"/> <location filename="../main.qml" line="1103"/>
<source>Payment proof check</source> <source>Payment proof check</source>
<translation>Verificación de la prueba de pago</translation> <translation>Verificación de la prueba de pago</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1063"/> <location filename="../main.qml" line="1087"/>
<location filename="../main.qml" line="1081"/> <location filename="../main.qml" line="1105"/>
<source>Bad signature</source> <source>Bad signature</source>
<translation>Firma incorrecta</translation> <translation>Firma incorrecta</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1070"/> <location filename="../main.qml" line="1094"/>
<source>This address received %1 monero, with %2 confirmation(s).</source> <source>This address received %1 monero, with %2 confirmation(s).</source>
<translation>Esta dirección recibió %1 monero, con %2 confirmacion(es).</translation> <translation>Esta dirección recibió %1 monero, con %2 confirmacion(es).</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="307"/> <location filename="../main.qml" line="310"/>
<source>Closing wallet...</source> <source>Closing wallet...</source>
<translation>Cerrando monedero...</translation> <translation>Cerrando monedero...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="502"/> <location filename="../main.qml" line="512"/>
<source>Please proceed to the device...</source> <source>Please proceed to the device...</source>
<translation>Vaya al dispositivo ...</translation> <translation>Vaya al dispositivo ...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="514"/> <location filename="../main.qml" line="524"/>
<source>Opening wallet ...</source> <source>Opening wallet ...</source>
<translation>Abriendo monedero...</translation> <translation>Abriendo monedero...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="529"/> <location filename="../main.qml" line="539"/>
<location filename="../main.qml" line="536"/> <location filename="../main.qml" line="546"/>
<source>Repairing incompatible wallet cache. Resyncing wallet.</source> <source>Repairing incompatible wallet cache. Resyncing wallet.</source>
<translation>Reparación de caché de monedero incompatible. Resincronizando monedero.</translation> <translation>Reparación de caché de monedero incompatible. Resincronizando monedero.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="645"/> <location filename="../main.qml" line="669"/>
<source>Waiting for daemon to sync</source> <source>Waiting for daemon to sync</source>
<translation>Esperando al daemon sincronizar</translation> <translation>Esperando al daemon sincronizar</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="647"/> <location filename="../main.qml" line="671"/>
<source>Daemon is synchronized (%1)</source> <source>Daemon is synchronized (%1)</source>
<translation>Daemon sincronizado.(%1)</translation> <translation>Daemon sincronizado.(%1)</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="649"/> <location filename="../main.qml" line="673"/>
<source>Wallet is synchronized</source> <source>Wallet is synchronized</source>
<translation>Monedero sincronizado</translation> <translation>Monedero sincronizado</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="726"/> <location filename="../main.qml" line="750"/>
<source>Daemon failed to start</source> <source>Daemon failed to start</source>
<translation>El daemon falló al iniciarse</translation> <translation>El daemon falló al iniciarse</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="727"/> <location filename="../main.qml" line="751"/>
<source>Please check your wallet and daemon log for errors. You can also try to start %1 manually.</source> <source>Please check your wallet and daemon log for errors. You can also try to start %1 manually.</source>
<translation>Compruebe si hay errores en los registros de su monedero y del daemon. También puede probar a arrancar %1 manualmente.</translation> <translation>Compruebe si hay errores en los registros de su monedero y del daemon. También puede probar a arrancar %1 manualmente.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="848"/> <location filename="../main.qml" line="872"/>
<source>Creating transaction...</source> <source>Creating transaction...</source>
<translation>Creando transacción ...</translation> <translation>Creando transacción ...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="849"/> <location filename="../main.qml" line="873"/>
<source> <source>
Please check your hardware wallet Please check your hardware wallet
@@ -3644,156 +3669,166 @@ Por favor revise su billetera de hardware -
su entrada puede ser requerida</translation> su entrada puede ser requerida</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="862"/> <location filename="../main.qml" line="886"/>
<source>Amount is wrong: expected number from %1 to %2</source> <source>Amount is wrong: expected number from %1 to %2</source>
<translation>Cantidad errónea: se espera un número entre %1 y %2</translation> <translation>Cantidad errónea: se espera un número entre %1 y %2</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="874"/> <location filename="../main.qml" line="898"/>
<source>Insufficient funds. Unlocked balance: %1</source> <source>Insufficient funds. Unlocked balance: %1</source>
<translation>Fondos insuficientes. Balance desbloqueado: %1</translation> <translation>Fondos insuficientes. Balance desbloqueado: %1</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="964"/> <location filename="../main.qml" line="988"/>
<source>Sending transaction ...</source> <source>Sending transaction ...</source>
<translation>Enviando transacción ...</translation> <translation>Enviando transacción ...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="973"/> <location filename="../main.qml" line="997"/>
<source>Couldn&apos;t send the money: </source> <source>Couldn&apos;t send the money: </source>
<translation>No se pudo enviar el dinero: </translation> <translation>No se pudo enviar el dinero: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="977"/> <location filename="../main.qml" line="1001"/>
<location filename="../main.qml" line="1542"/> <location filename="../main.qml" line="1589"/>
<source>Information</source> <source>Information</source>
<translation>Información</translation> <translation>Información</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="983"/> <location filename="../main.qml" line="1007"/>
<source>Transaction saved to file: %1</source> <source>Transaction saved to file: %1</source>
<translation>Transacción guardada al archivo: %1</translation> <translation>Transacción guardada al archivo: %1</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="983"/> <location filename="../main.qml" line="1007"/>
<source>Monero sent successfully: %1 transaction(s) </source> <source>Monero sent successfully: %1 transaction(s) </source>
<translation>Monero enviado con exito: %1 transacción(es)</translation> <translation>Monero enviado con exito: %1 transacción(es)</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1000"/> <location filename="../main.qml" line="1024"/>
<source>Failed to store the wallet</source> <source>Failed to store the wallet</source>
<translation>Falló de guardar el monedero</translation> <translation>Falló de guardar el monedero</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1030"/> <location filename="../main.qml" line="1054"/>
<source>Couldn&apos;t generate a proof because of the following reason: <source>Couldn&apos;t generate a proof because of the following reason:
</source> </source>
<translation>No se pudo generar una prueba por las siguientes razones: <translation>No se pudo generar una prueba por las siguientes razones:
</translation> </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1067"/> <location filename="../main.qml" line="1091"/>
<source>This address received %1 monero, but the transaction is not yet mined</source> <source>This address received %1 monero, but the transaction is not yet mined</source>
<translation>Esta dirección recibió %1 monero, pero la transacción no ha sido minada todavía</translation> <translation>Esta dirección recibió %1 monero, pero la transacción no ha sido minada todavía</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1074"/> <location filename="../main.qml" line="1098"/>
<source>This address received nothing</source> <source>This address received nothing</source>
<translation>Esta dirección no ha recibido nada</translation> <translation>Esta dirección no ha recibido nada</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1081"/> <location filename="../main.qml" line="1105"/>
<source>Good signature</source> <source>Good signature</source>
<translation>Firma correcta</translation> <translation>Firma correcta</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1635"/> <location filename="../main.qml" line="1496"/>
<source>Save transaction file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1496"/>
<source>Send transaction</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1682"/>
<source>Primary account</source> <source>Primary account</source>
<translation>Cuenta principal</translation> <translation>Cuenta principal</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1846"/> <location filename="../main.qml" line="1893"/>
<source>Autosaved the wallet</source> <source>Autosaved the wallet</source>
<translation>Autoguardado del monedero</translation> <translation>Autoguardado del monedero</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1848"/> <location filename="../main.qml" line="1895"/>
<source>Failed to autosave the wallet</source> <source>Failed to autosave the wallet</source>
<translation>Error al guardar automáticamente el monedero</translation> <translation>Error al guardar automáticamente el monedero</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1963"/> <location filename="../main.qml" line="2010"/>
<source>Local node is running</source> <source>Local node is running</source>
<translation>El nodo local se está ejecutando</translation> <translation>El nodo local se está ejecutando</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1964"/> <location filename="../main.qml" line="2011"/>
<source>Do you want to stop local node or keep it running in the background?</source> <source>Do you want to stop local node or keep it running in the background?</source>
<translation>¿Desea detener el nodo local o mantenerlo ejecutándose en segundo plano?</translation> <translation>¿Desea detener el nodo local o mantenerlo ejecutándose en segundo plano?</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1966"/> <location filename="../main.qml" line="2013"/>
<source>Force stop</source> <source>Force stop</source>
<translation>Forzar frenado de la aplicación</translation> <translation>Forzar frenado de la aplicación</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1967"/> <location filename="../main.qml" line="2014"/>
<source>Keep it running</source> <source>Keep it running</source>
<translation>Mantenerlo ejecutándose</translation> <translation>Mantenerlo ejecutándose</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="2002"/> <location filename="../main.qml" line="2049"/>
<source>Checking local node status...</source> <source>Checking local node status...</source>
<translation>Verificando el estado del nodo local...</translation> <translation>Verificando el estado del nodo local...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1443"/> <location filename="../main.qml" line="1486"/>
<location filename="../main.qml" line="2111"/> <location filename="../main.qml" line="2158"/>
<source>Wrong password</source> <source>Wrong password</source>
<translation>Contraseña incorrecta</translation> <translation>Contraseña incorrecta</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1496"/> <location filename="../main.qml" line="1543"/>
<source>Warning</source> <source>Warning</source>
<translation>Aviso</translation> <translation>Aviso</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1499"/> <location filename="../main.qml" line="1546"/>
<source>Error: Filesystem is read only</source> <source>Error: Filesystem is read only</source>
<translation>Error: el sistema de archivos es de sólo lectura</translation> <translation>Error: el sistema de archivos es de sólo lectura</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1501"/> <location filename="../main.qml" line="1548"/>
<source>Warning: There&apos;s only %1 GB available on the device. Blockchain requires ~%2 GB of data.</source> <source>Warning: There&apos;s only %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation>Advertencia: Sólo hay %1 GB disponibles en el dispositivo. La cadena de bloques requiere ~%2 GB de datos.</translation> <translation>Advertencia: Sólo hay %1 GB disponibles en el dispositivo. La cadena de bloques requiere ~%2 GB de datos.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1503"/> <location filename="../main.qml" line="1550"/>
<source>Note: There&apos;s %1 GB available on the device. Blockchain requires ~%2 GB of data.</source> <source>Note: There&apos;s %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation>Nota: Hay %1 GB disponibles en el dispositivo. La cadena de bloques requiere ~%2 GB de datos.</translation> <translation>Nota: Hay %1 GB disponibles en el dispositivo. La cadena de bloques requiere ~%2 GB de datos.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1505"/> <location filename="../main.qml" line="1552"/>
<source>Note: lmdb folder not found. A new folder will be created.</source> <source>Note: lmdb folder not found. A new folder will be created.</source>
<translation>Nota: Carpeta lmdb no encontrada. Se va a crear una nueva carpeta.</translation> <translation>Nota: Carpeta lmdb no encontrada. Se va a crear una nueva carpeta.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1543"/> <location filename="../main.qml" line="1590"/>
<source>Password changed successfully</source> <source>Password changed successfully</source>
<translation>Contraseña cambiada de forma exitosa</translation> <translation>Contraseña cambiada de forma exitosa</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1547"/> <location filename="../main.qml" line="1594"/>
<source>Error: </source> <source>Error: </source>
<translation>Error: </translation> <translation>Error: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1595"/> <location filename="../main.qml" line="1642"/>
<source>Please wait...</source> <source>Please wait...</source>
<translation>Espere...</translation> <translation>Espere...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1987"/> <location filename="../main.qml" line="2034"/>
<source>Tap again to close...</source> <source>Tap again to close...</source>
<translation>Pulse otra vez para cerrar...</translation> <translation>Pulse otra vez para cerrar...</translation>
</message> </message>

View File

@@ -4,53 +4,53 @@
<context> <context>
<name>Account</name> <name>Account</name>
<message> <message>
<location filename="../pages/Account.qml" line="55"/> <location filename="../pages/Account.qml" line="57"/>
<source>Set the label of the selected account:</source> <source>Set the label of the selected account:</source>
<translation>تنظیم برچسب برای حساب انتخاب شده:</translation> <translation>تنظیم برچسب برای حساب انتخاب شده:</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="87"/> <location filename="../pages/Account.qml" line="89"/>
<source>Balance All</source> <source>Balance All</source>
<translation>تمام موجودی</translation> <translation>تمام موجودی</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="94"/> <location filename="../pages/Account.qml" line="96"/>
<source>Total balance: </source> <source>Total balance: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="117"/> <location filename="../pages/Account.qml" line="119"/>
<location filename="../pages/Account.qml" line="150"/> <location filename="../pages/Account.qml" line="152"/>
<source>Copied to clipboard</source> <source>Copied to clipboard</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="127"/> <location filename="../pages/Account.qml" line="129"/>
<source>Total unlocked balance: </source> <source>Total unlocked balance: </source>
<translation>کل موجودی آزاد:</translation> <translation>کل موجودی آزاد:</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="165"/> <location filename="../pages/Account.qml" line="167"/>
<source>Accounts</source> <source>Accounts</source>
<translation>حساب ها</translation> <translation>حساب ها</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="258"/> <location filename="../pages/Account.qml" line="260"/>
<source>Balance: </source> <source>Balance: </source>
<translation>موجودی: </translation> <translation>موجودی: </translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="319"/> <location filename="../pages/Account.qml" line="321"/>
<source>Address copied to clipboard</source> <source>Address copied to clipboard</source>
<translation>نشانی به کلیپ بورد کپی شد</translation> <translation>نشانی به کلیپ بورد کپی شد</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="354"/> <location filename="../pages/Account.qml" line="356"/>
<source>Create new account</source> <source>Create new account</source>
<translation>ایجاد حساب جدید</translation> <translation>ایجاد حساب جدید</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="356"/> <location filename="../pages/Account.qml" line="358"/>
<source>Set the label of the new account:</source> <source>Set the label of the new account:</source>
<translation>تنظیم برچسب برای حساب جدید: </translation> <translation>تنظیم برچسب برای حساب جدید: </translation>
</message> </message>
@@ -1137,57 +1137,57 @@ Mining also gives you a small chance to earn some Monero. Your computer will cre
<context> <context>
<name>PasswordDialog</name> <name>PasswordDialog</name>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="155"/> <location filename="../components/PasswordDialog.qml" line="159"/>
<source>Please enter new wallet password</source> <source>Please enter new wallet password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="157"/> <location filename="../components/PasswordDialog.qml" line="161"/>
<source>wallet password</source> <source>wallet password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="157"/> <location filename="../components/PasswordDialog.qml" line="161"/>
<source>wallet device passphrase</source> <source>wallet device passphrase</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="158"/> <location filename="../components/PasswordDialog.qml" line="162"/>
<source>Please enter %1 for: </source> <source>Please enter %1 for: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="158"/> <location filename="../components/PasswordDialog.qml" line="162"/>
<source>Please enter %1</source> <source>Please enter %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="170"/> <location filename="../components/PasswordDialog.qml" line="174"/>
<source>Warning: passphrase entry on host is a security risk as it can be captured by malware. It is advised to prefer device-based passphrase entry.</source> <source>Warning: passphrase entry on host is a security risk as it can be captured by malware. It is advised to prefer device-based passphrase entry.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="199"/> <location filename="../components/PasswordDialog.qml" line="203"/>
<source>CAPSLOCKS IS ON.</source> <source>CAPSLOCKS IS ON.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="234"/> <location filename="../components/PasswordDialog.qml" line="238"/>
<source>Please confirm new password</source> <source>Please confirm new password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="234"/> <location filename="../components/PasswordDialog.qml" line="238"/>
<source>Please confirm wallet device passphrase</source> <source>Please confirm wallet device passphrase</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="278"/> <location filename="../components/PasswordDialog.qml" line="283"/>
<source>Cancel</source> <source>Cancel</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="286"/> <location filename="../components/PasswordDialog.qml" line="293"/>
<source>Ok</source> <source>Ok</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -1399,12 +1399,12 @@ The old wallet cache file will be renamed and can be restored later.
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsInfo.qml" line="406"/> <location filename="../pages/settings/SettingsInfo.qml" line="408"/>
<source>Copied to clipboard</source> <source>Copied to clipboard</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsInfo.qml" line="412"/> <location filename="../pages/settings/SettingsInfo.qml" line="414"/>
<source>Donate to Monero</source> <source>Donate to Monero</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -1502,7 +1502,32 @@ The old wallet cache file will be renamed and can be restored later.
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsLayout.qml" line="258"/> <location filename="../pages/settings/SettingsLayout.qml" line="262"/>
<source>Socks5 proxy (%1%2)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="263"/>
<source>remote node connections, </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="264"/>
<source>updates downloading, fetching price sources</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="276"/>
<source>IP address</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="277"/>
<source>Port</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="289"/>
<source>Change language</source> <source>Change language</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -2788,27 +2813,27 @@ For the case with Spend Proof, you don&apos;t need to specify the recipient addr
<context> <context>
<name>WizardController</name> <name>WizardController</name>
<message> <message>
<location filename="../wizard/WizardController.qml" line="310"/> <location filename="../wizard/WizardController.qml" line="309"/>
<source>Please choose a file</source> <source>Please choose a file</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="356"/> <location filename="../wizard/WizardController.qml" line="355"/>
<source>Failed to store the wallet</source> <source>Failed to store the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="440"/> <location filename="../wizard/WizardController.qml" line="439"/>
<source>Please proceed to the device...</source> <source>Please proceed to the device...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="444"/> <location filename="../wizard/WizardController.qml" line="443"/>
<source>Creating wallet from device...</source> <source>Creating wallet from device...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="445"/> <location filename="../wizard/WizardController.qml" line="444"/>
<source> <source>
Please check your hardware wallet Please check your hardware wallet
@@ -3394,173 +3419,173 @@ If you don&apos;t have the option to run your own node, there&apos;s an option t
<context> <context>
<name>main</name> <name>main</name>
<message> <message>
<location filename="../main.qml" line="334"/> <location filename="../main.qml" line="337"/>
<location filename="../main.qml" line="794"/> <location filename="../main.qml" line="818"/>
<location filename="../main.qml" line="806"/> <location filename="../main.qml" line="830"/>
<location filename="../main.qml" line="861"/> <location filename="../main.qml" line="885"/>
<location filename="../main.qml" line="873"/> <location filename="../main.qml" line="897"/>
<location filename="../main.qml" line="915"/> <location filename="../main.qml" line="939"/>
<location filename="../main.qml" line="924"/> <location filename="../main.qml" line="948"/>
<location filename="../main.qml" line="972"/> <location filename="../main.qml" line="996"/>
<location filename="../main.qml" line="1084"/> <location filename="../main.qml" line="1108"/>
<location filename="../main.qml" line="1546"/> <location filename="../main.qml" line="1593"/>
<source>Error</source> <source>Error</source>
<translation>خطا</translation> <translation>خطا</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="335"/> <location filename="../main.qml" line="338"/>
<location filename="../main.qml" line="541"/> <location filename="../main.qml" line="551"/>
<source>Couldn&apos;t open wallet: </source> <source>Couldn&apos;t open wallet: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="690"/> <location filename="../main.qml" line="714"/>
<source>Waiting for daemon to start...</source> <source>Waiting for daemon to start...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="698"/> <location filename="../main.qml" line="722"/>
<source>Waiting for daemon to stop...</source> <source>Waiting for daemon to stop...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="726"/> <location filename="../main.qml" line="750"/>
<source>Daemon failed to start</source> <source>Daemon failed to start</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="727"/> <location filename="../main.qml" line="751"/>
<source>Please check your wallet and daemon log for errors. You can also try to start %1 manually.</source> <source>Please check your wallet and daemon log for errors. You can also try to start %1 manually.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="796"/> <location filename="../main.qml" line="820"/>
<source>Can&apos;t create transaction: Wrong daemon version: </source> <source>Can&apos;t create transaction: Wrong daemon version: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="798"/> <location filename="../main.qml" line="822"/>
<location filename="../main.qml" line="916"/> <location filename="../main.qml" line="940"/>
<source>Can&apos;t create transaction: </source> <source>Can&apos;t create transaction: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="807"/> <location filename="../main.qml" line="831"/>
<location filename="../main.qml" line="925"/> <location filename="../main.qml" line="949"/>
<source>No unmixable outputs to sweep</source> <source>No unmixable outputs to sweep</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="937"/> <location filename="../main.qml" line="961"/>
<source>Confirmation</source> <source>Confirmation</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="818"/> <location filename="../main.qml" line="842"/>
<location filename="../main.qml" line="938"/> <location filename="../main.qml" line="962"/>
<source>Please confirm transaction: <source>Please confirm transaction:
</source> </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="821"/> <location filename="../main.qml" line="845"/>
<source> <source>
Payment ID: </source> Payment ID: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="822"/> <location filename="../main.qml" line="846"/>
<location filename="../main.qml" line="939"/> <location filename="../main.qml" line="963"/>
<source> <source>
Amount: </source> Amount: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="823"/> <location filename="../main.qml" line="847"/>
<location filename="../main.qml" line="940"/> <location filename="../main.qml" line="964"/>
<source> <source>
Fee: </source> Fee: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="645"/> <location filename="../main.qml" line="669"/>
<source>Waiting for daemon to sync</source> <source>Waiting for daemon to sync</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="307"/> <location filename="../main.qml" line="310"/>
<source>Closing wallet...</source> <source>Closing wallet...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="502"/> <location filename="../main.qml" line="512"/>
<source>Please proceed to the device...</source> <source>Please proceed to the device...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="514"/> <location filename="../main.qml" line="524"/>
<source>Opening wallet ...</source> <source>Opening wallet ...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="529"/> <location filename="../main.qml" line="539"/>
<location filename="../main.qml" line="536"/> <location filename="../main.qml" line="546"/>
<source>Repairing incompatible wallet cache. Resyncing wallet.</source> <source>Repairing incompatible wallet cache. Resyncing wallet.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="647"/> <location filename="../main.qml" line="671"/>
<source>Daemon is synchronized (%1)</source> <source>Daemon is synchronized (%1)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="649"/> <location filename="../main.qml" line="673"/>
<source>Wallet is synchronized</source> <source>Wallet is synchronized</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="743"/> <location filename="../main.qml" line="767"/>
<source>Daemon is synchronized</source> <source>Daemon is synchronized</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="820"/> <location filename="../main.qml" line="844"/>
<source>Address: </source> <source>Address: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="824"/> <location filename="../main.qml" line="848"/>
<source> <source>
Ringsize: </source> Ringsize: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="825"/> <location filename="../main.qml" line="849"/>
<source> <source>
Number of transactions: </source> Number of transactions: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="826"/> <location filename="../main.qml" line="850"/>
<source> <source>
Description: </source> Description: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="828"/> <location filename="../main.qml" line="852"/>
<source> <source>
Spending address index: </source> Spending address index: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="848"/> <location filename="../main.qml" line="872"/>
<source>Creating transaction...</source> <source>Creating transaction...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="849"/> <location filename="../main.qml" line="873"/>
<source> <source>
Please check your hardware wallet Please check your hardware wallet
@@ -3568,177 +3593,187 @@ your input may be required.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="964"/> <location filename="../main.qml" line="988"/>
<source>Sending transaction ...</source> <source>Sending transaction ...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="983"/> <location filename="../main.qml" line="1007"/>
<source>Monero sent successfully: %1 transaction(s) </source> <source>Monero sent successfully: %1 transaction(s) </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1000"/> <location filename="../main.qml" line="1024"/>
<source>Failed to store the wallet</source> <source>Failed to store the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1027"/> <location filename="../main.qml" line="1051"/>
<source>Payment proof</source> <source>Payment proof</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1030"/> <location filename="../main.qml" line="1054"/>
<source>Couldn&apos;t generate a proof because of the following reason: <source>Couldn&apos;t generate a proof because of the following reason:
</source> </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1060"/> <location filename="../main.qml" line="1084"/>
<location filename="../main.qml" line="1079"/> <location filename="../main.qml" line="1103"/>
<source>Payment proof check</source> <source>Payment proof check</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1063"/> <location filename="../main.qml" line="1087"/>
<location filename="../main.qml" line="1081"/> <location filename="../main.qml" line="1105"/>
<source>Bad signature</source> <source>Bad signature</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1070"/> <location filename="../main.qml" line="1094"/>
<source>This address received %1 monero, with %2 confirmation(s).</source> <source>This address received %1 monero, with %2 confirmation(s).</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1081"/> <location filename="../main.qml" line="1105"/>
<source>Good signature</source> <source>Good signature</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1443"/> <location filename="../main.qml" line="1486"/>
<location filename="../main.qml" line="2111"/> <location filename="../main.qml" line="2158"/>
<source>Wrong password</source> <source>Wrong password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1496"/> <location filename="../main.qml" line="1496"/>
<source>Warning</source> <source>Save transaction file</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1499"/> <location filename="../main.qml" line="1496"/>
<source>Error: Filesystem is read only</source> <source>Send transaction</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1501"/>
<source>Warning: There&apos;s only %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1503"/>
<source>Note: There&apos;s %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1505"/>
<source>Note: lmdb folder not found. A new folder will be created.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1543"/> <location filename="../main.qml" line="1543"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1546"/>
<source>Error: Filesystem is read only</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1548"/>
<source>Warning: There&apos;s only %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1550"/>
<source>Note: There&apos;s %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1552"/>
<source>Note: lmdb folder not found. A new folder will be created.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1590"/>
<source>Password changed successfully</source> <source>Password changed successfully</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1547"/> <location filename="../main.qml" line="1594"/>
<source>Error: </source> <source>Error: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1635"/> <location filename="../main.qml" line="1682"/>
<source>Primary account</source> <source>Primary account</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1846"/> <location filename="../main.qml" line="1893"/>
<source>Autosaved the wallet</source> <source>Autosaved the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1848"/> <location filename="../main.qml" line="1895"/>
<source>Failed to autosave the wallet</source> <source>Failed to autosave the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1963"/> <location filename="../main.qml" line="2010"/>
<source>Local node is running</source> <source>Local node is running</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1964"/> <location filename="../main.qml" line="2011"/>
<source>Do you want to stop local node or keep it running in the background?</source> <source>Do you want to stop local node or keep it running in the background?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1966"/> <location filename="../main.qml" line="2013"/>
<source>Force stop</source> <source>Force stop</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1967"/> <location filename="../main.qml" line="2014"/>
<source>Keep it running</source> <source>Keep it running</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1987"/> <location filename="../main.qml" line="2034"/>
<source>Tap again to close...</source> <source>Tap again to close...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="2002"/> <location filename="../main.qml" line="2049"/>
<source>Checking local node status...</source> <source>Checking local node status...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="862"/> <location filename="../main.qml" line="886"/>
<source>Amount is wrong: expected number from %1 to %2</source> <source>Amount is wrong: expected number from %1 to %2</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="874"/> <location filename="../main.qml" line="898"/>
<source>Insufficient funds. Unlocked balance: %1</source> <source>Insufficient funds. Unlocked balance: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="973"/> <location filename="../main.qml" line="997"/>
<source>Couldn&apos;t send the money: </source> <source>Couldn&apos;t send the money: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="977"/> <location filename="../main.qml" line="1001"/>
<location filename="../main.qml" line="1542"/> <location filename="../main.qml" line="1589"/>
<source>Information</source> <source>Information</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="983"/> <location filename="../main.qml" line="1007"/>
<source>Transaction saved to file: %1</source> <source>Transaction saved to file: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1067"/> <location filename="../main.qml" line="1091"/>
<source>This address received %1 monero, but the transaction is not yet mined</source> <source>This address received %1 monero, but the transaction is not yet mined</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1074"/> <location filename="../main.qml" line="1098"/>
<source>This address received nothing</source> <source>This address received nothing</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1595"/> <location filename="../main.qml" line="1642"/>
<source>Please wait...</source> <source>Please wait...</source>
<translation>لطفا صبر کنید...</translation> <translation>لطفا صبر کنید...</translation>
</message> </message>

View File

@@ -4,53 +4,53 @@
<context> <context>
<name>Account</name> <name>Account</name>
<message> <message>
<location filename="../pages/Account.qml" line="55"/> <location filename="../pages/Account.qml" line="57"/>
<source>Set the label of the selected account:</source> <source>Set the label of the selected account:</source>
<translation>Nimeä valittu tili:</translation> <translation>Nimeä valittu tili:</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="87"/> <location filename="../pages/Account.qml" line="89"/>
<source>Balance All</source> <source>Balance All</source>
<translation>Luoton kokonaismäärä</translation> <translation>Luoton kokonaismäärä</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="94"/> <location filename="../pages/Account.qml" line="96"/>
<source>Total balance: </source> <source>Total balance: </source>
<translation>Luoton kokonaismäärä: </translation> <translation>Luoton kokonaismäärä: </translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="117"/> <location filename="../pages/Account.qml" line="119"/>
<location filename="../pages/Account.qml" line="150"/> <location filename="../pages/Account.qml" line="152"/>
<source>Copied to clipboard</source> <source>Copied to clipboard</source>
<translation>Kopioitu leikepöydälle</translation> <translation>Kopioitu leikepöydälle</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="127"/> <location filename="../pages/Account.qml" line="129"/>
<source>Total unlocked balance: </source> <source>Total unlocked balance: </source>
<translation>Lukitsematon kokonaissaldo: </translation> <translation>Lukitsematon kokonaissaldo: </translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="165"/> <location filename="../pages/Account.qml" line="167"/>
<source>Accounts</source> <source>Accounts</source>
<translation>Tilit</translation> <translation>Tilit</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="258"/> <location filename="../pages/Account.qml" line="260"/>
<source>Balance: </source> <source>Balance: </source>
<translation>Saldo: </translation> <translation>Saldo: </translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="319"/> <location filename="../pages/Account.qml" line="321"/>
<source>Address copied to clipboard</source> <source>Address copied to clipboard</source>
<translation>Osoite kopioitu leikepöydälle</translation> <translation>Osoite kopioitu leikepöydälle</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="354"/> <location filename="../pages/Account.qml" line="356"/>
<source>Create new account</source> <source>Create new account</source>
<translation>Luo uusi tili</translation> <translation>Luo uusi tili</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="356"/> <location filename="../pages/Account.qml" line="358"/>
<source>Set the label of the new account:</source> <source>Set the label of the new account:</source>
<translation>Nimeä uusi tili:</translation> <translation>Nimeä uusi tili:</translation>
</message> </message>
@@ -1139,57 +1139,57 @@ Louhimalla voit myös ansaita hieman Moneroa. Tietokoneesi luo louhiessa tiivist
<context> <context>
<name>PasswordDialog</name> <name>PasswordDialog</name>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="155"/> <location filename="../components/PasswordDialog.qml" line="159"/>
<source>Please enter new wallet password</source> <source>Please enter new wallet password</source>
<translation>Syötä uusi lompakon salasana</translation> <translation>Syötä uusi lompakon salasana</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="157"/> <location filename="../components/PasswordDialog.qml" line="161"/>
<source>wallet password</source> <source>wallet password</source>
<translation>lompakon salasana</translation> <translation>lompakon salasana</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="157"/> <location filename="../components/PasswordDialog.qml" line="161"/>
<source>wallet device passphrase</source> <source>wallet device passphrase</source>
<translation>lompakko-laitteen salalause</translation> <translation>lompakko-laitteen salalause</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="158"/> <location filename="../components/PasswordDialog.qml" line="162"/>
<source>Please enter %1 for: </source> <source>Please enter %1 for: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="158"/> <location filename="../components/PasswordDialog.qml" line="162"/>
<source>Please enter %1</source> <source>Please enter %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="170"/> <location filename="../components/PasswordDialog.qml" line="174"/>
<source>Warning: passphrase entry on host is a security risk as it can be captured by malware. It is advised to prefer device-based passphrase entry.</source> <source>Warning: passphrase entry on host is a security risk as it can be captured by malware. It is advised to prefer device-based passphrase entry.</source>
<translation>Varoitus: salasanan kirjoitus tietokoneella on tietoturvariski, koska haittaohjelmat voivat kaapata sen. On suositeltavaa kirjoittaa salasana rautalompakolla.</translation> <translation>Varoitus: salasanan kirjoitus tietokoneella on tietoturvariski, koska haittaohjelmat voivat kaapata sen. On suositeltavaa kirjoittaa salasana rautalompakolla.</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="199"/> <location filename="../components/PasswordDialog.qml" line="203"/>
<source>CAPSLOCKS IS ON.</source> <source>CAPSLOCKS IS ON.</source>
<translation>CAPSLOCKS ON PÄÄLLÄ.</translation> <translation>CAPSLOCKS ON PÄÄLLÄ.</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="234"/> <location filename="../components/PasswordDialog.qml" line="238"/>
<source>Please confirm new password</source> <source>Please confirm new password</source>
<translation>Vahvista uusi salasana</translation> <translation>Vahvista uusi salasana</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="234"/> <location filename="../components/PasswordDialog.qml" line="238"/>
<source>Please confirm wallet device passphrase</source> <source>Please confirm wallet device passphrase</source>
<translation>Varmista lompakko-laitteen salalause</translation> <translation>Varmista lompakko-laitteen salalause</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="278"/> <location filename="../components/PasswordDialog.qml" line="283"/>
<source>Cancel</source> <source>Cancel</source>
<translation>Peruuta</translation> <translation>Peruuta</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="286"/> <location filename="../components/PasswordDialog.qml" line="293"/>
<source>Ok</source> <source>Ok</source>
<translation>Ok</translation> <translation>Ok</translation>
</message> </message>
@@ -1409,12 +1409,12 @@ Vanha lompakkovälimuistitiedosto nimetään uudelleen ja voidaan palauttaa myö
<translation>Kopioi leikepöydälle</translation> <translation>Kopioi leikepöydälle</translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsInfo.qml" line="406"/> <location filename="../pages/settings/SettingsInfo.qml" line="408"/>
<source>Copied to clipboard</source> <source>Copied to clipboard</source>
<translation>Kopioitu leikepöydälle</translation> <translation>Kopioitu leikepöydälle</translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsInfo.qml" line="412"/> <location filename="../pages/settings/SettingsInfo.qml" line="414"/>
<source>Donate to Monero</source> <source>Donate to Monero</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -1512,7 +1512,32 @@ Vanha lompakkovälimuistitiedosto nimetään uudelleen ja voidaan palauttaa myö
<translation>Hyväksy ja ota käyttöön</translation> <translation>Hyväksy ja ota käyttöön</translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsLayout.qml" line="258"/> <location filename="../pages/settings/SettingsLayout.qml" line="262"/>
<source>Socks5 proxy (%1%2)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="263"/>
<source>remote node connections, </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="264"/>
<source>updates downloading, fetching price sources</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="276"/>
<source>IP address</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="277"/>
<source>Port</source>
<translation type="unfinished">Portti</translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="289"/>
<source>Change language</source> <source>Change language</source>
<translation>Vaihda kieltä</translation> <translation>Vaihda kieltä</translation>
</message> </message>
@@ -2805,27 +2830,27 @@ For the case with Spend Proof, you don&apos;t need to specify the recipient addr
<context> <context>
<name>WizardController</name> <name>WizardController</name>
<message> <message>
<location filename="../wizard/WizardController.qml" line="310"/> <location filename="../wizard/WizardController.qml" line="309"/>
<source>Please choose a file</source> <source>Please choose a file</source>
<translation>Valitse tiedosto</translation> <translation>Valitse tiedosto</translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="356"/> <location filename="../wizard/WizardController.qml" line="355"/>
<source>Failed to store the wallet</source> <source>Failed to store the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="440"/> <location filename="../wizard/WizardController.qml" line="439"/>
<source>Please proceed to the device...</source> <source>Please proceed to the device...</source>
<translation>Siirry laitteeseesi...</translation> <translation>Siirry laitteeseesi...</translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="444"/> <location filename="../wizard/WizardController.qml" line="443"/>
<source>Creating wallet from device...</source> <source>Creating wallet from device...</source>
<translation>Luodaan lompakkoa laitteesta...</translation> <translation>Luodaan lompakkoa laitteesta...</translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="445"/> <location filename="../wizard/WizardController.qml" line="444"/>
<source> <source>
Please check your hardware wallet Please check your hardware wallet
@@ -3416,173 +3441,173 @@ Jos sinulla ei ole mahdollisuutta käyttää omaa solmua, sinulla on mahdollisuu
<context> <context>
<name>main</name> <name>main</name>
<message> <message>
<location filename="../main.qml" line="334"/> <location filename="../main.qml" line="337"/>
<location filename="../main.qml" line="794"/> <location filename="../main.qml" line="818"/>
<location filename="../main.qml" line="806"/> <location filename="../main.qml" line="830"/>
<location filename="../main.qml" line="861"/> <location filename="../main.qml" line="885"/>
<location filename="../main.qml" line="873"/> <location filename="../main.qml" line="897"/>
<location filename="../main.qml" line="915"/> <location filename="../main.qml" line="939"/>
<location filename="../main.qml" line="924"/> <location filename="../main.qml" line="948"/>
<location filename="../main.qml" line="972"/> <location filename="../main.qml" line="996"/>
<location filename="../main.qml" line="1084"/> <location filename="../main.qml" line="1108"/>
<location filename="../main.qml" line="1546"/> <location filename="../main.qml" line="1593"/>
<source>Error</source> <source>Error</source>
<translation>Virhe</translation> <translation>Virhe</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="335"/> <location filename="../main.qml" line="338"/>
<location filename="../main.qml" line="541"/> <location filename="../main.qml" line="551"/>
<source>Couldn&apos;t open wallet: </source> <source>Couldn&apos;t open wallet: </source>
<translation>Lompakkoa ei voitu avata:</translation> <translation>Lompakkoa ei voitu avata:</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="690"/> <location filename="../main.qml" line="714"/>
<source>Waiting for daemon to start...</source> <source>Waiting for daemon to start...</source>
<translation>Odotetaan daemonin käynnistymistä...</translation> <translation>Odotetaan daemonin käynnistymistä...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="698"/> <location filename="../main.qml" line="722"/>
<source>Waiting for daemon to stop...</source> <source>Waiting for daemon to stop...</source>
<translation>Odotetaan daemonin pysähtymistä...</translation> <translation>Odotetaan daemonin pysähtymistä...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="726"/> <location filename="../main.qml" line="750"/>
<source>Daemon failed to start</source> <source>Daemon failed to start</source>
<translation>Daemon ei käynnistynyt</translation> <translation>Daemon ei käynnistynyt</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="727"/> <location filename="../main.qml" line="751"/>
<source>Please check your wallet and daemon log for errors. You can also try to start %1 manually.</source> <source>Please check your wallet and daemon log for errors. You can also try to start %1 manually.</source>
<translation>Etsi lompakkosi ja daemonin lokitiedostoista virheitä. Voi myös yrittää käynnistää %1 manuaalisesti.</translation> <translation>Etsi lompakkosi ja daemonin lokitiedostoista virheitä. Voi myös yrittää käynnistää %1 manuaalisesti.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="796"/> <location filename="../main.qml" line="820"/>
<source>Can&apos;t create transaction: Wrong daemon version: </source> <source>Can&apos;t create transaction: Wrong daemon version: </source>
<translation>Siirron luonti ei onnistunut: Väärä daemon-versio:</translation> <translation>Siirron luonti ei onnistunut: Väärä daemon-versio:</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="798"/> <location filename="../main.qml" line="822"/>
<location filename="../main.qml" line="916"/> <location filename="../main.qml" line="940"/>
<source>Can&apos;t create transaction: </source> <source>Can&apos;t create transaction: </source>
<translation>Siirron luonti ei onnistu:</translation> <translation>Siirron luonti ei onnistu:</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="807"/> <location filename="../main.qml" line="831"/>
<location filename="../main.qml" line="925"/> <location filename="../main.qml" line="949"/>
<source>No unmixable outputs to sweep</source> <source>No unmixable outputs to sweep</source>
<translation>Ei pyyhkäistäviä sekoittumattomia lähtöjä</translation> <translation>Ei pyyhkäistäviä sekoittumattomia lähtöjä</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="937"/> <location filename="../main.qml" line="961"/>
<source>Confirmation</source> <source>Confirmation</source>
<translation>Vahvistus</translation> <translation>Vahvistus</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="818"/> <location filename="../main.qml" line="842"/>
<location filename="../main.qml" line="938"/> <location filename="../main.qml" line="962"/>
<source>Please confirm transaction: <source>Please confirm transaction:
</source> </source>
<translation>Vahvista siirto:</translation> <translation>Vahvista siirto:</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="821"/> <location filename="../main.qml" line="845"/>
<source> <source>
Payment ID: </source> Payment ID: </source>
<translation>Maksu-ID: </translation> <translation>Maksu-ID: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="822"/> <location filename="../main.qml" line="846"/>
<location filename="../main.qml" line="939"/> <location filename="../main.qml" line="963"/>
<source> <source>
Amount: </source> Amount: </source>
<translation>Määrä:</translation> <translation>Määrä:</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="823"/> <location filename="../main.qml" line="847"/>
<location filename="../main.qml" line="940"/> <location filename="../main.qml" line="964"/>
<source> <source>
Fee: </source> Fee: </source>
<translation>Kulu:</translation> <translation>Kulu:</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="645"/> <location filename="../main.qml" line="669"/>
<source>Waiting for daemon to sync</source> <source>Waiting for daemon to sync</source>
<translation>Odotetaan daemonin synkronisointia</translation> <translation>Odotetaan daemonin synkronisointia</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="307"/> <location filename="../main.qml" line="310"/>
<source>Closing wallet...</source> <source>Closing wallet...</source>
<translation>Suljetaan lompakkoa...</translation> <translation>Suljetaan lompakkoa...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="502"/> <location filename="../main.qml" line="512"/>
<source>Please proceed to the device...</source> <source>Please proceed to the device...</source>
<translation>Jatka laitteeseesi...</translation> <translation>Jatka laitteeseesi...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="514"/> <location filename="../main.qml" line="524"/>
<source>Opening wallet ...</source> <source>Opening wallet ...</source>
<translation>Avataan lompakkoa ...</translation> <translation>Avataan lompakkoa ...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="529"/> <location filename="../main.qml" line="539"/>
<location filename="../main.qml" line="536"/> <location filename="../main.qml" line="546"/>
<source>Repairing incompatible wallet cache. Resyncing wallet.</source> <source>Repairing incompatible wallet cache. Resyncing wallet.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="647"/> <location filename="../main.qml" line="671"/>
<source>Daemon is synchronized (%1)</source> <source>Daemon is synchronized (%1)</source>
<translation>Daemon on synkronisoitu (%1)</translation> <translation>Daemon on synkronisoitu (%1)</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="649"/> <location filename="../main.qml" line="673"/>
<source>Wallet is synchronized</source> <source>Wallet is synchronized</source>
<translation>Lompakko on synkronisoitu</translation> <translation>Lompakko on synkronisoitu</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="743"/> <location filename="../main.qml" line="767"/>
<source>Daemon is synchronized</source> <source>Daemon is synchronized</source>
<translation>Daemon on synkronisoitu</translation> <translation>Daemon on synkronisoitu</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="820"/> <location filename="../main.qml" line="844"/>
<source>Address: </source> <source>Address: </source>
<translation>Osoite: </translation> <translation>Osoite: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="824"/> <location filename="../main.qml" line="848"/>
<source> <source>
Ringsize: </source> Ringsize: </source>
<translation>Rengaskoko:</translation> <translation>Rengaskoko:</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="825"/> <location filename="../main.qml" line="849"/>
<source> <source>
Number of transactions: </source> Number of transactions: </source>
<translation>Siirtojen määrä:</translation> <translation>Siirtojen määrä:</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="826"/> <location filename="../main.qml" line="850"/>
<source> <source>
Description: </source> Description: </source>
<translation>Kuvaus:</translation> <translation>Kuvaus:</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="828"/> <location filename="../main.qml" line="852"/>
<source> <source>
Spending address index: </source> Spending address index: </source>
<translation>Kulutetun osoitteen indeksi:</translation> <translation>Kulutetun osoitteen indeksi:</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="848"/> <location filename="../main.qml" line="872"/>
<source>Creating transaction...</source> <source>Creating transaction...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="849"/> <location filename="../main.qml" line="873"/>
<source> <source>
Please check your hardware wallet Please check your hardware wallet
@@ -3593,177 +3618,187 @@ Tarkista laitelompakkosi
se saattaa vaatia sinulta toimintoja.</translation> se saattaa vaatia sinulta toimintoja.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="964"/> <location filename="../main.qml" line="988"/>
<source>Sending transaction ...</source> <source>Sending transaction ...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="983"/> <location filename="../main.qml" line="1007"/>
<source>Monero sent successfully: %1 transaction(s) </source> <source>Monero sent successfully: %1 transaction(s) </source>
<translation>Monero lähetetty onnistuneesti: %1 siirto(a) </translation> <translation>Monero lähetetty onnistuneesti: %1 siirto(a) </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1000"/> <location filename="../main.qml" line="1024"/>
<source>Failed to store the wallet</source> <source>Failed to store the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1027"/> <location filename="../main.qml" line="1051"/>
<source>Payment proof</source> <source>Payment proof</source>
<translation>Maksutodiste</translation> <translation>Maksutodiste</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1030"/> <location filename="../main.qml" line="1054"/>
<source>Couldn&apos;t generate a proof because of the following reason: <source>Couldn&apos;t generate a proof because of the following reason:
</source> </source>
<translation>Todisteen luonti ei onnistunut syystä:</translation> <translation>Todisteen luonti ei onnistunut syystä:</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1060"/> <location filename="../main.qml" line="1084"/>
<location filename="../main.qml" line="1079"/> <location filename="../main.qml" line="1103"/>
<source>Payment proof check</source> <source>Payment proof check</source>
<translation>Maksutodisteen tarkistus</translation> <translation>Maksutodisteen tarkistus</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1063"/> <location filename="../main.qml" line="1087"/>
<location filename="../main.qml" line="1081"/> <location filename="../main.qml" line="1105"/>
<source>Bad signature</source> <source>Bad signature</source>
<translation>Virheellinen allekirjoitus</translation> <translation>Virheellinen allekirjoitus</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1070"/> <location filename="../main.qml" line="1094"/>
<source>This address received %1 monero, with %2 confirmation(s).</source> <source>This address received %1 monero, with %2 confirmation(s).</source>
<translation>Tämä osoite vastaanotti %1 monero, vahvistusten määrä: %2</translation> <translation>Tämä osoite vastaanotti %1 monero, vahvistusten määrä: %2</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1081"/> <location filename="../main.qml" line="1105"/>
<source>Good signature</source> <source>Good signature</source>
<translation>Hyvä allekirjoitus</translation> <translation>Hyvä allekirjoitus</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1443"/> <location filename="../main.qml" line="1486"/>
<location filename="../main.qml" line="2111"/> <location filename="../main.qml" line="2158"/>
<source>Wrong password</source> <source>Wrong password</source>
<translation>Väärä salasana</translation> <translation>Väärä salasana</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1496"/> <location filename="../main.qml" line="1496"/>
<source>Save transaction file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1496"/>
<source>Send transaction</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1543"/>
<source>Warning</source> <source>Warning</source>
<translation>Varoitus</translation> <translation>Varoitus</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1499"/> <location filename="../main.qml" line="1546"/>
<source>Error: Filesystem is read only</source> <source>Error: Filesystem is read only</source>
<translation>Virhe: Tiedostojärjestelmä on vain-luku</translation> <translation>Virhe: Tiedostojärjestelmä on vain-luku</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1501"/> <location filename="../main.qml" line="1548"/>
<source>Warning: There&apos;s only %1 GB available on the device. Blockchain requires ~%2 GB of data.</source> <source>Warning: There&apos;s only %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation>Varoitus: Laitteella on vain %1 GB tilaa. Lohkoketju vaatii ~%2 GB.</translation> <translation>Varoitus: Laitteella on vain %1 GB tilaa. Lohkoketju vaatii ~%2 GB.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1503"/> <location filename="../main.qml" line="1550"/>
<source>Note: There&apos;s %1 GB available on the device. Blockchain requires ~%2 GB of data.</source> <source>Note: There&apos;s %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation>Huom: Laitteella on vain %1 GB tilaa. Lohkoketju vaatii ~%2 GB.</translation> <translation>Huom: Laitteella on vain %1 GB tilaa. Lohkoketju vaatii ~%2 GB.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1505"/> <location filename="../main.qml" line="1552"/>
<source>Note: lmdb folder not found. A new folder will be created.</source> <source>Note: lmdb folder not found. A new folder will be created.</source>
<translation>Huom: lmdb-kansiota ei löydy. Uusi kansio luodaan.</translation> <translation>Huom: lmdb-kansiota ei löydy. Uusi kansio luodaan.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1543"/> <location filename="../main.qml" line="1590"/>
<source>Password changed successfully</source> <source>Password changed successfully</source>
<translation>Salasanan vaihto onnistui</translation> <translation>Salasanan vaihto onnistui</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1547"/> <location filename="../main.qml" line="1594"/>
<source>Error: </source> <source>Error: </source>
<translation>Virhe: </translation> <translation>Virhe: </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1635"/> <location filename="../main.qml" line="1682"/>
<source>Primary account</source> <source>Primary account</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1846"/> <location filename="../main.qml" line="1893"/>
<source>Autosaved the wallet</source> <source>Autosaved the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1848"/> <location filename="../main.qml" line="1895"/>
<source>Failed to autosave the wallet</source> <source>Failed to autosave the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1963"/> <location filename="../main.qml" line="2010"/>
<source>Local node is running</source> <source>Local node is running</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1964"/> <location filename="../main.qml" line="2011"/>
<source>Do you want to stop local node or keep it running in the background?</source> <source>Do you want to stop local node or keep it running in the background?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1966"/> <location filename="../main.qml" line="2013"/>
<source>Force stop</source> <source>Force stop</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1967"/> <location filename="../main.qml" line="2014"/>
<source>Keep it running</source> <source>Keep it running</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1987"/> <location filename="../main.qml" line="2034"/>
<source>Tap again to close...</source> <source>Tap again to close...</source>
<translation>Sulje painamalla uudestaan...</translation> <translation>Sulje painamalla uudestaan...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="2002"/> <location filename="../main.qml" line="2049"/>
<source>Checking local node status...</source> <source>Checking local node status...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="862"/> <location filename="../main.qml" line="886"/>
<source>Amount is wrong: expected number from %1 to %2</source> <source>Amount is wrong: expected number from %1 to %2</source>
<translation>Määrä on väärä: odotetaan numeroa väliltä %1 ja %2</translation> <translation>Määrä on väärä: odotetaan numeroa väliltä %1 ja %2</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="874"/> <location filename="../main.qml" line="898"/>
<source>Insufficient funds. Unlocked balance: %1</source> <source>Insufficient funds. Unlocked balance: %1</source>
<translation>Varat eivät riitä. Lukitsematon saldo: %1</translation> <translation>Varat eivät riitä. Lukitsematon saldo: %1</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="973"/> <location filename="../main.qml" line="997"/>
<source>Couldn&apos;t send the money: </source> <source>Couldn&apos;t send the money: </source>
<translation>Rahan lähetys ei onnistunut:</translation> <translation>Rahan lähetys ei onnistunut:</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="977"/> <location filename="../main.qml" line="1001"/>
<location filename="../main.qml" line="1542"/> <location filename="../main.qml" line="1589"/>
<source>Information</source> <source>Information</source>
<translation>Tieto</translation> <translation>Tieto</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="983"/> <location filename="../main.qml" line="1007"/>
<source>Transaction saved to file: %1</source> <source>Transaction saved to file: %1</source>
<translation>Siirto tallennettu tiedostoon: %1</translation> <translation>Siirto tallennettu tiedostoon: %1</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1067"/> <location filename="../main.qml" line="1091"/>
<source>This address received %1 monero, but the transaction is not yet mined</source> <source>This address received %1 monero, but the transaction is not yet mined</source>
<translation>Tämä osoite vastaanotti %1 monero, mutta siirtoa ei ole vielä louhittu</translation> <translation>Tämä osoite vastaanotti %1 monero, mutta siirtoa ei ole vielä louhittu</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1074"/> <location filename="../main.qml" line="1098"/>
<source>This address received nothing</source> <source>This address received nothing</source>
<translation>Tämä osoite ei vastaanottanut mitään</translation> <translation>Tämä osoite ei vastaanottanut mitään</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1595"/> <location filename="../main.qml" line="1642"/>
<source>Please wait...</source> <source>Please wait...</source>
<translation>Odota...</translation> <translation>Odota...</translation>
</message> </message>

View File

@@ -4,53 +4,53 @@
<context> <context>
<name>Account</name> <name>Account</name>
<message> <message>
<location filename="../pages/Account.qml" line="55"/> <location filename="../pages/Account.qml" line="57"/>
<source>Set the label of the selected account:</source> <source>Set the label of the selected account:</source>
<translation>Définir l&apos;étiquette du compte sélectionné :</translation> <translation>Définir l&apos;étiquette du compte sélectionné :</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="87"/> <location filename="../pages/Account.qml" line="89"/>
<source>Balance All</source> <source>Balance All</source>
<translation>Tous les soldes</translation> <translation>Tous les soldes</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="94"/> <location filename="../pages/Account.qml" line="96"/>
<source>Total balance: </source> <source>Total balance: </source>
<translation>Solde total : </translation> <translation>Solde total : </translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="117"/> <location filename="../pages/Account.qml" line="119"/>
<location filename="../pages/Account.qml" line="150"/> <location filename="../pages/Account.qml" line="152"/>
<source>Copied to clipboard</source> <source>Copied to clipboard</source>
<translation>Copié dans le presse-papier</translation> <translation>Copié dans le presse-papier</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="127"/> <location filename="../pages/Account.qml" line="129"/>
<source>Total unlocked balance: </source> <source>Total unlocked balance: </source>
<translation>Solde total déverrouillé : </translation> <translation>Solde total déverrouillé : </translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="165"/> <location filename="../pages/Account.qml" line="167"/>
<source>Accounts</source> <source>Accounts</source>
<translation>Comptes</translation> <translation>Comptes</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="258"/> <location filename="../pages/Account.qml" line="260"/>
<source>Balance: </source> <source>Balance: </source>
<translation>Solde : </translation> <translation>Solde : </translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="319"/> <location filename="../pages/Account.qml" line="321"/>
<source>Address copied to clipboard</source> <source>Address copied to clipboard</source>
<translation>Adresse copiée dans le presse-papier</translation> <translation>Adresse copiée dans le presse-papier</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="354"/> <location filename="../pages/Account.qml" line="356"/>
<source>Create new account</source> <source>Create new account</source>
<translation>Créer un nouveau compte</translation> <translation>Créer un nouveau compte</translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="356"/> <location filename="../pages/Account.qml" line="358"/>
<source>Set the label of the new account:</source> <source>Set the label of the new account:</source>
<translation>Définir l&apos;étiquette du nouveau compte :</translation> <translation>Définir l&apos;étiquette du nouveau compte :</translation>
</message> </message>
@@ -819,7 +819,7 @@ It is recommended to enter passphrase on the hardware wallet for better security
<message> <message>
<location filename="../pages/merchant/Merchant.qml" line="160"/> <location filename="../pages/merchant/Merchant.qml" line="160"/>
<source>It&apos;s up to you whether to accept unconfirmed transactions or not. It is likely they&apos;ll be confirmed in short order, but there is still a possibility they might not, so for larger values you may want to wait for one or more confirmation(s)</source> <source>It&apos;s up to you whether to accept unconfirmed transactions or not. It is likely they&apos;ll be confirmed in short order, but there is still a possibility they might not, so for larger values you may want to wait for one or more confirmation(s)</source>
<translation type="unfinished"></translation> <translation>Vous pouvez choisir d&apos;accepter ou non les transactions non confirmées. Il est probable que ces transactions soient confirmées rapidement, mais Il reste néanmoins possible que ce ne soit pas le cas, il est donc préférable d&apos;attendre une à plusieurs confirmations pour les montants plus importants</translation>
</message> </message>
<message> <message>
<location filename="../pages/merchant/Merchant.qml" line="269"/> <location filename="../pages/merchant/Merchant.qml" line="269"/>
@@ -1139,57 +1139,57 @@ L&apos;extraction minière vous offre également une petite chance de gagner que
<context> <context>
<name>PasswordDialog</name> <name>PasswordDialog</name>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="155"/> <location filename="../components/PasswordDialog.qml" line="159"/>
<source>Please enter new wallet password</source> <source>Please enter new wallet password</source>
<translation>Entrer le mot de passe du nouveau portefeuille</translation> <translation>Entrer le mot de passe du nouveau portefeuille</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="157"/> <location filename="../components/PasswordDialog.qml" line="161"/>
<source>wallet password</source> <source>wallet password</source>
<translation>mot de passe du portefeuille</translation> <translation>mot de passe du portefeuille</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="157"/> <location filename="../components/PasswordDialog.qml" line="161"/>
<source>wallet device passphrase</source> <source>wallet device passphrase</source>
<translation>mot de passe du portefeuille matériel</translation> <translation>mot de passe du portefeuille matériel</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="158"/> <location filename="../components/PasswordDialog.qml" line="162"/>
<source>Please enter %1 for: </source> <source>Please enter %1 for: </source>
<translation>Veuillez entrer %1 pour : </translation> <translation>Veuillez entrer %1 pour : </translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="158"/> <location filename="../components/PasswordDialog.qml" line="162"/>
<source>Please enter %1</source> <source>Please enter %1</source>
<translation>Veuillez entrer %1</translation> <translation>Veuillez entrer %1</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="170"/> <location filename="../components/PasswordDialog.qml" line="174"/>
<source>Warning: passphrase entry on host is a security risk as it can be captured by malware. It is advised to prefer device-based passphrase entry.</source> <source>Warning: passphrase entry on host is a security risk as it can be captured by malware. It is advised to prefer device-based passphrase entry.</source>
<translation>Attention : la saisie d&apos;un mot de passe sur un ordinateur est un risque de sécurité car il peut être capturé par un programme malveillant. Il est recommandé de favoriser la saisie d&apos;un mot de passe sur le périphérique.</translation> <translation>Attention : la saisie d&apos;un mot de passe sur un ordinateur est un risque de sécurité car il peut être capturé par un programme malveillant. Il est recommandé de favoriser la saisie d&apos;un mot de passe sur le périphérique.</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="199"/> <location filename="../components/PasswordDialog.qml" line="203"/>
<source>CAPSLOCKS IS ON.</source> <source>CAPSLOCKS IS ON.</source>
<translation>VERR. MAJ. EST ACTIVÉ.</translation> <translation>VERR. MAJ. EST ACTIVÉ.</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="234"/> <location filename="../components/PasswordDialog.qml" line="238"/>
<source>Please confirm new password</source> <source>Please confirm new password</source>
<translation>Veuillez confirmer votre nouveau mot de passe</translation> <translation>Veuillez confirmer votre nouveau mot de passe</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="234"/> <location filename="../components/PasswordDialog.qml" line="238"/>
<source>Please confirm wallet device passphrase</source> <source>Please confirm wallet device passphrase</source>
<translation>Veuillez confirmer le mot de passe du portefeuille matériel</translation> <translation>Veuillez confirmer le mot de passe du portefeuille matériel</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="278"/> <location filename="../components/PasswordDialog.qml" line="283"/>
<source>Cancel</source> <source>Cancel</source>
<translation>Annuler</translation> <translation>Annuler</translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="286"/> <location filename="../components/PasswordDialog.qml" line="293"/>
<source>Ok</source> <source>Ok</source>
<translation>Ok</translation> <translation>Ok</translation>
</message> </message>
@@ -1409,14 +1409,14 @@ L&apos;ancien fichier du cache du portefeuille sera renommé et pourra être res
<translation>Copier dans le presse-papiers</translation> <translation>Copier dans le presse-papiers</translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsInfo.qml" line="406"/> <location filename="../pages/settings/SettingsInfo.qml" line="408"/>
<source>Copied to clipboard</source> <source>Copied to clipboard</source>
<translation>Copié dans le presse-papier</translation> <translation>Copié dans le presse-papier</translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsInfo.qml" line="412"/> <location filename="../pages/settings/SettingsInfo.qml" line="414"/>
<source>Donate to Monero</source> <source>Donate to Monero</source>
<translation type="unfinished"></translation> <translation>Faire un don à Monero</translation>
</message> </message>
</context> </context>
<context> <context>
@@ -1454,7 +1454,7 @@ L&apos;ancien fichier du cache du portefeuille sera renommé et pourra être res
<message> <message>
<location filename="../pages/settings/SettingsLayout.qml" line="100"/> <location filename="../pages/settings/SettingsLayout.qml" line="100"/>
<source>Wrong password</source> <source>Wrong password</source>
<translation type="unfinished">Mot de passe incorrect</translation> <translation>Mot de passe incorrect</translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsLayout.qml" line="114"/> <location filename="../pages/settings/SettingsLayout.qml" line="114"/>
@@ -1512,7 +1512,32 @@ L&apos;ancien fichier du cache du portefeuille sera renommé et pourra être res
<translation>Confirmer et activer</translation> <translation>Confirmer et activer</translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsLayout.qml" line="258"/> <location filename="../pages/settings/SettingsLayout.qml" line="262"/>
<source>Socks5 proxy (%1%2)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="263"/>
<source>remote node connections, </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="264"/>
<source>updates downloading, fetching price sources</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="276"/>
<source>IP address</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="277"/>
<source>Port</source>
<translation type="unfinished">Port</translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="289"/>
<source>Change language</source> <source>Change language</source>
<translation>Changer la langue</translation> <translation>Changer la langue</translation>
</message> </message>
@@ -1745,7 +1770,7 @@ Vous pouvez changer le mot de passe dans les réglages du portefeuille.</transla
<message> <message>
<location filename="../pages/settings/SettingsWallet.qml" line="143"/> <location filename="../pages/settings/SettingsWallet.qml" line="143"/>
<source>Receive Monero for your business, easily.</source> <source>Receive Monero for your business, easily.</source>
<translation type="unfinished"></translation> <translation>Recevez des Monero pour votre entreprise, facilement.</translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsWallet.qml" line="144"/> <location filename="../pages/settings/SettingsWallet.qml" line="144"/>
@@ -2194,7 +2219,7 @@ Vous pouvez changer le mot de passe dans les réglages du portefeuille.</transla
<message> <message>
<location filename="../pages/Transfer.qml" line="283"/> <location filename="../pages/Transfer.qml" line="283"/>
<source>Change account</source> <source>Change account</source>
<translation type="unfinished"></translation> <translation>Changer de compte</translation>
</message> </message>
<message> <message>
<location filename="../pages/Transfer.qml" line="389"/> <location filename="../pages/Transfer.qml" line="389"/>
@@ -2250,7 +2275,7 @@ Vous pouvez changer le mot de passe dans les réglages du portefeuille.</transla
<message> <message>
<location filename="../pages/Transfer.qml" line="406"/> <location filename="../pages/Transfer.qml" line="406"/>
<source>Description field contents match long payment ID format. Please don&apos;t paste long payment ID into description field, your funds might be lost.</source> <source>Description field contents match long payment ID format. Please don&apos;t paste long payment ID into description field, your funds might be lost.</source>
<translation type="unfinished"></translation> <translation>Le contenu du champ description correspond à un ID de paiement long-format. Merci de ne pas saisir d&apos;ID de paiement long-format dans le champ description, vos fonds pourraient être perdus.</translation>
</message> </message>
<message> <message>
<location filename="../pages/Transfer.qml" line="434"/> <location filename="../pages/Transfer.qml" line="434"/>
@@ -2315,17 +2340,17 @@ Vous pouvez changer le mot de passe dans les réglages du portefeuille.</transla
<message> <message>
<location filename="../pages/Transfer.qml" line="567"/> <location filename="../pages/Transfer.qml" line="567"/>
<source>Create</source> <source>Create</source>
<translation type="unfinished"></translation> <translation>Créer</translation>
</message> </message>
<message> <message>
<location filename="../pages/Transfer.qml" line="578"/> <location filename="../pages/Transfer.qml" line="578"/>
<source>Sign (offline)</source> <source>Sign (offline)</source>
<translation type="unfinished"></translation> <translation>Signer (hors ligne)</translation>
</message> </message>
<message> <message>
<location filename="../pages/Transfer.qml" line="584"/> <location filename="../pages/Transfer.qml" line="584"/>
<source>Submit</source> <source>Submit</source>
<translation type="unfinished"></translation> <translation>Soumettre</translation>
</message> </message>
<message> <message>
<location filename="../pages/Transfer.qml" line="590"/> <location filename="../pages/Transfer.qml" line="590"/>
@@ -2370,7 +2395,7 @@ Vous pouvez changer le mot de passe dans les réglages du portefeuille.</transla
<message> <message>
<location filename="../pages/Transfer.qml" line="610"/> <location filename="../pages/Transfer.qml" line="610"/>
<source>Sweep</source> <source>Sweep</source>
<translation type="unfinished"></translation> <translation>Transférer</translation>
</message> </message>
<message> <message>
<location filename="../pages/Transfer.qml" line="616"/> <location filename="../pages/Transfer.qml" line="616"/>
@@ -2625,7 +2650,7 @@ Pour le cas d&apos;une preuve de dépense, il n&apos;est pas nécessaire de spé
<message> <message>
<location filename="../components/UpdateDialog.qml" line="102"/> <location filename="../components/UpdateDialog.qml" line="102"/>
<source>Downloading</source> <source>Downloading</source>
<translation type="unfinished"></translation> <translation>Téléchargement</translation>
</message> </message>
<message> <message>
<location filename="../components/UpdateDialog.qml" line="107"/> <location filename="../components/UpdateDialog.qml" line="107"/>
@@ -2650,17 +2675,17 @@ Pour le cas d&apos;une preuve de dépense, il n&apos;est pas nécessaire de spé
<message> <message>
<location filename="../components/UpdateDialog.qml" line="142"/> <location filename="../components/UpdateDialog.qml" line="142"/>
<source>Download later</source> <source>Download later</source>
<translation type="unfinished"></translation> <translation>Télécharger plus tard</translation>
</message> </message>
<message> <message>
<location filename="../components/UpdateDialog.qml" line="155"/> <location filename="../components/UpdateDialog.qml" line="155"/>
<source>Retry</source> <source>Retry</source>
<translation type="unfinished"></translation> <translation>Réessayer</translation>
</message> </message>
<message> <message>
<location filename="../components/UpdateDialog.qml" line="155"/> <location filename="../components/UpdateDialog.qml" line="155"/>
<source>Download</source> <source>Download</source>
<translation type="unfinished"></translation> <translation>Télécharger</translation>
</message> </message>
<message> <message>
<location filename="../components/UpdateDialog.qml" line="164"/> <location filename="../components/UpdateDialog.qml" line="164"/>
@@ -2685,7 +2710,7 @@ Pour le cas d&apos;une preuve de dépense, il n&apos;est pas nécessaire de spé
<message> <message>
<location filename="../components/UpdateDialog.qml" line="194"/> <location filename="../components/UpdateDialog.qml" line="194"/>
<source>Save to file</source> <source>Save to file</source>
<translation type="unfinished"></translation> <translation>Enregistrer dans un fichier</translation>
</message> </message>
</context> </context>
<context> <context>
@@ -2793,7 +2818,7 @@ Pour le cas d&apos;une preuve de dépense, il n&apos;est pas nécessaire de spé
<message> <message>
<location filename="../wizard/WizardAskPassword.qml" line="90"/> <location filename="../wizard/WizardAskPassword.qml" line="90"/>
<source>Enter a strong password</source> <source>Enter a strong password</source>
<translation type="unfinished"></translation> <translation>Entrer un mot de passe fort</translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardAskPassword.qml" line="90"/> <location filename="../wizard/WizardAskPassword.qml" line="90"/>
@@ -2814,27 +2839,27 @@ Pour le cas d&apos;une preuve de dépense, il n&apos;est pas nécessaire de spé
<context> <context>
<name>WizardController</name> <name>WizardController</name>
<message> <message>
<location filename="../wizard/WizardController.qml" line="310"/> <location filename="../wizard/WizardController.qml" line="309"/>
<source>Please choose a file</source> <source>Please choose a file</source>
<translation>Veuillez choisir un fichier</translation> <translation>Veuillez choisir un fichier</translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="356"/> <location filename="../wizard/WizardController.qml" line="355"/>
<source>Failed to store the wallet</source> <source>Failed to store the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="440"/> <location filename="../wizard/WizardController.qml" line="439"/>
<source>Please proceed to the device...</source> <source>Please proceed to the device...</source>
<translation>Merci de continuer sur le périphérique...</translation> <translation>Merci de continuer sur le périphérique...</translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="444"/> <location filename="../wizard/WizardController.qml" line="443"/>
<source>Creating wallet from device...</source> <source>Creating wallet from device...</source>
<translation>Création du portefeuille depuis le périphérique...</translation> <translation>Création du portefeuille depuis le périphérique...</translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="445"/> <location filename="../wizard/WizardController.qml" line="444"/>
<source> <source>
Please check your hardware wallet Please check your hardware wallet
@@ -3021,7 +3046,7 @@ votre contribution peut être nécessaire.</translation>
<message> <message>
<location filename="../wizard/WizardHome.qml" line="61"/> <location filename="../wizard/WizardHome.qml" line="61"/>
<source>Welcome to Monero</source> <source>Welcome to Monero</source>
<translation type="unfinished"></translation> <translation>Bienvenue dans Monero</translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardHome.qml" line="66"/> <location filename="../wizard/WizardHome.qml" line="66"/>
@@ -3425,85 +3450,85 @@ Si vous n&apos;avez pas la possibilité d&apos;exécuter votre propre nœud, vou
<context> <context>
<name>main</name> <name>main</name>
<message> <message>
<location filename="../main.qml" line="334"/> <location filename="../main.qml" line="337"/>
<location filename="../main.qml" line="794"/> <location filename="../main.qml" line="818"/>
<location filename="../main.qml" line="806"/> <location filename="../main.qml" line="830"/>
<location filename="../main.qml" line="861"/> <location filename="../main.qml" line="885"/>
<location filename="../main.qml" line="873"/> <location filename="../main.qml" line="897"/>
<location filename="../main.qml" line="915"/> <location filename="../main.qml" line="939"/>
<location filename="../main.qml" line="924"/> <location filename="../main.qml" line="948"/>
<location filename="../main.qml" line="972"/> <location filename="../main.qml" line="996"/>
<location filename="../main.qml" line="1084"/> <location filename="../main.qml" line="1108"/>
<location filename="../main.qml" line="1546"/> <location filename="../main.qml" line="1593"/>
<source>Error</source> <source>Error</source>
<translation>Erreur</translation> <translation>Erreur</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="335"/> <location filename="../main.qml" line="338"/>
<location filename="../main.qml" line="541"/> <location filename="../main.qml" line="551"/>
<source>Couldn&apos;t open wallet: </source> <source>Couldn&apos;t open wallet: </source>
<translation>Impossible d&apos;ouvrir le portefeuille : </translation> <translation>Impossible d&apos;ouvrir le portefeuille : </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="690"/> <location filename="../main.qml" line="714"/>
<source>Waiting for daemon to start...</source> <source>Waiting for daemon to start...</source>
<translation>Attente du démarrage du démon...</translation> <translation>Attente du démarrage du démon...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="698"/> <location filename="../main.qml" line="722"/>
<source>Waiting for daemon to stop...</source> <source>Waiting for daemon to stop...</source>
<translation>Attente de l&apos;arrêt du démon...</translation> <translation>Attente de l&apos;arrêt du démon...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="726"/> <location filename="../main.qml" line="750"/>
<source>Daemon failed to start</source> <source>Daemon failed to start</source>
<translation>Échec du lancement du démon</translation> <translation>Échec du lancement du démon</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="727"/> <location filename="../main.qml" line="751"/>
<source>Please check your wallet and daemon log for errors. You can also try to start %1 manually.</source> <source>Please check your wallet and daemon log for errors. You can also try to start %1 manually.</source>
<translation>Veuillez vérifier les erreurs dans les journaux du portefeuille et du démon. Vous pouvez aussi essayer de lancer %1 manuellement.</translation> <translation>Veuillez vérifier les erreurs dans les journaux du portefeuille et du démon. Vous pouvez aussi essayer de lancer %1 manuellement.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="796"/> <location filename="../main.qml" line="820"/>
<source>Can&apos;t create transaction: Wrong daemon version: </source> <source>Can&apos;t create transaction: Wrong daemon version: </source>
<translation>Impossible de créer la transaction : mauvaise version de démon : </translation> <translation>Impossible de créer la transaction : mauvaise version de démon : </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="798"/> <location filename="../main.qml" line="822"/>
<location filename="../main.qml" line="916"/> <location filename="../main.qml" line="940"/>
<source>Can&apos;t create transaction: </source> <source>Can&apos;t create transaction: </source>
<translation>Impossible de créer la transaction : </translation> <translation>Impossible de créer la transaction : </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="807"/> <location filename="../main.qml" line="831"/>
<location filename="../main.qml" line="925"/> <location filename="../main.qml" line="949"/>
<source>No unmixable outputs to sweep</source> <source>No unmixable outputs to sweep</source>
<translation>Aucune sortie non mélangeable à balayer</translation> <translation>Aucune sortie non mélangeable à balayer</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="937"/> <location filename="../main.qml" line="961"/>
<source>Confirmation</source> <source>Confirmation</source>
<translation>Confirmation</translation> <translation>Confirmation</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="818"/> <location filename="../main.qml" line="842"/>
<location filename="../main.qml" line="938"/> <location filename="../main.qml" line="962"/>
<source>Please confirm transaction: <source>Please confirm transaction:
</source> </source>
<translation>Veuillez confirmer la transaction : <translation>Veuillez confirmer la transaction :
</translation> </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="821"/> <location filename="../main.qml" line="845"/>
<source> <source>
Payment ID: </source> Payment ID: </source>
<translation> <translation>
ID de paiement : </translation> ID de paiement : </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="822"/> <location filename="../main.qml" line="846"/>
<location filename="../main.qml" line="939"/> <location filename="../main.qml" line="963"/>
<source> <source>
Amount: </source> Amount: </source>
@@ -3512,68 +3537,68 @@ Amount: </source>
Montant : </translation> Montant : </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="823"/> <location filename="../main.qml" line="847"/>
<location filename="../main.qml" line="940"/> <location filename="../main.qml" line="964"/>
<source> <source>
Fee: </source> Fee: </source>
<translation> <translation>
Frais : </translation> Frais : </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="645"/> <location filename="../main.qml" line="669"/>
<source>Waiting for daemon to sync</source> <source>Waiting for daemon to sync</source>
<translation>Attente de la synchronisation du démon</translation> <translation>Attente de la synchronisation du démon</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="307"/> <location filename="../main.qml" line="310"/>
<source>Closing wallet...</source> <source>Closing wallet...</source>
<translation>Fermeture du portefeuille...</translation> <translation>Fermeture du portefeuille...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="502"/> <location filename="../main.qml" line="512"/>
<source>Please proceed to the device...</source> <source>Please proceed to the device...</source>
<translation>Merci de continuer sur le périphérique...</translation> <translation>Merci de continuer sur le périphérique...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="514"/> <location filename="../main.qml" line="524"/>
<source>Opening wallet ...</source> <source>Opening wallet ...</source>
<translation>Ouverture du portefeuille ...</translation> <translation>Ouverture du portefeuille ...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="529"/> <location filename="../main.qml" line="539"/>
<location filename="../main.qml" line="536"/> <location filename="../main.qml" line="546"/>
<source>Repairing incompatible wallet cache. Resyncing wallet.</source> <source>Repairing incompatible wallet cache. Resyncing wallet.</source>
<translation>Réparation d&apos;un cache de portefeuille incompatible. Resynchronisation du portefeuille.</translation> <translation>Réparation d&apos;un cache de portefeuille incompatible. Resynchronisation du portefeuille.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="647"/> <location filename="../main.qml" line="671"/>
<source>Daemon is synchronized (%1)</source> <source>Daemon is synchronized (%1)</source>
<translation>Démon synchronisé (%1)</translation> <translation>Démon synchronisé (%1)</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="649"/> <location filename="../main.qml" line="673"/>
<source>Wallet is synchronized</source> <source>Wallet is synchronized</source>
<translation>Le portefeuille est synchronisé</translation> <translation>Le portefeuille est synchronisé</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="743"/> <location filename="../main.qml" line="767"/>
<source>Daemon is synchronized</source> <source>Daemon is synchronized</source>
<translation>Le démon est synchronisé</translation> <translation>Le démon est synchronisé</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="820"/> <location filename="../main.qml" line="844"/>
<source>Address: </source> <source>Address: </source>
<translation>Adresse : </translation> <translation>Adresse : </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="824"/> <location filename="../main.qml" line="848"/>
<source> <source>
Ringsize: </source> Ringsize: </source>
<translation> <translation>
Taille du cercle : </translation> Taille du cercle : </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="825"/> <location filename="../main.qml" line="849"/>
<source> <source>
Number of transactions: </source> Number of transactions: </source>
@@ -3582,26 +3607,26 @@ Number of transactions: </source>
Nombre de transactions : </translation> Nombre de transactions : </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="826"/> <location filename="../main.qml" line="850"/>
<source> <source>
Description: </source> Description: </source>
<translation> <translation>
Description : </translation> Description : </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="828"/> <location filename="../main.qml" line="852"/>
<source> <source>
Spending address index: </source> Spending address index: </source>
<translation> <translation>
Indice d&apos;adresse de dépense : </translation> Indice d&apos;adresse de dépense : </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="848"/> <location filename="../main.qml" line="872"/>
<source>Creating transaction...</source> <source>Creating transaction...</source>
<translation>Création de la transaction...</translation> <translation>Création de la transaction...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="849"/> <location filename="../main.qml" line="873"/>
<source> <source>
Please check your hardware wallet Please check your hardware wallet
@@ -3612,178 +3637,188 @@ Veuillez vérifier votre portefeuille matériel -
votre contribution peut être nécessaire.</translation> votre contribution peut être nécessaire.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="964"/> <location filename="../main.qml" line="988"/>
<source>Sending transaction ...</source> <source>Sending transaction ...</source>
<translation>Envoi de la transaction ...</translation> <translation>Envoi de la transaction ...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="983"/> <location filename="../main.qml" line="1007"/>
<source>Monero sent successfully: %1 transaction(s) </source> <source>Monero sent successfully: %1 transaction(s) </source>
<translation>Monero envoyé avec succès : %1 transaction(s) </translation> <translation>Monero envoyé avec succès : %1 transaction(s) </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1000"/> <location filename="../main.qml" line="1024"/>
<source>Failed to store the wallet</source> <source>Failed to store the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1027"/> <location filename="../main.qml" line="1051"/>
<source>Payment proof</source> <source>Payment proof</source>
<translation>Preuve de Paiement</translation> <translation>Preuve de Paiement</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1030"/> <location filename="../main.qml" line="1054"/>
<source>Couldn&apos;t generate a proof because of the following reason: <source>Couldn&apos;t generate a proof because of the following reason:
</source> </source>
<translation>Impossible de générer une preuve pour la raison suivante : <translation>Impossible de générer une preuve pour la raison suivante :
</translation> </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1060"/> <location filename="../main.qml" line="1084"/>
<location filename="../main.qml" line="1079"/> <location filename="../main.qml" line="1103"/>
<source>Payment proof check</source> <source>Payment proof check</source>
<translation>Vérification de preuve de paiement</translation> <translation>Vérification de preuve de paiement</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1063"/> <location filename="../main.qml" line="1087"/>
<location filename="../main.qml" line="1081"/> <location filename="../main.qml" line="1105"/>
<source>Bad signature</source> <source>Bad signature</source>
<translation>Mauvaise signature</translation> <translation>Mauvaise signature</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1081"/> <location filename="../main.qml" line="1105"/>
<source>Good signature</source> <source>Good signature</source>
<translation>Signature correcte</translation> <translation>Signature correcte</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1443"/> <location filename="../main.qml" line="1486"/>
<location filename="../main.qml" line="2111"/> <location filename="../main.qml" line="2158"/>
<source>Wrong password</source> <source>Wrong password</source>
<translation>Mot de passe incorrect</translation> <translation>Mot de passe incorrect</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1496"/> <location filename="../main.qml" line="1496"/>
<source>Save transaction file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1496"/>
<source>Send transaction</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1543"/>
<source>Warning</source> <source>Warning</source>
<translation>Attention</translation> <translation>Attention</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1499"/> <location filename="../main.qml" line="1546"/>
<source>Error: Filesystem is read only</source> <source>Error: Filesystem is read only</source>
<translation>Erreur : Système de fichiers en lecture seule</translation> <translation>Erreur : Système de fichiers en lecture seule</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1501"/> <location filename="../main.qml" line="1548"/>
<source>Warning: There&apos;s only %1 GB available on the device. Blockchain requires ~%2 GB of data.</source> <source>Warning: There&apos;s only %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation>Attention : Il y a seulement %1 GB disponibles sur le périphérique. La chaîne de blocs a besoin de ~%2 GB.</translation> <translation>Attention : Il y a seulement %1 GB disponibles sur le périphérique. La chaîne de blocs a besoin de ~%2 GB.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1503"/> <location filename="../main.qml" line="1550"/>
<source>Note: There&apos;s %1 GB available on the device. Blockchain requires ~%2 GB of data.</source> <source>Note: There&apos;s %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation>Note : Il y a %1 GB disponibles sur le appareil. La chaîne de blocs a besoin de ~%2 GB.</translation> <translation>Note : Il y a %1 GB disponibles sur le appareil. La chaîne de blocs a besoin de ~%2 GB.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1505"/> <location filename="../main.qml" line="1552"/>
<source>Note: lmdb folder not found. A new folder will be created.</source> <source>Note: lmdb folder not found. A new folder will be created.</source>
<translation>Note : dossier lmdb introuvable. Un nouveau répertoire va être créé.</translation> <translation>Note : dossier lmdb introuvable. Un nouveau répertoire va être créé.</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1543"/> <location filename="../main.qml" line="1590"/>
<source>Password changed successfully</source> <source>Password changed successfully</source>
<translation>Mot de passe modifié avec succès</translation> <translation>Mot de passe modifié avec succès</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1547"/> <location filename="../main.qml" line="1594"/>
<source>Error: </source> <source>Error: </source>
<translation>Erreur : </translation> <translation>Erreur : </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1635"/> <location filename="../main.qml" line="1682"/>
<source>Primary account</source> <source>Primary account</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1846"/> <location filename="../main.qml" line="1893"/>
<source>Autosaved the wallet</source> <source>Autosaved the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1848"/> <location filename="../main.qml" line="1895"/>
<source>Failed to autosave the wallet</source> <source>Failed to autosave the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1963"/> <location filename="../main.qml" line="2010"/>
<source>Local node is running</source> <source>Local node is running</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1964"/> <location filename="../main.qml" line="2011"/>
<source>Do you want to stop local node or keep it running in the background?</source> <source>Do you want to stop local node or keep it running in the background?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1966"/> <location filename="../main.qml" line="2013"/>
<source>Force stop</source> <source>Force stop</source>
<translation type="unfinished"></translation> <translation>Forcer larrêt</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1967"/> <location filename="../main.qml" line="2014"/>
<source>Keep it running</source> <source>Keep it running</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1987"/> <location filename="../main.qml" line="2034"/>
<source>Tap again to close...</source> <source>Tap again to close...</source>
<translation>Tapez encore pour fermer...</translation> <translation>Tapez encore pour fermer...</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="2002"/> <location filename="../main.qml" line="2049"/>
<source>Checking local node status...</source> <source>Checking local node status...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1070"/> <location filename="../main.qml" line="1094"/>
<source>This address received %1 monero, with %2 confirmation(s).</source> <source>This address received %1 monero, with %2 confirmation(s).</source>
<translation>Cette adresse a reçu %1 monero, avec %2 confirmation(s).</translation> <translation>Cette adresse a reçu %1 monero, avec %2 confirmation(s).</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="862"/> <location filename="../main.qml" line="886"/>
<source>Amount is wrong: expected number from %1 to %2</source> <source>Amount is wrong: expected number from %1 to %2</source>
<translation>Montant erroné : nombre entre %1 et %2 attendu</translation> <translation>Montant erroné : nombre entre %1 et %2 attendu</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="874"/> <location filename="../main.qml" line="898"/>
<source>Insufficient funds. Unlocked balance: %1</source> <source>Insufficient funds. Unlocked balance: %1</source>
<translation>fonds insuffisants. Solde débloqué : %1</translation> <translation>fonds insuffisants. Solde débloqué : %1</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="973"/> <location filename="../main.qml" line="997"/>
<source>Couldn&apos;t send the money: </source> <source>Couldn&apos;t send the money: </source>
<translation>Impossible d&apos;envoyer l&apos;argent : </translation> <translation>Impossible d&apos;envoyer l&apos;argent : </translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="977"/> <location filename="../main.qml" line="1001"/>
<location filename="../main.qml" line="1542"/> <location filename="../main.qml" line="1589"/>
<source>Information</source> <source>Information</source>
<translation>Information</translation> <translation>Information</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="983"/> <location filename="../main.qml" line="1007"/>
<source>Transaction saved to file: %1</source> <source>Transaction saved to file: %1</source>
<translation>Transaction enregistrée dans le fichier : %1</translation> <translation>Transaction enregistrée dans le fichier : %1</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1067"/> <location filename="../main.qml" line="1091"/>
<source>This address received %1 monero, but the transaction is not yet mined</source> <source>This address received %1 monero, but the transaction is not yet mined</source>
<translation>Cette adresse a reçu %1 monero, mais la transaction n&apos;a pas encore é incluse dans un bloc</translation> <translation>Cette adresse a reçu %1 monero, mais la transaction n&apos;a pas encore é incluse dans un bloc</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1074"/> <location filename="../main.qml" line="1098"/>
<source>This address received nothing</source> <source>This address received nothing</source>
<translation>Cette adresse n&apos;a rien reçu</translation> <translation>Cette adresse n&apos;a rien reçu</translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1595"/> <location filename="../main.qml" line="1642"/>
<source>Please wait...</source> <source>Please wait...</source>
<translation>Veuillez patienter</translation> <translation>Veuillez patienter</translation>
</message> </message>

View File

@@ -4,53 +4,53 @@
<context> <context>
<name>Account</name> <name>Account</name>
<message> <message>
<location filename="../pages/Account.qml" line="55"/> <location filename="../pages/Account.qml" line="57"/>
<source>Set the label of the selected account:</source> <source>Set the label of the selected account:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="87"/> <location filename="../pages/Account.qml" line="89"/>
<source>Balance All</source> <source>Balance All</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="94"/> <location filename="../pages/Account.qml" line="96"/>
<source>Total balance: </source> <source>Total balance: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="117"/> <location filename="../pages/Account.qml" line="119"/>
<location filename="../pages/Account.qml" line="150"/> <location filename="../pages/Account.qml" line="152"/>
<source>Copied to clipboard</source> <source>Copied to clipboard</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="127"/> <location filename="../pages/Account.qml" line="129"/>
<source>Total unlocked balance: </source> <source>Total unlocked balance: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="165"/> <location filename="../pages/Account.qml" line="167"/>
<source>Accounts</source> <source>Accounts</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="258"/> <location filename="../pages/Account.qml" line="260"/>
<source>Balance: </source> <source>Balance: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="319"/> <location filename="../pages/Account.qml" line="321"/>
<source>Address copied to clipboard</source> <source>Address copied to clipboard</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="354"/> <location filename="../pages/Account.qml" line="356"/>
<source>Create new account</source> <source>Create new account</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/Account.qml" line="356"/> <location filename="../pages/Account.qml" line="358"/>
<source>Set the label of the new account:</source> <source>Set the label of the new account:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -1137,57 +1137,57 @@ Mining also gives you a small chance to earn some Monero. Your computer will cre
<context> <context>
<name>PasswordDialog</name> <name>PasswordDialog</name>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="155"/> <location filename="../components/PasswordDialog.qml" line="159"/>
<source>Please enter new wallet password</source> <source>Please enter new wallet password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="157"/> <location filename="../components/PasswordDialog.qml" line="161"/>
<source>wallet password</source> <source>wallet password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="157"/> <location filename="../components/PasswordDialog.qml" line="161"/>
<source>wallet device passphrase</source> <source>wallet device passphrase</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="158"/> <location filename="../components/PasswordDialog.qml" line="162"/>
<source>Please enter %1 for: </source> <source>Please enter %1 for: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="158"/> <location filename="../components/PasswordDialog.qml" line="162"/>
<source>Please enter %1</source> <source>Please enter %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="170"/> <location filename="../components/PasswordDialog.qml" line="174"/>
<source>Warning: passphrase entry on host is a security risk as it can be captured by malware. It is advised to prefer device-based passphrase entry.</source> <source>Warning: passphrase entry on host is a security risk as it can be captured by malware. It is advised to prefer device-based passphrase entry.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="199"/> <location filename="../components/PasswordDialog.qml" line="203"/>
<source>CAPSLOCKS IS ON.</source> <source>CAPSLOCKS IS ON.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="234"/> <location filename="../components/PasswordDialog.qml" line="238"/>
<source>Please confirm new password</source> <source>Please confirm new password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="234"/> <location filename="../components/PasswordDialog.qml" line="238"/>
<source>Please confirm wallet device passphrase</source> <source>Please confirm wallet device passphrase</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="278"/> <location filename="../components/PasswordDialog.qml" line="283"/>
<source>Cancel</source> <source>Cancel</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../components/PasswordDialog.qml" line="286"/> <location filename="../components/PasswordDialog.qml" line="293"/>
<source>Ok</source> <source>Ok</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -1399,12 +1399,12 @@ The old wallet cache file will be renamed and can be restored later.
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsInfo.qml" line="406"/> <location filename="../pages/settings/SettingsInfo.qml" line="408"/>
<source>Copied to clipboard</source> <source>Copied to clipboard</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsInfo.qml" line="412"/> <location filename="../pages/settings/SettingsInfo.qml" line="414"/>
<source>Donate to Monero</source> <source>Donate to Monero</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -1502,7 +1502,32 @@ The old wallet cache file will be renamed and can be restored later.
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../pages/settings/SettingsLayout.qml" line="258"/> <location filename="../pages/settings/SettingsLayout.qml" line="262"/>
<source>Socks5 proxy (%1%2)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="263"/>
<source>remote node connections, </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="264"/>
<source>updates downloading, fetching price sources</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="276"/>
<source>IP address</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="277"/>
<source>Port</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pages/settings/SettingsLayout.qml" line="289"/>
<source>Change language</source> <source>Change language</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -2796,27 +2821,27 @@ For the case with Spend Proof, you don&apos;t need to specify the recipient addr
<context> <context>
<name>WizardController</name> <name>WizardController</name>
<message> <message>
<location filename="../wizard/WizardController.qml" line="310"/> <location filename="../wizard/WizardController.qml" line="309"/>
<source>Please choose a file</source> <source>Please choose a file</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="356"/> <location filename="../wizard/WizardController.qml" line="355"/>
<source>Failed to store the wallet</source> <source>Failed to store the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="440"/> <location filename="../wizard/WizardController.qml" line="439"/>
<source>Please proceed to the device...</source> <source>Please proceed to the device...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="444"/> <location filename="../wizard/WizardController.qml" line="443"/>
<source>Creating wallet from device...</source> <source>Creating wallet from device...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../wizard/WizardController.qml" line="445"/> <location filename="../wizard/WizardController.qml" line="444"/>
<source> <source>
Please check your hardware wallet Please check your hardware wallet
@@ -3402,173 +3427,173 @@ If you don&apos;t have the option to run your own node, there&apos;s an option t
<context> <context>
<name>main</name> <name>main</name>
<message> <message>
<location filename="../main.qml" line="334"/> <location filename="../main.qml" line="337"/>
<location filename="../main.qml" line="794"/> <location filename="../main.qml" line="818"/>
<location filename="../main.qml" line="806"/> <location filename="../main.qml" line="830"/>
<location filename="../main.qml" line="861"/> <location filename="../main.qml" line="885"/>
<location filename="../main.qml" line="873"/> <location filename="../main.qml" line="897"/>
<location filename="../main.qml" line="915"/> <location filename="../main.qml" line="939"/>
<location filename="../main.qml" line="924"/> <location filename="../main.qml" line="948"/>
<location filename="../main.qml" line="972"/> <location filename="../main.qml" line="996"/>
<location filename="../main.qml" line="1084"/> <location filename="../main.qml" line="1108"/>
<location filename="../main.qml" line="1546"/> <location filename="../main.qml" line="1593"/>
<source>Error</source> <source>Error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="335"/> <location filename="../main.qml" line="338"/>
<location filename="../main.qml" line="541"/> <location filename="../main.qml" line="551"/>
<source>Couldn&apos;t open wallet: </source> <source>Couldn&apos;t open wallet: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="690"/> <location filename="../main.qml" line="714"/>
<source>Waiting for daemon to start...</source> <source>Waiting for daemon to start...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="698"/> <location filename="../main.qml" line="722"/>
<source>Waiting for daemon to stop...</source> <source>Waiting for daemon to stop...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="726"/> <location filename="../main.qml" line="750"/>
<source>Daemon failed to start</source> <source>Daemon failed to start</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="727"/> <location filename="../main.qml" line="751"/>
<source>Please check your wallet and daemon log for errors. You can also try to start %1 manually.</source> <source>Please check your wallet and daemon log for errors. You can also try to start %1 manually.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="796"/> <location filename="../main.qml" line="820"/>
<source>Can&apos;t create transaction: Wrong daemon version: </source> <source>Can&apos;t create transaction: Wrong daemon version: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="798"/> <location filename="../main.qml" line="822"/>
<location filename="../main.qml" line="916"/> <location filename="../main.qml" line="940"/>
<source>Can&apos;t create transaction: </source> <source>Can&apos;t create transaction: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="807"/> <location filename="../main.qml" line="831"/>
<location filename="../main.qml" line="925"/> <location filename="../main.qml" line="949"/>
<source>No unmixable outputs to sweep</source> <source>No unmixable outputs to sweep</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="937"/> <location filename="../main.qml" line="961"/>
<source>Confirmation</source> <source>Confirmation</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="818"/> <location filename="../main.qml" line="842"/>
<location filename="../main.qml" line="938"/> <location filename="../main.qml" line="962"/>
<source>Please confirm transaction: <source>Please confirm transaction:
</source> </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="821"/> <location filename="../main.qml" line="845"/>
<source> <source>
Payment ID: </source> Payment ID: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="822"/> <location filename="../main.qml" line="846"/>
<location filename="../main.qml" line="939"/> <location filename="../main.qml" line="963"/>
<source> <source>
Amount: </source> Amount: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="823"/> <location filename="../main.qml" line="847"/>
<location filename="../main.qml" line="940"/> <location filename="../main.qml" line="964"/>
<source> <source>
Fee: </source> Fee: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="645"/> <location filename="../main.qml" line="669"/>
<source>Waiting for daemon to sync</source> <source>Waiting for daemon to sync</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="307"/> <location filename="../main.qml" line="310"/>
<source>Closing wallet...</source> <source>Closing wallet...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="502"/> <location filename="../main.qml" line="512"/>
<source>Please proceed to the device...</source> <source>Please proceed to the device...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="514"/> <location filename="../main.qml" line="524"/>
<source>Opening wallet ...</source> <source>Opening wallet ...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="529"/> <location filename="../main.qml" line="539"/>
<location filename="../main.qml" line="536"/> <location filename="../main.qml" line="546"/>
<source>Repairing incompatible wallet cache. Resyncing wallet.</source> <source>Repairing incompatible wallet cache. Resyncing wallet.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="647"/> <location filename="../main.qml" line="671"/>
<source>Daemon is synchronized (%1)</source> <source>Daemon is synchronized (%1)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="649"/> <location filename="../main.qml" line="673"/>
<source>Wallet is synchronized</source> <source>Wallet is synchronized</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="743"/> <location filename="../main.qml" line="767"/>
<source>Daemon is synchronized</source> <source>Daemon is synchronized</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="820"/> <location filename="../main.qml" line="844"/>
<source>Address: </source> <source>Address: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="824"/> <location filename="../main.qml" line="848"/>
<source> <source>
Ringsize: </source> Ringsize: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="825"/> <location filename="../main.qml" line="849"/>
<source> <source>
Number of transactions: </source> Number of transactions: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="826"/> <location filename="../main.qml" line="850"/>
<source> <source>
Description: </source> Description: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="828"/> <location filename="../main.qml" line="852"/>
<source> <source>
Spending address index: </source> Spending address index: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="848"/> <location filename="../main.qml" line="872"/>
<source>Creating transaction...</source> <source>Creating transaction...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="849"/> <location filename="../main.qml" line="873"/>
<source> <source>
Please check your hardware wallet Please check your hardware wallet
@@ -3576,177 +3601,187 @@ your input may be required.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="964"/> <location filename="../main.qml" line="988"/>
<source>Sending transaction ...</source> <source>Sending transaction ...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="983"/> <location filename="../main.qml" line="1007"/>
<source>Monero sent successfully: %1 transaction(s) </source> <source>Monero sent successfully: %1 transaction(s) </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1000"/> <location filename="../main.qml" line="1024"/>
<source>Failed to store the wallet</source> <source>Failed to store the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1027"/> <location filename="../main.qml" line="1051"/>
<source>Payment proof</source> <source>Payment proof</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1030"/> <location filename="../main.qml" line="1054"/>
<source>Couldn&apos;t generate a proof because of the following reason: <source>Couldn&apos;t generate a proof because of the following reason:
</source> </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1060"/> <location filename="../main.qml" line="1084"/>
<location filename="../main.qml" line="1079"/> <location filename="../main.qml" line="1103"/>
<source>Payment proof check</source> <source>Payment proof check</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1063"/> <location filename="../main.qml" line="1087"/>
<location filename="../main.qml" line="1081"/> <location filename="../main.qml" line="1105"/>
<source>Bad signature</source> <source>Bad signature</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1070"/> <location filename="../main.qml" line="1094"/>
<source>This address received %1 monero, with %2 confirmation(s).</source> <source>This address received %1 monero, with %2 confirmation(s).</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1081"/> <location filename="../main.qml" line="1105"/>
<source>Good signature</source> <source>Good signature</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1443"/> <location filename="../main.qml" line="1486"/>
<location filename="../main.qml" line="2111"/> <location filename="../main.qml" line="2158"/>
<source>Wrong password</source> <source>Wrong password</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1496"/> <location filename="../main.qml" line="1496"/>
<source>Warning</source> <source>Save transaction file</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1499"/> <location filename="../main.qml" line="1496"/>
<source>Error: Filesystem is read only</source> <source>Send transaction</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1501"/>
<source>Warning: There&apos;s only %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1503"/>
<source>Note: There&apos;s %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1505"/>
<source>Note: lmdb folder not found. A new folder will be created.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1543"/> <location filename="../main.qml" line="1543"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1546"/>
<source>Error: Filesystem is read only</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1548"/>
<source>Warning: There&apos;s only %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1550"/>
<source>Note: There&apos;s %1 GB available on the device. Blockchain requires ~%2 GB of data.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1552"/>
<source>Note: lmdb folder not found. A new folder will be created.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.qml" line="1590"/>
<source>Password changed successfully</source> <source>Password changed successfully</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1547"/> <location filename="../main.qml" line="1594"/>
<source>Error: </source> <source>Error: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1635"/> <location filename="../main.qml" line="1682"/>
<source>Primary account</source> <source>Primary account</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1846"/> <location filename="../main.qml" line="1893"/>
<source>Autosaved the wallet</source> <source>Autosaved the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1848"/> <location filename="../main.qml" line="1895"/>
<source>Failed to autosave the wallet</source> <source>Failed to autosave the wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1963"/> <location filename="../main.qml" line="2010"/>
<source>Local node is running</source> <source>Local node is running</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1964"/> <location filename="../main.qml" line="2011"/>
<source>Do you want to stop local node or keep it running in the background?</source> <source>Do you want to stop local node or keep it running in the background?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1966"/> <location filename="../main.qml" line="2013"/>
<source>Force stop</source> <source>Force stop</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1967"/> <location filename="../main.qml" line="2014"/>
<source>Keep it running</source> <source>Keep it running</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1987"/> <location filename="../main.qml" line="2034"/>
<source>Tap again to close...</source> <source>Tap again to close...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="2002"/> <location filename="../main.qml" line="2049"/>
<source>Checking local node status...</source> <source>Checking local node status...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="862"/> <location filename="../main.qml" line="886"/>
<source>Amount is wrong: expected number from %1 to %2</source> <source>Amount is wrong: expected number from %1 to %2</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="874"/> <location filename="../main.qml" line="898"/>
<source>Insufficient funds. Unlocked balance: %1</source> <source>Insufficient funds. Unlocked balance: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="973"/> <location filename="../main.qml" line="997"/>
<source>Couldn&apos;t send the money: </source> <source>Couldn&apos;t send the money: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="977"/> <location filename="../main.qml" line="1001"/>
<location filename="../main.qml" line="1542"/> <location filename="../main.qml" line="1589"/>
<source>Information</source> <source>Information</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="983"/> <location filename="../main.qml" line="1007"/>
<source>Transaction saved to file: %1</source> <source>Transaction saved to file: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1067"/> <location filename="../main.qml" line="1091"/>
<source>This address received %1 monero, but the transaction is not yet mined</source> <source>This address received %1 monero, but the transaction is not yet mined</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1074"/> <location filename="../main.qml" line="1098"/>
<source>This address received nothing</source> <source>This address received nothing</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.qml" line="1595"/> <location filename="../main.qml" line="1642"/>
<source>Please wait...</source> <source>Please wait...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

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