Merge branch 'master' of https://github.com/bitpay/copay into feat/balance-modal

This commit is contained in:
Andy Phillipson 2016-12-13 17:49:09 -05:00
commit 58478b8113
60 changed files with 4747 additions and 2908 deletions

View File

@ -9,9 +9,9 @@
"nameNoSpace": "bitpay", "nameNoSpace": "bitpay",
"nameCase": "BitPay", "nameCase": "BitPay",
"nameCaseNoSpace": "BitPay", "nameCaseNoSpace": "BitPay",
"gitHubRepoName": "bitpay-wallet", "gitHubRepoName": "copay",
"gitHubRepoUrl": "git://github.com/bitpay/bitpay-wallet.git", "gitHubRepoUrl": "git://github.com/bitpay/copay.git",
"gitHubRepoBugs": "https://github.com/bitpay/bitpay-wallet/issues", "gitHubRepoBugs": "https://github.com/bitpay/copay/issues",
"disclaimerUrl": "", "disclaimerUrl": "",
"url": "https://bitpay.com", "url": "https://bitpay.com",
"appDescription": "Secure Bitcoin Wallet", "appDescription": "Secure Bitcoin Wallet",
@ -21,7 +21,7 @@
"windowsAppId": "", "windowsAppId": "",
"pushSenderId": "1036948132229", "pushSenderId": "1036948132229",
"description": "Secure Bitcoin Wallet", "description": "Secure Bitcoin Wallet",
"version": "1.1.0", "version": "1.2.0",
"androidVersion": "1", "androidVersion": "1",
"_extraCSS": null, "_extraCSS": null,
"_enabledExtensions": { "_enabledExtensions": {

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -22,7 +22,7 @@ msgstr ""
msgid "5-star ratings help us get BitPay into more hands, and more users means more resources can be committed to the app!" msgid "5-star ratings help us get BitPay into more hands, and more users means more resources can be committed to the app!"
msgstr "" msgstr ""
#: src/js/controllers/confirm.js:450 #: src/js/controllers/confirm.js:455
msgid "A SMS containing a confirmation code was sent to your phone." msgid "A SMS containing a confirmation code was sent to your phone."
msgstr "" msgstr ""
@ -31,16 +31,16 @@ msgstr ""
msgid "A member of the team will review your feedback as soon as possible." msgid "A member of the team will review your feedback as soon as possible."
msgstr "" msgstr ""
#: src/js/controllers/confirm.js:208 #: src/js/controllers/confirm.js:213
msgid "A total of {{amountAboveMaxSizeStr}} were excluded. The maximum size allowed for a transaction was exceeded." msgid "A total of {{amountAboveMaxSizeStr}} were excluded. The maximum size allowed for a transaction was exceeded."
msgstr "" msgstr ""
#: src/js/controllers/confirm.js:202 #: src/js/controllers/confirm.js:207
msgid "A total of {{amountBelowFeeStr}} were excluded. These funds come from UTXOs smaller than the network fee provided." msgid "A total of {{amountBelowFeeStr}} were excluded. These funds come from UTXOs smaller than the network fee provided."
msgstr "" msgstr ""
#: src/js/controllers/preferencesAbout.js:6 #: src/js/controllers/preferencesAbout.js:6
#: www/views/tab-settings.html:161 #: www/views/tab-settings.html:149
msgid "About" msgid "About"
msgstr "" msgstr ""
@ -89,7 +89,7 @@ msgstr ""
msgid "Add Funds" msgid "Add Funds"
msgstr "" msgstr ""
#: www/views/confirm.html:71 #: www/views/confirm.html:72
msgid "Add Memo" msgid "Add Memo"
msgstr "" msgstr ""
@ -112,7 +112,7 @@ msgstr ""
msgid "Add an optional password to secure the recovery phrase" msgid "Add an optional password to secure the recovery phrase"
msgstr "" msgstr ""
#: src/js/controllers/confirm.js:262 #: src/js/controllers/confirm.js:267
msgid "Add description" msgid "Add description"
msgstr "" msgstr ""
@ -140,7 +140,7 @@ msgstr ""
msgid "Addresses With Balance" msgid "Addresses With Balance"
msgstr "" msgstr ""
#: www/views/tab-settings.html:154 #: www/views/tab-settings.html:142
msgid "Advanced" msgid "Advanced"
msgstr "" msgstr ""
@ -173,7 +173,7 @@ msgid "Almost done! Let's review."
msgstr "" msgstr ""
#: www/views/preferencesAltCurrency.html:4 #: www/views/preferencesAltCurrency.html:4
#: www/views/tab-settings.html:83 #: www/views/tab-settings.html:81
msgid "Alternative Currency" msgid "Alternative Currency"
msgstr "" msgstr ""
@ -192,10 +192,26 @@ msgstr ""
msgid "Amount below minimum allowed" msgid "Amount below minimum allowed"
msgstr "" msgstr ""
#: src/js/controllers/confirm.js:382
msgid "Amount too big"
msgstr ""
#: www/views/tab-home.html:14 #: www/views/tab-home.html:14
msgid "An update to this app is available" msgid "An update to this app is available"
msgstr "" msgstr ""
#: src/js/controllers/tab-home.js:133
msgid "An update to this app is available. For your security, please update to the latest version."
msgstr ""
#: www/views/backupWarning.html:14
msgid "Anyone with your backup phrase can access or spend your bitcoin."
msgstr ""
#: www/views/backupWarning.html:10
msgid "Are you being watched?"
msgstr ""
#: src/js/controllers/copayers.js:43 #: src/js/controllers/copayers.js:43
msgid "Are you sure you want to cancel and delete this wallet?" msgid "Are you sure you want to cancel and delete this wallet?"
msgstr "" msgstr ""
@ -237,10 +253,6 @@ msgstr ""
msgid "Average confirmation time: <span class=\"fee-minutes\">{{fee.nbBlocks * 10}} minutes</span>" msgid "Average confirmation time: <span class=\"fee-minutes\">{{fee.nbBlocks * 10}} minutes</span>"
msgstr "" msgstr ""
#: www/views/includes/terms.html:47
msgid "BINDING AGREEMENT"
msgstr ""
#: www/views/join.html:118 #: www/views/join.html:118
#: www/views/tab-create-personal.html:85 #: www/views/tab-create-personal.html:85
#: www/views/tab-create-shared.html:115 #: www/views/tab-create-shared.html:115
@ -281,8 +293,8 @@ msgstr ""
msgid "Be sure to store your recovery phrase in a secure place. If this app is deleted, your money cannot be recovered without it." msgid "Be sure to store your recovery phrase in a secure place. If this app is deleted, your money cannot be recovered without it."
msgstr "" msgstr ""
#: www/views/includes/terms.html:8 #: src/js/controllers/tab-settings.js:52
msgid "BitPay provides the Software solely on the terms and conditions set forth in this Agreement and on the condition that You accept and comply with them. By using the Software You (a) accept this Agreement and agree that You are legally bound by its terms; and (b) represent and warrant that: (i) You are of legal age to enter into a binding agreement; and (ii) if You are a corporation, governmental organization or other legal entity, You have the right, power and authority to enter into this Agreement on behalf of the corporation, governmental organization or other legal entity and bind them to these terms." msgid "BitPay Help Center"
msgstr "" msgstr ""
#: www/views/addressbook.add.html:38 #: www/views/addressbook.add.html:38
@ -294,7 +306,7 @@ msgid "Bitcoin Exchanges"
msgstr "" msgstr ""
#: www/views/preferencesFee.html:4 #: www/views/preferencesFee.html:4
#: www/views/tab-settings.html:94 #: www/views/tab-settings.html:92
msgid "Bitcoin Network Fee Policy" msgid "Bitcoin Network Fee Policy"
msgstr "" msgstr ""
@ -302,7 +314,7 @@ msgstr ""
msgid "Bitcoin URI is NOT valid!" msgid "Bitcoin URI is NOT valid!"
msgstr "" msgstr ""
#: www/views/tab-settings.html:72 #: www/views/tab-settings.html:70
msgid "Bitcoin Unit" msgid "Bitcoin Unit"
msgstr "" msgstr ""
@ -363,15 +375,11 @@ msgstr ""
msgid "Buying Bitcoin..." msgid "Buying Bitcoin..."
msgstr "" msgstr ""
#: www/views/includes/terms.html:35
msgid "CHOICE OF LAW"
msgstr ""
#: src/js/services/onGoingProcess.js:11 #: src/js/services/onGoingProcess.js:11
msgid "Calculating fee" msgid "Calculating fee"
msgstr "" msgstr ""
#: src/js/controllers/confirm.js:506 #: src/js/controllers/confirm.js:511
#: src/js/services/confirmDialog.js:9 #: src/js/services/confirmDialog.js:9
#: src/js/services/popupService.js:58 #: src/js/services/popupService.js:58
#: www/views/addressbook.add.html:10 #: www/views/addressbook.add.html:10
@ -391,7 +399,7 @@ msgstr ""
msgid "Cannot join the same wallet more that once" msgid "Cannot join the same wallet more that once"
msgstr "" msgstr ""
#: src/js/controllers/amazon.js:25 #: src/js/controllers/amazon.js:27
msgid "Card not found" msgid "Card not found"
msgstr "" msgstr ""
@ -404,10 +412,6 @@ msgstr ""
msgid "Certified by" msgid "Certified by"
msgstr "" msgstr ""
#: www/views/translators.html:18
msgid "Chinese"
msgstr ""
#: www/views/tab-import-file.html:4 #: www/views/tab-import-file.html:4
msgid "Choose a backup file from your computer" msgid "Choose a backup file from your computer"
msgstr "" msgstr ""
@ -441,7 +445,7 @@ msgstr ""
msgid "Commit hash" msgid "Commit hash"
msgstr "" msgstr ""
#: src/js/controllers/confirm.js:505 #: src/js/controllers/confirm.js:510
#: src/js/controllers/copayers.js:42 #: src/js/controllers/copayers.js:42
#: src/js/services/confirmDialog.js:10 #: src/js/services/confirmDialog.js:10
#: www/views/backup.html:53 #: www/views/backup.html:53
@ -456,7 +460,8 @@ msgstr ""
msgid "Confirm &amp; Finish" msgid "Confirm &amp; Finish"
msgstr "" msgstr ""
#: src/js/services/walletService.js:839 #: src/js/services/walletService.js:840
#: src/js/services/walletService.js:841
msgid "Confirm you new spending password" msgid "Confirm you new spending password"
msgstr "" msgstr ""
@ -497,8 +502,8 @@ msgstr ""
msgid "Continue" msgid "Continue"
msgstr "" msgstr ""
#: www/views/preferencesLanguage.html:17 #: www/views/preferencesLanguage.html:26
#: www/views/translators.html:25 #: www/views/translators.html:33
msgid "Contribute Translations" msgid "Contribute Translations"
msgstr "" msgstr ""
@ -545,6 +550,10 @@ msgstr ""
msgid "Could not access wallet" msgid "Could not access wallet"
msgstr "" msgstr ""
#: src/js/controllers/confirm.js:376
msgid "Could not add message to imported wallet without shared encrypting key"
msgstr ""
#: src/js/controllers/modals/txpDetails.js:172 #: src/js/controllers/modals/txpDetails.js:172
msgid "Could not broadcast payment" msgid "Could not broadcast payment"
msgstr "" msgstr ""
@ -585,7 +594,7 @@ msgstr ""
msgid "Could not get dynamic fee for level: {{feeLevel}}" msgid "Could not get dynamic fee for level: {{feeLevel}}"
msgstr "" msgstr ""
#: src/js/controllers/confirm.js:651 #: src/js/controllers/confirm.js:656
msgid "Could not get the destination bitcoin address" msgid "Could not get the destination bitcoin address"
msgstr "" msgstr ""
@ -616,7 +625,7 @@ msgstr ""
msgid "Could not remove card" msgid "Could not remove card"
msgstr "" msgstr ""
#: src/js/controllers/confirm.js:445 #: src/js/controllers/confirm.js:450
msgid "Could not send confirmation code to your phone" msgid "Could not send confirmation code to your phone"
msgstr "" msgstr ""
@ -624,14 +633,10 @@ msgstr ""
msgid "Could not send payment" msgid "Could not send payment"
msgstr "" msgstr ""
#: src/js/controllers/tab-home.js:200 #: src/js/controllers/tab-home.js:206
msgid "Could not update" msgid "Could not update"
msgstr "" msgstr ""
#: src/js/services/walletService.js:147
msgid "Could not update Wallet"
msgstr ""
#: www/views/tab-create-personal.html:3 #: www/views/tab-create-personal.html:3
msgid "Create Personal Wallet" msgid "Create Personal Wallet"
msgstr "" msgstr ""
@ -644,6 +649,7 @@ msgstr ""
msgid "Create a bitcoin wallet" msgid "Create a bitcoin wallet"
msgstr "" msgstr ""
#: www/views/onboarding/tour.html:46
#: www/views/tab-send.html:16 #: www/views/tab-send.html:16
msgid "Create bitcoin wallet" msgid "Create bitcoin wallet"
msgstr "" msgstr ""
@ -681,14 +687,6 @@ msgstr ""
msgid "Custom Amount" msgid "Custom Amount"
msgstr "" msgstr ""
#: www/views/translators.html:20
msgid "Czech"
msgstr ""
#: www/views/includes/terms.html:20
msgid "DISCLAIMER"
msgstr ""
#: www/views/preferencesDeleteWallet.html:21 #: www/views/preferencesDeleteWallet.html:21
msgid "Delete" msgid "Delete"
msgstr "" msgstr ""
@ -739,8 +737,8 @@ msgstr ""
msgid "Do not include private key" msgid "Do not include private key"
msgstr "" msgstr ""
#: www/views/preferencesLanguage.html:20 #: www/views/preferencesLanguage.html:21
#: www/views/translators.html:29 #: www/views/translators.html:28
msgid "Don't see your language on Crowdin? Contact the Owner on Crowdin! We'd love to support your language." msgid "Don't see your language on Crowdin? Contact the Owner on Crowdin! We'd love to support your language."
msgstr "" msgstr ""
@ -749,7 +747,7 @@ msgid "Download"
msgstr "" msgstr ""
#: www/views/addresses.html:23 #: www/views/addresses.html:23
msgid "Each bitcoin wallet can generate billions of addresses from your 12-word backup. A new address is automatically generated and shown each time your recive a payment." msgid "Each bitcoin wallet can generate billions of addresses from your 12-word backup. A new address is automatically generated and shown each time you receive a payment."
msgstr "" msgstr ""
#: src/js/services/feeService.js:10 #: src/js/services/feeService.js:10
@ -815,8 +813,8 @@ msgstr ""
msgid "Enter Amount" msgid "Enter Amount"
msgstr "" msgstr ""
#: src/js/services/walletService.js:852 #: src/js/services/walletService.js:854
#: src/js/services/walletService.js:867 #: src/js/services/walletService.js:869
msgid "Enter Spending Password" msgid "Enter Spending Password"
msgstr "" msgstr ""
@ -851,36 +849,36 @@ msgstr ""
#: src/js/controllers/addresses.js:84 #: src/js/controllers/addresses.js:84
#: src/js/controllers/addresses.js:85 #: src/js/controllers/addresses.js:85
#: src/js/controllers/amazon.js:15 #: src/js/controllers/amazon.js:15
#: src/js/controllers/amazon.js:25 #: src/js/controllers/amazon.js:27
#: src/js/controllers/amazon.js:46 #: src/js/controllers/amazon.js:48
#: src/js/controllers/amazon.js:66 #: src/js/controllers/amazon.js:68
#: src/js/controllers/amount.js:249 #: src/js/controllers/amount.js:265
#: src/js/controllers/amount.js:256 #: src/js/controllers/amount.js:272
#: src/js/controllers/amount.js:264 #: src/js/controllers/amount.js:280
#: src/js/controllers/amount.js:293 #: src/js/controllers/amount.js:309
#: src/js/controllers/amount.js:306
#: src/js/controllers/amount.js:313
#: src/js/controllers/amount.js:322 #: src/js/controllers/amount.js:322
#: src/js/controllers/amount.js:329
#: src/js/controllers/amount.js:338
#: src/js/controllers/bitpayCard.js:145 #: src/js/controllers/bitpayCard.js:145
#: src/js/controllers/bitpayCard.js:68 #: src/js/controllers/bitpayCard.js:68
#: src/js/controllers/bitpayCardIntro.js:27 #: src/js/controllers/bitpayCardIntro.js:27
#: src/js/controllers/confirm.js:148 #: src/js/controllers/confirm.js:153
#: src/js/controllers/confirm.js:161 #: src/js/controllers/confirm.js:166
#: src/js/controllers/confirm.js:167 #: src/js/controllers/confirm.js:172
#: src/js/controllers/confirm.js:445 #: src/js/controllers/confirm.js:450
#: src/js/controllers/confirm.js:456 #: src/js/controllers/confirm.js:461
#: src/js/controllers/confirm.js:468 #: src/js/controllers/confirm.js:473
#: src/js/controllers/confirm.js:617 #: src/js/controllers/confirm.js:622
#: src/js/controllers/confirm.js:645 #: src/js/controllers/confirm.js:650
#: src/js/controllers/confirm.js:651 #: src/js/controllers/confirm.js:656
#: src/js/controllers/confirm.js:679 #: src/js/controllers/confirm.js:684
#: src/js/controllers/confirm.js:685 #: src/js/controllers/confirm.js:690
#: src/js/controllers/confirm.js:692 #: src/js/controllers/confirm.js:697
#: src/js/controllers/confirm.js:699 #: src/js/controllers/confirm.js:704
#: src/js/controllers/confirm.js:717 #: src/js/controllers/confirm.js:722
#: src/js/controllers/confirm.js:736 #: src/js/controllers/confirm.js:741
#: src/js/controllers/confirm.js:750 #: src/js/controllers/confirm.js:755
#: src/js/controllers/confirm.js:793 #: src/js/controllers/confirm.js:798
#: src/js/controllers/copayers.js:54 #: src/js/controllers/copayers.js:54
#: src/js/controllers/create.js:101 #: src/js/controllers/create.js:101
#: src/js/controllers/create.js:129 #: src/js/controllers/create.js:129
@ -933,14 +931,14 @@ msgstr ""
#: src/js/controllers/preferencesDelete.js:22 #: src/js/controllers/preferencesDelete.js:22
#: src/js/controllers/preferencesFee.js:9 #: src/js/controllers/preferencesFee.js:9
#: src/js/controllers/preferencesGlidera.js:60 #: src/js/controllers/preferencesGlidera.js:60
#: src/js/controllers/tab-home.js:154 #: src/js/controllers/tab-home.js:160
#: src/js/controllers/tab-receive.js:24 #: src/js/controllers/tab-receive.js:24
#: src/js/controllers/tabsController.js:7 #: src/js/controllers/tabsController.js:7
#: src/js/controllers/tx-details.js:18 #: src/js/controllers/tx-details.js:18
msgid "Error" msgid "Error"
msgstr "" msgstr ""
#: src/js/controllers/confirm.js:349 #: src/js/controllers/confirm.js:354
msgid "Error at confirm" msgid "Error at confirm"
msgstr "" msgstr ""
@ -964,8 +962,8 @@ msgstr ""
msgid "Experimental Features" msgid "Experimental Features"
msgstr "" msgstr ""
#: src/js/controllers/confirm.js:307 #: src/js/controllers/confirm.js:312
#: www/views/confirm.html:29 #: www/views/confirm.html:30
#: www/views/modals/txp-details.html:114 #: www/views/modals/txp-details.html:114
msgid "Expired" msgid "Expired"
msgstr "" msgstr ""
@ -988,7 +986,7 @@ msgstr ""
msgid "Export wallet" msgid "Export wallet"
msgstr "" msgstr ""
#: src/js/services/walletService.js:999 #: src/js/services/walletService.js:1000
#: www/views/tab-export-qrCode.html:9 #: www/views/tab-export-qrCode.html:9
msgid "Exporting via QR not supported for this wallet" msgid "Exporting via QR not supported for this wallet"
msgstr "" msgstr ""
@ -1014,16 +1012,13 @@ msgstr ""
msgid "Family vacation funds" msgid "Family vacation funds"
msgstr "" msgstr ""
#: www/views/confirm.html:79
#: www/views/includes/confirm-tx.html:19 #: www/views/includes/confirm-tx.html:19
#: www/views/modals/txp-details.html:95 #: www/views/modals/txp-details.html:95
#: www/views/tx-details.html:71 #: www/views/tx-details.html:71
msgid "Fee" msgid "Fee"
msgstr "" msgstr ""
#: www/views/confirm.html:78
msgid "Fee: {{feeLevel}}"
msgstr ""
#: src/js/controllers/feedback/send.js:23 #: src/js/controllers/feedback/send.js:23
msgid "Feedback could not be submitted. Please try again later." msgid "Feedback could not be submitted. Please try again later."
msgstr "" msgstr ""
@ -1060,8 +1055,8 @@ msgstr ""
msgid "French" msgid "French"
msgstr "" msgstr ""
#: www/views/confirm.html:59 #: www/views/confirm.html:60
#: www/views/confirm.html:61 #: www/views/confirm.html:62
#: www/views/modals/txp-details.html:74 #: www/views/modals/txp-details.html:74
#: www/views/tx-details.html:48 #: www/views/tx-details.html:48
msgid "From" msgid "From"
@ -1091,10 +1086,6 @@ msgstr ""
msgid "Generating new address..." msgid "Generating new address..."
msgstr "" msgstr ""
#: www/views/translators.html:14
msgid "German"
msgstr ""
#: www/views/bitpayCardIntro.html:23 #: www/views/bitpayCardIntro.html:23
msgid "Get local cash anywhere you go, from any Visa<sup>&reg;</sup> compatible ATM. ATM bank fees may apply." msgid "Get local cash anywhere you go, from any Visa<sup>&reg;</sup> compatible ATM. ATM bank fees may apply."
msgstr "" msgstr ""
@ -1119,6 +1110,16 @@ msgstr ""
msgid "Glidera Inc. (Glidera) is providing the service of buying or selling bitcoin to BitPay users. To enable this service, Glidera has registered with US Treasury Departments FinCEN as a Money Service Business (#31000042625755). Users of BitPay must agree to the service agreement presented by Glidera prior to obtaining Glideras service of buying or selling bitcoin." msgid "Glidera Inc. (Glidera) is providing the service of buying or selling bitcoin to BitPay users. To enable this service, Glidera has registered with US Treasury Departments FinCEN as a Money Service Business (#31000042625755). Users of BitPay must agree to the service agreement presented by Glidera prior to obtaining Glideras service of buying or selling bitcoin."
msgstr "" msgstr ""
#: src/js/controllers/onboarding/terms.js:23
#: src/js/controllers/preferencesAbout.js:15
#: src/js/controllers/preferencesLanguage.js:14
#: src/js/controllers/tab-home.js:135
#: src/js/controllers/tab-settings.js:55
#: src/js/controllers/translators.js:11
#: src/js/controllers/tx-details.js:128
msgid "Go Back"
msgstr ""
#: src/js/controllers/bitpayCardIntro.js:35 #: src/js/controllers/bitpayCardIntro.js:35
#: src/js/controllers/onboarding/backupRequest.js:13 #: src/js/controllers/onboarding/backupRequest.js:13
#: src/js/controllers/onboarding/backupRequest.js:19 #: src/js/controllers/onboarding/backupRequest.js:19
@ -1131,6 +1132,10 @@ msgstr ""
msgid "Got it" msgid "Got it"
msgstr "" msgstr ""
#: www/views/onboarding/tour.html:18
msgid "Got it &rarr;"
msgstr ""
#: www/views/preferences.html:20 #: www/views/preferences.html:20
#: www/views/preferencesInformation.html:47 #: www/views/preferencesInformation.html:47
msgid "Hardware Wallet" msgid "Hardware Wallet"
@ -1145,7 +1150,11 @@ msgid "Have the OAuth Code?"
msgstr "" msgstr ""
#: www/views/tab-settings.html:27 #: www/views/tab-settings.html:27
msgid "Help &amp; Support" msgid "Help & Support"
msgstr ""
#: src/js/controllers/tab-settings.js:53
msgid "Help and support information is available at the BitPay Help Center website. Would you like to go there now?"
msgstr "" msgstr ""
#: www/views/addresses.html:29 #: www/views/addresses.html:29
@ -1166,6 +1175,10 @@ msgstr ""
msgid "Hide advanced options" msgid "Hide advanced options"
msgstr "" msgstr ""
#: www/views/tabs.html:3
msgid "Home"
msgstr ""
#: src/js/controllers/feedback/send.js:55 #: src/js/controllers/feedback/send.js:55
#: src/js/controllers/feedback/send.js:59 #: src/js/controllers/feedback/send.js:59
#: src/js/controllers/feedback/send.js:63 #: src/js/controllers/feedback/send.js:63
@ -1228,18 +1241,6 @@ msgstr ""
msgid "I've written it down" msgid "I've written it down"
msgstr "" msgstr ""
#: www/views/includes/terms.html:17
msgid "IF YOU LOSE ACCESS TO YOUR BITCOIN WALLET OR YOUR ENCRYPTED PRIVATE KEYS AND YOU HAVE NOT SEPARATELY STORED A BACKUP OF YOUR WALLET AND CORRESPONDING PASSWORD, YOU ACKNOWLEDGE AND AGREE THAT ANY BITCOIN YOU HAVE ASSOCIATED WITH THAT WALLET WILL BECOME INACCESSIBLE. All transaction requests are irreversible. The authors of the Software, employees and affiliates of BitPay, copyright holders, and BitPay, Inc. cannot retrieve Your private keys or passwords if You lose or forget them and cannot guarantee transaction confirmation as they do not have control over the bitcoin network."
msgstr ""
#: www/views/includes/terms.html:26
msgid "IN NO EVENT WILL BITPAY OR ITS AFFILIATES, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO YOU OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES."
msgstr ""
#: www/views/includes/terms.html:29
msgid "INTELLECTUAL PROPERTY"
msgstr ""
#: www/views/advancedSettings.html:50 #: www/views/advancedSettings.html:50
msgid "If enabled, the Recent Transactions card - a list of transactions occuring across all wallets - will appear in the Home tab." msgid "If enabled, the Recent Transactions card - a list of transactions occuring across all wallets - will appear in the Home tab."
msgstr "" msgstr ""
@ -1289,13 +1290,9 @@ msgstr ""
msgid "In order to verify your wallet backup, please type your password." msgid "In order to verify your wallet backup, please type your password."
msgstr "" msgstr ""
#: www/views/includes/terms.html:44
msgid "In the event any court shall declare any section or sections of this Agreement invalid or void, such declaration shall not invalidate the entire Agreement and all other paragraphs of the Agreement shall remain in full force and effect."
msgstr ""
#: www/views/includes/walletSelector.html:18 #: www/views/includes/walletSelector.html:18
#: www/views/tab-home.html:79 #: www/views/tab-home.html:79
#: www/views/tab-settings.html:115 #: www/views/tab-settings.html:114
msgid "Incomplete" msgid "Incomplete"
msgstr "" msgstr ""
@ -1313,7 +1310,7 @@ msgid "Incorrect code format"
msgstr "" msgstr ""
#: src/js/services/bwcError.js:44 #: src/js/services/bwcError.js:44
#: www/views/confirm.html:115 #: www/views/confirm.html:116
msgid "Insufficient funds" msgid "Insufficient funds"
msgstr "" msgstr ""
@ -1370,14 +1367,6 @@ msgstr ""
msgid "It's important that you write your backup phrase down correctly. If something happens to your wallet, you'll need this backup to recover your money. Please review your backup and try again." msgid "It's important that you write your backup phrase down correctly. If something happens to your wallet, you'll need this backup to recover your money. Please review your backup and try again."
msgstr "" msgstr ""
#: www/views/translators.html:17
msgid "Italian"
msgstr ""
#: www/views/translators.html:12
msgid "Japanese"
msgstr ""
#: www/views/join.html:18 #: www/views/join.html:18
msgid "John" msgid "John"
msgstr "" msgstr ""
@ -1408,6 +1397,7 @@ msgid "Key already associated with an existing wallet"
msgstr "" msgstr ""
#: www/views/preferencesLanguage.html:4 #: www/views/preferencesLanguage.html:4
#: www/views/tab-settings.html:60
msgid "Language" msgid "Language"
msgstr "" msgstr ""
@ -1435,6 +1425,10 @@ msgstr ""
msgid "Make a payment to" msgid "Make a payment to"
msgstr "" msgstr ""
#: www/views/onboarding/tour.html:33
msgid "Makes sense &rarr;"
msgstr ""
#: src/js/controllers/modals/search.js:61 #: src/js/controllers/modals/search.js:61
msgid "Matches:" msgid "Matches:"
msgstr "" msgstr ""
@ -1557,11 +1551,11 @@ msgstr ""
msgid "No transactions yet" msgid "No transactions yet"
msgstr "" msgstr ""
#: src/js/controllers/amount.js:293 #: src/js/controllers/amount.js:309
msgid "No wallet found!" msgid "No wallet found!"
msgstr "" msgstr ""
#: www/views/confirm.html:112 #: www/views/confirm.html:113
msgid "No wallets available" msgid "No wallets available"
msgstr "" msgstr ""
@ -1577,7 +1571,7 @@ msgstr ""
msgid "Not authorized" msgid "Not authorized"
msgstr "" msgstr ""
#: src/js/controllers/confirm.js:167 #: src/js/controllers/confirm.js:172
msgid "Not enough funds for fee" msgid "Not enough funds for fee"
msgstr "" msgstr ""
@ -1612,6 +1606,10 @@ msgstr ""
msgid "Now is a good time to backup your wallet. If this device is lost, it is impossible to access your funds without a backup." msgid "Now is a good time to backup your wallet. If this device is lost, it is impossible to access your funds without a backup."
msgstr "" msgstr ""
#: www/views/backupWarning.html:11
msgid "Now is a perfect time to assess your surroundings. Nearby windows? Hidden cameras? Shoulder-spies?"
msgstr ""
#: src/js/services/popupService.js:15 #: src/js/services/popupService.js:15
#: src/js/services/popupService.js:57 #: src/js/services/popupService.js:57
msgid "OK" msgid "OK"
@ -1637,6 +1635,36 @@ msgstr ""
msgid "On this screen you can see all your wallets, accounts, and assets." msgid "On this screen you can see all your wallets, accounts, and assets."
msgstr "" msgstr ""
#: src/js/controllers/preferencesLanguage.js:13
#: src/js/controllers/translators.js:10
msgid "Open Crowdin"
msgstr ""
#: src/js/controllers/preferencesAbout.js:14
msgid "Open GitHub"
msgstr ""
#: src/js/controllers/preferencesAbout.js:12
msgid "Open GitHub Project"
msgstr ""
#: src/js/controllers/tab-settings.js:54
msgid "Open Help Center"
msgstr ""
#: src/js/controllers/tx-details.js:127
msgid "Open Insight"
msgstr ""
#: src/js/controllers/preferencesLanguage.js:11
#: src/js/controllers/translators.js:8
msgid "Open Translation Community"
msgstr ""
#: src/js/controllers/onboarding/terms.js:22
msgid "Open Website"
msgstr ""
#: www/views/tab-receive.html:41 #: www/views/tab-receive.html:41
msgid "Open wallet" msgid "Open wallet"
msgstr "" msgstr ""
@ -1674,7 +1702,7 @@ msgstr ""
msgid "Payment Accepted" msgid "Payment Accepted"
msgstr "" msgstr ""
#: www/views/confirm.html:27 #: www/views/confirm.html:28
msgid "Payment Expires:" msgid "Payment Expires:"
msgstr "" msgstr ""
@ -1774,7 +1802,7 @@ msgstr ""
msgid "Please upgrade Copay to perform this action" msgid "Please upgrade Copay to perform this action"
msgstr "" msgstr ""
#: src/js/controllers/confirm.js:449 #: src/js/controllers/confirm.js:454
msgid "Please, enter the code below" msgid "Please, enter the code below"
msgstr "" msgstr ""
@ -1782,10 +1810,6 @@ msgstr ""
msgid "Please, select your backup file" msgid "Please, select your backup file"
msgstr "" msgstr ""
#: www/views/translators.html:19
msgid "Polish"
msgstr ""
#: www/views/tab-settings.html:47 #: www/views/tab-settings.html:47
msgid "Preferences" msgid "Preferences"
msgstr "" msgstr ""
@ -1851,10 +1875,6 @@ msgstr ""
msgid "Quick review!" msgid "Quick review!"
msgstr "" msgstr ""
#: www/views/includes/terms.html:5
msgid "RIGHTS AND OBLIGATIONS"
msgstr ""
#: src/js/controllers/create.js:70 #: src/js/controllers/create.js:70
#: src/js/controllers/join.js:53 #: src/js/controllers/join.js:53
msgid "Random" msgid "Random"
@ -1873,6 +1893,7 @@ msgid "Read more"
msgstr "" msgstr ""
#: www/views/tab-receive.html:3 #: www/views/tab-receive.html:3
#: www/views/tabs.html:7
msgid "Receive" msgid "Receive"
msgstr "" msgstr ""
@ -1885,7 +1906,12 @@ msgstr ""
msgid "Received Funds" msgid "Received Funds"
msgstr "" msgstr ""
#: www/views/walletDetails.html:242
msgid "Receiving"
msgstr ""
#: www/views/bitpayCard.html:55 #: www/views/bitpayCard.html:55
#: www/views/walletDetails.html:199
msgid "Recent" msgid "Recent"
msgstr "" msgstr ""
@ -1973,18 +1999,10 @@ msgstr ""
msgid "Retry" msgid "Retry"
msgstr "" msgstr ""
#: www/views/translators.html:16
msgid "Russian"
msgstr ""
#: www/views/includes/password.html:31 #: www/views/includes/password.html:31
msgid "SET" msgid "SET"
msgstr "" msgstr ""
#: www/views/includes/terms.html:41
msgid "SEVERABILITY"
msgstr ""
#: www/views/addressbook.add.html:58 #: www/views/addressbook.add.html:58
#: www/views/includes/note.html:9 #: www/views/includes/note.html:9
#: www/views/preferencesAlias.html:21 #: www/views/preferencesAlias.html:21
@ -1994,6 +2012,7 @@ msgid "Save"
msgstr "" msgstr ""
#: www/views/tab-scan.html:3 #: www/views/tab-scan.html:3
#: www/views/tabs.html:11
msgid "Scan" msgid "Scan"
msgstr "" msgstr ""
@ -2057,6 +2076,7 @@ msgstr ""
#: www/views/feedback/send.html:13 #: www/views/feedback/send.html:13
#: www/views/feedback/send.html:43 #: www/views/feedback/send.html:43
#: www/views/tab-send.html:3 #: www/views/tab-send.html:3
#: www/views/tabs.html:15
msgid "Send" msgid "Send"
msgstr "" msgstr ""
@ -2082,11 +2102,11 @@ msgstr ""
msgid "Send by email" msgid "Send by email"
msgstr "" msgstr ""
#: src/js/controllers/confirm.js:243 #: src/js/controllers/confirm.js:248
msgid "Send from" msgid "Send from"
msgstr "" msgstr ""
#: src/js/controllers/amount.js:95 #: src/js/controllers/amount.js:97
msgid "Send max amount" msgid "Send max amount"
msgstr "" msgstr ""
@ -2097,6 +2117,7 @@ msgstr ""
#: www/views/confirm.html:15 #: www/views/confirm.html:15
#: www/views/includes/txp.html:14 #: www/views/includes/txp.html:14
#: www/views/modals/txp-details.html:19 #: www/views/modals/txp-details.html:19
#: www/views/walletDetails.html:241
msgid "Sending" msgid "Sending"
msgstr "" msgstr ""
@ -2116,7 +2137,7 @@ msgstr ""
msgid "Sending transaction" msgid "Sending transaction"
msgstr "" msgstr ""
#: src/js/controllers/confirm.js:501 #: src/js/controllers/confirm.js:506
msgid "Sending {{amountStr}} from your {{name}} wallet" msgid "Sending {{amountStr}} from your {{name}} wallet"
msgstr "" msgstr ""
@ -2151,11 +2172,13 @@ msgid "Set up a spending password"
msgstr "" msgstr ""
#: www/views/tab-settings.html:3 #: www/views/tab-settings.html:3
#: www/views/tabs.html:19
msgid "Settings" msgid "Settings"
msgstr "" msgstr ""
#: www/views/customAmount.html:20 #: www/views/customAmount.html:20
#: www/views/tab-receive.html:70 #: www/views/tab-receive.html:70
#: www/views/tab-settings.html:43
msgid "Share" msgid "Share"
msgstr "" msgstr ""
@ -2176,10 +2199,6 @@ msgstr ""
msgid "Share this invitation with your copayers" msgid "Share this invitation with your copayers"
msgstr "" msgstr ""
#: www/views/tab-settings.html:43
msgid "Share {{appName}}"
msgstr ""
#: www/views/tab-import-hardware.html:24 #: www/views/tab-import-hardware.html:24
msgid "Shared Wallet" msgid "Shared Wallet"
msgstr "" msgstr ""
@ -2268,10 +2287,6 @@ msgstr ""
msgid "Sweeping Wallet..." msgid "Sweeping Wallet..."
msgstr "" msgstr ""
#: www/views/includes/terms.html:23
msgid "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 OF THE SOFTWARE, EMPLOYEES AND AFFILIATES OF BITPAY, COPYRIGHT HOLDERS, OR BITPAY, INC. 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."
msgstr ""
#: www/views/preferencesDeleteWallet.html:14 #: www/views/preferencesDeleteWallet.html:14
msgid "THIS ACTION CANNOT BE REVERSED" msgid "THIS ACTION CANNOT BE REVERSED"
msgstr "" msgstr ""
@ -2291,10 +2306,6 @@ msgstr ""
msgid "Tap to retry" msgid "Tap to retry"
msgstr "" msgstr ""
#: www/views/tab-settings.html:144
msgid "Tell a friend"
msgstr ""
#: www/views/termsOfUse.html:3 #: www/views/termsOfUse.html:3
msgid "Terms Of Use" msgid "Terms Of Use"
msgstr "" msgstr ""
@ -2345,11 +2356,15 @@ msgstr ""
msgid "The maximum number of consecutive unused addresses (20) has been reached. When one of your unused addresses receives a payment, a new address will be generated and shown in your Receive tab." msgid "The maximum number of consecutive unused addresses (20) has been reached. When one of your unused addresses receives a payment, a new address will be generated and shown in your Receive tab."
msgstr "" msgstr ""
#: src/js/controllers/onboarding/terms.js:21
msgid "The official English Terms of Service are available on the BitPay website. Would you like to view them?"
msgstr ""
#: www/views/tab-import-phrase.html:4 #: www/views/tab-import-phrase.html:4
msgid "The password of the recovery phrase (if set)" msgid "The password of the recovery phrase (if set)"
msgstr "" msgstr ""
#: src/js/services/walletService.js:951 #: src/js/services/walletService.js:952
msgid "The payment was created but could not be completed. Please try again from home screen" msgid "The payment was created but could not be completed. Please try again from home screen"
msgstr "" msgstr ""
@ -2376,10 +2391,6 @@ msgstr ""
msgid "The spend proposal is not pending" msgid "The spend proposal is not pending"
msgstr "" msgstr ""
#: www/views/includes/terms.html:50
msgid "The terms and provisions of this Agreement are binding upon Your heirs, successors, assigns, and other representatives. This Agreement may be executed in counterparts, each of which shall be considered to be an original, but both of which constitute the same Agreement."
msgstr ""
#: www/views/preferencesHistory.html:26 #: www/views/preferencesHistory.html:26
msgid "The transaction history and every new incoming transaction are cached in the app. This feature clean this up and synchronizes again from the server" msgid "The transaction history and every new incoming transaction are cached in the app. This feature clean this up and synchronizes again from the server"
msgstr "" msgstr ""
@ -2415,14 +2426,6 @@ msgstr ""
msgid "These utilities may be unstable. Proceed at your own risk." msgid "These utilities may be unstable. Proceed at your own risk."
msgstr "" msgstr ""
#: www/views/includes/terms.html:38
msgid "This Agreement, and its application and interpretation, shall be governed exclusively by the laws of the State of Georgia, without regard to its conflict of law rules. You consent to the exclusive jurisdiction of the federal and state courts located in or near Atlanta, Georgia for any dispute arising under this Agreement."
msgstr ""
#: www/views/includes/terms.html:11
msgid "This Software functions as a free, open source, and multi-signature digital wallet. The Software does not constitute an account where We or other third parties serve as financial intermediaries or custodians of Your bitcoin(s)."
msgstr ""
#: src/js/controllers/feedback/rateCard.js:37 #: src/js/controllers/feedback/rateCard.js:37
msgid "This app is fantastic!" msgid "This app is fantastic!"
msgstr "" msgstr ""
@ -2431,14 +2434,10 @@ msgstr ""
msgid "This app stores your bitcoin with cutting-edge security." msgid "This app stores your bitcoin with cutting-edge security."
msgstr "" msgstr ""
#: src/js/controllers/confirm.js:434 #: src/js/controllers/confirm.js:439
msgid "This bitcoin payment request has expired." msgid "This bitcoin payment request has expired."
msgstr "" msgstr ""
#: www/views/includes/terms.html:2
msgid "This is a binding Agreement between BitPay, Inc. (&ldquo;BitPay&rdquo; or &ldquo;We&rdquo;) and the person, persons, or entity (&ldquo;You&rdquo; or &ldquo;Your&rdquo;) using the service, Software, or application (&ldquo;Software&rdquo;)."
msgstr ""
#: www/views/join.html:108 #: www/views/join.html:108
#: www/views/tab-create-personal.html:75 #: www/views/tab-create-personal.html:75
#: www/views/tab-create-shared.html:105 #: www/views/tab-create-shared.html:105
@ -2459,8 +2458,8 @@ msgstr ""
msgid "Timeline" msgid "Timeline"
msgstr "" msgstr ""
#: www/views/confirm.html:32 #: www/views/confirm.html:33
#: www/views/confirm.html:60 #: www/views/confirm.html:61
#: www/views/includes/output.html:2 #: www/views/includes/output.html:2
#: www/views/modals/txp-details.html:104 #: www/views/modals/txp-details.html:104
#: www/views/modals/txp-details.html:53 #: www/views/modals/txp-details.html:53
@ -2504,7 +2503,7 @@ msgid "Transaction already broadcasted"
msgstr "" msgstr ""
#: src/js/controllers/activity.js:45 #: src/js/controllers/activity.js:45
#: src/js/controllers/tab-home.js:154 #: src/js/controllers/tab-home.js:160
#: src/js/controllers/tx-details.js:18 #: src/js/controllers/tx-details.js:18
msgid "Transaction not found" msgid "Transaction not found"
msgstr "" msgstr ""
@ -2517,6 +2516,7 @@ msgstr ""
msgid "Translation Credits" msgid "Translation Credits"
msgstr "" msgstr ""
#: www/views/preferencesAbout.html:35
#: www/views/translators.html:3 #: www/views/translators.html:3
msgid "Translators" msgid "Translators"
msgstr "" msgstr ""
@ -2529,6 +2529,10 @@ msgstr ""
msgid "Type the Recovery Phrase (usually 12 words)" msgid "Type the Recovery Phrase (usually 12 words)"
msgstr "" msgstr ""
#: src/js/controllers/backup.js:75
msgid "Uh oh..."
msgstr ""
#: www/views/modals/search.html:36 #: www/views/modals/search.html:36
#: www/views/tx-details.html:79 #: www/views/tx-details.html:79
msgid "Unconfirmed" msgid "Unconfirmed"
@ -2550,6 +2554,10 @@ msgstr ""
msgid "Unused Addresses Limit" msgid "Unused Addresses Limit"
msgstr "" msgstr ""
#: src/js/controllers/tab-home.js:132
msgid "Update Available"
msgstr ""
#: www/views/proposals.html:15 #: www/views/proposals.html:15
msgid "Updating pending proposals. Please stand by" msgid "Updating pending proposals. Please stand by"
msgstr "" msgstr ""
@ -2586,6 +2594,18 @@ msgstr ""
msgid "View All Addresses" msgid "View All Addresses"
msgstr "" msgstr ""
#: src/js/controllers/onboarding/terms.js:20
msgid "View Terms of Service"
msgstr ""
#: src/js/controllers/tx-details.js:125
msgid "View Transaction on Insight"
msgstr ""
#: src/js/controllers/tab-home.js:134
msgid "View Update"
msgstr ""
#: www/views/tx-details.html:117 #: www/views/tx-details.html:117
msgid "View on blockchain" msgid "View on blockchain"
msgstr "" msgstr ""
@ -2733,6 +2753,7 @@ msgid "Wallet needs backup"
msgstr "" msgstr ""
#: www/views/tab-receive.html:56 #: www/views/tab-receive.html:56
#: www/views/walletDetails.html:145
msgid "Wallet not backed up" msgid "Wallet not backed up"
msgstr "" msgstr ""
@ -2740,7 +2761,7 @@ msgstr ""
msgid "Wallet not found" msgid "Wallet not found"
msgstr "" msgstr ""
#: src/js/controllers/tab-home.js:199 #: src/js/controllers/tab-home.js:205
msgid "Wallet not registered" msgid "Wallet not registered"
msgstr "" msgstr ""
@ -2760,8 +2781,8 @@ msgstr ""
msgid "Wallets" msgid "Wallets"
msgstr "" msgstr ""
#: www/views/tab-settings.html:101 #: www/views/tab-settings.html:99
msgid "Wallets &amp; Integrations" msgid "Wallets & Integrations"
msgstr "" msgstr ""
#: src/js/controllers/modals/txpDetails.js:126 #: src/js/controllers/modals/txpDetails.js:126
@ -2775,10 +2796,6 @@ msgstr ""
msgid "Warning: this transaction has unconfirmed inputs" msgid "Warning: this transaction has unconfirmed inputs"
msgstr "" msgstr ""
#: www/views/includes/terms.html:32
msgid "We retain all right, title, and interest in and to the Content and all of BitPays brands, logos, and trademarks, including, but not limited to, BitPay, Inc., BitPay, BitPay &ndash; Secure Bitcoin Wallet, BitPay Wallet, BitPay App, Copay, BitPay Prepaid Card, and variations of the wording of the aforementioned brands, logos, and trademarks."
msgstr ""
#: src/js/controllers/feedback/send.js:63 #: src/js/controllers/feedback/send.js:63
msgid "We'd love to do better." msgid "We'd love to do better."
msgstr "" msgstr ""
@ -2796,7 +2813,7 @@ msgid "We're always looking for ways to improve BitPay. How could we improve you
msgstr "" msgstr ""
#: www/views/preferencesLanguage.html:16 #: www/views/preferencesLanguage.html:16
#: www/views/translators.html:24 #: www/views/translators.html:23
msgid "Were always looking for translation contributions! You can make corrections or help to make this app available in your native language by joining our community on Crowdin." msgid "Were always looking for translation contributions! You can make corrections or help to make this app available in your native language by joining our community on Crowdin."
msgstr "" msgstr ""
@ -2812,10 +2829,6 @@ msgstr ""
msgid "Where would you like to receive email notifications about payments?" msgid "Where would you like to receive email notifications about payments?"
msgstr "" msgstr ""
#: www/views/includes/terms.html:14
msgid "While the Software has undergone beta testing and continues to be improved by feedback from the open-source user and developer community, We cannot guarantee there will not be bugs in the Software. You acknowledge that Your use of this Software is at Your own discretion and in compliance with all applicable laws. You are responsible for safekeeping Your passwords, private key pairs, PINs, and any other codes You use to access the Software."
msgstr ""
#: www/views/addresses.html:23 #: www/views/addresses.html:23
msgid "Why?" msgid "Why?"
msgstr "" msgstr ""
@ -2840,6 +2853,10 @@ msgstr ""
msgid "Would you like to receive push notifications about payments?" msgid "Would you like to receive push notifications about payments?"
msgstr "" msgstr ""
#: src/js/controllers/tx-details.js:126
msgid "Would you like to view this transaction on the Insight blockchain explorer?"
msgstr ""
#: src/js/controllers/import.js:248 #: src/js/controllers/import.js:248
msgid "Wrong number of recovery words:" msgid "Wrong number of recovery words:"
msgstr "" msgstr ""
@ -2857,18 +2874,23 @@ msgstr ""
msgid "Yes, skip backup" msgid "Yes, skip backup"
msgstr "" msgstr ""
#: www/views/includes/terms.html:53
msgid "You assume any and all risks associated with the use of the Software. We reserve the right to modify this Agreement from time to time."
msgstr ""
#: src/js/controllers/onboarding/backupRequest.js:17 #: src/js/controllers/onboarding/backupRequest.js:17
msgid "You can create a backup later from your wallet settings." msgid "You can create a backup later from your wallet settings."
msgstr "" msgstr ""
#: src/js/controllers/preferencesLanguage.js:12
#: src/js/controllers/translators.js:9
msgid "You can make contributions by signing up on our Crowdin community translation website. Were looking forward to hearing from you!"
msgstr ""
#: www/views/tab-scan.html:16 #: www/views/tab-scan.html:16
msgid "You can scan bitcoin addresses, payment requests, paper wallets, and more." msgid "You can scan bitcoin addresses, payment requests, paper wallets, and more."
msgstr "" msgstr ""
#: src/js/controllers/preferencesAbout.js:13
msgid "You can see the latest developments and contribute to this open source app by visiting our project on GitHub."
msgstr ""
#: www/views/onboarding/tour.html:14 #: www/views/onboarding/tour.html:14
msgid "You can spend bitcoin at millions of websites and stores worldwide." msgid "You can spend bitcoin at millions of websites and stores worldwide."
msgstr "" msgstr ""
@ -2901,6 +2923,10 @@ msgstr ""
msgid "Your bitcoin wallet is ready!" msgid "Your bitcoin wallet is ready!"
msgstr "" msgstr ""
#: www/views/feedback/send.html:42
msgid "Your ideas, feedback, or comments"
msgstr ""
#: www/views/tab-create-shared.html:22 #: www/views/tab-create-shared.html:22
msgid "Your name" msgid "Your name"
msgstr "" msgstr ""
@ -2927,6 +2953,7 @@ msgid "Your wallet key will be encrypted. The Spending Password cannot be recove
msgstr "" msgstr ""
#: www/views/includes/walletSelector.html:23 #: www/views/includes/walletSelector.html:23
#: www/views/includes/wallets.html:13
#: www/views/tab-home.html:84 #: www/views/tab-home.html:84
#: www/views/walletDetails.html:127 #: www/views/walletDetails.html:127
#: www/views/walletDetails.html:69 #: www/views/walletDetails.html:69
@ -2949,6 +2976,10 @@ msgstr ""
msgid "me" msgid "me"
msgstr "" msgstr ""
#: www/views/addressbook.add.html:32
msgid "name@example.com"
msgstr ""
#: www/views/preferencesHistory.html:14 #: www/views/preferencesHistory.html:14
msgid "preparing..." msgid "preparing..."
msgstr "" msgstr ""
@ -2957,7 +2988,7 @@ msgstr ""
msgid "{{feeRateStr}} of the transaction" msgid "{{feeRateStr}} of the transaction"
msgstr "" msgstr ""
#: src/js/controllers/confirm.js:181 #: src/js/controllers/confirm.js:186
msgid "{{fee}} will be deducted for bitcoin networking fees." msgid "{{fee}} will be deducted for bitcoin networking fees."
msgstr "" msgstr ""

View File

@ -1,6 +1,6 @@
'use strict'; 'use strict';
angular.module('copayApp.controllers').controller('addressbookListController', function($scope, $log, $timeout, addressbookService, lodash, popupService) { angular.module('copayApp.controllers').controller('addressbookListController', function($scope, $log, $timeout, addressbookService, lodash, popupService, gettextCatalog) {
var contacts; var contacts;

View File

@ -5,8 +5,8 @@ angular.module('copayApp.controllers').controller('amazonController',
$scope.network = amazonService.getEnvironment(); $scope.network = amazonService.getEnvironment();
$scope.openExternalLink = function(url, optIn, title, message, okText, cancelText) { $scope.openExternalLink = function(url) {
externalLinkService.open(url, optIn, title, message, okText, cancelText); externalLinkService.open(url);
}; };
var initAmazon = function() { var initAmazon = function() {
@ -20,7 +20,9 @@ angular.module('copayApp.controllers').controller('amazonController',
$scope.$digest(); $scope.$digest();
}); });
if ($scope.cardClaimCode) { if ($scope.cardClaimCode) {
var card = lodash.find($scope.giftCards, { claimCode: $scope.cardClaimCode }); var card = lodash.find($scope.giftCards, {
claimCode: $scope.cardClaimCode
});
if (lodash.isEmpty(card)) { if (lodash.isEmpty(card)) {
popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Card not found')); popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Card not found'));
return; return;

View File

@ -36,12 +36,14 @@ angular.module('copayApp.controllers').controller('amountController', function($
throw ('bad params'); throw ('bad params');
} }
glideraService.getLimits($scope.glideraAccessToken, function(err, limits) { if ($scope.isGlidera) {
$scope.limits = limits; glideraService.getLimits($scope.glideraAccessToken, function(err, limits) {
$timeout(function() { $scope.limits = limits;
$scope.$apply(); $timeout(function() {
$scope.$apply();
});
}); });
}); }
var reNr = /^[1234567890\.]$/; var reNr = /^[1234567890\.]$/;
var reOp = /^[\*\+\-\/]$/; var reOp = /^[\*\+\-\/]$/;
@ -229,6 +231,20 @@ angular.module('copayApp.controllers').controller('amountController', function($
return result.replace('x', '*'); return result.replace('x', '*');
}; };
$scope.getRates = function() {
bitpayCardService.getRates($scope.alternativeIsoCode, function(err, res) {
if (err) {
$log.warn(err);
return;
}
if ($scope.unitName == 'bits') {
$scope.exchangeRate = '1,000,000 bits ~ ' + res.rate + ' ' + $scope.alternativeIsoCode;
} else {
$scope.exchangeRate = '1 BTC ~ ' + res.rate + ' ' + $scope.alternativeIsoCode;
}
});
};
$scope.finish = function() { $scope.finish = function() {
var _amount = evaluate(format($scope.amount)); var _amount = evaluate(format($scope.amount));

View File

@ -72,7 +72,7 @@ angular.module('copayApp.controllers').controller('backupController',
var showBackupResult = function() { var showBackupResult = function() {
if ($scope.backupError) { if ($scope.backupError) {
var title = 'Uh oh...'; var title = gettextCatalog.getString('Uh oh...');
var message = gettextCatalog.getString("It's important that you write your backup phrase down correctly. If something happens to your wallet, you'll need this backup to recover your money. Please review your backup and try again."); var message = gettextCatalog.getString("It's important that you write your backup phrase down correctly. If something happens to your wallet, you'll need this backup to recover your money. Please review your backup and try again.");
popupService.showAlert(title, message, function() { popupService.showAlert(title, message, function() {
$scope.setFlow(2); $scope.setFlow(2);

View File

@ -1,6 +1,6 @@
'use strict'; 'use strict';
angular.module('copayApp.controllers').controller('confirmController', function($rootScope, $scope, $interval, $filter, $timeout, $ionicScrollDelegate, gettextCatalog, walletService, platformInfo, lodash, configService, rateService, $stateParams, $window, $state, $log, profileService, bitcore, gettext, txFormatService, ongoingProcess, $ionicModal, popupService, $ionicHistory, $ionicConfig, payproService, feeService, amazonService, glideraService, bwcError) { angular.module('copayApp.controllers').controller('confirmController', function($rootScope, $scope, $interval, $filter, $timeout, $ionicScrollDelegate, gettextCatalog, walletService, platformInfo, lodash, configService, rateService, $stateParams, $window, $state, $log, profileService, bitcore, txFormatService, ongoingProcess, $ionicModal, popupService, $ionicHistory, $ionicConfig, payproService, feeService, amazonService, glideraService, bwcError, bitpayCardService) {
var cachedTxp = {}; var cachedTxp = {};
var toAmount; var toAmount;
var isChromeApp = platformInfo.isChromeApp; var isChromeApp = platformInfo.isChromeApp;
@ -45,7 +45,8 @@ angular.module('copayApp.controllers').controller('confirmController', function(
}; };
var config = configService.getSync().wallet; var config = configService.getSync().wallet;
$scope.feeLevel = config.settings && config.settings.feeLevel ? config.settings.feeLevel : 'normal'; var feeLevel = config.settings && config.settings.feeLevel ? config.settings.feeLevel : 'normal';
$scope.feeLevel = feeService.feeOpts[feeLevel];
if ($scope.isGlidera) $scope.network = glideraService.getEnvironment(); if ($scope.isGlidera) $scope.network = glideraService.getEnvironment();
else $scope.network = (new bitcore.Address($scope.toAddress)).network.name; else $scope.network = (new bitcore.Address($scope.toAddress)).network.name;
resetValues(); resetValues();
@ -55,8 +56,7 @@ angular.module('copayApp.controllers').controller('confirmController', function(
function setwallets() { function setwallets() {
$scope.wallets = profileService.getWallets({ $scope.wallets = profileService.getWallets({
onlyComplete: true, onlyComplete: true,
network: $scope.network, network: $scope.network
n: $scope.isGiftCard ? true : false
}); });
if (!$scope.wallets || !$scope.wallets.length) { if (!$scope.wallets || !$scope.wallets.length) {
@ -70,6 +70,11 @@ angular.module('copayApp.controllers').controller('confirmController', function(
return; return;
} }
if ($scope.isGlidera == 'buy') {
initConfirm();
return;
}
var filteredWallets = []; var filteredWallets = [];
var index = 0; var index = 0;
var enoughFunds = false; var enoughFunds = false;
@ -346,7 +351,7 @@ angular.module('copayApp.controllers').controller('confirmController', function(
$timeout(function() { $timeout(function() {
$scope.$apply(); $scope.$apply();
}); });
popupService.showAlert(gettextCatalog.getString('Error at confirm'), msg); popupService.showAlert(gettextCatalog.getString('Error at confirm'), bwcError.msg(msg));
}; };
function apply(txp) { function apply(txp) {
@ -368,13 +373,13 @@ angular.module('copayApp.controllers').controller('confirmController', function(
// ToDo: use a credential's (or fc's) function for this // ToDo: use a credential's (or fc's) function for this
if (description && !wallet.credentials.sharedEncryptingKey) { if (description && !wallet.credentials.sharedEncryptingKey) {
var msg = 'Could not add message to imported wallet without shared encrypting key'; var msg = gettextCatalog.getString('Could not add message to imported wallet without shared encrypting key');
$log.warn(msg); $log.warn(msg);
return setSendError(msg); return setSendError(msg);
} }
if (toAmount > Number.MAX_SAFE_INTEGER) { if (toAmount > Number.MAX_SAFE_INTEGER) {
var msg = 'Amount too big'; var msg = gettextCatalog.getString('Amount too big');
$log.warn(msg); $log.warn(msg);
return setSendError(msg); return setSendError(msg);
} }
@ -824,4 +829,21 @@ angular.module('copayApp.controllers').controller('confirmController', function(
}); });
}); });
}; };
$scope.getRates = function() {
var config = configService.getSync().wallet.settings;
var unitName = config.unitName;
var alternativeIsoCode = config.alternativeIsoCode;
bitpayCardService.getRates(alternativeIsoCode, function(err, res) {
if (err) {
$log.warn(err);
return;
}
if (unitName == 'bits') {
$scope.exchangeRate = '1,000,000 bits ~ ' + res.rate + ' ' + alternativeIsoCode;
} else {
$scope.exchangeRate = '1 BTC ~ ' + res.rate + ' ' + alternativeIsoCode;
}
});
};
}); });

View File

@ -1,7 +1,7 @@
'use strict'; 'use strict';
angular.module('copayApp.controllers').controller('createController', angular.module('copayApp.controllers').controller('createController',
function($scope, $rootScope, $timeout, $log, lodash, $state, $ionicScrollDelegate, $ionicHistory, profileService, configService, gettext, gettextCatalog, ledger, trezor, platformInfo, derivationPathHelper, ongoingProcess, walletService, storageService, popupService) { function($scope, $rootScope, $timeout, $log, lodash, $state, $ionicScrollDelegate, $ionicHistory, profileService, configService, gettextCatalog, ledger, trezor, platformInfo, derivationPathHelper, ongoingProcess, walletService, storageService, popupService) {
var isChromeApp = platformInfo.isChromeApp; var isChromeApp = platformInfo.isChromeApp;
var isCordova = platformInfo.isCordova; var isCordova = platformInfo.isCordova;
@ -67,10 +67,10 @@ angular.module('copayApp.controllers').controller('createController',
function updateSeedSourceSelect(n) { function updateSeedSourceSelect(n) {
var seedOptions = [{ var seedOptions = [{
id: 'new', id: 'new',
label: gettext('Random'), label: gettextCatalog.getString('Random'),
}, { }, {
id: 'set', id: 'set',
label: gettext('Specify Recovery Phrase...'), label: gettextCatalog.getString('Specify Recovery Phrase...'),
}]; }];
$scope.seedSource = seedOptions[0]; $scope.seedSource = seedOptions[0];

View File

@ -1,6 +1,6 @@
'use strict'; 'use strict';
angular.module('copayApp.controllers').controller('rateAppController', function($scope, $state, $stateParams, $window, lodash, externalLinkService, configService, gettextCatalog, platformInfo, feedbackService, ongoingProcess, popupService) { angular.module('copayApp.controllers').controller('rateAppController', function($scope, $state, $stateParams, $window, lodash, externalLinkService, configService, platformInfo, feedbackService, ongoingProcess, popupService) {
$scope.score = parseInt($stateParams.score); $scope.score = parseInt($stateParams.score);
var isAndroid = platformInfo.isAndroid; var isAndroid = platformInfo.isAndroid;
var isIOS = platformInfo.isIOS; var isIOS = platformInfo.isIOS;

View File

@ -1,7 +1,7 @@
'use strict'; 'use strict';
angular.module('copayApp.controllers').controller('joinController', angular.module('copayApp.controllers').controller('joinController',
function($scope, $rootScope, $timeout, $state, $ionicHistory, $ionicScrollDelegate, profileService, configService, storageService, applicationService, gettext, gettextCatalog, lodash, ledger, trezor, platformInfo, derivationPathHelper, ongoingProcess, walletService, $log, $stateParams, popupService) { function($scope, $rootScope, $timeout, $state, $ionicHistory, $ionicScrollDelegate, profileService, configService, storageService, applicationService, gettextCatalog, lodash, ledger, trezor, platformInfo, derivationPathHelper, ongoingProcess, walletService, $log, $stateParams, popupService) {
var isChromeApp = platformInfo.isChromeApp; var isChromeApp = platformInfo.isChromeApp;
var isDevel = platformInfo.isDevel; var isDevel = platformInfo.isDevel;
@ -50,10 +50,10 @@ angular.module('copayApp.controllers').controller('joinController',
var updateSeedSourceSelect = function() { var updateSeedSourceSelect = function() {
self.seedOptions = [{ self.seedOptions = [{
id: 'new', id: 'new',
label: gettext('Random'), label: gettextCatalog.getString('Random'),
}, { }, {
id: 'set', id: 'set',
label: gettext('Specify Recovery Phrase...'), label: gettextCatalog.getString('Specify Recovery Phrase...'),
}]; }];
$scope.seedSource = self.seedOptions[0]; $scope.seedSource = self.seedOptions[0];

View File

@ -62,8 +62,8 @@ angular.module('copayApp.controllers').controller('amazonCardDetailsController',
$scope.amazonCardDetailsModal.hide(); $scope.amazonCardDetailsModal.hide();
}; };
$scope.openExternalLink = function(url, optIn, title, message, okText, cancelText) { $scope.openExternalLink = function(url) {
externalLinkService.open(url, optIn, title, message, okText, cancelText); externalLinkService.open(url);
}; };
}); });

View File

@ -107,7 +107,7 @@ angular.module('copayApp.controllers').controller('txpDetailsController', functi
} }
} }
var setError = function (err, prefix) { var setError = function(err, prefix) {
$scope.sendStatus = ''; $scope.sendStatus = '';
$scope.loading = false; $scope.loading = false;
popupService.showAlert(gettextCatalog.getString('Error'), bwcError.msg(err, prefix)); popupService.showAlert(gettextCatalog.getString('Error'), bwcError.msg(err, prefix));
@ -164,9 +164,9 @@ angular.module('copayApp.controllers').controller('txpDetailsController', functi
$scope.loading = true; $scope.loading = true;
$timeout(function() { $timeout(function() {
ongoingProcess.set('broadcastTx', true); ongoingProcess.set('broadcastingTx', true);
walletService.broadcastTx($scope.wallet, $scope.tx, function(err, txpb) { walletService.broadcastTx($scope.wallet, $scope.tx, function(err, txpb) {
ongoingProcess.set('broadcastTx', false); ongoingProcess.set('broadcastingTx', false);
if (err) { if (err) {
return setError(err, gettextCatalog.getString('Could not broadcast payment')); return setError(err, gettextCatalog.getString('Could not broadcast payment'));
@ -185,7 +185,7 @@ angular.module('copayApp.controllers').controller('txpDetailsController', functi
$scope.wallet.getTx($scope.tx.id, function(err, tx) { $scope.wallet.getTx($scope.tx.id, function(err, tx) {
if (err) { if (err) {
if (err.message && err.message == 'Transaction proposal not found' && if (err.message && err.message == 'Transaction proposal not found' &&
(eventName == 'transactionProposalRemoved' || eventName == 'TxProposalRemoved')) { (eventName == 'transactionProposalRemoved' || eventName == 'TxProposalRemoved')) {
$scope.tx.removed = true; $scope.tx.removed = true;
$scope.tx.canBeRemoved = false; $scope.tx.canBeRemoved = false;
$scope.tx.pendingForUs = false; $scope.tx.pendingForUs = false;
@ -209,7 +209,7 @@ angular.module('copayApp.controllers').controller('txpDetailsController', functi
}); });
}; };
var bwsEvent = $rootScope.$on('bwsEvent', function(e, walletId, type, n) { var bwsEvent = $rootScope.$on('bwsEvent', function(e, walletId, type, n) {
lodash.each([ lodash.each([
'TxProposalRejectedBy', 'TxProposalRejectedBy',
'TxProposalAcceptedBy', 'TxProposalAcceptedBy',

View File

@ -1,8 +1,7 @@
'use strict'; 'use strict';
angular.module('copayApp.controllers').controller('termsController', function($scope, $log, $state, $window, uxLanguage, profileService, externalLinkService) { angular.module('copayApp.controllers').controller('termsController', function($scope, $log, $state, $window, uxLanguage, profileService, externalLinkService, gettextCatalog) {
$scope.lang = uxLanguage.currentLanguage; $scope.lang = uxLanguage.currentLanguage;
$scope.disclaimerUrl = $window.appConfig.disclaimerUrl;
$scope.confirm = function() { $scope.confirm = function() {
profileService.setDisclaimerAccepted(function(err) { profileService.setDisclaimerAccepted(function(err) {
@ -15,7 +14,13 @@ angular.module('copayApp.controllers').controller('termsController', function($s
}); });
}; };
$scope.openExternalLink = function(url, optIn, title, message, okText, cancelText) { $scope.openExternalLink = function() {
var url = $window.appConfig.disclaimerUrl;
var optIn = true;
var title = gettextCatalog.getString('View Terms of Service');
var message = gettextCatalog.getString('The official English Terms of Service are available on the BitPay website. Would you like to view them?');
var okText = gettextCatalog.getString('Open Website');
var cancelText = gettextCatalog.getString('Go Back');
externalLinkService.open(url, optIn, title, message, okText, cancelText); externalLinkService.open(url, optIn, title, message, okText, cancelText);
}; };

View File

@ -1,7 +1,7 @@
'use strict'; 'use strict';
angular.module('copayApp.controllers').controller('preferencesController', angular.module('copayApp.controllers').controller('preferencesController',
function($scope, $rootScope, $timeout, $log, $stateParams, $ionicHistory, gettextCatalog, configService, profileService, fingerprintService, walletService) { function($scope, $rootScope, $timeout, $log, $stateParams, $ionicHistory, configService, profileService, fingerprintService, walletService) {
var wallet = profileService.getWallet($stateParams.walletId); var wallet = profileService.getWallet($stateParams.walletId);
var walletId = wallet.credentials.walletId; var walletId = wallet.credentials.walletId;
$scope.wallet = wallet; $scope.wallet = wallet;

View File

@ -6,9 +6,14 @@ angular.module('copayApp.controllers').controller('preferencesAbout',
$scope.title = gettextCatalog.getString('About') + ' ' + $window.appConfig.nameCase; $scope.title = gettextCatalog.getString('About') + ' ' + $window.appConfig.nameCase;
$scope.version = $window.version; $scope.version = $window.version;
$scope.commitHash = $window.commitHash; $scope.commitHash = $window.commitHash;
$scope.name = $window.appConfig.gitHubRepoName;
$scope.openExternalLink = function(url, optIn, title, message, okText, cancelText) { $scope.openExternalLink = function() {
var url = 'https://github.com/bitpay/' + $window.appConfig.gitHubRepoName + '/tree/' + $window.commitHash + '';
var optIn = true;
var title = gettextCatalog.getString('Open GitHub Project');
var message = gettextCatalog.getString('You can see the latest developments and contribute to this open source app by visiting our project on GitHub.');
var okText = gettextCatalog.getString('Open GitHub');
var cancelText = gettextCatalog.getString('Go Back');
externalLinkService.open(url, optIn, title, message, okText, cancelText); externalLinkService.open(url, optIn, title, message, okText, cancelText);
}; };
}); });

View File

@ -1,7 +1,7 @@
'use strict'; 'use strict';
angular.module('copayApp.controllers').controller('preferencesAliasController', angular.module('copayApp.controllers').controller('preferencesAliasController',
function($scope, $timeout, $stateParams, $ionicHistory, gettextCatalog, configService, profileService, walletService) { function($scope, $timeout, $stateParams, $ionicHistory, configService, profileService, walletService) {
var wallet = profileService.getWallet($stateParams.walletId); var wallet = profileService.getWallet($stateParams.walletId);
var walletId = wallet.credentials.walletId; var walletId = wallet.credentials.walletId;
var config = configService.getSync(); var config = configService.getSync();

View File

@ -1,7 +1,7 @@
'use strict'; 'use strict';
angular.module('copayApp.controllers').controller('preferencesAltCurrencyController', angular.module('copayApp.controllers').controller('preferencesAltCurrencyController',
function($scope, $log, $timeout, $ionicHistory, gettextCatalog, configService, rateService, lodash, profileService, walletService) { function($scope, $log, $timeout, $ionicHistory, configService, rateService, lodash, profileService, walletService) {
var next = 10; var next = 10;
var completeAlternativeList; var completeAlternativeList;

View File

@ -1,6 +1,6 @@
'use strict'; 'use strict';
angular.module('copayApp.controllers').controller('preferencesColorController', function($scope, $timeout, $log, $stateParams, $ionicHistory, gettextCatalog, configService, profileService) { angular.module('copayApp.controllers').controller('preferencesColorController', function($scope, $timeout, $log, $stateParams, $ionicHistory, configService, profileService) {
var wallet = profileService.getWallet($stateParams.walletId); var wallet = profileService.getWallet($stateParams.walletId);
$scope.wallet = wallet; $scope.wallet = wallet;
var walletId = wallet.credentials.walletId; var walletId = wallet.credentials.walletId;

View File

@ -1,7 +1,7 @@
'use strict'; 'use strict';
angular.module('copayApp.controllers').controller('preferencesHistory', angular.module('copayApp.controllers').controller('preferencesHistory',
function($scope, $log, $stateParams, $timeout, $state, $ionicHistory, gettextCatalog, storageService, platformInfo, profileService, lodash, $window) { function($scope, $log, $stateParams, $timeout, $state, $ionicHistory, storageService, platformInfo, profileService, lodash, $window) {
$scope.wallet = profileService.getWallet($stateParams.walletId); $scope.wallet = profileService.getWallet($stateParams.walletId);
$scope.csvReady = false; $scope.csvReady = false;
$scope.isCordova = platformInfo.isCordova; $scope.isCordova = platformInfo.isCordova;

View File

@ -1,12 +1,18 @@
'use strict'; 'use strict';
angular.module('copayApp.controllers').controller('preferencesLanguageController', angular.module('copayApp.controllers').controller('preferencesLanguageController',
function($scope, $log, $ionicHistory, gettextCatalog, configService, profileService, uxLanguage, walletService, externalLinkService) { function($scope, $log, $ionicHistory, configService, profileService, uxLanguage, walletService, externalLinkService) {
$scope.availableLanguages = uxLanguage.getLanguages(); $scope.availableLanguages = uxLanguage.getLanguages();
$scope.openExternalLink = function(url, target) { $scope.openExternalLink = function() {
externalLinkService.open(url, target); var url = 'https://crowdin.com/project/copay';
var optIn = true;
var title = gettextCatalog.getString('Open Translation Community');
var message = gettextCatalog.getString('You can make contributions by signing up on our Crowdin community translation website. Were looking forward to hearing from you!');
var okText = gettextCatalog.getString('Open Crowdin');
var cancelText = gettextCatalog.getString('Go Back');
externalLinkService.open(url, optIn, title, message, okText, cancelText);
}; };
$scope.save = function(newLang) { $scope.save = function(newLang) {
@ -18,19 +24,18 @@ angular.module('copayApp.controllers').controller('preferencesLanguageController
} }
}; };
uxLanguage._set(newLang);
configService.set(opts, function(err) { configService.set(opts, function(err) {
if (err) $log.warn(err); if (err) $log.warn(err);
walletService.updateRemotePreferences(profileService.getWallets(), {}, function() {
$ionicHistory.goBack(); $log.debug('Remote preferences saved');
uxLanguage.init(function() {
walletService.updateRemotePreferences(profileService.getWallets(), {}, function() {
$log.debug('Remote preferences saved');
});
}); });
}); });
$ionicHistory.goBack();
}; };
$scope.$on("$ionicView.enter", function(event, data){ $scope.$on("$ionicView.beforeEnter", function(event, data) {
$scope.currentLanguage = uxLanguage.getCurrentLanguage(); $scope.currentLanguage = uxLanguage.getCurrentLanguage();
}); });
}); });

View File

@ -1,7 +1,7 @@
'use strict'; 'use strict';
angular.module('copayApp.controllers').controller('preferencesLogs', angular.module('copayApp.controllers').controller('preferencesLogs',
function($scope, historicLog, gettextCatalog) { function($scope, historicLog) {
$scope.$on("$ionicView.enter", function(event, data) { $scope.$on("$ionicView.enter", function(event, data) {
$scope.logs = historicLog.get(); $scope.logs = historicLog.get();

View File

@ -126,7 +126,13 @@ angular.module('copayApp.controllers').controller('tabHomeController',
}); });
}); });
$scope.openExternalLink = function(url, optIn, title, message, okText, cancelText) { $scope.openExternalLink = function() {
var url = 'https://github.com/bitpay/copay/releases/latest';
var optIn = true;
var title = gettextCatalog.getString('Update Available');
var message = gettextCatalog.getString('An update to this app is available. For your security, please update to the latest version.');
var okText = gettextCatalog.getString('View Update');
var cancelText = gettextCatalog.getString('Go Back');
externalLinkService.open(url, optIn, title, message, okText, cancelText); externalLinkService.open(url, optIn, title, message, okText, cancelText);
}; };

View File

@ -1,6 +1,6 @@
'use strict'; 'use strict';
angular.module('copayApp.controllers').controller('tabSendController', function($scope, $log, $timeout, $ionicScrollDelegate, addressbookService, profileService, lodash, $state, walletService, incomingData, popupService, $rootScope) { angular.module('copayApp.controllers').controller('tabSendController', function($scope, $rootScope, $log, $timeout, $ionicScrollDelegate, addressbookService, profileService, lodash, $state, walletService, incomingData, popupService) {
var originalList; var originalList;
var CONTACTS_SHOW_LIMIT; var CONTACTS_SHOW_LIMIT;
@ -128,6 +128,7 @@ angular.module('copayApp.controllers').controller('tabSendController', function(
}); });
} }
$scope.checkingBalance = true;
var index = 0; var index = 0;
lodash.each(wallets, function(w) { lodash.each(wallets, function(w) {
walletService.getStatus(w, {}, function(err, status) { walletService.getStatus(w, {}, function(err, status) {
@ -143,6 +144,7 @@ angular.module('copayApp.controllers').controller('tabSendController', function(
} }
if (index == wallets.length) { if (index == wallets.length) {
$scope.checkingBalance = false;
$timeout(function() { $timeout(function() {
$scope.$apply(); $scope.$apply();
}); });

View File

@ -1,10 +1,8 @@
'use strict'; 'use strict';
angular.module('copayApp.controllers').controller('tabSettingsController', function($scope, $window, $ionicModal, $log, lodash, uxLanguage, platformInfo, profileService, feeService, configService, externalLinkService, bitpayCardService, storageService, glideraService) { angular.module('copayApp.controllers').controller('tabSettingsController', function($scope, $window, $ionicModal, $log, lodash, uxLanguage, platformInfo, profileService, feeService, configService, externalLinkService, bitpayCardService, storageService, glideraService, gettextCatalog) {
var updateConfig = function() { var updateConfig = function() {
var config = configService.getSync();
var isCordova = platformInfo.isCordova; var isCordova = platformInfo.isCordova;
var isWP = platformInfo.isWP; var isWP = platformInfo.isWP;
var isWindowsPhoneApp = platformInfo.isWP && isCordova; var isWindowsPhoneApp = platformInfo.isWP && isCordova;
@ -13,41 +11,53 @@ angular.module('copayApp.controllers').controller('tabSettingsController', funct
$scope.isCordova = isCordova; $scope.isCordova = isCordova;
$scope.appName = $window.appConfig.nameCase; $scope.appName = $window.appConfig.nameCase;
$scope.unitName = config.wallet.settings.unitName;
$scope.currentLanguageName = uxLanguage.getCurrentLanguageName(); $scope.currentLanguageName = uxLanguage.getCurrentLanguageName();
$scope.selectedAlternative = {
name: config.wallet.settings.alternativeName,
isoCode: config.wallet.settings.alternativeIsoCode
};
$scope.feeOpts = feeService.feeOpts; $scope.feeOpts = feeService.feeOpts;
$scope.currentFeeLevel = feeService.getCurrentFeeLevel(); $scope.currentFeeLevel = feeService.getCurrentFeeLevel();
$scope.wallets = profileService.getWallets(); $scope.wallets = profileService.getWallets();
configService.whenAvailable(function(config) {
$scope.unitName = config.wallet.settings.unitName;
$scope.selectedAlternative = {
name: config.wallet.settings.alternativeName,
isoCode: config.wallet.settings.alternativeIsoCode
};
$scope.bitpayCardEnabled = config.bitpayCard.enabled; $scope.bitpayCardEnabled = config.bitpayCard.enabled;
$scope.glideraEnabled = config.glidera.enabled && !isWindowsPhoneApp;
$scope.glideraEnabled = config.glidera.enabled && !isWindowsPhoneApp; if ($scope.bitpayCardEnabled) {
bitpayCardService.getBitpayDebitCards(function(err, data) {
if (err) $log.error(err);
if (!lodash.isEmpty(data)) {
$scope.bitpayCards = true;
}
});
}
if ($scope.glideraEnabled) {
storageService.getGlideraToken(glideraService.getEnvironment(), function(err, token) {
if (err) $log.error(err);
$scope.glideraToken = token;
});
}
});
}; };
$scope.openExternalLink = function(url, optIn, title, message, okText, cancelText) { $scope.openExternalLink = function() {
var url = 'https://help.bitpay.com/bitpay-app';
var optIn = true;
var title = gettextCatalog.getString('BitPay Help Center');
var message = gettextCatalog.getString('Help and support information is available at the BitPay Help Center website. Would you like to go there now?');
var okText = gettextCatalog.getString('Open Help Center');
var cancelText = gettextCatalog.getString('Go Back');
externalLinkService.open(url, optIn, title, message, okText, cancelText); externalLinkService.open(url, optIn, title, message, okText, cancelText);
}; };
$scope.$on("$ionicView.beforeEnter", function(event, data) { $scope.$on("$ionicView.beforeEnter", function(event, data) {
updateConfig(); updateConfig();
bitpayCardService.getBitpayDebitCards(function(err, data) {
if (err) $log.error(err);
if (!lodash.isEmpty(data)) {
$scope.bitpayCards = true;
}
});
storageService.getGlideraToken(glideraService.getEnvironment(), function(err, token) {
if (err) $log.error(err);
$scope.glideraToken = token;
});
}); });
}); });

View File

@ -1,6 +1,6 @@
'use strict'; 'use strict';
angular.module('copayApp.controllers').controller('tabsController', function($rootScope, $log, $scope, $state, $stateParams, $timeout, incomingData, lodash, popupService) { angular.module('copayApp.controllers').controller('tabsController', function($rootScope, $log, $scope, $state, $stateParams, $timeout, incomingData, lodash, popupService, gettextCatalog) {
$scope.onScan = function(data) { $scope.onScan = function(data) {
if (!incomingData.redir(data)) { if (!incomingData.redir(data)) {

View File

@ -1,7 +1,7 @@
'use strict'; 'use strict';
angular.module('copayApp.controllers').controller('termOfUseController', angular.module('copayApp.controllers').controller('termOfUseController',
function($scope, $window, uxLanguage, gettextCatalog, externalLinkService) { function($scope, $window, uxLanguage, externalLinkService) {
$scope.lang = uxLanguage.currentLanguage; $scope.lang = uxLanguage.currentLanguage;
$scope.disclaimerUrl = $window.appConfig.disclaimerUrl; $scope.disclaimerUrl = $window.appConfig.disclaimerUrl;

View File

@ -1,8 +1,14 @@
'use strict'; 'use strict';
angular.module('copayApp.controllers').controller('translatorsController', angular.module('copayApp.controllers').controller('translatorsController',
function($scope, externalLinkService) { function($scope, externalLinkService, gettextCatalog) {
$scope.openExternalLink = function(url, target) { $scope.openExternalLink = function() {
externalLinkService.open(url, target); var url = 'https://crowdin.com/project/copay';
var optIn = true;
var title = gettextCatalog.getString('Open Translation Community');
var message = gettextCatalog.getString('You can make contributions by signing up on our Crowdin community translation website. Were looking forward to hearing from you!');
var okText = gettextCatalog.getString('Open Crowdin');
var cancelText = gettextCatalog.getString('Go Back');
externalLinkService.open(url, optIn, title, message, okText, cancelText);
}; };
}); });

View File

@ -121,12 +121,11 @@ angular.module('copayApp.controllers').controller('txDetailsController', functio
$scope.viewOnBlockchain = function() { $scope.viewOnBlockchain = function() {
var btx = $scope.btx; var btx = $scope.btx;
var url = 'https://' + ($scope.getShortNetworkName() == 'test' ? 'test-' : '') + 'insight.bitpay.com/tx/' + btx.txid; var url = 'https://' + ($scope.getShortNetworkName() == 'test' ? 'test-' : '') + 'insight.bitpay.com/tx/' + btx.txid;
var title = 'View Transaction on Insight'; var optIn = true;
var message = 'Would you like to view this transaction on the Insight blockchain explorer?'; var title = gettextCatalog.getString('View Transaction on Insight');
$scope.openExternalLink(url, true, title, message, 'Open Insight', 'Go back'); var message = gettextCatalog.getString('Would you like to view this transaction on the Insight blockchain explorer?');
}; var okText = gettextCatalog.getString('Open Insight');
var cancelText = gettextCatalog.getString('Go Back');
$scope.openExternalLink = function(url, optIn, title, message, okText, cancelText) {
externalLinkService.open(url, optIn, title, message, okText, cancelText); externalLinkService.open(url, optIn, title, message, okText, cancelText);
}; };

View File

@ -1,6 +1,6 @@
'use strict'; 'use strict';
angular.module('copayApp.controllers').controller('walletDetailsController', function($scope, $rootScope, $interval, $timeout, $filter, $log, $ionicModal, $ionicPopover, $state, $stateParams, $ionicHistory, profileService, lodash, configService, gettextCatalog, platformInfo, walletService, txpModalService, externalLinkService, popupService, addressbookService, storageService, $ionicScrollDelegate, $window) { angular.module('copayApp.controllers').controller('walletDetailsController', function($scope, $rootScope, $interval, $timeout, $filter, $log, $ionicModal, $ionicPopover, $state, $stateParams, $ionicHistory, profileService, lodash, configService, platformInfo, walletService, txpModalService, externalLinkService, popupService, addressbookService, storageService, $ionicScrollDelegate, $window) {
var HISTORY_SHOW_LIMIT = 10; var HISTORY_SHOW_LIMIT = 10;
var currentTxHistoryPage = 0; var currentTxHistoryPage = 0;
@ -316,7 +316,7 @@ angular.module('copayApp.controllers').controller('walletDetailsController', fun
var scrollWatcherInitialized; var scrollWatcherInitialized;
$scope.$on("$ionicView.enter", function(event, data) { $scope.$on("$ionicView.enter", function(event, data) {
setAndroidStatusBarColor(); if ($scope.isCordova && $scope.isAndroid) setAndroidStatusBarColor();
if (scrollWatcherInitialized || !$scope.amountIsCollapsible) { if (scrollWatcherInitialized || !$scope.amountIsCollapsible) {
return; return;
} }
@ -349,7 +349,7 @@ angular.module('copayApp.controllers').controller('walletDetailsController', fun
}); });
$scope.$on("$ionicView.beforeLeave", function(event, data) { $scope.$on("$ionicView.beforeLeave", function(event, data) {
if($window.StatusBar) { if ($window.StatusBar) {
$window.StatusBar.backgroundColorByHexString('#1e3186'); $window.StatusBar.backgroundColorByHexString('#1e3186');
} }
}); });
@ -362,20 +362,18 @@ angular.module('copayApp.controllers').controller('walletDetailsController', fun
function setAndroidStatusBarColor() { function setAndroidStatusBarColor() {
var SUBTRACT_AMOUNT = 15; var SUBTRACT_AMOUNT = 15;
if(!$scope.isAndroid) {
return;
}
var rgb = hexToRgb($scope.wallet.color); var rgb = hexToRgb($scope.wallet.color);
var keys = Object.keys(rgb); var keys = Object.keys(rgb);
keys.forEach(function(k) { keys.forEach(function(k) {
if(rgb[k] - SUBTRACT_AMOUNT < 0) { if (rgb[k] - SUBTRACT_AMOUNT < 0) {
rgb[k] = 0; rgb[k] = 0;
} else { } else {
rgb[k] -= SUBTRACT_AMOUNT; rgb[k] -= SUBTRACT_AMOUNT;
} }
}); });
var statusBarColorHexString = rgbToHex(rgb.r, rgb.g, rgb.b); var statusBarColorHexString = rgbToHex(rgb.r, rgb.g, rgb.b);
$window.StatusBar.backgroundColorByHexString(statusBarColorHexString); if ($window.StatusBar)
$window.StatusBar.backgroundColorByHexString(statusBarColorHexString);
} }
function hexToRgb(hex) { function hexToRgb(hex) {

View File

@ -305,6 +305,15 @@ angular.module('copayApp.services').factory('bitpayCardService', function($http,
}); });
}; };
root.getRates = function(currency, cb) {
$http(_get('/rates/' + currency)).then(function(data) {
$log.info('BitPay Get Rates: SUCCESS');
return cb(data.data.error, data.data.data);
}, function(data) {
return cb(_setError('BitPay Error: Get Rates', data));
});
};
/* /*
* CONSTANTS * CONSTANTS
*/ */

View File

@ -21,14 +21,10 @@ angular.module('copayApp.services').service('externalLinkService', function(plat
_restoreHandleOpenURL(old); _restoreHandleOpenURL(old);
} else { } else {
if (optIn) { if (optIn) {
var message = gettextCatalog.getString(message), var openBrowser = function(res) {
title = gettextCatalog.getString(title), if (res) window.open(url, '_system');
okText = gettextCatalog.getString(okText), _restoreHandleOpenURL(old);
cancelText = gettextCatalog.getString(cancelText), };
openBrowser = function(res) {
if (res) window.open(url, '_system');
_restoreHandleOpenURL(old);
};
popupService.showConfirm(title, message, okText, cancelText, openBrowser); popupService.showConfirm(title, message, okText, cancelText, openBrowser);
} else { } else {
window.open(url, '_system'); window.open(url, '_system');

View File

@ -765,6 +765,12 @@ angular.module('copayApp.services')
}); });
} }
if (opts.m) {
ret = lodash.filter(ret, function(w) {
return (w.credentials.m == opts.m);
});
}
if (opts.onlyComplete) { if (opts.onlyComplete) {
ret = lodash.filter(ret, function(w) { ret = lodash.filter(ret, function(w) {
return w.isComplete(); return w.isComplete();

View File

@ -1,7 +1,7 @@
'use strict'; 'use strict';
angular.module('copayApp.services') angular.module('copayApp.services')
.factory('trezor', function($log, $timeout, gettext, lodash, bitcore, hwWallet) { .factory('trezor', function($log, $timeout, lodash, bitcore, hwWallet) {
var root = {}; var root = {};
var SETTLE_TIME = 3000; var SETTLE_TIME = 3000;
@ -82,7 +82,7 @@ angular.module('copayApp.services')
if (txp.outputs.length > 1) if (txp.outputs.length > 1)
return callback('Only single output TXPs are supported in TREZOR'); return callback('Only single output TXPs are supported in TREZOR');
} else { } else {
return callback('Unknown TXP at TREZOR'); return callback('Unknown TXP at TREZOR');
} }
if (txp.outputs) { if (txp.outputs) {

View File

@ -8,42 +8,39 @@ angular.module('copayApp.services')
root.availableLanguages = [{ root.availableLanguages = [{
name: 'English', name: 'English',
isoCode: 'en', isoCode: 'en',
}, {
name: 'Český',
isoCode: 'cs',
}, {
name: 'Français',
isoCode: 'fr',
}, {
name: 'Italiano',
isoCode: 'it',
}, {
name: 'Deutsch',
isoCode: 'de',
}, { }, {
name: 'Español', name: 'Español',
isoCode: 'es', isoCode: 'es',
}, { }, {
name: '日本語', name: 'Français',
isoCode: 'ja', isoCode: 'fr',
useIdeograms: true, // }, {
}, { // name: 'Český',
name: '中文(简体)', // isoCode: 'cs',
isoCode: 'zh', // }, {
useIdeograms: true, // name: 'Italiano',
}, { // isoCode: 'it',
name: 'Polski', // }, {
isoCode: 'pl', // name: 'Deutsch',
}, { // isoCode: 'de',
name: 'Pусский', // }, {
isoCode: 'ru', // name: '日本語',
// isoCode: 'ja',
// useIdeograms: true,
// }, {
// name: '中文(简体)',
// isoCode: 'zh',
// useIdeograms: true,
// }, {
// name: 'Polski',
// isoCode: 'pl',
// }, {
// name: 'Pусский',
// isoCode: 'ru',
}]; }];
root._detect = function(cb) { root._detect = function(cb) {
return cb('en'); //disable auto detection for release;
var userLang, androidLang; var userLang, androidLang;
if (navigator && navigator.globalization) { if (navigator && navigator.globalization) {

View File

@ -144,7 +144,7 @@ angular.module('copayApp.services').factory('walletService', function($log, $tim
if (err instanceof errors.NOT_AUTHORIZED) { if (err instanceof errors.NOT_AUTHORIZED) {
return cb('WALLET_NOT_REGISTERED'); return cb('WALLET_NOT_REGISTERED');
} }
return cb(bwcError.msg(err, gettext('Could not update Wallet'))); return cb(err);
} }
return cb(null, ret); return cb(null, ret);
}); });
@ -405,7 +405,7 @@ angular.module('copayApp.services').factory('walletService', function($log, $tim
function getNewTxs(newTxs, skip, cb) { function getNewTxs(newTxs, skip, cb) {
getTxsFromServer(wallet, skip, endingTxid, requestLimit, function(err, res, shouldContinue) { getTxsFromServer(wallet, skip, endingTxid, requestLimit, function(err, res, shouldContinue) {
if (err) { if (err) {
$log.warn('BWS Error:' + err); //TODO $log.warn(bwcError.msg(err, 'BWS Error')); //TODO
if (err instanceof errors.CONNECTION_ERROR || (err.message && err.message.match(/5../))) { if (err instanceof errors.CONNECTION_ERROR || (err.message && err.message.match(/5../))) {
log.info('Retrying history download in 5 secs...'); log.info('Retrying history download in 5 secs...');
return $timeout(function() { return $timeout(function() {
@ -835,9 +835,11 @@ angular.module('copayApp.services').factory('walletService', function($log, $tim
root.encrypt = function(wallet, cb) { root.encrypt = function(wallet, cb) {
askPassword(wallet.name, gettext('Enter new spending password'), function(password) { var title = gettextCatalog.getString('Enter new spending password');
askPassword(wallet.name, title, function(password) {
if (!password) return cb('no password'); if (!password) return cb('no password');
askPassword(wallet.name, gettext('Confirm you new spending password'), function(password2) { title = gettextCatalog.getString('Confirm you new spending password');
askPassword(wallet.name, gettextCatalog.getString('Confirm you new spending password'), function(password2) {
if (!password2 || password != password2) if (!password2 || password != password2)
return cb('password mismatch'); return cb('password mismatch');
@ -850,7 +852,7 @@ angular.module('copayApp.services').factory('walletService', function($log, $tim
root.decrypt = function(wallet, cb) { root.decrypt = function(wallet, cb) {
$log.debug('Disabling private key encryption for' + wallet.name); $log.debug('Disabling private key encryption for' + wallet.name);
askPassword(wallet.name, gettext('Enter Spending Password'), function(password) { askPassword(wallet.name, gettextCatalog.getString('Enter Spending Password'), function(password) {
if (!password) return cb('no password'); if (!password) return cb('no password');
try { try {
@ -865,7 +867,7 @@ angular.module('copayApp.services').factory('walletService', function($log, $tim
root.handleEncryptedWallet = function(wallet, cb) { root.handleEncryptedWallet = function(wallet, cb) {
if (!root.isEncrypted(wallet)) return cb(); if (!root.isEncrypted(wallet)) return cb();
askPassword(wallet.name, gettext('Enter Spending Password'), function(password) { askPassword(wallet.name, gettextCatalog.getString('Enter Spending Password'), function(password) {
if (!password) return cb('No password'); if (!password) return cb('No password');
if (!wallet.checkPassword(password)) return cb('Wrong password'); if (!wallet.checkPassword(password)) return cb('Wrong password');
@ -930,13 +932,13 @@ angular.module('copayApp.services').factory('walletService', function($log, $tim
} }
root.prepare(wallet, function(err, password) { root.prepare(wallet, function(err, password) {
if (err) return cb('Prepare error: ' + err); if (err) return cb(bwcError.msg(err));
ongoingProcess.set('sendingTx', true, customStatusHandler); ongoingProcess.set('sendingTx', true, customStatusHandler);
publishFn(wallet, txp, function(err, publishedTxp) { publishFn(wallet, txp, function(err, publishedTxp) {
ongoingProcess.set('sendingTx', false, customStatusHandler); ongoingProcess.set('sendingTx', false, customStatusHandler);
if (err) return cb('Send Error: ' + err); if (err) return cb(bwcError.msg(err));
ongoingProcess.set('signingTx', true, customStatusHandler); ongoingProcess.set('signingTx', true, customStatusHandler);
root.signTx(wallet, publishedTxp, password, function(err, signedTxp) { root.signTx(wallet, publishedTxp, password, function(err, signedTxp) {
@ -946,10 +948,9 @@ angular.module('copayApp.services').factory('walletService', function($log, $tim
if (err) { if (err) {
$log.warn('sign error:' + err); $log.warn('sign error:' + err);
// TODO? var msg = err && err.message ?
var msg = err.message ?
err.message : err.message :
gettext('The payment was created but could not be completed. Please try again from home screen'); gettextCatalog.getString('The payment was created but could not be completed. Please try again from home screen');
$rootScope.$emit('Local/TxAction', wallet.id); $rootScope.$emit('Local/TxAction', wallet.id);
return cb(msg); return cb(msg);
@ -959,7 +960,7 @@ angular.module('copayApp.services').factory('walletService', function($log, $tim
ongoingProcess.set('broadcastingTx', true, customStatusHandler); ongoingProcess.set('broadcastingTx', true, customStatusHandler);
root.broadcastTx(wallet, signedTxp, function(err, broadcastedTxp) { root.broadcastTx(wallet, signedTxp, function(err, broadcastedTxp) {
ongoingProcess.set('broadcastingTx', false, customStatusHandler); ongoingProcess.set('broadcastingTx', false, customStatusHandler);
if (err) return cb('sign error' + err); if (err) return cb(bwcError.msg(err));
$rootScope.$emit('Local/TxAction', wallet.id); $rootScope.$emit('Local/TxAction', wallet.id);
var type = root.getViewStatus(wallet, broadcastedTxp); var type = root.getViewStatus(wallet, broadcastedTxp);

View File

@ -29,7 +29,7 @@
<span class="input-label" translate>Email</span> <span class="input-label" translate>Email</span>
<input type="text" <input type="text"
id="email" id="email"
placeholder="name@example.com" placeholder="{{'name@example.com' | translate}}"
name="email" name="email"
ng-model="addressbookEntry.email"> ng-model="addressbookEntry.email">
</label> </label>

View File

@ -20,7 +20,7 @@
<div class="addr-list"> <div class="addr-list">
<div class="addr-explanation"> <div class="addr-explanation">
<div class="addr-description"> <div class="addr-description">
<span translate>Each bitcoin wallet can generate billions of addresses from your 12-word backup. A new address is automatically generated and shown each time your recive a payment.</span><a ng-click="showInformation()" ng-if="!showInfo" translate>Why?</a> <span translate>Each bitcoin wallet can generate billions of addresses from your 12-word backup. A new address is automatically generated and shown each time you receive a payment.</span><a ng-click="showInformation()" ng-if="!showInfo" translate>Why?</a>
</div> </div>
</div> </div>

View File

@ -42,6 +42,7 @@
<div class="title"> <div class="title">
<span translate>Amount</span> <span translate>Amount</span>
<div class="size-12" ng-show="isGiftCard">Purchase Amount is limited to USD 1000 per day</div> <div class="size-12" ng-show="isGiftCard">Purchase Amount is limited to USD 1000 per day</div>
<div class="size-12" ng-if="cardId" ng-init="getRates()">{{exchangeRate}}</div>
<div ng-show="isGlidera"> <div ng-show="isGlidera">
<div class="limits" ng-show="limits && isGlidera == 'buy'"> <div class="limits" ng-show="limits && isGlidera == 'buy'">
<span>Daily buy limit</span>: <span>Daily buy limit</span>:

View File

@ -7,11 +7,11 @@
</ion-nav-buttons> </ion-nav-buttons>
</ion-nav-bar> </ion-nav-bar>
<ion-content scroll="false"> <ion-content scroll="false">
<div class="onboarding-topic">Are you being watched?</div> <div class="onboarding-topic" translate>Are you being watched?</div>
<div class="onboarding-description">Now is a perfect time to assess your surroundings. Nearby windows? Hidden cameras? Shoulder-spies?</div> <div class="onboarding-description" translate>Now is a perfect time to assess your surroundings. Nearby windows? Hidden cameras? Shoulder-spies?</div>
<div class="onboarding-illustration-backup-warning"></div> <div class="onboarding-illustration-backup-warning"></div>
<div id="cta-buttons"> <div id="cta-buttons">
<div class="onboarding-tldr">Anyone with your backup phrase can access or spend your bitcoin.</div> <div class="onboarding-tldr" translate>Anyone with your backup phrase can access or spend your bitcoin.</div>
<button class="button button-standard button-primary" ng-click="openPopup()" translate>All clear, let's do this</button> <button class="button button-standard button-primary" ng-click="openPopup()" translate>All clear, let's do this</button>
</div> </div>
</ion-content> </ion-content>

View File

@ -19,6 +19,7 @@
</div> </div>
<div class="amount-label"> <div class="amount-label">
<div class="amount">{{displayAmount || '...'}} <span class="unit">{{displayUnit}}</span></div> <div class="amount">{{displayAmount || '...'}} <span class="unit">{{displayUnit}}</span></div>
<div class="right size-12" ng-if="cardId" ng-init="getRates()">{{exchangeRate}}</div>
<div class="alternative">{{alternativeAmountStr || '...'}}</div> <div class="alternative">{{alternativeAmountStr || '...'}}</div>
</div> </div>
</div> </div>
@ -75,7 +76,7 @@
<i class="icon bp-arrow-right"></i> <i class="icon bp-arrow-right"></i>
</a> </a>
<div class="item single-line" ng-if="!insufficientFunds && !noMatchingWallet && !isGlidera"> <div class="item single-line" ng-if="!insufficientFunds && !noMatchingWallet && !isGlidera">
<span class="label" translate>Fee: {{feeLevel}}</span> <span class="label">{{'Fee' | translate}}: {{feeLevel | translate}}</span>
<span class="item-note"> <span class="item-note">
{{fee || '...'}} {{fee || '...'}}
</span> </span>

View File

@ -39,7 +39,7 @@
<span>{{comment}}</span> <span>{{comment}}</span>
</div> </div>
<div ng-if="showForm" class="form-fade-in"> <div ng-if="showForm" class="form-fade-in">
<textarea class="user-feedback" ng-model="feedback.value" rows="5" placeholder="Your ideas, feedback, or comments" autofocus></textarea> <textarea class="user-feedback" ng-model="feedback.value" rows="5" placeholder="{{'Your ideas, feedback, or comments' | translate}}" autofocus></textarea>
<button ng-disabled="!feedback.value" type="submit" class="button button-standard button-primary" ng-click="sendFeedback(feedback.value)" translate> <button ng-disabled="!feedback.value" type="submit" class="button button-standard button-primary" ng-click="sendFeedback(feedback.value)" translate>
Send Send
</button> </button>

View File

@ -31,13 +31,13 @@
Connect to Glidera Connect to Glidera
</button> </button>
<div class="m10t"> <div class="m10t">
<a href ng-click="showOauthForm = true" class="button button-standard button-secondary buttion-clear" translate> <a href ng-click="showOauthForm = true" class="button button-standard button-secondary buttion-clear">
Have the OAuth Code? Have the OAuth Code?
</a> </a>
</div> </div>
<div class="disclosure"> <div class="disclosure">
<p translate>Glidera Inc. (Glidera) is providing the service of buying or selling bitcoin to BitPay users. To enable this service, Glidera has registered with US Treasury Departments FinCEN as a Money Service Business (#31000042625755). Users of BitPay must agree to the service agreement presented by Glidera prior to obtaining Glideras service of buying or selling bitcoin.</p> <p>Glidera Inc. (Glidera) is providing the service of buying or selling bitcoin to BitPay users. To enable this service, Glidera has registered with US Treasury Departments FinCEN as a Money Service Business (#31000042625755). Users of BitPay must agree to the service agreement presented by Glidera prior to obtaining Glideras service of buying or selling bitcoin.</p>
<p>Service is available in the U.S. and Canada. In the U.S. AZ, CA, CO, DE, GA, IL, KS, MA, MD, ME, MN, MO, MT, NJ, NV, PA, SC, TN, TX, UT, WI. In Canada AB, BC, MB, NB, NL, NS, NT, NU, ON, PE, SK, YT.</p> <p>Service is available in the U.S. and Canada.</p>
</div> </div>
</div> </div>
<div ng-show="showOauthForm"> <div ng-show="showOauthForm">

View File

@ -13,7 +13,7 @@
<div class="text-center"> <div class="text-center">
<img src="img/glidera-logo.png" width="100"> <img src="img/glidera-logo.png" width="100">
<div class="m20t" translate> <div class="m20t">
Connecting... Connecting...
</div> </div>
</div> </div>

View File

@ -1,56 +1,56 @@
<div id="terms"> <div id="terms">
<p translate> <p>
This is a binding Agreement between BitPay, Inc. (&ldquo;BitPay&rdquo; or &ldquo;We&rdquo;) and the person, persons, or entity (&ldquo;You&rdquo; or &ldquo;Your&rdquo;) using the service, Software, or application (&ldquo;Software&rdquo;). This is a binding Agreement between BitPay, Inc. (&ldquo;BitPay&rdquo; or &ldquo;We&rdquo;) and the person, persons, or entity (&ldquo;You&rdquo; or &ldquo;Your&rdquo;) using the service, Software, or application (&ldquo;Software&rdquo;).
</p> </p>
<p class="terms__heading" translate> <p class="terms__heading">
RIGHTS AND OBLIGATIONS RIGHTS AND OBLIGATIONS
</p> </p>
<p translate> <p>
BitPay provides the Software solely on the terms and conditions set forth in this Agreement and on the condition that You accept and comply with them. By using the Software You (a) accept this Agreement and agree that You are legally bound by its terms; and (b) represent and warrant that: (i) You are of legal age to enter into a binding agreement; and (ii) if You are a corporation, governmental organization or other legal entity, You have the right, power and authority to enter into this Agreement on behalf of the corporation, governmental organization or other legal entity and bind them to these terms. BitPay provides the Software solely on the terms and conditions set forth in this Agreement and on the condition that You accept and comply with them. By using the Software You (a) accept this Agreement and agree that You are legally bound by its terms; and (b) represent and warrant that: (i) You are of legal age to enter into a binding agreement; and (ii) if You are a corporation, governmental organization or other legal entity, You have the right, power and authority to enter into this Agreement on behalf of the corporation, governmental organization or other legal entity and bind them to these terms.
</p> </p>
<p translate> <p>
This Software functions as a free, open source, and multi-signature digital wallet. The Software does not constitute an account where We or other third parties serve as financial intermediaries or custodians of Your bitcoin(s). This Software functions as a free, open source, and multi-signature digital wallet. The Software does not constitute an account where We or other third parties serve as financial intermediaries or custodians of Your bitcoin(s).
</p> </p>
<p translate> <p>
While the Software has undergone beta testing and continues to be improved by feedback from the open-source user and developer community, We cannot guarantee there will not be bugs in the Software. You acknowledge that Your use of this Software is at Your own discretion and in compliance with all applicable laws. You are responsible for safekeeping Your passwords, private key pairs, PINs, and any other codes You use to access the Software. While the Software has undergone beta testing and continues to be improved by feedback from the open-source user and developer community, We cannot guarantee there will not be bugs in the Software. You acknowledge that Your use of this Software is at Your own discretion and in compliance with all applicable laws. You are responsible for safekeeping Your passwords, private key pairs, PINs, and any other codes You use to access the Software.
</p> </p>
<p translate> <p>
IF YOU LOSE ACCESS TO YOUR BITCOIN WALLET OR YOUR ENCRYPTED PRIVATE KEYS AND YOU HAVE NOT SEPARATELY STORED A BACKUP OF YOUR WALLET AND CORRESPONDING PASSWORD, YOU ACKNOWLEDGE AND AGREE THAT ANY BITCOIN YOU HAVE ASSOCIATED WITH THAT WALLET WILL BECOME INACCESSIBLE. All transaction requests are irreversible. The authors of the Software, employees and affiliates of BitPay, copyright holders, and BitPay, Inc. cannot retrieve Your private keys or passwords if You lose or forget them and cannot guarantee transaction confirmation as they do not have control over the bitcoin network. IF YOU LOSE ACCESS TO YOUR BITCOIN WALLET OR YOUR ENCRYPTED PRIVATE KEYS AND YOU HAVE NOT SEPARATELY STORED A BACKUP OF YOUR WALLET AND CORRESPONDING PASSWORD, YOU ACKNOWLEDGE AND AGREE THAT ANY BITCOIN YOU HAVE ASSOCIATED WITH THAT WALLET WILL BECOME INACCESSIBLE. All transaction requests are irreversible. The authors of the Software, employees and affiliates of BitPay, copyright holders, and BitPay, Inc. cannot retrieve Your private keys or passwords if You lose or forget them and cannot guarantee transaction confirmation as they do not have control over the bitcoin network.
</p> </p>
<p class="terms__heading" translate> <p class="terms__heading">
DISCLAIMER DISCLAIMER
</p> </p>
<p translate> <p>
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 OF THE SOFTWARE, EMPLOYEES AND AFFILIATES OF BITPAY, COPYRIGHT HOLDERS, OR BITPAY, INC. 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. 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 OF THE SOFTWARE, EMPLOYEES AND AFFILIATES OF BITPAY, COPYRIGHT HOLDERS, OR BITPAY, INC. 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.
</p> </p>
<p translate> <p>
IN NO EVENT WILL BITPAY OR ITS AFFILIATES, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO YOU OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. IN NO EVENT WILL BITPAY OR ITS AFFILIATES, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO YOU OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
</p> </p>
<p class="terms__heading" translate> <p class="terms__heading">
INTELLECTUAL PROPERTY INTELLECTUAL PROPERTY
</p> </p>
<p translate> <p>
We retain all right, title, and interest in and to the Content and all of BitPays brands, logos, and trademarks, including, but not limited to, BitPay, Inc., BitPay, BitPay &ndash; Secure Bitcoin Wallet, BitPay Wallet, BitPay App, Copay, BitPay Prepaid Card, and variations of the wording of the aforementioned brands, logos, and trademarks. We retain all right, title, and interest in and to the Content and all of BitPays brands, logos, and trademarks, including, but not limited to, BitPay, Inc., BitPay, BitPay &ndash; Secure Bitcoin Wallet, BitPay Wallet, BitPay App, Copay, BitPay Prepaid Card, and variations of the wording of the aforementioned brands, logos, and trademarks.
</p> </p>
<p class="terms__heading" translate> <p class="terms__heading">
CHOICE OF LAW CHOICE OF LAW
</p> </p>
<p translate> <p>
This Agreement, and its application and interpretation, shall be governed exclusively by the laws of the State of Georgia, without regard to its conflict of law rules. You consent to the exclusive jurisdiction of the federal and state courts located in or near Atlanta, Georgia for any dispute arising under this Agreement. This Agreement, and its application and interpretation, shall be governed exclusively by the laws of the State of Georgia, without regard to its conflict of law rules. You consent to the exclusive jurisdiction of the federal and state courts located in or near Atlanta, Georgia for any dispute arising under this Agreement.
</p> </p>
<p class="terms__heading" translate> <p class="terms__heading">
SEVERABILITY SEVERABILITY
</p> </p>
<p translate> <p>
In the event any court shall declare any section or sections of this Agreement invalid or void, such declaration shall not invalidate the entire Agreement and all other paragraphs of the Agreement shall remain in full force and effect. In the event any court shall declare any section or sections of this Agreement invalid or void, such declaration shall not invalidate the entire Agreement and all other paragraphs of the Agreement shall remain in full force and effect.
</p> </p>
<p class="terms__heading" translate> <p class="terms__heading">
BINDING AGREEMENT BINDING AGREEMENT
</p> </p>
<p translate> <p>
The terms and provisions of this Agreement are binding upon Your heirs, successors, assigns, and other representatives. This Agreement may be executed in counterparts, each of which shall be considered to be an original, but both of which constitute the same Agreement. The terms and provisions of this Agreement are binding upon Your heirs, successors, assigns, and other representatives. This Agreement may be executed in counterparts, each of which shall be considered to be an original, but both of which constitute the same Agreement.
</p> </p>
<p translate> <p>
You assume any and all risks associated with the use of the Software. We reserve the right to modify this Agreement from time to time. You assume any and all risks associated with the use of the Software. We reserve the right to modify this Agreement from time to time.
</p> </p>
</div> </div>

View File

@ -7,9 +7,10 @@
<img src="img/icon-wallet.svg" ng-style="{'background-color': wallet.color}" class="bg"/> <img src="img/icon-wallet.svg" ng-style="{'background-color': wallet.color}" class="bg"/>
</i> </i>
<span class="wallet-name">{{wallet.name || wallet.id}}</span> <span class="wallet-name">{{wallet.name || wallet.id}}</span>
<span class="item-note m10l"> <span class="item-note m10l" ng-if="!wallet.balanceHidden">
{{wallet.status.availableBalanceStr}} {{wallet.status.availableBalanceStr}}
</span> </span>
<span class="item-note m10l" ng-if="wallet.balanceHidden" translate>[Balance Hidden]</span>
</div> </div>
</div> </div>
</ion-slide-page> </ion-slide-page>

View File

@ -12,7 +12,7 @@
</ion-content> </ion-content>
<div id="agree-to-terms"> <div id="agree-to-terms">
<div class="text-center"> <div class="text-center">
<a ng-click="openExternalLink('https://copay.io/disclaimer', true, 'View Terms of Service', 'The official English Terms of Service are available on the BitPay website. Would you like to view them?', 'Open Website', 'Go Back')" ng-show="lang != 'en'" translate>Official English Disclaimer</a> <a ng-click="openExternalLink()" ng-show="lang != 'en'" translate>Official English Disclaimer</a>
</div> </div>
<div class="row"> <div class="row">
<div class="col col-20"> <div class="col col-20">

View File

@ -164,13 +164,15 @@
<click-to-accept <click-to-accept
ng-click="onConfirm(statusChangeHandler)" ng-click="onConfirm(statusChangeHandler)"
ng-if="tx.pendingForUs && canSign && !paymentExpired && hasClick" ng-if="tx.pendingForUs && canSign && !paymentExpired && hasClick"
click-send-status="sendStatus"> click-send-status="sendStatus"
has-wallet-chosen="true">
Click to accept Click to accept
</click-to-accept> </click-to-accept>
<slide-to-accept <slide-to-accept
ng-if="tx.pendingForUs && canSign && !paymentExpired && !hasClick" ng-if="tx.pendingForUs && canSign && !paymentExpired && !hasClick"
slide-on-confirm="onConfirm()" slide-on-confirm="onConfirm()"
slide-send-status="sendStatus"> slide-send-status="sendStatus"
has-wallet-chosen="true">
Slide to accept Slide to accept
</slide-to-accept> </slide-to-accept>
<slide-to-accept-success <slide-to-accept-success

View File

@ -15,7 +15,7 @@
<div class="onboarding-illustration-secure"></div> <div class="onboarding-illustration-secure"></div>
<div class="cta-buttons"> <div class="cta-buttons">
<div class="onboarding-tldr" translate>Just scan the code to pay.</div> <div class="onboarding-tldr" translate>Just scan the code to pay.</div>
<button class="button button-standard button-secondary" ng-click="slideNext()"> <button class="button button-standard button-secondary" ng-click="slideNext()" translate>
Got it &rarr; Got it &rarr;
</button> </button>
</div> </div>
@ -30,7 +30,7 @@
</div> </div>
<div class="cta-buttons"> <div class="cta-buttons">
<div class="onboarding-tldr" translate>The exchange rate changes with the market.</div> <div class="onboarding-tldr" translate>The exchange rate changes with the market.</div>
<button class="button button-standard button-secondary" ng-click="slideNext()"> <button class="button button-standard button-secondary" ng-click="slideNext()" translate>
Makes sense &rarr; Makes sense &rarr;
</button> </button>
</div> </div>
@ -38,12 +38,12 @@
</ion-slide-page> </ion-slide-page>
<ion-slide-page> <ion-slide-page>
<ion-content id="onboard-tour-control" scroll="false"> <ion-content id="onboard-tour-control" scroll="false">
<div translate class="onboarding-topic">You control your bitcoin.</div> <div class="onboarding-topic" translate>You control your bitcoin.</div>
<div translate class="onboarding-description">This app stores your bitcoin with cutting-edge security.</div> <div class="onboarding-description" translate>This app stores your bitcoin with cutting-edge security.</div>
<div class="onboarding-illustration-control"></div> <div class="onboarding-illustration-control"></div>
<div class="cta-buttons"> <div class="cta-buttons">
<div class="onboarding-tldr" translate>Not even BitPay can access it.</div> <div class="onboarding-tldr" translate>Not even BitPay can access it.</div>
<button class="button button-standard button-primary" ng-click="createDefaultWallet()"> <button class="button button-standard button-primary" ng-click="createDefaultWallet()" translate>
Create bitcoin wallet Create bitcoin wallet
</button> </button>
</div> </div>

View File

@ -16,7 +16,7 @@
v{{version}} v{{version}}
</span> </span>
</div> </div>
<div class="item item-icon-left" ng-click="openExternalLink('https://github.com/bitpay/'+name+'/tree/'+commitHash+'', true, 'Open GitHub Project', 'You can see the latest developments and contribute to this open source app by visiting our project on GitHub.', 'Open GitHub', 'Go Back')"> <div class="item item-icon-left" ng-click="openExternalLink()">
<i class="icon ion-social-github-outline"></i> <i class="icon ion-social-github-outline"></i>
<span translate>Commit hash</span> <span translate>Commit hash</span>
<span class="item-note"> <span class="item-note">
@ -30,11 +30,11 @@
<span translate>Terms of Use</span> <span translate>Terms of Use</span>
<i class="icon bp-arrow-right"></i> <i class="icon bp-arrow-right"></i>
</a> </a>
<!-- <a class="item item-icon-left item-icon-right" ui-sref="tabs.about.translators"> <a class="item item-icon-left item-icon-right" ui-sref="tabs.about.translators">
<i class="icon ion-ios-people-outline"></i> <i class="icon ion-ios-people-outline"></i>
<span translate>Translators</span> <span translate>Translators</span>
<i class="icon bp-arrow-right"></i> <i class="icon bp-arrow-right"></i>
</a> Disabled for release--> </a>
<a class="item item-icon-left item-icon-right" ui-sref="tabs.about.logs"> <a class="item item-icon-left item-icon-right" ui-sref="tabs.about.logs">
<i class="icon ion-ios-copy-outline"></i> <i class="icon ion-ios-copy-outline"></i>
<span translate>Session log</span> <span translate>Session log</span>

View File

@ -12,14 +12,18 @@
ng-click="save(lang.isoCode)">{{lang.name}} ng-click="save(lang.isoCode)">{{lang.name}}
</ion-radio> </ion-radio>
</div> </div>
<div class="padding"> <div class="settings-explanation">
<span translate>Were always looking for translation contributions! You can make corrections or help to make this app available in your native language by joining our community on Crowdin.</span> <div class="settings-description" translate>
<button class="button button-standard button-primary" ng-click="openExternalLink(true, 'Open Translation Community', 'You can make contributions by signing up on our Crowdin community translation website. Were looking forward to hearing from you! Were always looking for translation contributions! You can make corrections or help to make this app available in your native language by joining our community on Crowdin.
', 'Open Crowdin', 'Go Back')" translate>Contribute Translations </div>
</button>
<span translate>
Don't see your language on Crowdin? Contact the Owner on Crowdin! We'd love to support your language.
</span>
</div> </div>
<div class="settings-explanation">
<div class="settings-description" translate>
Don't see your language on Crowdin? Contact the Owner on Crowdin! We'd love to support your language.
</div>
</div>
<div class="padding">
<a class="button button-standard button-primary" ng-click="openExternalLink()" translate>Contribute Translations</a>
<div>
</ion-content> </ion-content>
</ion-view> </ion-view>

View File

@ -10,7 +10,7 @@
spinner="ios-small" spinner="ios-small"
on-refresh="onRefresh()"> on-refresh="onRefresh()">
</ion-refresher> </ion-refresher>
<div class="release ng-hide" ng-show="newRelease" ng-click="openExternalLink('https://github.com/bitpay/copay/releases/latest', true, 'Update Available', 'An update to this app is available. For your security, please update to the latest version.', 'View Update', 'Go Back')"> <div class="release ng-hide" ng-show="newRelease" ng-click="openExternalLink()">
<span translate>An update to this app is available</span><span><i class="icon bp-arrow-right"></i></span> <span translate>An update to this app is available</span><span><i class="icon bp-arrow-right"></i></span>
</div> </div>
<div class="ng-hide" ng-show="showRateCard.value" ng-include="'views/feedback/rateCard.html'"></div> <div class="ng-hide" ng-show="showRateCard.value" ng-include="'views/feedback/rateCard.html'"></div>
@ -136,7 +136,7 @@
<i class="icon big-icon-svg"> <i class="icon big-icon-svg">
<div class="bg icon-amazon"></div> <div class="bg icon-amazon"></div>
</i> </i>
<span translate>Amazon.com Gift Cards</span> <span>Amazon.com Gift Cards</span>
<i class="icon bp-arrow-right"></i> <i class="icon bp-arrow-right"></i>
</a> </a>
</div> </div>

View File

@ -2,7 +2,7 @@
<ion-nav-bar class="bar-royal"> <ion-nav-bar class="bar-royal">
<ion-nav-title>{{'Send' | translate}}</ion-nav-title> <ion-nav-title>{{'Send' | translate}}</ion-nav-title>
</ion-nav-bar> </ion-nav-bar>
<ion-content> <ion-content ng-show="!checkingBalance">
<div ng-if="hasFunds == false" class="zero-state"> <div ng-if="hasFunds == false" class="zero-state">
<div> <div>
<i class="icon zero-state-icon"> <i class="icon zero-state-icon">

View File

@ -10,66 +10,64 @@
<i class="icon big-icon-svg"> <i class="icon big-icon-svg">
<img src="img/icon-exchange.svg" class="bg"/> <img src="img/icon-exchange.svg" class="bg"/>
</i> </i>
<span translate>Bitcoin Exchanges</span> <span>{{'Bitcoin Exchanges' | translate}}</span>
<i class="icon bp-arrow-right"></i> <i class="icon bp-arrow-right"></i>
</a> </a>
<a class="item item-icon-left item-icon-right" ui-sref="tabs.addressbook"> <a class="item item-icon-left item-icon-right" ui-sref="tabs.addressbook">
<i class="icon big-icon-svg"> <i class="icon big-icon-svg">
<img src="img/icon-address-book.svg" class="bg"/> <img src="img/icon-address-book.svg" class="bg"/>
</i> </i>
<span translate>Address Book</span> <span>{{'Address Book' | translate}}</span>
<i class="icon bp-arrow-right"></i> <i class="icon bp-arrow-right"></i>
</a> </a>
<a class="item item-icon-left item-icon-right" ng-click="openExternalLink('https://help.bitpay.com/bitpay-app', true, 'BitPay Help Center', 'Help and support information is available at the BitPay Help Center website. Would you like to go there now?', 'Open Help Center', 'Go Back')"> <a class="item item-icon-left item-icon-right" ng-click="openExternalLink()">
<i class="icon big-icon-svg"> <i class="icon big-icon-svg">
<img src="img/icon-help-support.svg" class="bg"/> <img src="img/icon-help-support.svg" class="bg"/>
</i> </i>
<span translate>Help &amp; Support</span> <span>{{'Help & Support' | translate }}</span>
<i class="icon big-icon-svg"> <i class="icon big-icon-svg">
<img src="img/icon-link.svg" class="bg just-a-hint"/> <img src="img/icon-link.svg" class="bg just-a-hint"/>
</i> </i>
</a> </a>
<a class="item item-icon-left item-icon-right" ui-sref="tabs.feedback"> <a class="item item-icon-left item-icon-right" ui-sref="tabs.feedback">
<i class="icon big-icon-svg"> <i class="icon big-icon-svg">
<img src="img/icon-language.svg" class="bg"/> <img src="img/icon-send-feedback.svg" class="bg"/>
</i> </i>
<span translate>Send Feedback</span> <span>{{'Send Feedback' | translate}}</span>
<i class="icon bp-arrow-right"></i> <i class="icon bp-arrow-right"></i>
</a> </a>
<a ng-if="isCordova" class="item item-icon-left item-icon-right" ui-sref="tabs.shareApp({score: 4, skipped: true, fromSettings: true})"> <a ng-if="isCordova" class="item item-icon-left item-icon-right" ui-sref="tabs.shareApp({score: 4, skipped: true, fromSettings: true})">
<i class="icon big-icon-svg"> <i class="icon big-icon-svg">
<img src="img/icon-send-feedback.svg" class="bg"/> <img src="img/icon-heart.svg" class="bg"/>
</i> </i>
<span translate>Share {{appName}}</span> <span>{{'Share'|translate}} {{appName}}</span>
<i class="icon bp-arrow-right"></i> <i class="icon bp-arrow-right"></i>
</a> </a>
<div class="item item-divider" translate>Preferences</div> <div class="item item-divider">{{'Preferences' | translate}}</div>
<a class="item item-icon-left item-icon-right" ui-sref="tabs.notifications"> <a class="item item-icon-left item-icon-right" ui-sref="tabs.notifications">
<i class="icon big-icon-svg"> <i class="icon big-icon-svg">
<img src="img/icon-notifications.svg" class="bg"/> <img src="img/icon-notifications.svg" class="bg"/>
</i> </i>
<span translate>Notifications</span> <span>{{'Notifications' | translate}}</span>
<i class="icon bp-arrow-right"></i> <i class="icon bp-arrow-right"></i>
</a> </a>
<!-- See https://github.com/bitpay/bitpay-wallet/issues/265 --> <a class="item item-icon-left item-icon-right" ui-sref="tabs.language">
<!-- <a class="item item&#45;icon&#45;left item&#45;icon&#45;right" ui&#45;sref="tabs.language"> --> <i class="icon big-icon-svg">
<!-- <i class="icon big&#45;icon&#45;svg"> --> <img src="img/icon-language.svg" class="bg"/>
<!-- <img src="img/icon&#45;language.svg" class="bg"/> --> </i>
<!-- </i> --> <span>{{'Language' | translate}}</span>
<!-- <span translate>Language</span> --> <span class="item-note">
<!-- <span class="item&#45;note"> --> {{currentLanguageName|translate}}
<!-- {{currentLanguageName|translate}} --> </span>
<!-- </span> --> <i class="icon bp-arrow-right"></i>
<!-- <i class="icon bp&#45;arrow&#45;right"></i> --> </a>
<!-- </a> -->
<!-- -->
<a class="item has-setting-value item-icon-left item-icon-right" ui-sref="tabs.unit"> <a class="item has-setting-value item-icon-left item-icon-right" ui-sref="tabs.unit">
<i class="icon big-icon-svg"> <i class="icon big-icon-svg">
<img src="img/icon-unit.svg" class="bg"/> <img src="img/icon-unit.svg" class="bg"/>
</i> </i>
<span class="setting-title" translate>Bitcoin Unit</span> <span class="setting-title">{{'Bitcoin Unit' | translate}}</span>
<span class="setting-value"> <span class="setting-value">
{{unitName}} {{unitName}}
</span> </span>
@ -80,7 +78,7 @@
<i class="icon big-icon-svg"> <i class="icon big-icon-svg">
<img src="img/icon-alternative-currency.svg" class="bg"/> <img src="img/icon-alternative-currency.svg" class="bg"/>
</i> </i>
<span class="setting-title" translate>Alternative Currency</span> <span class="setting-title">{{'Alternative Currency' | translate}}</span>
<span class="setting-value"> <span class="setting-value">
{{selectedAlternative.name}} {{selectedAlternative.name}}
</span> </span>
@ -91,14 +89,14 @@
<i class="icon big-icon-svg"> <i class="icon big-icon-svg">
<img src="img/icon-network.svg" class="bg"/> <img src="img/icon-network.svg" class="bg"/>
</i> </i>
<span class="setting-title" translate>Bitcoin Network Fee Policy</span> <span class="setting-title">{{'Bitcoin Network Fee Policy' | translate}}</span>
<span class="setting-value"> <span class="setting-value">
{{feeOpts[currentFeeLevel]|translate}} {{feeOpts[currentFeeLevel]|translate}}
</span> </span>
<i class="icon bp-arrow-right"></i> <i class="icon bp-arrow-right"></i>
</a> </a>
<div class="item item-divider" ng-show="wallets[0]" translate>Wallets &amp; Integrations</div> <div class="item item-divider" ng-show="wallets[0]">{{'Wallets & Integrations' | translate}}</div>
<a class="item item-icon-left item-icon-right" href <a class="item item-icon-left item-icon-right" href
ui-sref="tabs.preferences({'walletId': item.id})" ui-sref="tabs.preferences({'walletId': item.id})"
@ -112,8 +110,8 @@
{{item.m}}-of-{{item.n}} {{item.m}}-of-{{item.n}}
</span> </span>
</span> </span>
<span class="right text-light assertive" ng-show="!item.isComplete()" translate> <span class="right text-light assertive" ng-show="!item.isComplete()">
Incomplete {{'Incomplete' | translate}}
</span> </span>
<i class="icon bp-arrow-right"></i> <i class="icon bp-arrow-right"></i>
</a> </a>
@ -137,28 +135,18 @@
<div class="item item-divider"></div> <div class="item item-divider"></div>
<a class="ng-hide item item-icon-left item-icon-right" href ng-hide="true">
<i class="icon big-icon-svg">
<img src="img/icon-heart.svg" class="bg"/>
</i>
<span translate>Tell a friend</span>
<i class="icon bp-arrow-right"></i>
</a>
<div class="ng-hide item item-divider" ng-hide="true"></div>
<a class="item item-icon-right item-icon-left" href ui-sref="tabs.advanced"> <a class="item item-icon-right item-icon-left" href ui-sref="tabs.advanced">
<i class="icon big-icon-svg"> <i class="icon big-icon-svg">
<img src="img/icon-advanced.svg" class="bg"/> <img src="img/icon-advanced.svg" class="bg"/>
</i> </i>
<span translate>Advanced</span> <span>{{'Advanced' | translate}}</span>
<i class="icon bp-arrow-right"></i> <i class="icon bp-arrow-right"></i>
</a> </a>
<a class="item item-icon-left item-icon-right" href ui-sref="tabs.about"> <a class="item item-icon-left item-icon-right" href ui-sref="tabs.about">
<i class="icon big-icon-svg"> <i class="icon big-icon-svg">
<img src="img/icon-about.svg" class="bg"/> <img src="img/icon-about.svg" class="bg"/>
</i> </i>
<span translate>About</span> {{appName}} <span>{{'About' | translate}}</span> {{appName}}
<i class="icon bp-arrow-right"></i> <i class="icon bp-arrow-right"></i>
</a> </a>
<div class="item item-divider"></div> <div class="item item-divider"></div>

View File

@ -1,22 +1,22 @@
<ion-tabs class="tabs-icon-top tabs-color-active-positive ion-tabs-transparent {{$root.hideTabs}}"> <ion-tabs class="tabs-icon-top tabs-color-active-positive ion-tabs-transparent {{$root.hideTabs}}">
<ion-tab title="Home" icon-off="ico-home" icon-on="ico-home-selected" ui-sref="tabs.home"> <ion-tab title="{{'Home'|translate}}" icon-off="ico-home" icon-on="ico-home-selected" ui-sref="tabs.home">
<ion-nav-view name="tab-home"></ion-nav-view> <ion-nav-view name="tab-home"></ion-nav-view>
</ion-tab> </ion-tab>
<ion-tab title="Receive" icon-off="ico-receive" icon-on="ico-receive-selected" ui-sref="tabs.receive"> <ion-tab title="{{'Receive'|translate}}" icon-off="ico-receive" icon-on="ico-receive-selected" ui-sref="tabs.receive">
<ion-nav-view name="tab-receive"></ion-nav-view> <ion-nav-view name="tab-receive"></ion-nav-view>
</ion-tab> </ion-tab>
<ion-tab title="Scan" icon-off="ico-scan" icon-on="ico-scan-selected" ui-sref="tabs.scan"> <ion-tab title="{{'Scan'|translate}}" icon-off="ico-scan" icon-on="ico-scan-selected" ui-sref="tabs.scan">
<ion-nav-view name="tab-scan"></ion-nav-view> <ion-nav-view name="tab-scan"></ion-nav-view>
</ion-tab> </ion-tab>
<ion-tab title="Send" icon-off="ico-send" icon-on="ico-send-selected" ui-sref="tabs.send"> <ion-tab title="{{'Send'|translate}}" icon-off="ico-send" icon-on="ico-send-selected" ui-sref="tabs.send">
<ion-nav-view name="tab-send"></ion-nav-view> <ion-nav-view name="tab-send"></ion-nav-view>
</ion-tab> </ion-tab>
<ion-tab title="Settings" icon-off="ico-settings" icon-on="ico-settings-selected" ui-sref="tabs.settings"> <ion-tab title="{{'Settings'|translate}}" icon-off="ico-settings" icon-on="ico-settings-selected" ui-sref="tabs.settings">
<ion-nav-view name="tab-settings"></ion-nav-view> <ion-nav-view name="tab-settings"></ion-nav-view>
</ion-tab> </ion-tab>
</ion-tabs> </ion-tabs>

View File

@ -11,7 +11,7 @@
</div> </div>
<button class="button button-standard button-primary" <button class="button button-standard button-primary"
ng-show="lang != 'en'" ng-show="lang != 'en'"
ng-click="openExternalLink(disclaimerUrl, true, 'View Terms of Service', 'The official English Terms of Service are available on the BitPay website. Would you like to view them?', 'Open Website', 'Go Back')" translate> ng-click="openExternazlLink()" translate>
Official English Disclaimer Official English Disclaimer
</button> </button>
</ion-content> </ion-content>

View File

@ -9,26 +9,28 @@
<div class="item item-divider" translate> <div class="item item-divider" translate>
Translation Credits Translation Credits
</div> </div>
<div class="item">kinoshitajona<span class="item-note" translate>Japanese</span></div> <!-- <div class="item">kinoshitajona<span class="item-note" translate>Japanese</span></div> -->
<div class="item">Kirvx<span class="item-note" translate>French</span></div> <div class="item">Kirvx<span class="item-note" translate>French</span></div>
<div class="item">saschad<span class="item-note" translate>German</span></div> <!-- <div class="item">saschad<span class="item-note" translate>German</span></div> -->
<div class="item">cmgustavo83<span class="item-note" translate>Spanish</span></div> <div class="item">cmgustavo83<span class="item-note" translate>Spanish</span></div>
<div class="item">RussianNeuroMancer<span class="item-note" translate>Russian</span></div> <!-- <div class="item">RussianNeuroMancer<span class="item-note" translate>Russian</span></div>
<div class="item">HostFat<span class="item-note" translate>Italian</span></div> <div class="item">HostFat<span class="item-note" translate>Italian</span></div>
<div class="item">xm2hi<span class="item-note" translate>Chinese</span></div> <div class="item">xm2hi<span class="item-note" translate>Chinese</span></div>
<div class="item">Pirx1618<span class="item-note" translate>Polish</span></div> <div class="item">Pirx1618<span class="item-note" translate>Polish</span></div>
<div class="item">mareksip<span class="item-note" translate>Czech</span></div> <div class="item">mareksip<span class="item-note" translate>Czech</span></div> -->
</div>
<div class="settings-explanation">
<div class="settings-description" translate>
Were always looking for translation contributions! You can make corrections or help to make this app available in your native language by joining our community on Crowdin.
</div>
</div>
<div class="settings-explanation">
<div class="settings-description" translate>
Don't see your language on Crowdin? Contact the Owner on Crowdin! We'd love to support your language.
</div>
</div> </div>
<div class="padding"> <div class="padding">
<p> <a class="button button-standard button-primary" ng-click="openExternalLink()" translate>Contribute Translations</a>
<span translate>Were always looking for translation contributions! You can make corrections or help to make this app available in your native language by joining our community on Crowdin.</span>
<button class="button button-standard button-primary" ng-click="openExternalLink(true, 'Open Translation Community', 'You can make contributions by signing up on our Crowdin community translation website. Were looking forward to hearing from you!
', 'Open Crowdin', 'Go Back')" translate>Contribute Translations
</button>
</p>
<span translate>
Don't see your language on Crowdin? Contact the Owner on Crowdin! We'd love to support your language.
</span>
</div> </div>
</ion-content> </ion-content>
</ion-view> </ion-view>

View File

@ -14,7 +14,9 @@
<img src="img/icon-tx-sent-outline.svg" ng-if="btx.action === 'sent'"> <img src="img/icon-tx-sent-outline.svg" ng-if="btx.action === 'sent'">
<img src="img/icon-tx-received-outline.svg" ng-if="btx.action === 'received'"> <img src="img/icon-tx-received-outline.svg" ng-if="btx.action === 'received'">
<img src="img/icon-tx-moved-outline.svg" ng-if="btx.action === 'moved'"> <img src="img/icon-tx-moved-outline.svg" ng-if="btx.action === 'moved'">
<span>{{btx.action | translate}}</span> <span ng-if="btx.action === 'sent'">{{'Sent' | translate}}</span>
<span ng-if="btx.action === 'received'">{{'Received' | translate}}</span>
<span ng-if="btx.action === 'moved'">{{'Moved' | translate}}</span>
</div> </div>
<div class="sending-label" ng-if="btx.confirmations === 0"> <div class="sending-label" ng-if="btx.confirmations === 0">
<img src="img/icon-confirming.svg"> <img src="img/icon-confirming.svg">

View File

@ -198,7 +198,7 @@
Recent Recent
</span> </span>
<span ng-if="!isDateInCurrentMonth(getDate(btx.time))"> <span ng-if="!isDateInCurrentMonth(getDate(btx.time))">
{{getDate(btx.time) | date:'MMMM'}} {{getDate(btx.time) | amDateFormat:'MMMM'}}
</span> </span>
</div> </div>
@ -215,7 +215,7 @@
<div class="wallet-details__tx-title" ng-if="!isUnconfirmed(btx)"> <div class="wallet-details__tx-title" ng-if="!isUnconfirmed(btx)">
<div ng-show="btx.action == 'received'" class="ellipsis"> <div ng-show="btx.action == 'received'" class="ellipsis">
<div ng-if="btx.note.body" class="wallet-details__tx-message ellipsis">{{btx.note.body}}</div> <div ng-if="btx.note.body" class="wallet-details__tx-message ellipsis">{{btx.note.body}}</div>
<div ng-if="!btx.note.body" class="wallet-details__tx-message ellipsis" translate> Received</div> <div ng-if="!btx.note.body" class="wallet-details__tx-message ellipsis" translate>Received</div>
</div> </div>
<div ng-show="btx.action == 'sent'" class="ellipsis"> <div ng-show="btx.action == 'sent'" class="ellipsis">
@ -253,7 +253,9 @@
</span> </span>
<div> <div>
<time class="wallet-details__tx-time" ng-if="btx.time && createdWithinPastDay(btx.time)">{{btx.time * 1000 | amTimeAgo}}</time> <time class="wallet-details__tx-time" ng-if="btx.time && createdWithinPastDay(btx.time)">{{btx.time * 1000 | amTimeAgo}}</time>
<time class="wallet-details__tx-time" ng-if="btx.time && !createdWithinPastDay(btx.time)">{{btx.time * 1000 | date:'MMMM d, y'}}</time> <time class="wallet-details__tx-time" ng-if="btx.time && !createdWithinPastDay(btx.time)">
{{btx.time * 1000 | amDateFormat:'MMM d, YYYY'}}
</time>
</div> </div>
</span> </span>
</div> </div>