diff --git a/.gitignore b/.gitignore index 182d36f..b9fe459 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,4 @@ workspace.code-workspace *.mak *.plist zcashd +res/*.qm \ No newline at end of file diff --git a/README.md b/README.md index dfdaffe..dff28d9 100644 --- a/README.md +++ b/README.md @@ -1,81 +1,88 @@ -zec-qt-wallet is a z-Addr first, Sapling compatible wallet and full node for zcashd that runs on Linux, Windows and macOS. - -![Screenshot](docs/screenshot-main.png?raw=true) -![Screenshots](docs/screenshot-sub.png?raw=true) -# Installation - -Head over to the releases page and grab the latest binary. https://github.com/adityapk00/zec-qt-wallet/releases - -### Linux -Extract and run the binary. -``` -tar -xvf zec-qt-wallet-v0.4.3.tar.gz -./zec-qt-wallet-v0.4.3/zec-qt-wallet -``` - -### Windows -Unzip the release binary and double click on zec-qt-wallet to start. - -### macOS -Double-click on the .dmg file to open it, and drag zec-qt-wallet on to the Applications link to install. - -## zcashd -zec-qt-wallet needs a Zcash node running zcashd. If you already have a zcashd node running, zec-qt-wallet will connect to it. - -If you don't have one, zec-qt-wallet will start its embedded zcashd node. - -Additionally, if this is the first time you're running zec-qt-wallet or a zcashd daemon, zec-qt-wallet will download the zcash params (~1.7 GB) and configure `zcash.conf` for you. - -Pass `--no-embedded` to disable the embedded zcashd and force zec-qt-wallet to connect to an external node. - -## Compiling from source -zec-qt-wallet is written in C++ 14, and can be compiled with g++/clang++/visual c++. It also depends on Qt5, which you can get from [here](https://www.qt.io/download) - -See detailed build instructions [on the wiki](https://github.com/ZcashFoundation/zec-qt-wallet/wiki/Compiling-from-source-code) - -### Building on Linux - -``` -git clone https://github.com/adityapk00/zec-qt-wallet.git -cd zec-qt-wallet -/path/to/qt5/bin/qmake zec-qt-wallet.pro CONFIG+=debug -make -j$(nproc) - -./zec-qt-wallet -``` - -### Building on Windows -You need Visual Studio 2017 (The free C++ Community Edition works just fine). - -From the VS Tools command prompt -``` -git clone https://github.com/adityapk00/zec-qt-wallet.git -cd zec-qt-wallet -c:\Qt5\bin\qmake.exe zec-qt-wallet.pro -spec win32-msvc CONFIG+=debug -nmake - -debug\zec-qt-wallet.exe -``` - -To create the Visual Studio project files so you can compile and run from Visual Studio: -``` -c:\Qt5\bin\qmake.exe zec-qt-wallet.pro -tp vc CONFIG+=debug -``` - -### Building on macOS -You need to install the Xcode app or the Xcode command line tools first, and then install Qt. - -``` -git clone https://github.com/adityapk00/zec-qt-wallet.git -cd zec-qt-wallet -/path/to/qt5/bin/qmake zec-qt-wallet.pro CONFIG+=debug -make - -./zec-qt-wallet.app/Contents/MacOS/zec-qt-wallet -``` - -### [Troubleshooting Guide & FAQ](https://github.com/ZcashFoundation/zec-qt-wallet/wiki/Troubleshooting-&-FAQ) -Please read the [troubleshooting guide](https://github.com/ZcashFoundation/zec-qt-wallet/wiki/Troubleshooting-&-FAQ) for common problems and solutions. -For support or other questions, tweet at [@zecqtwallet](https://twitter.com/zecqtwallet) or [file an issue](https://github.com/ZcashFoundation/zec-qt-wallet/issues). - -_PS: zec-qt-wallet is NOT an official wallet, and is not affiliated with the Zerocoin Electric Coin Company in any way._ +zec-qt-wallet is a z-Addr first, Sapling compatible wallet and full node for zcashd that runs on Linux, Windows and macOS. + +![Screenshot](docs/screenshot-main.png?raw=true) +![Screenshots](docs/screenshot-sub.png?raw=true) +# Installation + +Head over to the releases page and grab the latest installers or binary. https://github.com/adityapk00/zec-qt-wallet/releases + +### Linux + +If you are on Debian/Ubuntu, please download the `.deb` package and install it. +``` +sudo dpkg -i linux-deb-zec-qt-wallet-v0.5.0.deb +sudo apt install -f +``` + +Or you can download and run the binaries directly. +``` +tar -xvf zec-qt-wallet-v0.5.0.tar.gz +./zec-qt-wallet-v0.5.0/zec-qt-wallet +``` + +### Windows +Download and run the .msi installer and follow the prompts. Alternately, you can download the release binary, unzip it and double click on zec-qt-wallet to start. + +### macOS +Double-click on the .dmg file to open it, and drag zec-qt-wallet on to the Applications link to install. + +## zcashd +zec-qt-wallet needs a Zcash node running zcashd. If you already have a zcashd node running, zec-qt-wallet will connect to it. + +If you don't have one, zec-qt-wallet will start its embedded zcashd node. + +Additionally, if this is the first time you're running zec-qt-wallet or a zcashd daemon, zec-qt-wallet will download the zcash params (~1.7 GB) and configure `zcash.conf` for you. + +Pass `--no-embedded` to disable the embedded zcashd and force zec-qt-wallet to connect to an external node. + +## Compiling from source +zec-qt-wallet is written in C++ 14, and can be compiled with g++/clang++/visual c++. It also depends on Qt5, which you can get from [here](https://www.qt.io/download). Note that if you are compiling from source, you won't get the embedded zcashd by default. You can either run an external zcashd, or compile zcashd as well. + +See detailed build instructions [on the wiki](https://github.com/ZcashFoundation/zec-qt-wallet/wiki/Compiling-from-source-code) + +### Building on Linux + +``` +git clone https://github.com/adityapk00/zec-qt-wallet.git +cd zec-qt-wallet +/path/to/qt5/bin/qmake zec-qt-wallet.pro CONFIG+=debug +make -j$(nproc) + +./zec-qt-wallet +``` + +### Building on Windows +You need Visual Studio 2017 (The free C++ Community Edition works just fine). + +From the VS Tools command prompt +``` +git clone https://github.com/adityapk00/zec-qt-wallet.git +cd zec-qt-wallet +c:\Qt5\bin\qmake.exe zec-qt-wallet.pro -spec win32-msvc CONFIG+=debug +nmake + +debug\zec-qt-wallet.exe +``` + +To create the Visual Studio project files so you can compile and run from Visual Studio: +``` +c:\Qt5\bin\qmake.exe zec-qt-wallet.pro -tp vc CONFIG+=debug +``` + +### Building on macOS +You need to install the Xcode app or the Xcode command line tools first, and then install Qt. + +``` +git clone https://github.com/adityapk00/zec-qt-wallet.git +cd zec-qt-wallet +/path/to/qt5/bin/qmake zec-qt-wallet.pro CONFIG+=debug +make + +./zec-qt-wallet.app/Contents/MacOS/zec-qt-wallet +``` + +### [Troubleshooting Guide & FAQ](https://github.com/ZcashFoundation/zec-qt-wallet/wiki/Troubleshooting-&-FAQ) +Please read the [troubleshooting guide](https://github.com/ZcashFoundation/zec-qt-wallet/wiki/Troubleshooting-&-FAQ) for common problems and solutions. +For support or other questions, tweet at [@zecqtwallet](https://twitter.com/zecqtwallet) or [file an issue](https://github.com/ZcashFoundation/zec-qt-wallet/issues). + +_PS: zec-qt-wallet is NOT an official wallet, and is not affiliated with the Zerocoin Electric Coin Company in any way._ diff --git a/application.qrc b/application.qrc index 7bb111d..5ccc0f8 100644 --- a/application.qrc +++ b/application.qrc @@ -11,4 +11,9 @@ res/zcashdlogo.gif res/logobig.gif + + res/zec_qt_wallet_es.qm + res/zec_qt_wallet_fr.qm + res/zec_qt_wallet_de.qm + diff --git a/docs/linguist-screenshot.png b/docs/linguist-screenshot.png new file mode 100644 index 0000000..2f51c62 Binary files /dev/null and b/docs/linguist-screenshot.png differ diff --git a/docs/screenshot-main.png b/docs/screenshot-main.png index fcfebfa..acf82a5 100644 Binary files a/docs/screenshot-main.png and b/docs/screenshot-main.png differ diff --git a/docs/screenshot-sub.png b/docs/screenshot-sub.png index 02f0c48..e0b6881 100644 Binary files a/docs/screenshot-sub.png and b/docs/screenshot-sub.png differ diff --git a/res/zec_qt_wallet_de.ts b/res/zec_qt_wallet_de.ts new file mode 100644 index 0000000..051902b --- /dev/null +++ b/res/zec_qt_wallet_de.ts @@ -0,0 +1,1111 @@ + + + + + BalancesTableModel + + + Address + + + + + Amount + + + + + ConnectionDialog + + + zec-qt-wallet + + + + + Starting Up + + + + + MainWindow + + + zec-qt-wallet + + + + + Balance + + + + + Summary + + + + + Shielded + + + + + Transparent + + + + + Total + + + + + Some transactions are not yet confirmed + + + + + Address Balances + + + + + + Send + + + + + From + + + + + + Address Balance + + + + + Send To + + + + + Recipient + + + + + + + + + Address + + + + + + Address Book + + + + + + + + Amount + + + + + Max Available + + + + + + + + Memo + + + + + Add Recipient + + + + + + Miner Fee + + + + + 0 + + + + + Cancel + + + + + Receive + + + + + Address Type + + + + + z-Addr(Sapling) + + + + + t-Addr + + + + + z-Addr(Sprout) + + + + + New Address + + + + + Label + + + + + Update Label + + + + + Optional + + + + + Export Private Key + + + + + Transactions + + + + + zcashd + + + + + You are currently not mining + + + + + + + + Loading... + + + + + Block height + + + + + Network solution rate + + + + + Connections + + + + + + + | + + + + + &File + + + + + &Help + + + + + &Apps + + + + + &Edit + + + + + E&xit + + + + + &About + + + + + &Settings + + + + + Ctrl+P + + + + + &Donate + + + + + Check github.com for &updates + + + + + Sapling &turnstile + + + + + Ctrl+A, Ctrl+T + + + + + &Import private key + + + + + &Export all private keys + + + + + &z-board.net + + + + + Ctrl+A, Ctrl+Z + + + + + Address &book + + + + + Ctrl+B + + + + + &Backup wallet.dat + + + + + Thanks for supporting zec-qt-wallet! + + + + + Donate 0.01 + + + + + to support zec-qt-wallet + + + + + You are on testnet, your post won't actually appear on z-board.net + + + + + You need a sapling address with available balance to post + + + + + + Computing Tx: + + + + + The keys were imported. It may take several minutes to rescan the blockchain. Until then, functionality may be limited + + + + + Private key import rescan finished + + + + + Please paste your private keys (z-Addr or t-Addr) here, one per line + + + + + The keys will be imported into your connected zcashd node + + + + + No wallet.dat + + + + + Couldn't find the wallet.dat on this computer + + + + + You need to back it up from the machine zcashd is running on + + + + + Backup wallet.dat + + + + + Couldn't backup + + + + + Couldn't backup the wallet.dat file. + + + + + You need to back it up manually. + + + + + These are all the private keys for all the addresses in your wallet + + + + + Private key for + + + + + Save File + + + + + Unable to open file + + + + + + Copy address + + + + + + + Copied to clipboard + + + + + Get private key + + + + + Shield balance to Sapling + + + + + + View on block explorer + + + + + Migrate to Sapling + + + + + Copy txid + + + + + View Memo + + + + + Created new t-Addr + + + + + Recipient + + + + + Only z-addresses can have memos + + + + + Memos can only be used with z-addresses + + + + + The memo field can only be used with a z-address. + + + + + + +doesn't look like a z-address + + + + + Change from + + + + + Transaction Error + + + + + From Address is Invalid + + + + + Recipient Address + + + + + is Invalid + + + + + MemoDialog + + + + Memo + + + + + PrivKey + + + Private Key + + + + + QObject + + + Attempting autoconnect + + + + + Starting embedded zcashd + + + + + zcashd is set to run as daemon + + + + + Waiting for zcashd + + + + + You have zcashd set to start as a daemon, which can cause problems with zec-qt-wallet + +.Please remove the following line from your zcash.conf and restart zec-qt-wallet +daemon=1 + + + + + Couldn't start the embedded zcashd. + +Please try restarting. + +If you previously started zcashd with custom arguments, you might need to reset zcash.conf. + +If all else fails, please run zcashd manually. + + + + + Couldn't connect to zcashd configured in zcash.conf. + +Not starting embedded zcashd because --no-embedded was passed + + + + + All Downloads Finished Successfully! + + + + + Couldn't download params. Please check the help site for more info. + + + + + The process returned + + + + + + Downloading + + + + + more remaining ) + + + + + MB of + + + + + MB at + + + + + Downloading blocks + + + + + Block height + + + + + Syncing + + + + + Connected + + + + + testnet: + + + + + Connected to zcashd + + + + + There was an error connecting to zcashd. The error was + + + + + The transaction with id + + + + + failed. The error was + + + + + failed + + + + + Tx + + + + + tx computing. This can take several minutes. + + + + + Please wait for zec-qt-wallet to exit + + + + + Waiting for zcashd to exit + + + + + failed. Please check the help site for more info + + + + + zcashd error + + + + + A manual connection was requested, but the settings are not configured. + +Please set the host/port and user/password in the Edit->Settings menu. + + + + + Could not connect to zcashd configured in settings. + +Please set the host/port and user/password in the Edit->Settings menu. + + + + + Authentication failed. The username / password you specified was not accepted by zcashd. Try changing it in the Edit->Settings menu + + + + + Your zcashd is starting up. Please wait. + + + + + + Connection Error + + + + + + Transaction Error + + + + + There was an error sending the transaction. The error was: + + + + + + No Connection + + + + + Address Format Error + + + + + doesn't seem to be a valid Zcash address. + + + + + Copy address + + + + + Copied to clipboard + + + + + Delete label + + + + + Tx submitted (right click to copy) txid: + + + + + Locked funds + + + + + Could not initiate migration. +You either have unconfirmed funds or the balance is too low for an automatic migration. + + + + + Computing Tx: + + + + + Type + + + + + Address + + + + + Date/Time + + + + + Amount + + + + + Settings + + + Settings + + + + + zcashd connection + + + + + Host + + + + + Port + + + + + RPC Username + + + + + RPC Password + + + + + Options + + + + + Shielded transactions are saved locally and shown in the transactions tab. If you uncheck this, shielded transactions will not appear in the transactions tab. + + + + + Clear History + + + + + Remember shielded transactions + + + + + Allow custom fees + + + + + Allow overriding the default fees when sending transactions. Enabling this option may compromise your privacy since fees are transparent. + + + + + Normally, change from t-Addresses goes to another t-Address. Checking this option will send the change to your shielded sapling address instead. Check this option to increase your privacy. + + + + + Shield change from t-Addresses to your sapling address + + + + + Turnstile + + + + Turnstile Migration + + + + + Migrate over + + + + + From + + + + + <html><head/><body><p>Funds from Sprout z-Addresses (which start with &quot;zc&quot;) need to be moved to the upgraded Sapling z-Addresses (which start with &quot;zs&quot;). The funds cannot be moved directly, but need to be sent through intermediate &quot;transparent&quot; addresses in privacy-preserving way.</p><p>This migration can be done automatically for you.</p></body></html> + + + + + To + + + + + Balance + + + + + Miner Fees + + + + + Total Balance + + + + + TurnstileProgress + + + Turnstile Migration Progress + + + + + From + + + + + To + + + + + Please ensure you have your wallet.dat backed up! + + + + + Next Transaction in 4 hours + + + + + Migration Progress + + + + + about + + + About + + + + + addressBook + + + Address Book + + + + + Add New Address + + + + + Address (z-Addr or t-Addr) + + + + + Label + + + + + Add to Address Book + + + + + confirm + + + Confirm Transaction + + + + + From + + + + + To + + + + + You are sending a transaction while your node is still syncing. This may not work. + + + + + You are using a custom fee. Since fees are transparent, you are giving up some privacy. Please use this only if you know what you are doing! + + + + + zboard + + + Post to z-board.net + + + + + Total Fee + + + + + Memo + + + + + (optional) + + + + + Send From + + + + + Post As: + + + + + <html><head/><body><p>ZBoard: Fully anonymous and untraceable chat messages based on the ZCash blockchain. <a href="http://www.z-board.net/"><span style=" text-decoration: underline; color:#0000ff;">http://www.z-board.net/</span></a></p></body></html> + + + + + Warning + + + + + Posting to Board + + + + diff --git a/res/zec_qt_wallet_es.ts b/res/zec_qt_wallet_es.ts new file mode 100644 index 0000000..e8117ed --- /dev/null +++ b/res/zec_qt_wallet_es.ts @@ -0,0 +1,1111 @@ + + + + + BalancesTableModel + + + Address + + + + + Amount + + + + + ConnectionDialog + + + zec-qt-wallet + + + + + Starting Up + + + + + MainWindow + + + zec-qt-wallet + + + + + Balance + + + + + Summary + + + + + Shielded + + + + + Transparent + + + + + Total + + + + + Some transactions are not yet confirmed + + + + + Address Balances + + + + + + Send + + + + + From + + + + + + Address Balance + + + + + Send To + + + + + Recipient + + + + + + + + + Address + + + + + + Address Book + + + + + + + + Amount + + + + + Max Available + + + + + + + + Memo + + + + + Add Recipient + + + + + + Miner Fee + + + + + 0 + + + + + Cancel + + + + + Receive + + + + + Address Type + + + + + z-Addr(Sapling) + + + + + t-Addr + + + + + z-Addr(Sprout) + + + + + New Address + + + + + Label + + + + + Update Label + + + + + Optional + + + + + Export Private Key + + + + + Transactions + + + + + zcashd + + + + + You are currently not mining + + + + + + + + Loading... + + + + + Block height + + + + + Network solution rate + + + + + Connections + + + + + + + | + + + + + &File + + + + + &Help + + + + + &Apps + + + + + &Edit + + + + + E&xit + + + + + &About + + + + + &Settings + + + + + Ctrl+P + + + + + &Donate + + + + + Check github.com for &updates + + + + + Sapling &turnstile + + + + + Ctrl+A, Ctrl+T + + + + + &Import private key + + + + + &Export all private keys + + + + + &z-board.net + + + + + Ctrl+A, Ctrl+Z + + + + + Address &book + + + + + Ctrl+B + + + + + &Backup wallet.dat + + + + + Thanks for supporting zec-qt-wallet! + + + + + Donate 0.01 + + + + + to support zec-qt-wallet + + + + + You are on testnet, your post won't actually appear on z-board.net + + + + + You need a sapling address with available balance to post + + + + + + Computing Tx: + + + + + The keys were imported. It may take several minutes to rescan the blockchain. Until then, functionality may be limited + + + + + Private key import rescan finished + + + + + Please paste your private keys (z-Addr or t-Addr) here, one per line + + + + + The keys will be imported into your connected zcashd node + + + + + No wallet.dat + + + + + Couldn't find the wallet.dat on this computer + + + + + You need to back it up from the machine zcashd is running on + + + + + Backup wallet.dat + + + + + Couldn't backup the wallet.dat file. + + + + + Couldn't backup + + + + + You need to back it up manually. + + + + + These are all the private keys for all the addresses in your wallet + + + + + Private key for + + + + + Save File + + + + + Unable to open file + + + + + + Copy address + + + + + + + Copied to clipboard + + + + + Get private key + + + + + Shield balance to Sapling + + + + + + View on block explorer + + + + + Migrate to Sapling + + + + + Copy txid + + + + + View Memo + + + + + Created new t-Addr + + + + + Recipient + + + + + Only z-addresses can have memos + + + + + Memos can only be used with z-addresses + + + + + The memo field can only be used with a z-address. + + + + + + +doesn't look like a z-address + + + + + Change from + + + + + Transaction Error + + + + + From Address is Invalid + + + + + Recipient Address + + + + + is Invalid + + + + + MemoDialog + + + + Memo + + + + + PrivKey + + + Private Key + + + + + QObject + + + + No Connection + + + + + Downloading blocks + + + + + Block height + + + + + Syncing + + + + + Connected + + + + + testnet: + + + + + Connected to zcashd + + + + + There was an error connecting to zcashd. The error was + + + + + The transaction with id + + + + + failed. The error was + + + + + Tx + + + + + tx computing. This can take several minutes. + + + + + Please wait for zec-qt-wallet to exit + + + + + Waiting for zcashd to exit + + + + + Attempting autoconnect + + + + + Starting embedded zcashd + + + + + zcashd is set to run as daemon + + + + + Waiting for zcashd + + + + + You have zcashd set to start as a daemon, which can cause problems with zec-qt-wallet + +.Please remove the following line from your zcash.conf and restart zec-qt-wallet +daemon=1 + + + + + Couldn't start the embedded zcashd. + +Please try restarting. + +If you previously started zcashd with custom arguments, you might need to reset zcash.conf. + +If all else fails, please run zcashd manually. + + + + + Couldn't connect to zcashd configured in zcash.conf. + +Not starting embedded zcashd because --no-embedded was passed + + + + + All Downloads Finished Successfully! + + + + + Couldn't download params. Please check the help site for more info. + + + + + The process returned + + + + + + Downloading + + + + + more remaining ) + + + + + MB of + + + + + MB at + + + + + failed + + + + + failed. Please check the help site for more info + + + + + zcashd error + + + + + A manual connection was requested, but the settings are not configured. + +Please set the host/port and user/password in the Edit->Settings menu. + + + + + Could not connect to zcashd configured in settings. + +Please set the host/port and user/password in the Edit->Settings menu. + + + + + Authentication failed. The username / password you specified was not accepted by zcashd. Try changing it in the Edit->Settings menu + + + + + Your zcashd is starting up. Please wait. + + + + + + Connection Error + + + + + + Transaction Error + + + + + There was an error sending the transaction. The error was: + + + + + Address Format Error + + + + + doesn't seem to be a valid Zcash address. + + + + + Copy address + + + + + Copied to clipboard + + + + + Delete label + + + + + Tx submitted (right click to copy) txid: + + + + + Locked funds + + + + + Could not initiate migration. +You either have unconfirmed funds or the balance is too low for an automatic migration. + + + + + Computing Tx: + + + + + Type + + + + + Address + + + + + Date/Time + + + + + Amount + + + + + Settings + + + Settings + + + + + zcashd connection + + + + + Host + + + + + Port + + + + + RPC Username + + + + + RPC Password + + + + + Options + + + + + Shielded transactions are saved locally and shown in the transactions tab. If you uncheck this, shielded transactions will not appear in the transactions tab. + + + + + Clear History + + + + + Remember shielded transactions + + + + + Allow custom fees + + + + + Allow overriding the default fees when sending transactions. Enabling this option may compromise your privacy since fees are transparent. + + + + + Normally, change from t-Addresses goes to another t-Address. Checking this option will send the change to your shielded sapling address instead. Check this option to increase your privacy. + + + + + Shield change from t-Addresses to your sapling address + + + + + Turnstile + + + + Turnstile Migration + + + + + Migrate over + + + + + From + + + + + <html><head/><body><p>Funds from Sprout z-Addresses (which start with &quot;zc&quot;) need to be moved to the upgraded Sapling z-Addresses (which start with &quot;zs&quot;). The funds cannot be moved directly, but need to be sent through intermediate &quot;transparent&quot; addresses in privacy-preserving way.</p><p>This migration can be done automatically for you.</p></body></html> + + + + + To + + + + + Balance + + + + + Miner Fees + + + + + Total Balance + + + + + TurnstileProgress + + + Turnstile Migration Progress + + + + + From + + + + + To + + + + + Please ensure you have your wallet.dat backed up! + + + + + Next Transaction in 4 hours + + + + + Migration Progress + + + + + about + + + About + + + + + addressBook + + + Address Book + + + + + Add New Address + + + + + Address (z-Addr or t-Addr) + + + + + Label + + + + + Add to Address Book + + + + + confirm + + + Confirm Transaction + + + + + From + + + + + To + + + + + You are sending a transaction while your node is still syncing. This may not work. + + + + + You are using a custom fee. Since fees are transparent, you are giving up some privacy. Please use this only if you know what you are doing! + + + + + zboard + + + Post to z-board.net + + + + + Total Fee + + + + + Memo + + + + + (optional) + + + + + Send From + + + + + Post As: + + + + + <html><head/><body><p>ZBoard: Fully anonymous and untraceable chat messages based on the ZCash blockchain. <a href="http://www.z-board.net/"><span style=" text-decoration: underline; color:#0000ff;">http://www.z-board.net/</span></a></p></body></html> + + + + + Warning + + + + + Posting to Board + + + + diff --git a/res/zec_qt_wallet_fr.ts b/res/zec_qt_wallet_fr.ts new file mode 100644 index 0000000..535df76 --- /dev/null +++ b/res/zec_qt_wallet_fr.ts @@ -0,0 +1,1111 @@ + + + + + BalancesTableModel + + + Address + + + + + Amount + + + + + ConnectionDialog + + + zec-qt-wallet + + + + + Starting Up + + + + + MainWindow + + + zec-qt-wallet + + + + + Balance + + + + + Summary + + + + + Shielded + + + + + Transparent + + + + + Total + + + + + Some transactions are not yet confirmed + + + + + Address Balances + + + + + + Send + + + + + From + + + + + + Address Balance + + + + + Send To + + + + + Recipient + + + + + + + + + Address + + + + + + Address Book + + + + + + + + Amount + + + + + Max Available + + + + + + + + Memo + + + + + Add Recipient + + + + + + Miner Fee + + + + + 0 + + + + + Cancel + + + + + Receive + + + + + Address Type + + + + + z-Addr(Sapling) + + + + + t-Addr + + + + + z-Addr(Sprout) + + + + + New Address + + + + + Label + + + + + Update Label + + + + + Optional + + + + + Export Private Key + + + + + Transactions + + + + + zcashd + + + + + You are currently not mining + + + + + + + + Loading... + + + + + Block height + + + + + Network solution rate + + + + + Connections + + + + + + + | + + + + + &File + + + + + &Help + + + + + &Apps + + + + + &Edit + + + + + E&xit + + + + + &About + + + + + &Settings + + + + + Ctrl+P + + + + + &Donate + + + + + Check github.com for &updates + + + + + Sapling &turnstile + + + + + Ctrl+A, Ctrl+T + + + + + &Import private key + + + + + &Export all private keys + + + + + &z-board.net + + + + + Ctrl+A, Ctrl+Z + + + + + Address &book + + + + + Ctrl+B + + + + + &Backup wallet.dat + + + + + Thanks for supporting zec-qt-wallet! + + + + + Donate 0.01 + + + + + to support zec-qt-wallet + + + + + You are on testnet, your post won't actually appear on z-board.net + + + + + You need a sapling address with available balance to post + + + + + + Computing Tx: + + + + + The keys were imported. It may take several minutes to rescan the blockchain. Until then, functionality may be limited + + + + + Private key import rescan finished + + + + + Please paste your private keys (z-Addr or t-Addr) here, one per line + + + + + The keys will be imported into your connected zcashd node + + + + + No wallet.dat + + + + + Couldn't find the wallet.dat on this computer + + + + + You need to back it up from the machine zcashd is running on + + + + + Backup wallet.dat + + + + + Couldn't backup + + + + + Couldn't backup the wallet.dat file. + + + + + You need to back it up manually. + + + + + These are all the private keys for all the addresses in your wallet + + + + + Private key for + + + + + Save File + + + + + Unable to open file + + + + + + Copy address + + + + + + + Copied to clipboard + + + + + Get private key + + + + + Shield balance to Sapling + + + + + + View on block explorer + + + + + Migrate to Sapling + + + + + Copy txid + + + + + View Memo + + + + + Created new t-Addr + + + + + Recipient + + + + + Only z-addresses can have memos + + + + + Memos can only be used with z-addresses + + + + + The memo field can only be used with a z-address. + + + + + + +doesn't look like a z-address + + + + + Change from + + + + + Transaction Error + + + + + From Address is Invalid + + + + + Recipient Address + + + + + is Invalid + + + + + MemoDialog + + + + Memo + + + + + PrivKey + + + Private Key + + + + + QObject + + + Attempting autoconnect + + + + + Starting embedded zcashd + + + + + zcashd is set to run as daemon + + + + + Waiting for zcashd + + + + + You have zcashd set to start as a daemon, which can cause problems with zec-qt-wallet + +.Please remove the following line from your zcash.conf and restart zec-qt-wallet +daemon=1 + + + + + Couldn't start the embedded zcashd. + +Please try restarting. + +If you previously started zcashd with custom arguments, you might need to reset zcash.conf. + +If all else fails, please run zcashd manually. + + + + + Couldn't connect to zcashd configured in zcash.conf. + +Not starting embedded zcashd because --no-embedded was passed + + + + + All Downloads Finished Successfully! + + + + + Couldn't download params. Please check the help site for more info. + + + + + The process returned + + + + + + Downloading + + + + + more remaining ) + + + + + MB of + + + + + MB at + + + + + Downloading blocks + + + + + Block height + + + + + Syncing + + + + + Connected + + + + + testnet: + + + + + Connected to zcashd + + + + + There was an error connecting to zcashd. The error was + + + + + The transaction with id + + + + + failed. The error was + + + + + failed + + + + + Tx + + + + + tx computing. This can take several minutes. + + + + + Please wait for zec-qt-wallet to exit + + + + + Waiting for zcashd to exit + + + + + failed. Please check the help site for more info + + + + + zcashd error + + + + + A manual connection was requested, but the settings are not configured. + +Please set the host/port and user/password in the Edit->Settings menu. + + + + + Could not connect to zcashd configured in settings. + +Please set the host/port and user/password in the Edit->Settings menu. + + + + + Authentication failed. The username / password you specified was not accepted by zcashd. Try changing it in the Edit->Settings menu + + + + + Your zcashd is starting up. Please wait. + + + + + + Connection Error + + + + + + Transaction Error + + + + + There was an error sending the transaction. The error was: + + + + + + No Connection + + + + + Address Format Error + + + + + doesn't seem to be a valid Zcash address. + + + + + Copy address + + + + + Copied to clipboard + + + + + Delete label + + + + + Tx submitted (right click to copy) txid: + + + + + Locked funds + + + + + Could not initiate migration. +You either have unconfirmed funds or the balance is too low for an automatic migration. + + + + + Computing Tx: + + + + + Type + + + + + Address + + + + + Date/Time + + + + + Amount + + + + + Settings + + + Settings + + + + + zcashd connection + + + + + Host + + + + + Port + + + + + RPC Username + + + + + RPC Password + + + + + Options + + + + + Shielded transactions are saved locally and shown in the transactions tab. If you uncheck this, shielded transactions will not appear in the transactions tab. + + + + + Clear History + + + + + Remember shielded transactions + + + + + Allow custom fees + + + + + Allow overriding the default fees when sending transactions. Enabling this option may compromise your privacy since fees are transparent. + + + + + Normally, change from t-Addresses goes to another t-Address. Checking this option will send the change to your shielded sapling address instead. Check this option to increase your privacy. + + + + + Shield change from t-Addresses to your sapling address + + + + + Turnstile + + + + Turnstile Migration + + + + + Migrate over + + + + + From + + + + + <html><head/><body><p>Funds from Sprout z-Addresses (which start with &quot;zc&quot;) need to be moved to the upgraded Sapling z-Addresses (which start with &quot;zs&quot;). The funds cannot be moved directly, but need to be sent through intermediate &quot;transparent&quot; addresses in privacy-preserving way.</p><p>This migration can be done automatically for you.</p></body></html> + + + + + To + + + + + Balance + + + + + Miner Fees + + + + + Total Balance + + + + + TurnstileProgress + + + Turnstile Migration Progress + + + + + From + + + + + To + + + + + Please ensure you have your wallet.dat backed up! + + + + + Next Transaction in 4 hours + + + + + Migration Progress + + + + + about + + + About + + + + + addressBook + + + Address Book + + + + + Add New Address + + + + + Address (z-Addr or t-Addr) + + + + + Label + + + + + Add to Address Book + + + + + confirm + + + Confirm Transaction + + + + + From + + + + + To + + + + + You are sending a transaction while your node is still syncing. This may not work. + + + + + You are using a custom fee. Since fees are transparent, you are giving up some privacy. Please use this only if you know what you are doing! + + + + + zboard + + + Post to z-board.net + + + + + Total Fee + + + + + Memo + + + + + (optional) + + + + + Send From + + + + + Post As: + + + + + <html><head/><body><p>ZBoard: Fully anonymous and untraceable chat messages based on the ZCash blockchain. <a href="http://www.z-board.net/"><span style=" text-decoration: underline; color:#0000ff;">http://www.z-board.net/</span></a></p></body></html> + + + + + Warning + + + + + Posting to Board + + + + diff --git a/src/about.ui b/src/about.ui index dc06b3a..743933d 100644 --- a/src/about.ui +++ b/src/about.ui @@ -11,19 +11,19 @@ - Dialog + About - zec-qt-wallet + zec-qt-wallet - Version + Version @@ -40,15 +40,15 @@ 0 0 - 470 - 389 + 463 + 517 - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.1pt; font-weight:400; font-style:normal;"> diff --git a/src/addressbook.cpp b/src/addressbook.cpp index 85f9e56..f778ed5 100644 --- a/src/addressbook.cpp +++ b/src/addressbook.cpp @@ -124,7 +124,7 @@ void AddressBook::open(MainWindow* parent, QLineEdit* target) { if (!addr.isEmpty() && !ab.label->text().isEmpty()) { // Test if address is valid. if (!Settings::isValidAddress(addr)) { - QMessageBox::critical(parent, "Address Format Error", addr + " doesn't seem to be a valid Zcash address.", QMessageBox::Ok); + QMessageBox::critical(parent, QObject::tr("Address Format Error"), addr + QObject::tr(" doesn't seem to be a valid Zcash address."), QMessageBox::Ok); } else { model.addNewLabel(ab.label->text(), ab.addr->text()); } @@ -168,12 +168,12 @@ void AddressBook::open(MainWindow* parent, QLineEdit* target) { }); } - menu.addAction("Copy address", [&] () { + menu.addAction(QObject::tr("Copy address"), [&] () { QGuiApplication::clipboard()->setText(addr); - parent->ui->statusBar->showMessage("Copied to clipboard", 3 * 1000); + parent->ui->statusBar->showMessage(QObject::tr("Copied to clipboard"), 3 * 1000); }); - menu.addAction("Delete label", [&] () { + menu.addAction(QObject::tr("Delete label"), [&] () { model.removeItemAt(index.row()); }); diff --git a/src/confirm.ui b/src/confirm.ui index 77c4d26..fe9bf27 100644 --- a/src/confirm.ui +++ b/src/confirm.ui @@ -48,7 +48,7 @@ - TextLabel + TextLabel Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -58,7 +58,7 @@ - TextLabel + TextLabel true @@ -68,7 +68,7 @@ - TextLabel + TextLabel true @@ -84,7 +84,7 @@ - TextLabel + TextLabel Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -94,7 +94,7 @@ - Miner Textlabel + Miner Textlabel @@ -107,7 +107,7 @@ - TextLabel + TextLabel Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -123,7 +123,7 @@ - Miner Amount + Miner Amount Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter diff --git a/src/connection.cpp b/src/connection.cpp index a36cab6..7215527 100644 --- a/src/connection.cpp +++ b/src/connection.cpp @@ -38,7 +38,7 @@ void ConnectionLoader::doAutoConnect(bool tryEzcashdStart) { // Priority 2: Try to connect to detect zcash.conf and connect to it. auto config = autoDetectZcashConf(); - main->logger->write("Attempting autoconnect"); + main->logger->write(QObject::tr("Attempting autoconnect")); if (config.get() != nullptr) { auto connection = makeConnection(config); @@ -47,7 +47,7 @@ void ConnectionLoader::doAutoConnect(bool tryEzcashdStart) { // Refused connection. So try and start embedded zcashd if (Settings::getInstance()->useEmbedded()) { if (tryEzcashdStart) { - this->showInformation("Starting embedded zcashd"); + this->showInformation(QObject::tr("Starting embedded zcashd")); if (this->startEmbeddedZcashd()) { // Embedded zcashd started up. Wait a second and then refresh the connection main->logger->write("Embedded zcashd started up, trying autoconnect in 1 sec"); @@ -57,7 +57,7 @@ void ConnectionLoader::doAutoConnect(bool tryEzcashdStart) { // zcashd is configured to run as a daemon, so we must wait for a few seconds // to let it start up. main->logger->write("zcashd is daemon=1. Waiting for it to start up"); - this->showInformation("zcashd is set to run as daemon", "Waiting for zcashd"); + this->showInformation(QObject::tr("zcashd is set to run as daemon"), QObject::tr("Waiting for zcashd")); QTimer::singleShot(5000, [=]() { doAutoConnect(/* don't attempt to start ezcashd */ false); }); } else { // Something is wrong. @@ -72,15 +72,15 @@ void ConnectionLoader::doAutoConnect(bool tryEzcashdStart) { main->logger->write("Couldn't start embedded zcashd for unknown reason"); QString explanation; if (config->zcashDaemon) { - explanation = QString() % "You have zcashd set to start as a daemon, which can cause problems " + explanation = QString() % QObject::tr("You have zcashd set to start as a daemon, which can cause problems " "with zec-qt-wallet\n\n." "Please remove the following line from your zcash.conf and restart zec-qt-wallet\n" - "daemon=1"; + "daemon=1"); } else { - explanation = QString() % "Couldn't start the embedded zcashd.\n\n" % - "Please try restarting.\n\nIf you previously started zcashd with custom arguments, you might need to reset zcash.conf.\n\n" % - "If all else fails, please run zcashd manually." % - (ezcashd ? "The process returned:\n\n" % ezcashd->errorString() : QString("")); + explanation = QString() % QObject::tr("Couldn't start the embedded zcashd.\n\n" + "Please try restarting.\n\nIf you previously started zcashd with custom arguments, you might need to reset zcash.conf.\n\n" + "If all else fails, please run zcashd manually.") % + (ezcashd ? QObject::tr("The process returned") + ":\n\n" % ezcashd->errorString() : QString("")); } this->showError(explanation); @@ -88,8 +88,8 @@ void ConnectionLoader::doAutoConnect(bool tryEzcashdStart) { } else { // zcash.conf exists, there's no connection, and the user asked us not to start zcashd. Error! main->logger->write("Not using embedded and couldn't connect to zcashd"); - QString explanation = QString() % "Couldn't connect to zcashd configured in zcash.conf.\n\n" % - "Not starting embedded zcashd because --no-embedded was passed"; + QString explanation = QString() % QObject::tr("Couldn't connect to zcashd configured in zcash.conf.\n\n" + "Not starting embedded zcashd because --no-embedded was passed"); this->showError(explanation); } }); @@ -180,7 +180,7 @@ void ConnectionLoader::doNextDownload(std::function cb) { client->deleteLater(); main->logger->write("All Downloads done"); - this->showInformation("All Downloads Finished Successfully!"); + this->showInformation(QObject::tr("All Downloads Finished Successfully!")); cb(); return; } @@ -203,7 +203,7 @@ void ConnectionLoader::doNextDownload(std::function cb) { if (!currentOutput->open(QIODevice::WriteOnly)) { main->logger->write("Couldn't open " + currentOutput->fileName() + " for writing"); - this->showError("Couldn't download params. Please check the help site for more info."); + this->showError(QObject::tr("Couldn't download params. Please check the help site for more info.")); } main->logger->write("Downloading to " + filename); qDebug() << "Downloading " << url << " to " << filename; @@ -229,8 +229,8 @@ void ConnectionLoader::doNextDownload(std::function cb) { } this->showInformation( - "Downloading " % filename % (filesRemaining > 1 ? " ( +" % QString::number(filesRemaining) % " more remaining )" : QString("")), - QString::number(done/1024/1024, 'f', 0) % "MB of " % QString::number(total/1024/1024, 'f', 0) + "MB at " % QString::number(speed, 'f', 2) % unit); + QObject::tr("Downloading ") % filename % (filesRemaining > 1 ? " ( +" % QString::number(filesRemaining) % QObject::tr(" more remaining )") : QString("")), + QString::number(done/1024/1024, 'f', 0) % QObject::tr("MB of ") % QString::number(total/1024/1024, 'f', 0) + QObject::tr("MB at ") % QString::number(speed, 'f', 2) % unit); }); // Download Finished @@ -245,7 +245,7 @@ void ConnectionLoader::doNextDownload(std::function cb) { if (currentDownload->error()) { main->logger->write("Downloading " + filename + " failed"); - this->showError("Downloading " + filename + " failed. Please check the help site for more info"); + this->showError(QObject::tr("Downloading ") + filename + QObject::tr(" failed. Please check the help site for more info")); } else { doNextDownload(cb); } @@ -269,7 +269,7 @@ bool ConnectionLoader::startEmbeddedZcashd() { if (ezcashd != nullptr) { if (ezcashd->state() == QProcess::NotRunning) { if (!processStdErrOutput.isEmpty()) { - QMessageBox::critical(main, "zcashd error", "zcashd said: " + processStdErrOutput, + QMessageBox::critical(main, QObject::tr("zcashd error"), "zcashd said: " + processStdErrOutput, QMessageBox::Ok); } return false; @@ -336,8 +336,8 @@ void ConnectionLoader::doManualConnect() { if (!config) { // Nothing configured, show an error QString explanation = QString() - % "A manual connection was requested, but the settings are not configured.\n\n" - % "Please set the host/port and user/password in the Edit->Settings menu."; + % QObject::tr("A manual connection was requested, but the settings are not configured.\n\n" + "Please set the host/port and user/password in the Edit->Settings menu."); showError(explanation); doRPCSetConnection(nullptr); @@ -348,8 +348,8 @@ void ConnectionLoader::doManualConnect() { auto connection = makeConnection(config); refreshZcashdState(connection, [=] () { QString explanation = QString() - % "Could not connect to zcashd configured in settings.\n\n" - % "Please set the host/port and user/password in the Edit->Settings menu."; + % QObject::tr("Could not connect to zcashd configured in settings.\n\n" + "Please set the host/port and user/password in the Edit->Settings menu."); showError(explanation); doRPCSetConnection(nullptr); @@ -407,9 +407,9 @@ void ConnectionLoader::refreshZcashdState(Connection* connection, std::function< refused(); } else if (err == QNetworkReply::NetworkError::AuthenticationRequiredError) { main->logger->write("Authentication failed"); - QString explanation = QString() - % "Authentication failed. The username / password you specified was " - % "not accepted by zcashd. Try changing it in the Edit->Settings menu"; + QString explanation = QString() % + QObject::tr("Authentication failed. The username / password you specified was " + "not accepted by zcashd. Try changing it in the Edit->Settings menu"); this->showError(explanation); } else if (err == QNetworkReply::NetworkError::InternalServerError && @@ -423,7 +423,7 @@ void ConnectionLoader::refreshZcashdState(Connection* connection, std::function< if (dots > 3) dots = 0; } - this->showInformation("Your zcashd is starting up. Please wait.", status); + this->showInformation(QObject::tr("Your zcashd is starting up. Please wait."), status); main->logger->write("Waiting for zcashd to come online."); // Refresh after one second QTimer::singleShot(1000, [=]() { this->refreshZcashdState(connection, refused); }); @@ -444,7 +444,7 @@ void ConnectionLoader::showError(QString explanation) { rpc->setEZcashd(nullptr); rpc->noConnection(); - QMessageBox::critical(main, "Connection Error", explanation, QMessageBox::Ok); + QMessageBox::critical(main, QObject::tr("Connection Error"), explanation, QMessageBox::Ok); d->close(); } @@ -663,7 +663,7 @@ void Connection::showTxError(const QString& error) { return; shown = true; - QMessageBox::critical(main, "Transaction Error", "There was an error sending the transaction. The error was: \n\n" + QMessageBox::critical(main, QObject::tr("Transaction Error"), QObject::tr("There was an error sending the transaction. The error was:") + "\n\n" + error, QMessageBox::StandardButton::Ok); shown = false; } diff --git a/src/connection.ui b/src/connection.ui index 9a33ed6..6111597 100644 --- a/src/connection.ui +++ b/src/connection.ui @@ -40,6 +40,9 @@ 0 + + + diff --git a/src/main.cpp b/src/main.cpp index 86fb6d8..a11c5ab 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4,14 +4,20 @@ #include "version.h" -#include "precompiled.h" - int main(int argc, char *argv[]) { QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QApplication a(argc, argv); + + QString locale = QLocale::system().name(); + qDebug() << "Loading locale " << locale; + + QTranslator translator; + translator.load(QString(":/translations/res/zec_qt_wallet_") + locale); + a.installTranslator(&translator); + QIcon icon(":/icons/res/icon.ico"); QApplication::setWindowIcon(icon); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index ed46021..48cea1e 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -627,7 +627,7 @@ void MainWindow::importPrivKey() { pui.buttonBox->button(QDialogButtonBox::Save)->setVisible(false); pui.helpLbl->setText(QString() % - "Please paste your private keys (z-Addr or t-Addr) here, one per line.\n" % + tr("Please paste your private keys (z-Addr or t-Addr) here, one per line") % ".\n" % tr("The keys will be imported into your connected zcashd node")); if (d.exec() == QDialog::Accepted && !pui.privKeyTxt->toPlainText().trimmed().isEmpty()) { @@ -667,17 +667,17 @@ void MainWindow::backupWalletDat() { QFile wallet(zcashdir.filePath("wallet.dat")); if (!wallet.exists()) { - QMessageBox::critical(this, "No wallet.dat", tr("Couldn't find the wallet.dat on this computer.\n") + + QMessageBox::critical(this, tr("No wallet.dat"), tr("Couldn't find the wallet.dat on this computer") + "\n" + tr("You need to back it up from the machine zcashd is running on"), QMessageBox::Ok); return; } - QUrl backupName = QFileDialog::getSaveFileUrl(this, "Backup wallet.dat", backupDefaultName, "Data file (*.dat)"); + QUrl backupName = QFileDialog::getSaveFileUrl(this, tr("Backup wallet.dat"), backupDefaultName, "Data file (*.dat)"); if (backupName.isEmpty()) return; if (!wallet.copy(backupName.toLocalFile())) { - QMessageBox::critical(this, "Couldn't backup", tr("Couldn't backup the wallet.dat file.") + + QMessageBox::critical(this, tr("Couldn't backup"), tr("Couldn't backup the wallet.dat file.") + tr("You need to back it up manually."), QMessageBox::Ok); } } diff --git a/src/memodialog.ui b/src/memodialog.ui index f34dc6a..82fccbb 100644 --- a/src/memodialog.ui +++ b/src/memodialog.ui @@ -24,7 +24,7 @@ - 0 / 512 + 0 / 512 Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter diff --git a/src/precompiled.h b/src/precompiled.h index db0c100..59cdc9d 100644 --- a/src/precompiled.h +++ b/src/precompiled.h @@ -15,6 +15,7 @@ #include #include +#include #include #include #include diff --git a/src/privkey.ui b/src/privkey.ui index e2e5395..9fe3760 100644 --- a/src/privkey.ui +++ b/src/privkey.ui @@ -34,7 +34,7 @@ - TextLabel + TextLabel diff --git a/src/rpc.cpp b/src/rpc.cpp index 3ff3eb0..022b225 100644 --- a/src/rpc.cpp +++ b/src/rpc.cpp @@ -347,7 +347,7 @@ void RPC::noConnection() { main->statusIcon->setToolTip(""); main->statusLabel->setText(QObject::tr("No Connection")); main->statusLabel->setToolTip(""); - main->ui->statusBar->showMessage("No Connection", 1000); + main->ui->statusBar->showMessage(QObject::tr("No Connection"), 1000); // Clear balances table. QMap emptyBalances; @@ -572,25 +572,25 @@ void RPC::getInfoThenRefresh(bool force) { } txt = txt % " ( " % QString::number(progress * 100, 'f', 0) % "% )"; ui->blockheight->setText(txt); - ui->heightLabel->setText("Downloading blocks"); + ui->heightLabel->setText(QObject::tr("Downloading blocks")); } else { ui->blockheight->setText(QString::number(blockNumber)); - ui->heightLabel->setText("Block height"); + ui->heightLabel->setText(QObject::tr("Block height")); } } // Update the status bar QString statusText = QString() % - (isSyncing ? "Syncing" : "Connected") % + (isSyncing ? QObject::tr("Syncing") : QObject::tr("Connected")) % " (" % - (Settings::getInstance()->isTestnet() ? "testnet:" : "") % + (Settings::getInstance()->isTestnet() ? QObject::tr("testnet:") : "") % QString::number(blockNumber) % (isSyncing ? ("/" % QString::number(progress*100, 'f', 0) % "%") : QString()) % ")"; main->statusLabel->setText(statusText); auto zecPrice = Settings::getUSDFormat(1); - QString tooltip = "Connected to zcashd";; + QString tooltip = QObject::tr("Connected to zcashd"); if (!zecPrice.isEmpty()) { tooltip = "1 ZEC = " % zecPrice % "\n" % tooltip; } @@ -606,7 +606,7 @@ void RPC::getInfoThenRefresh(bool force) { static bool shown = false; if (!shown && prevCallSucceeded) { // show error only first time shown = true; - QMessageBox::critical(main, "Connection Error", "There was an error connecting to zcashd. The error was: \n\n" + QMessageBox::critical(main, QObject::tr("Connection Error"), QObject::tr("There was an error connecting to zcashd. The error was") + ": \n\n" + reply->errorString(), QMessageBox::StandardButton::Ok); shown = false; } @@ -844,15 +844,15 @@ void RPC::watchTxStatus() { auto errorMsg = QString::fromStdString(it["error"]["message"]); QMessageBox msg( QMessageBox::Critical, - "Transaction Error", - "The transaction with id " % id % " failed. The error was:\n\n" % errorMsg, + QObject::tr("Transaction Error"), + QObject::tr("The transaction with id ") % id % QObject::tr(" failed. The error was") + ":\n\n" + errorMsg, QMessageBox::Ok, main ); watchingOps.remove(id); - main->ui->statusBar->showMessage(" Tx " % id % " failed", 15 * 1000); + main->ui->statusBar->showMessage(QObject::tr(" Tx ") % id % QObject::tr(" failed"), 15 * 1000); main->loadingLabel->setVisible(false); msg.exec(); @@ -871,7 +871,7 @@ void RPC::watchTxStatus() { main->loadingLabel->setVisible(false); } else { main->loadingLabel->setVisible(true); - main->loadingLabel->setToolTip(QString::number(watchingOps.size()) + " tx computing. This can take several minutes."); + main->loadingLabel->setToolTip(QString::number(watchingOps.size()) + QObject::tr(" tx computing. This can take several minutes.")); } }); } @@ -950,8 +950,8 @@ void RPC::shutdownZcashd() { Ui_ConnectionDialog connD; connD.setupUi(&d); connD.topIcon->setBasePixmap(QIcon(":/icons/res/icon.ico").pixmap(256, 256)); - connD.status->setText("Please wait for zec-qt-wallet to exit"); - connD.statusDetail->setText("Waiting for zcashd to exit"); + connD.status->setText(QObject::tr("Please wait for zec-qt-wallet to exit")); + connD.statusDetail->setText(QObject::tr("Waiting for zcashd to exit")); QTimer waiter(main); diff --git a/src/scripts/dotranslations.sh b/src/scripts/dotranslations.sh new file mode 100755 index 0000000..fb7acd2 --- /dev/null +++ b/src/scripts/dotranslations.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +if [ -z $QT_STATIC ]; then + echo "QT_STATIC is not set. Please set it to the base directory of a statically compiled Qt"; + exit 1; +fi + +rm -f res/*.qm +$QT_STATIC/bin/lrelease zec-qt-wallet.pro + +# Then update the qt base translations. First, get all languages +ls res/*.qm | awk -F '[_.]' '{print $4}' | while read -r language ; do + $QT_STATIC/bin/lconvert -o res/zec_$language.qm $QT_STATIC/translations/qtbase_$language.qm res/zec_qt_wallet_$language.qm + mv res/zec_$language.qm res/zec_qt_wallet_$language.qm +done diff --git a/src/scripts/mkmacdmg.sh b/src/scripts/mkmacdmg.sh index 355d9e4..5fe19ed 100755 --- a/src/scripts/mkmacdmg.sh +++ b/src/scripts/mkmacdmg.sh @@ -34,9 +34,14 @@ rm -f artifacts/macOS-zec-qt-wallet-v$APP_VERSION.dmg echo "[OK]" -echo -n "Building..............." +echo -n "Configuring............" # Build +QT_STATIC=$QT_PATH src/scripts/dotranslations.sh >/dev/null $QT_PATH/bin/qmake zec-qt-wallet.pro CONFIG+=release >/dev/null +echo "[OK]" + + +echo -n "Building..............." make -j4 >/dev/null echo "[OK]" diff --git a/src/scripts/mkrelease.sh b/src/scripts/mkrelease.sh index 07bb145..b87fd19 100755 --- a/src/scripts/mkrelease.sh +++ b/src/scripts/mkrelease.sh @@ -59,8 +59,8 @@ echo "" echo "[Building on" `lsb_release -r`"]" echo -n "Configuring............" +QT_STATIC=$QT_STATIC src/scripts/dotranslations.sh >/dev/null $QT_STATIC/bin/qmake zec-qt-wallet.pro -spec linux-clang CONFIG+=release > /dev/null -#Mingw seems to have trouble with precompiled headers, so strip that option from the .pro file echo "[OK]" @@ -89,7 +89,7 @@ cp $ZCASH_DIR/artifacts/zcash-cli bin/zec-qt-wallet-v$APP_VERSION > /dev/null cp README.md bin/zec-qt-wallet-v$APP_VERSION > /dev/null cp LICENSE bin/zec-qt-wallet-v$APP_VERSION > /dev/null -cd bin && tar cvf linux-zec-qt-wallet-v$APP_VERSION.tar.gz zec-qt-wallet-v$APP_VERSION/ > /dev/null +cd bin && tar czf linux-zec-qt-wallet-v$APP_VERSION.tar.gz zec-qt-wallet-v$APP_VERSION/ > /dev/null cd .. mkdir artifacts >/dev/null 2>&1 diff --git a/src/sendtab.cpp b/src/sendtab.cpp index 309e3a5..1950f52 100644 --- a/src/sendtab.cpp +++ b/src/sendtab.cpp @@ -145,7 +145,7 @@ void MainWindow::addAddressSection() { int itemNumber = ui->sendToWidgets->children().size() - 1; auto verticalGroupBox = new QGroupBox(ui->sendToWidgets); - verticalGroupBox->setTitle(QString("Recipient ") % QString::number(itemNumber)); + verticalGroupBox->setTitle(QString(tr("Recipient ")) % QString::number(itemNumber)); verticalGroupBox->setObjectName(QString("AddressGroupBox") % QString::number(itemNumber)); auto sendAddressLayout = new QVBoxLayout(verticalGroupBox); sendAddressLayout->setSpacing(6); @@ -154,12 +154,12 @@ void MainWindow::addAddressSection() { auto horizontalLayout_12 = new QHBoxLayout(); horizontalLayout_12->setSpacing(6); auto label_4 = new QLabel(verticalGroupBox); - label_4->setText("Address"); + label_4->setText(tr("Address")); horizontalLayout_12->addWidget(label_4); auto Address1 = new QLineEdit(verticalGroupBox); Address1->setObjectName(QString("Address") % QString::number(itemNumber)); - Address1->setPlaceholderText("Address"); + Address1->setPlaceholderText(tr("Address")); QObject::connect(Address1, &QLineEdit::textChanged, [=] (auto text) { this->addressChanged(itemNumber, text); }); @@ -169,7 +169,7 @@ void MainWindow::addAddressSection() { auto addressBook1 = new QPushButton(verticalGroupBox); addressBook1->setObjectName(QStringLiteral("AddressBook") % QString::number(itemNumber)); - addressBook1->setText("Address Book"); + addressBook1->setText(tr("Address Book")); QObject::connect(addressBook1, &QPushButton::clicked, [=] () { AddressBook::open(this, Address1); }); @@ -182,11 +182,11 @@ void MainWindow::addAddressSection() { horizontalLayout_13->setSpacing(6); auto label_6 = new QLabel(verticalGroupBox); - label_6->setText("Amount"); + label_6->setText(tr("Amount")); horizontalLayout_13->addWidget(label_6); auto Amount1 = new QLineEdit(verticalGroupBox); - Amount1->setPlaceholderText("Amount"); + Amount1->setPlaceholderText(tr("Amount")); Amount1->setObjectName(QString("Amount") % QString::number(itemNumber)); Amount1->setBaseSize(QSize(200, 0)); // Create the validator for send to/amount fields @@ -207,7 +207,7 @@ void MainWindow::addAddressSection() { auto MemoBtn1 = new QPushButton(verticalGroupBox); MemoBtn1->setObjectName(QString("MemoBtn") % QString::number(itemNumber)); - MemoBtn1->setText("Memo"); + MemoBtn1->setText(tr("Memo")); // Connect Memo Clicked button QObject::connect(MemoBtn1, &QPushButton::clicked, [=] () { this->memoButtonClicked(itemNumber); @@ -251,7 +251,7 @@ void MainWindow::setMemoEnabled(int number, bool enabled) { memoBtn->setToolTip(""); } else { memoBtn->setEnabled(false); - memoBtn->setToolTip("Only z-addresses can have memos"); + memoBtn->setToolTip(tr("Only z-addresses can have memos")); } } @@ -259,8 +259,8 @@ void MainWindow::memoButtonClicked(int number) { // Memos can only be used with zAddrs. So check that first auto addr = ui->sendToWidgets->findChild(QString("Address") + QString::number(number)); if (!AddressBook::addressFromAddressLabel(addr->text()).startsWith("z")) { - QMessageBox msg(QMessageBox::Critical, "Memos can only be used with z-addresses", - "The memo field can only be used with a z-address.\n" + addr->text() + "\ndoesn't look like a z-address", + QMessageBox msg(QMessageBox::Critical, tr("Memos can only be used with z-addresses"), + tr("The memo field can only be used with a z-address.\n") + addr->text() + tr("\ndoesn't look like a z-address"), QMessageBox::Ok, this); msg.exec(); @@ -414,7 +414,7 @@ Tx MainWindow::createTxFromSendPage() { double change = rpc->getAllBalances()->value(tx.fromAddr) - totalAmt - tx.fee; if (Settings::getDecimalString(change) != "0") { - QString changeMemo = "Change from " + tx.fromAddr; + QString changeMemo = tr("Change from ") + tx.fromAddr; tx.toAddrs.push_back(ToFields{ *saplingAddr, change, changeMemo, changeMemo.toUtf8().toHex() }); } } @@ -517,7 +517,7 @@ bool MainWindow::confirmTx(Tx tx) { auto labelMinerFee = new QLabel(confirm.sendToAddrs); labelMinerFee->setObjectName(QStringLiteral("labelMinerFee")); confirm.gridLayout->addWidget(labelMinerFee, row, 0, 1, 1); - labelMinerFee->setText("Miner Fee"); + labelMinerFee->setText(tr("Miner Fee")); auto minerFee = new QLabel(confirm.sendToAddrs); QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); @@ -566,7 +566,7 @@ void MainWindow::sendButton() { QString error = doSendTxValidations(tx); if (!error.isEmpty()) { // Something went wrong, so show an error and exit - QMessageBox msg(QMessageBox::Critical, "Transaction Error", error, + QMessageBox msg(QMessageBox::Critical, tr("Transaction Error"), error, QMessageBox::Ok, this); msg.exec(); @@ -584,7 +584,7 @@ void MainWindow::sendButton() { // And send the Tx rpc->sendZTransaction(params, [=](const json& reply) { QString opid = QString::fromStdString(reply.get()); - ui->statusBar->showMessage("Computing Tx: " % opid); + ui->statusBar->showMessage(tr("Computing Tx: ") % opid); // And then start monitoring the transaction rpc->addNewTxToWatch(tx, opid); @@ -593,12 +593,12 @@ void MainWindow::sendButton() { } QString MainWindow::doSendTxValidations(Tx tx) { - if (!Settings::isValidAddress(tx.fromAddr)) return QString("From Address is Invalid"); + if (!Settings::isValidAddress(tx.fromAddr)) return QString(tr("From Address is Invalid")); for (auto toAddr : tx.toAddrs) { if (!Settings::isValidAddress(toAddr.addr)) { QString addr = (toAddr.addr.length() > 100 ? toAddr.addr.left(100) + "..." : toAddr.addr); - return QString("Recipient Address ") % addr % " is Invalid"; + return QString(tr("Recipient Address ")) % addr % tr(" is Invalid"); } } diff --git a/src/settings.cpp b/src/settings.cpp index fb77c6c..b9e443e 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -166,7 +166,7 @@ QString Settings::getZECUSDDisplayFormat(double bal) { return getZECDisplayFormat(bal); } -const QString Settings::txidStatusMessage = QString("Tx submitted (right click to copy) txid:"); +const QString Settings::txidStatusMessage = QString(QObject::tr("Tx submitted (right click to copy) txid:")); QString Settings::getTokenName() { if (Settings::getInstance()->isTestnet()) { diff --git a/src/settings.ui b/src/settings.ui index d3d633e..a01fc4e 100644 --- a/src/settings.ui +++ b/src/settings.ui @@ -6,10 +6,16 @@ 0 0 - 455 - 391 + 460 + 464 + + + 460 + 464 + + Settings @@ -20,7 +26,7 @@ - 1 + 0 @@ -30,7 +36,7 @@ - <html><head/><body><p><br/></p></body></html> + <html><head/><body><p><br/></p></body></html> Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse diff --git a/src/turnstile.cpp b/src/turnstile.cpp index 95b1bbe..a2e1c2c 100644 --- a/src/turnstile.cpp +++ b/src/turnstile.cpp @@ -116,8 +116,8 @@ void Turnstile::planMigration(QString zaddr, QString destAddr, int numsplits, in if (migItems.empty()) { // Show error and abort QMessageBox::warning(mainwindow, - "Locked funds", - "Could not initiate migration.\nYou either have unconfirmed funds or the balance is too low for an automatic migration."); + QObject::tr("Locked funds"), + QObject::tr("Could not initiate migration.\nYou either have unconfirmed funds or the balance is too low for an automatic migration.")); return; } @@ -357,7 +357,7 @@ void Turnstile::doSendTx(Tx tx, std::function cb) { rpc->sendZTransaction(params, [=] (const json& reply) { QString opid = QString::fromStdString(reply.get()); //qDebug() << opid; - mainwindow->ui->statusBar->showMessage("Computing Tx: " % opid); + mainwindow->ui->statusBar->showMessage(QObject::tr("Computing Tx: ") % opid); // And then start monitoring the transaction rpc->addNewTxToWatch(tx, opid); diff --git a/src/turnstile.ui b/src/turnstile.ui index e39a1f7..378bfa9 100644 --- a/src/turnstile.ui +++ b/src/turnstile.ui @@ -159,7 +159,7 @@ - 0.0004 ZEC $0.04 + 0.0004 ZEC $0.04 Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter diff --git a/src/turnstileprogress.ui b/src/turnstileprogress.ui index 692630b..d52b72e 100644 --- a/src/turnstileprogress.ui +++ b/src/turnstileprogress.ui @@ -31,14 +31,14 @@ - From Address + From Address - 4 / 12 + 4 / 12 Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -111,7 +111,7 @@ - TextLabel + TextLabel Qt::AlignCenter @@ -141,7 +141,7 @@ - To Address + To Address diff --git a/src/txtablemodel.cpp b/src/txtablemodel.cpp index 7f9ecd3..d610b47 100644 --- a/src/txtablemodel.cpp +++ b/src/txtablemodel.cpp @@ -4,7 +4,7 @@ TxTableModel::TxTableModel(QObject *parent) : QAbstractTableModel(parent) { - headers << "Type" << "Address" << "Date/Time" << "Amount"; + headers << QObject::tr("Type") << QObject::tr("Address") << QObject::tr("Date/Time") << QObject::tr("Amount"); } TxTableModel::~TxTableModel() { diff --git a/src/version.h b/src/version.h index 87d67c8..5d78b32 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define APP_VERSION "0.4.3" +#define APP_VERSION "0.5.0" diff --git a/src/zboard.ui b/src/zboard.ui index 8a16047..b21db5e 100644 --- a/src/zboard.ui +++ b/src/zboard.ui @@ -24,7 +24,7 @@ - feeamount + feeamount Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -34,7 +34,7 @@ - 0 / 512 + 0 / 512 Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -104,7 +104,7 @@ color:red; - TextLabel + Warning diff --git a/zec-qt-wallet.pro b/zec-qt-wallet.pro index dde32bf..deadd17 100644 --- a/zec-qt-wallet.pro +++ b/zec-qt-wallet.pro @@ -86,9 +86,15 @@ FORMS += \ src/zboard.ui \ src/addressbook.ui + +TRANSLATIONS = res/zec_qt_wallet_es.ts \ + res/zec_qt_wallet_fr.ts \ + res/zec_qt_wallet_de.ts + win32: RC_ICONS = res/icon.ico ICON = res/logo.icns + # Default rules for deployment. qnx: target.path = /tmp/$${TARGET}/bin else: unix:!android: target.path = /opt/$${TARGET}/bin