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",
"nameCase": "BitPay",
"nameCaseNoSpace": "BitPay",
"gitHubRepoName": "bitpay-wallet",
"gitHubRepoUrl": "git://github.com/bitpay/bitpay-wallet.git",
"gitHubRepoBugs": "https://github.com/bitpay/bitpay-wallet/issues",
"gitHubRepoName": "copay",
"gitHubRepoUrl": "git://github.com/bitpay/copay.git",
"gitHubRepoBugs": "https://github.com/bitpay/copay/issues",
"disclaimerUrl": "",
"url": "https://bitpay.com",
"appDescription": "Secure Bitcoin Wallet",
@ -21,7 +21,7 @@
"windowsAppId": "",
"pushSenderId": "1036948132229",
"description": "Secure Bitcoin Wallet",
"version": "1.1.0",
"version": "1.2.0",
"androidVersion": "1",
"_extraCSS": null,
"_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!"
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."
msgstr ""
@ -31,16 +31,16 @@ msgstr ""
msgid "A member of the team will review your feedback as soon as possible."
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."
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."
msgstr ""
#: src/js/controllers/preferencesAbout.js:6
#: www/views/tab-settings.html:161
#: www/views/tab-settings.html:149
msgid "About"
msgstr ""
@ -89,7 +89,7 @@ msgstr ""
msgid "Add Funds"
msgstr ""
#: www/views/confirm.html:71
#: www/views/confirm.html:72
msgid "Add Memo"
msgstr ""
@ -112,7 +112,7 @@ msgstr ""
msgid "Add an optional password to secure the recovery phrase"
msgstr ""
#: src/js/controllers/confirm.js:262
#: src/js/controllers/confirm.js:267
msgid "Add description"
msgstr ""
@ -140,7 +140,7 @@ msgstr ""
msgid "Addresses With Balance"
msgstr ""
#: www/views/tab-settings.html:154
#: www/views/tab-settings.html:142
msgid "Advanced"
msgstr ""
@ -173,7 +173,7 @@ msgid "Almost done! Let's review."
msgstr ""
#: www/views/preferencesAltCurrency.html:4
#: www/views/tab-settings.html:83
#: www/views/tab-settings.html:81
msgid "Alternative Currency"
msgstr ""
@ -192,10 +192,26 @@ msgstr ""
msgid "Amount below minimum allowed"
msgstr ""
#: src/js/controllers/confirm.js:382
msgid "Amount too big"
msgstr ""
#: www/views/tab-home.html:14
msgid "An update to this app is available"
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
msgid "Are you sure you want to cancel and delete this wallet?"
msgstr ""
@ -237,10 +253,6 @@ msgstr ""
msgid "Average confirmation time: <span class=\"fee-minutes\">{{fee.nbBlocks * 10}} minutes</span>"
msgstr ""
#: www/views/includes/terms.html:47
msgid "BINDING AGREEMENT"
msgstr ""
#: www/views/join.html:118
#: www/views/tab-create-personal.html:85
#: 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."
msgstr ""
#: www/views/includes/terms.html:8
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."
#: src/js/controllers/tab-settings.js:52
msgid "BitPay Help Center"
msgstr ""
#: www/views/addressbook.add.html:38
@ -294,7 +306,7 @@ msgid "Bitcoin Exchanges"
msgstr ""
#: www/views/preferencesFee.html:4
#: www/views/tab-settings.html:94
#: www/views/tab-settings.html:92
msgid "Bitcoin Network Fee Policy"
msgstr ""
@ -302,7 +314,7 @@ msgstr ""
msgid "Bitcoin URI is NOT valid!"
msgstr ""
#: www/views/tab-settings.html:72
#: www/views/tab-settings.html:70
msgid "Bitcoin Unit"
msgstr ""
@ -363,15 +375,11 @@ msgstr ""
msgid "Buying Bitcoin..."
msgstr ""
#: www/views/includes/terms.html:35
msgid "CHOICE OF LAW"
msgstr ""
#: src/js/services/onGoingProcess.js:11
msgid "Calculating fee"
msgstr ""
#: src/js/controllers/confirm.js:506
#: src/js/controllers/confirm.js:511
#: src/js/services/confirmDialog.js:9
#: src/js/services/popupService.js:58
#: www/views/addressbook.add.html:10
@ -391,7 +399,7 @@ msgstr ""
msgid "Cannot join the same wallet more that once"
msgstr ""
#: src/js/controllers/amazon.js:25
#: src/js/controllers/amazon.js:27
msgid "Card not found"
msgstr ""
@ -404,10 +412,6 @@ msgstr ""
msgid "Certified by"
msgstr ""
#: www/views/translators.html:18
msgid "Chinese"
msgstr ""
#: www/views/tab-import-file.html:4
msgid "Choose a backup file from your computer"
msgstr ""
@ -441,7 +445,7 @@ msgstr ""
msgid "Commit hash"
msgstr ""
#: src/js/controllers/confirm.js:505
#: src/js/controllers/confirm.js:510
#: src/js/controllers/copayers.js:42
#: src/js/services/confirmDialog.js:10
#: www/views/backup.html:53
@ -456,7 +460,8 @@ msgstr ""
msgid "Confirm &amp; Finish"
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"
msgstr ""
@ -497,8 +502,8 @@ msgstr ""
msgid "Continue"
msgstr ""
#: www/views/preferencesLanguage.html:17
#: www/views/translators.html:25
#: www/views/preferencesLanguage.html:26
#: www/views/translators.html:33
msgid "Contribute Translations"
msgstr ""
@ -545,6 +550,10 @@ msgstr ""
msgid "Could not access wallet"
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
msgid "Could not broadcast payment"
msgstr ""
@ -585,7 +594,7 @@ msgstr ""
msgid "Could not get dynamic fee for level: {{feeLevel}}"
msgstr ""
#: src/js/controllers/confirm.js:651
#: src/js/controllers/confirm.js:656
msgid "Could not get the destination bitcoin address"
msgstr ""
@ -616,7 +625,7 @@ msgstr ""
msgid "Could not remove card"
msgstr ""
#: src/js/controllers/confirm.js:445
#: src/js/controllers/confirm.js:450
msgid "Could not send confirmation code to your phone"
msgstr ""
@ -624,14 +633,10 @@ msgstr ""
msgid "Could not send payment"
msgstr ""
#: src/js/controllers/tab-home.js:200
#: src/js/controllers/tab-home.js:206
msgid "Could not update"
msgstr ""
#: src/js/services/walletService.js:147
msgid "Could not update Wallet"
msgstr ""
#: www/views/tab-create-personal.html:3
msgid "Create Personal Wallet"
msgstr ""
@ -644,6 +649,7 @@ msgstr ""
msgid "Create a bitcoin wallet"
msgstr ""
#: www/views/onboarding/tour.html:46
#: www/views/tab-send.html:16
msgid "Create bitcoin wallet"
msgstr ""
@ -681,14 +687,6 @@ msgstr ""
msgid "Custom Amount"
msgstr ""
#: www/views/translators.html:20
msgid "Czech"
msgstr ""
#: www/views/includes/terms.html:20
msgid "DISCLAIMER"
msgstr ""
#: www/views/preferencesDeleteWallet.html:21
msgid "Delete"
msgstr ""
@ -739,8 +737,8 @@ msgstr ""
msgid "Do not include private key"
msgstr ""
#: www/views/preferencesLanguage.html:20
#: www/views/translators.html:29
#: www/views/preferencesLanguage.html:21
#: 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."
msgstr ""
@ -749,7 +747,7 @@ msgid "Download"
msgstr ""
#: 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 ""
#: src/js/services/feeService.js:10
@ -815,8 +813,8 @@ msgstr ""
msgid "Enter Amount"
msgstr ""
#: src/js/services/walletService.js:852
#: src/js/services/walletService.js:867
#: src/js/services/walletService.js:854
#: src/js/services/walletService.js:869
msgid "Enter Spending Password"
msgstr ""
@ -851,36 +849,36 @@ msgstr ""
#: src/js/controllers/addresses.js:84
#: src/js/controllers/addresses.js:85
#: src/js/controllers/amazon.js:15
#: src/js/controllers/amazon.js:25
#: src/js/controllers/amazon.js:46
#: src/js/controllers/amazon.js:66
#: src/js/controllers/amount.js:249
#: src/js/controllers/amount.js:256
#: src/js/controllers/amount.js:264
#: src/js/controllers/amount.js:293
#: src/js/controllers/amount.js:306
#: src/js/controllers/amount.js:313
#: src/js/controllers/amazon.js:27
#: src/js/controllers/amazon.js:48
#: src/js/controllers/amazon.js:68
#: src/js/controllers/amount.js:265
#: src/js/controllers/amount.js:272
#: src/js/controllers/amount.js:280
#: src/js/controllers/amount.js:309
#: 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:68
#: src/js/controllers/bitpayCardIntro.js:27
#: src/js/controllers/confirm.js:148
#: src/js/controllers/confirm.js:161
#: src/js/controllers/confirm.js:167
#: src/js/controllers/confirm.js:445
#: src/js/controllers/confirm.js:456
#: src/js/controllers/confirm.js:468
#: src/js/controllers/confirm.js:617
#: src/js/controllers/confirm.js:645
#: src/js/controllers/confirm.js:651
#: src/js/controllers/confirm.js:679
#: src/js/controllers/confirm.js:685
#: src/js/controllers/confirm.js:692
#: src/js/controllers/confirm.js:699
#: src/js/controllers/confirm.js:717
#: src/js/controllers/confirm.js:736
#: src/js/controllers/confirm.js:750
#: src/js/controllers/confirm.js:793
#: src/js/controllers/confirm.js:153
#: src/js/controllers/confirm.js:166
#: src/js/controllers/confirm.js:172
#: src/js/controllers/confirm.js:450
#: src/js/controllers/confirm.js:461
#: src/js/controllers/confirm.js:473
#: src/js/controllers/confirm.js:622
#: src/js/controllers/confirm.js:650
#: src/js/controllers/confirm.js:656
#: src/js/controllers/confirm.js:684
#: src/js/controllers/confirm.js:690
#: src/js/controllers/confirm.js:697
#: src/js/controllers/confirm.js:704
#: src/js/controllers/confirm.js:722
#: src/js/controllers/confirm.js:741
#: src/js/controllers/confirm.js:755
#: src/js/controllers/confirm.js:798
#: src/js/controllers/copayers.js:54
#: src/js/controllers/create.js:101
#: src/js/controllers/create.js:129
@ -933,14 +931,14 @@ msgstr ""
#: src/js/controllers/preferencesDelete.js:22
#: src/js/controllers/preferencesFee.js:9
#: 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/tabsController.js:7
#: src/js/controllers/tx-details.js:18
msgid "Error"
msgstr ""
#: src/js/controllers/confirm.js:349
#: src/js/controllers/confirm.js:354
msgid "Error at confirm"
msgstr ""
@ -964,8 +962,8 @@ msgstr ""
msgid "Experimental Features"
msgstr ""
#: src/js/controllers/confirm.js:307
#: www/views/confirm.html:29
#: src/js/controllers/confirm.js:312
#: www/views/confirm.html:30
#: www/views/modals/txp-details.html:114
msgid "Expired"
msgstr ""
@ -988,7 +986,7 @@ msgstr ""
msgid "Export wallet"
msgstr ""
#: src/js/services/walletService.js:999
#: src/js/services/walletService.js:1000
#: www/views/tab-export-qrCode.html:9
msgid "Exporting via QR not supported for this wallet"
msgstr ""
@ -1014,16 +1012,13 @@ msgstr ""
msgid "Family vacation funds"
msgstr ""
#: www/views/confirm.html:79
#: www/views/includes/confirm-tx.html:19
#: www/views/modals/txp-details.html:95
#: www/views/tx-details.html:71
msgid "Fee"
msgstr ""
#: www/views/confirm.html:78
msgid "Fee: {{feeLevel}}"
msgstr ""
#: src/js/controllers/feedback/send.js:23
msgid "Feedback could not be submitted. Please try again later."
msgstr ""
@ -1060,8 +1055,8 @@ msgstr ""
msgid "French"
msgstr ""
#: www/views/confirm.html:59
#: www/views/confirm.html:61
#: www/views/confirm.html:60
#: www/views/confirm.html:62
#: www/views/modals/txp-details.html:74
#: www/views/tx-details.html:48
msgid "From"
@ -1091,10 +1086,6 @@ msgstr ""
msgid "Generating new address..."
msgstr ""
#: www/views/translators.html:14
msgid "German"
msgstr ""
#: 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."
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."
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/onboarding/backupRequest.js:13
#: src/js/controllers/onboarding/backupRequest.js:19
@ -1131,6 +1132,10 @@ msgstr ""
msgid "Got it"
msgstr ""
#: www/views/onboarding/tour.html:18
msgid "Got it &rarr;"
msgstr ""
#: www/views/preferences.html:20
#: www/views/preferencesInformation.html:47
msgid "Hardware Wallet"
@ -1145,7 +1150,11 @@ msgid "Have the OAuth Code?"
msgstr ""
#: 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 ""
#: www/views/addresses.html:29
@ -1166,6 +1175,10 @@ msgstr ""
msgid "Hide advanced options"
msgstr ""
#: www/views/tabs.html:3
msgid "Home"
msgstr ""
#: src/js/controllers/feedback/send.js:55
#: src/js/controllers/feedback/send.js:59
#: src/js/controllers/feedback/send.js:63
@ -1228,18 +1241,6 @@ msgstr ""
msgid "I've written it down"
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
msgid "If enabled, the Recent Transactions card - a list of transactions occuring across all wallets - will appear in the Home tab."
msgstr ""
@ -1289,13 +1290,9 @@ msgstr ""
msgid "In order to verify your wallet backup, please type your password."
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/tab-home.html:79
#: www/views/tab-settings.html:115
#: www/views/tab-settings.html:114
msgid "Incomplete"
msgstr ""
@ -1313,7 +1310,7 @@ msgid "Incorrect code format"
msgstr ""
#: src/js/services/bwcError.js:44
#: www/views/confirm.html:115
#: www/views/confirm.html:116
msgid "Insufficient funds"
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."
msgstr ""
#: www/views/translators.html:17
msgid "Italian"
msgstr ""
#: www/views/translators.html:12
msgid "Japanese"
msgstr ""
#: www/views/join.html:18
msgid "John"
msgstr ""
@ -1408,6 +1397,7 @@ msgid "Key already associated with an existing wallet"
msgstr ""
#: www/views/preferencesLanguage.html:4
#: www/views/tab-settings.html:60
msgid "Language"
msgstr ""
@ -1435,6 +1425,10 @@ msgstr ""
msgid "Make a payment to"
msgstr ""
#: www/views/onboarding/tour.html:33
msgid "Makes sense &rarr;"
msgstr ""
#: src/js/controllers/modals/search.js:61
msgid "Matches:"
msgstr ""
@ -1557,11 +1551,11 @@ msgstr ""
msgid "No transactions yet"
msgstr ""
#: src/js/controllers/amount.js:293
#: src/js/controllers/amount.js:309
msgid "No wallet found!"
msgstr ""
#: www/views/confirm.html:112
#: www/views/confirm.html:113
msgid "No wallets available"
msgstr ""
@ -1577,7 +1571,7 @@ msgstr ""
msgid "Not authorized"
msgstr ""
#: src/js/controllers/confirm.js:167
#: src/js/controllers/confirm.js:172
msgid "Not enough funds for fee"
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."
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:57
msgid "OK"
@ -1637,6 +1635,36 @@ msgstr ""
msgid "On this screen you can see all your wallets, accounts, and assets."
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
msgid "Open wallet"
msgstr ""
@ -1674,7 +1702,7 @@ msgstr ""
msgid "Payment Accepted"
msgstr ""
#: www/views/confirm.html:27
#: www/views/confirm.html:28
msgid "Payment Expires:"
msgstr ""
@ -1774,7 +1802,7 @@ msgstr ""
msgid "Please upgrade Copay to perform this action"
msgstr ""
#: src/js/controllers/confirm.js:449
#: src/js/controllers/confirm.js:454
msgid "Please, enter the code below"
msgstr ""
@ -1782,10 +1810,6 @@ msgstr ""
msgid "Please, select your backup file"
msgstr ""
#: www/views/translators.html:19
msgid "Polish"
msgstr ""
#: www/views/tab-settings.html:47
msgid "Preferences"
msgstr ""
@ -1851,10 +1875,6 @@ msgstr ""
msgid "Quick review!"
msgstr ""
#: www/views/includes/terms.html:5
msgid "RIGHTS AND OBLIGATIONS"
msgstr ""
#: src/js/controllers/create.js:70
#: src/js/controllers/join.js:53
msgid "Random"
@ -1873,6 +1893,7 @@ msgid "Read more"
msgstr ""
#: www/views/tab-receive.html:3
#: www/views/tabs.html:7
msgid "Receive"
msgstr ""
@ -1885,7 +1906,12 @@ msgstr ""
msgid "Received Funds"
msgstr ""
#: www/views/walletDetails.html:242
msgid "Receiving"
msgstr ""
#: www/views/bitpayCard.html:55
#: www/views/walletDetails.html:199
msgid "Recent"
msgstr ""
@ -1973,18 +1999,10 @@ msgstr ""
msgid "Retry"
msgstr ""
#: www/views/translators.html:16
msgid "Russian"
msgstr ""
#: www/views/includes/password.html:31
msgid "SET"
msgstr ""
#: www/views/includes/terms.html:41
msgid "SEVERABILITY"
msgstr ""
#: www/views/addressbook.add.html:58
#: www/views/includes/note.html:9
#: www/views/preferencesAlias.html:21
@ -1994,6 +2012,7 @@ msgid "Save"
msgstr ""
#: www/views/tab-scan.html:3
#: www/views/tabs.html:11
msgid "Scan"
msgstr ""
@ -2057,6 +2076,7 @@ msgstr ""
#: www/views/feedback/send.html:13
#: www/views/feedback/send.html:43
#: www/views/tab-send.html:3
#: www/views/tabs.html:15
msgid "Send"
msgstr ""
@ -2082,11 +2102,11 @@ msgstr ""
msgid "Send by email"
msgstr ""
#: src/js/controllers/confirm.js:243
#: src/js/controllers/confirm.js:248
msgid "Send from"
msgstr ""
#: src/js/controllers/amount.js:95
#: src/js/controllers/amount.js:97
msgid "Send max amount"
msgstr ""
@ -2097,6 +2117,7 @@ msgstr ""
#: www/views/confirm.html:15
#: www/views/includes/txp.html:14
#: www/views/modals/txp-details.html:19
#: www/views/walletDetails.html:241
msgid "Sending"
msgstr ""
@ -2116,7 +2137,7 @@ msgstr ""
msgid "Sending transaction"
msgstr ""
#: src/js/controllers/confirm.js:501
#: src/js/controllers/confirm.js:506
msgid "Sending {{amountStr}} from your {{name}} wallet"
msgstr ""
@ -2151,11 +2172,13 @@ msgid "Set up a spending password"
msgstr ""
#: www/views/tab-settings.html:3
#: www/views/tabs.html:19
msgid "Settings"
msgstr ""
#: www/views/customAmount.html:20
#: www/views/tab-receive.html:70
#: www/views/tab-settings.html:43
msgid "Share"
msgstr ""
@ -2176,10 +2199,6 @@ msgstr ""
msgid "Share this invitation with your copayers"
msgstr ""
#: www/views/tab-settings.html:43
msgid "Share {{appName}}"
msgstr ""
#: www/views/tab-import-hardware.html:24
msgid "Shared Wallet"
msgstr ""
@ -2268,10 +2287,6 @@ msgstr ""
msgid "Sweeping Wallet..."
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
msgid "THIS ACTION CANNOT BE REVERSED"
msgstr ""
@ -2291,10 +2306,6 @@ msgstr ""
msgid "Tap to retry"
msgstr ""
#: www/views/tab-settings.html:144
msgid "Tell a friend"
msgstr ""
#: www/views/termsOfUse.html:3
msgid "Terms Of Use"
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."
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
msgid "The password of the recovery phrase (if set)"
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"
msgstr ""
@ -2376,10 +2391,6 @@ msgstr ""
msgid "The spend proposal is not pending"
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
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 ""
@ -2415,14 +2426,6 @@ msgstr ""
msgid "These utilities may be unstable. Proceed at your own risk."
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
msgid "This app is fantastic!"
msgstr ""
@ -2431,14 +2434,10 @@ msgstr ""
msgid "This app stores your bitcoin with cutting-edge security."
msgstr ""
#: src/js/controllers/confirm.js:434
#: src/js/controllers/confirm.js:439
msgid "This bitcoin payment request has expired."
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/tab-create-personal.html:75
#: www/views/tab-create-shared.html:105
@ -2459,8 +2458,8 @@ msgstr ""
msgid "Timeline"
msgstr ""
#: www/views/confirm.html:32
#: www/views/confirm.html:60
#: www/views/confirm.html:33
#: www/views/confirm.html:61
#: www/views/includes/output.html:2
#: www/views/modals/txp-details.html:104
#: www/views/modals/txp-details.html:53
@ -2504,7 +2503,7 @@ msgid "Transaction already broadcasted"
msgstr ""
#: 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
msgid "Transaction not found"
msgstr ""
@ -2517,6 +2516,7 @@ msgstr ""
msgid "Translation Credits"
msgstr ""
#: www/views/preferencesAbout.html:35
#: www/views/translators.html:3
msgid "Translators"
msgstr ""
@ -2529,6 +2529,10 @@ msgstr ""
msgid "Type the Recovery Phrase (usually 12 words)"
msgstr ""
#: src/js/controllers/backup.js:75
msgid "Uh oh..."
msgstr ""
#: www/views/modals/search.html:36
#: www/views/tx-details.html:79
msgid "Unconfirmed"
@ -2550,6 +2554,10 @@ msgstr ""
msgid "Unused Addresses Limit"
msgstr ""
#: src/js/controllers/tab-home.js:132
msgid "Update Available"
msgstr ""
#: www/views/proposals.html:15
msgid "Updating pending proposals. Please stand by"
msgstr ""
@ -2586,6 +2594,18 @@ msgstr ""
msgid "View All Addresses"
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
msgid "View on blockchain"
msgstr ""
@ -2733,6 +2753,7 @@ msgid "Wallet needs backup"
msgstr ""
#: www/views/tab-receive.html:56
#: www/views/walletDetails.html:145
msgid "Wallet not backed up"
msgstr ""
@ -2740,7 +2761,7 @@ msgstr ""
msgid "Wallet not found"
msgstr ""
#: src/js/controllers/tab-home.js:199
#: src/js/controllers/tab-home.js:205
msgid "Wallet not registered"
msgstr ""
@ -2760,8 +2781,8 @@ msgstr ""
msgid "Wallets"
msgstr ""
#: www/views/tab-settings.html:101
msgid "Wallets &amp; Integrations"
#: www/views/tab-settings.html:99
msgid "Wallets & Integrations"
msgstr ""
#: src/js/controllers/modals/txpDetails.js:126
@ -2775,10 +2796,6 @@ msgstr ""
msgid "Warning: this transaction has unconfirmed inputs"
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
msgid "We'd love to do better."
msgstr ""
@ -2796,7 +2813,7 @@ msgid "We're always looking for ways to improve BitPay. How could we improve you
msgstr ""
#: 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."
msgstr ""
@ -2812,10 +2829,6 @@ msgstr ""
msgid "Where would you like to receive email notifications about payments?"
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
msgid "Why?"
msgstr ""
@ -2840,6 +2853,10 @@ msgstr ""
msgid "Would you like to receive push notifications about payments?"
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
msgid "Wrong number of recovery words:"
msgstr ""
@ -2857,18 +2874,23 @@ msgstr ""
msgid "Yes, skip backup"
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
msgid "You can create a backup later from your wallet settings."
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
msgid "You can scan bitcoin addresses, payment requests, paper wallets, and more."
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
msgid "You can spend bitcoin at millions of websites and stores worldwide."
msgstr ""
@ -2901,6 +2923,10 @@ msgstr ""
msgid "Your bitcoin wallet is ready!"
msgstr ""
#: www/views/feedback/send.html:42
msgid "Your ideas, feedback, or comments"
msgstr ""
#: www/views/tab-create-shared.html:22
msgid "Your name"
msgstr ""
@ -2927,6 +2953,7 @@ msgid "Your wallet key will be encrypted. The Spending Password cannot be recove
msgstr ""
#: www/views/includes/walletSelector.html:23
#: www/views/includes/wallets.html:13
#: www/views/tab-home.html:84
#: www/views/walletDetails.html:127
#: www/views/walletDetails.html:69
@ -2949,6 +2976,10 @@ msgstr ""
msgid "me"
msgstr ""
#: www/views/addressbook.add.html:32
msgid "name@example.com"
msgstr ""
#: www/views/preferencesHistory.html:14
msgid "preparing..."
msgstr ""
@ -2957,7 +2988,7 @@ msgstr ""
msgid "{{feeRateStr}} of the transaction"
msgstr ""
#: src/js/controllers/confirm.js:181
#: src/js/controllers/confirm.js:186
msgid "{{fee}} will be deducted for bitcoin networking fees."
msgstr ""

View File

@ -1,6 +1,6 @@
'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;

View File

@ -5,8 +5,8 @@ angular.module('copayApp.controllers').controller('amazonController',
$scope.network = amazonService.getEnvironment();
$scope.openExternalLink = function(url, optIn, title, message, okText, cancelText) {
externalLinkService.open(url, optIn, title, message, okText, cancelText);
$scope.openExternalLink = function(url) {
externalLinkService.open(url);
};
var initAmazon = function() {
@ -20,7 +20,9 @@ angular.module('copayApp.controllers').controller('amazonController',
$scope.$digest();
});
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)) {
popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Card not found'));
return;

View File

@ -36,12 +36,14 @@ angular.module('copayApp.controllers').controller('amountController', function($
throw ('bad params');
}
glideraService.getLimits($scope.glideraAccessToken, function(err, limits) {
$scope.limits = limits;
$timeout(function() {
$scope.$apply();
if ($scope.isGlidera) {
glideraService.getLimits($scope.glideraAccessToken, function(err, limits) {
$scope.limits = limits;
$timeout(function() {
$scope.$apply();
});
});
});
}
var reNr = /^[1234567890\.]$/;
var reOp = /^[\*\+\-\/]$/;
@ -229,6 +231,20 @@ angular.module('copayApp.controllers').controller('amountController', function($
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() {
var _amount = evaluate(format($scope.amount));

View File

@ -72,7 +72,7 @@ angular.module('copayApp.controllers').controller('backupController',
var showBackupResult = function() {
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.");
popupService.showAlert(title, message, function() {
$scope.setFlow(2);

View File

@ -1,6 +1,6 @@
'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 toAmount;
var isChromeApp = platformInfo.isChromeApp;
@ -45,7 +45,8 @@ angular.module('copayApp.controllers').controller('confirmController', function(
};
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();
else $scope.network = (new bitcore.Address($scope.toAddress)).network.name;
resetValues();
@ -55,8 +56,7 @@ angular.module('copayApp.controllers').controller('confirmController', function(
function setwallets() {
$scope.wallets = profileService.getWallets({
onlyComplete: true,
network: $scope.network,
n: $scope.isGiftCard ? true : false
network: $scope.network
});
if (!$scope.wallets || !$scope.wallets.length) {
@ -70,6 +70,11 @@ angular.module('copayApp.controllers').controller('confirmController', function(
return;
}
if ($scope.isGlidera == 'buy') {
initConfirm();
return;
}
var filteredWallets = [];
var index = 0;
var enoughFunds = false;
@ -346,7 +351,7 @@ angular.module('copayApp.controllers').controller('confirmController', function(
$timeout(function() {
$scope.$apply();
});
popupService.showAlert(gettextCatalog.getString('Error at confirm'), msg);
popupService.showAlert(gettextCatalog.getString('Error at confirm'), bwcError.msg(msg));
};
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
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);
return setSendError(msg);
}
if (toAmount > Number.MAX_SAFE_INTEGER) {
var msg = 'Amount too big';
var msg = gettextCatalog.getString('Amount too big');
$log.warn(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';
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 isCordova = platformInfo.isCordova;
@ -67,10 +67,10 @@ angular.module('copayApp.controllers').controller('createController',
function updateSeedSourceSelect(n) {
var seedOptions = [{
id: 'new',
label: gettext('Random'),
label: gettextCatalog.getString('Random'),
}, {
id: 'set',
label: gettext('Specify Recovery Phrase...'),
label: gettextCatalog.getString('Specify Recovery Phrase...'),
}];
$scope.seedSource = seedOptions[0];

View File

@ -1,6 +1,6 @@
'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);
var isAndroid = platformInfo.isAndroid;
var isIOS = platformInfo.isIOS;

View File

@ -1,7 +1,7 @@
'use strict';
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 isDevel = platformInfo.isDevel;
@ -50,10 +50,10 @@ angular.module('copayApp.controllers').controller('joinController',
var updateSeedSourceSelect = function() {
self.seedOptions = [{
id: 'new',
label: gettext('Random'),
label: gettextCatalog.getString('Random'),
}, {
id: 'set',
label: gettext('Specify Recovery Phrase...'),
label: gettextCatalog.getString('Specify Recovery Phrase...'),
}];
$scope.seedSource = self.seedOptions[0];

View File

@ -62,8 +62,8 @@ angular.module('copayApp.controllers').controller('amazonCardDetailsController',
$scope.amazonCardDetailsModal.hide();
};
$scope.openExternalLink = function(url, optIn, title, message, okText, cancelText) {
externalLinkService.open(url, optIn, title, message, okText, cancelText);
$scope.openExternalLink = function(url) {
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.loading = false;
popupService.showAlert(gettextCatalog.getString('Error'), bwcError.msg(err, prefix));
@ -164,9 +164,9 @@ angular.module('copayApp.controllers').controller('txpDetailsController', functi
$scope.loading = true;
$timeout(function() {
ongoingProcess.set('broadcastTx', true);
ongoingProcess.set('broadcastingTx', true);
walletService.broadcastTx($scope.wallet, $scope.tx, function(err, txpb) {
ongoingProcess.set('broadcastTx', false);
ongoingProcess.set('broadcastingTx', false);
if (err) {
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) {
if (err) {
if (err.message && err.message == 'Transaction proposal not found' &&
(eventName == 'transactionProposalRemoved' || eventName == 'TxProposalRemoved')) {
(eventName == 'transactionProposalRemoved' || eventName == 'TxProposalRemoved')) {
$scope.tx.removed = true;
$scope.tx.canBeRemoved = 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([
'TxProposalRejectedBy',
'TxProposalAcceptedBy',

View File

@ -1,8 +1,7 @@
'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.disclaimerUrl = $window.appConfig.disclaimerUrl;
$scope.confirm = function() {
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);
};

View File

@ -1,7 +1,7 @@
'use strict';
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 walletId = wallet.credentials.walletId;
$scope.wallet = wallet;

View File

@ -6,9 +6,14 @@ angular.module('copayApp.controllers').controller('preferencesAbout',
$scope.title = gettextCatalog.getString('About') + ' ' + $window.appConfig.nameCase;
$scope.version = $window.version;
$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);
};
});

View File

@ -1,7 +1,7 @@
'use strict';
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 walletId = wallet.credentials.walletId;
var config = configService.getSync();

View File

@ -1,7 +1,7 @@
'use strict';
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 completeAlternativeList;

View File

@ -1,6 +1,6 @@
'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);
$scope.wallet = wallet;
var walletId = wallet.credentials.walletId;

View File

@ -1,7 +1,7 @@
'use strict';
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.csvReady = false;
$scope.isCordova = platformInfo.isCordova;

View File

@ -1,12 +1,18 @@
'use strict';
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.openExternalLink = function(url, target) {
externalLinkService.open(url, target);
$scope.openExternalLink = function() {
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) {
@ -18,19 +24,18 @@ angular.module('copayApp.controllers').controller('preferencesLanguageController
}
};
uxLanguage._set(newLang);
configService.set(opts, function(err) {
if (err) $log.warn(err);
$ionicHistory.goBack();
uxLanguage.init(function() {
walletService.updateRemotePreferences(profileService.getWallets(), {}, function() {
$log.debug('Remote preferences saved');
});
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();
});
});

View File

@ -1,7 +1,7 @@
'use strict';
angular.module('copayApp.controllers').controller('preferencesLogs',
function($scope, historicLog, gettextCatalog) {
function($scope, historicLog) {
$scope.$on("$ionicView.enter", function(event, data) {
$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);
};

View File

@ -1,6 +1,6 @@
'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 CONTACTS_SHOW_LIMIT;
@ -128,6 +128,7 @@ angular.module('copayApp.controllers').controller('tabSendController', function(
});
}
$scope.checkingBalance = true;
var index = 0;
lodash.each(wallets, function(w) {
walletService.getStatus(w, {}, function(err, status) {
@ -143,6 +144,7 @@ angular.module('copayApp.controllers').controller('tabSendController', function(
}
if (index == wallets.length) {
$scope.checkingBalance = false;
$timeout(function() {
$scope.$apply();
});

View File

@ -1,10 +1,8 @@
'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 config = configService.getSync();
var isCordova = platformInfo.isCordova;
var isWP = platformInfo.isWP;
var isWindowsPhoneApp = platformInfo.isWP && isCordova;
@ -13,41 +11,53 @@ angular.module('copayApp.controllers').controller('tabSettingsController', funct
$scope.isCordova = isCordova;
$scope.appName = $window.appConfig.nameCase;
$scope.unitName = config.wallet.settings.unitName;
$scope.currentLanguageName = uxLanguage.getCurrentLanguageName();
$scope.selectedAlternative = {
name: config.wallet.settings.alternativeName,
isoCode: config.wallet.settings.alternativeIsoCode
};
$scope.feeOpts = feeService.feeOpts;
$scope.currentFeeLevel = feeService.getCurrentFeeLevel();
$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);
};
$scope.$on("$ionicView.beforeEnter", function(event, data) {
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';
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) {
if (!incomingData.redir(data)) {

View File

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

View File

@ -1,8 +1,14 @@
'use strict';
angular.module('copayApp.controllers').controller('translatorsController',
function($scope, externalLinkService) {
$scope.openExternalLink = function(url, target) {
externalLinkService.open(url, target);
function($scope, externalLinkService, gettextCatalog) {
$scope.openExternalLink = function() {
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() {
var btx = $scope.btx;
var url = 'https://' + ($scope.getShortNetworkName() == 'test' ? 'test-' : '') + 'insight.bitpay.com/tx/' + btx.txid;
var title = 'View Transaction on Insight';
var message = 'Would you like to view this transaction on the Insight blockchain explorer?';
$scope.openExternalLink(url, true, title, message, 'Open Insight', 'Go back');
};
$scope.openExternalLink = function(url, optIn, title, message, okText, cancelText) {
var optIn = true;
var title = gettextCatalog.getString('View Transaction on Insight');
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');
externalLinkService.open(url, optIn, title, message, okText, cancelText);
};

View File

@ -1,6 +1,6 @@
'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 currentTxHistoryPage = 0;
@ -316,7 +316,7 @@ angular.module('copayApp.controllers').controller('walletDetailsController', fun
var scrollWatcherInitialized;
$scope.$on("$ionicView.enter", function(event, data) {
setAndroidStatusBarColor();
if ($scope.isCordova && $scope.isAndroid) setAndroidStatusBarColor();
if (scrollWatcherInitialized || !$scope.amountIsCollapsible) {
return;
}
@ -349,7 +349,7 @@ angular.module('copayApp.controllers').controller('walletDetailsController', fun
});
$scope.$on("$ionicView.beforeLeave", function(event, data) {
if($window.StatusBar) {
if ($window.StatusBar) {
$window.StatusBar.backgroundColorByHexString('#1e3186');
}
});
@ -362,20 +362,18 @@ angular.module('copayApp.controllers').controller('walletDetailsController', fun
function setAndroidStatusBarColor() {
var SUBTRACT_AMOUNT = 15;
if(!$scope.isAndroid) {
return;
}
var rgb = hexToRgb($scope.wallet.color);
var keys = Object.keys(rgb);
keys.forEach(function(k) {
if(rgb[k] - SUBTRACT_AMOUNT < 0) {
if (rgb[k] - SUBTRACT_AMOUNT < 0) {
rgb[k] = 0;
} else {
rgb[k] -= SUBTRACT_AMOUNT;
}
});
var statusBarColorHexString = rgbToHex(rgb.r, rgb.g, rgb.b);
$window.StatusBar.backgroundColorByHexString(statusBarColorHexString);
if ($window.StatusBar)
$window.StatusBar.backgroundColorByHexString(statusBarColorHexString);
}
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
*/

View File

@ -21,14 +21,10 @@ angular.module('copayApp.services').service('externalLinkService', function(plat
_restoreHandleOpenURL(old);
} else {
if (optIn) {
var message = gettextCatalog.getString(message),
title = gettextCatalog.getString(title),
okText = gettextCatalog.getString(okText),
cancelText = gettextCatalog.getString(cancelText),
openBrowser = function(res) {
if (res) window.open(url, '_system');
_restoreHandleOpenURL(old);
};
var openBrowser = function(res) {
if (res) window.open(url, '_system');
_restoreHandleOpenURL(old);
};
popupService.showConfirm(title, message, okText, cancelText, openBrowser);
} else {
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) {
ret = lodash.filter(ret, function(w) {
return w.isComplete();

View File

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

View File

@ -8,42 +8,39 @@ angular.module('copayApp.services')
root.availableLanguages = [{
name: 'English',
isoCode: 'en',
}, {
name: 'Český',
isoCode: 'cs',
}, {
name: 'Français',
isoCode: 'fr',
}, {
name: 'Italiano',
isoCode: 'it',
}, {
name: 'Deutsch',
isoCode: 'de',
}, {
name: 'Español',
isoCode: 'es',
}, {
name: '日本語',
isoCode: 'ja',
useIdeograms: true,
}, {
name: '中文(简体)',
isoCode: 'zh',
useIdeograms: true,
}, {
name: 'Polski',
isoCode: 'pl',
}, {
name: 'Pусский',
isoCode: 'ru',
name: 'Français',
isoCode: 'fr',
// }, {
// name: 'Český',
// isoCode: 'cs',
// }, {
// name: 'Italiano',
// isoCode: 'it',
// }, {
// name: 'Deutsch',
// isoCode: 'de',
// }, {
// name: '日本語',
// isoCode: 'ja',
// useIdeograms: true,
// }, {
// name: '中文(简体)',
// isoCode: 'zh',
// useIdeograms: true,
// }, {
// name: 'Polski',
// isoCode: 'pl',
// }, {
// name: 'Pусский',
// isoCode: 'ru',
}];
root._detect = function(cb) {
return cb('en'); //disable auto detection for release;
var userLang, androidLang;
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) {
return cb('WALLET_NOT_REGISTERED');
}
return cb(bwcError.msg(err, gettext('Could not update Wallet')));
return cb(err);
}
return cb(null, ret);
});
@ -405,7 +405,7 @@ angular.module('copayApp.services').factory('walletService', function($log, $tim
function getNewTxs(newTxs, skip, cb) {
getTxsFromServer(wallet, skip, endingTxid, requestLimit, function(err, res, shouldContinue) {
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../))) {
log.info('Retrying history download in 5 secs...');
return $timeout(function() {
@ -835,9 +835,11 @@ angular.module('copayApp.services').factory('walletService', function($log, $tim
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');
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)
return cb('password mismatch');
@ -850,7 +852,7 @@ angular.module('copayApp.services').factory('walletService', function($log, $tim
root.decrypt = function(wallet, cb) {
$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');
try {
@ -865,7 +867,7 @@ angular.module('copayApp.services').factory('walletService', function($log, $tim
root.handleEncryptedWallet = function(wallet, 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 (!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) {
if (err) return cb('Prepare error: ' + err);
if (err) return cb(bwcError.msg(err));
ongoingProcess.set('sendingTx', true, customStatusHandler);
publishFn(wallet, txp, function(err, publishedTxp) {
ongoingProcess.set('sendingTx', false, customStatusHandler);
if (err) return cb('Send Error: ' + err);
if (err) return cb(bwcError.msg(err));
ongoingProcess.set('signingTx', true, customStatusHandler);
root.signTx(wallet, publishedTxp, password, function(err, signedTxp) {
@ -946,10 +948,9 @@ angular.module('copayApp.services').factory('walletService', function($log, $tim
if (err) {
$log.warn('sign error:' + err);
// TODO?
var msg = err.message ?
var msg = err && 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);
return cb(msg);
@ -959,7 +960,7 @@ angular.module('copayApp.services').factory('walletService', function($log, $tim
ongoingProcess.set('broadcastingTx', true, customStatusHandler);
root.broadcastTx(wallet, signedTxp, function(err, broadcastedTxp) {
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);
var type = root.getViewStatus(wallet, broadcastedTxp);

View File

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

View File

@ -20,7 +20,7 @@
<div class="addr-list">
<div class="addr-explanation">
<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>

View File

@ -42,6 +42,7 @@
<div class="title">
<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-if="cardId" ng-init="getRates()">{{exchangeRate}}</div>
<div ng-show="isGlidera">
<div class="limits" ng-show="limits && isGlidera == 'buy'">
<span>Daily buy limit</span>:

View File

@ -7,11 +7,11 @@
</ion-nav-buttons>
</ion-nav-bar>
<ion-content scroll="false">
<div class="onboarding-topic">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-topic" translate>Are you being watched?</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 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>
</div>
</ion-content>

View File

@ -19,6 +19,7 @@
</div>
<div class="amount-label">
<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>
</div>
@ -75,7 +76,7 @@
<i class="icon bp-arrow-right"></i>
</a>
<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">
{{fee || '...'}}
</span>

View File

@ -39,7 +39,7 @@
<span>{{comment}}</span>
</div>
<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>
Send
</button>

View File

@ -31,13 +31,13 @@
Connect to Glidera
</button>
<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?
</a>
</div>
<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>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>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.</p>
</div>
</div>
<div ng-show="showOauthForm">

View File

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

View File

@ -1,56 +1,56 @@
<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;).
</p>
<p class="terms__heading" translate>
<p class="terms__heading">
RIGHTS AND OBLIGATIONS
</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.
</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).
</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.
</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.
</p>
<p class="terms__heading" translate>
<p class="terms__heading">
DISCLAIMER
</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.
</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.
</p>
<p class="terms__heading" translate>
<p class="terms__heading">
INTELLECTUAL PROPERTY
</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.
</p>
<p class="terms__heading" translate>
<p class="terms__heading">
CHOICE OF LAW
</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.
</p>
<p class="terms__heading" translate>
<p class="terms__heading">
SEVERABILITY
</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.
</p>
<p class="terms__heading" translate>
<p class="terms__heading">
BINDING AGREEMENT
</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.
</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.
</p>
</div>

View File

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

View File

@ -12,7 +12,7 @@
</ion-content>
<div id="agree-to-terms">
<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 class="row">
<div class="col col-20">

View File

@ -164,13 +164,15 @@
<click-to-accept
ng-click="onConfirm(statusChangeHandler)"
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>
<slide-to-accept
ng-if="tx.pendingForUs && canSign && !paymentExpired && !hasClick"
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-success

View File

@ -15,7 +15,7 @@
<div class="onboarding-illustration-secure"></div>
<div class="cta-buttons">
<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;
</button>
</div>
@ -30,7 +30,7 @@
</div>
<div class="cta-buttons">
<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;
</button>
</div>
@ -38,12 +38,12 @@
</ion-slide-page>
<ion-slide-page>
<ion-content id="onboard-tour-control" scroll="false">
<div translate class="onboarding-topic">You control your bitcoin.</div>
<div translate class="onboarding-description">This app stores your bitcoin with cutting-edge security.</div>
<div class="onboarding-topic" translate>You control your bitcoin.</div>
<div class="onboarding-description" translate>This app stores your bitcoin with cutting-edge security.</div>
<div class="onboarding-illustration-control"></div>
<div class="cta-buttons">
<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
</button>
</div>

View File

@ -16,7 +16,7 @@
v{{version}}
</span>
</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>
<span translate>Commit hash</span>
<span class="item-note">
@ -30,11 +30,11 @@
<span translate>Terms of Use</span>
<i class="icon bp-arrow-right"></i>
</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>
<span translate>Translators</span>
<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">
<i class="icon ion-ios-copy-outline"></i>
<span translate>Session log</span>

View File

@ -12,14 +12,18 @@
ng-click="save(lang.isoCode)">{{lang.name}}
</ion-radio>
</div>
<div class="padding">
<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>
<span translate>
Don't see your language on Crowdin? Contact the Owner on Crowdin! We'd love to support your language.
</span>
<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 class="padding">
<a class="button button-standard button-primary" ng-click="openExternalLink()" translate>Contribute Translations</a>
<div>
</ion-content>
</ion-view>

View File

@ -10,7 +10,7 @@
spinner="ios-small"
on-refresh="onRefresh()">
</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>
</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">
<div class="bg icon-amazon"></div>
</i>
<span translate>Amazon.com Gift Cards</span>
<span>Amazon.com Gift Cards</span>
<i class="icon bp-arrow-right"></i>
</a>
</div>

View File

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

View File

@ -10,66 +10,64 @@
<i class="icon big-icon-svg">
<img src="img/icon-exchange.svg" class="bg"/>
</i>
<span translate>Bitcoin Exchanges</span>
<span>{{'Bitcoin Exchanges' | translate}}</span>
<i class="icon bp-arrow-right"></i>
</a>
<a class="item item-icon-left item-icon-right" ui-sref="tabs.addressbook">
<i class="icon big-icon-svg">
<img src="img/icon-address-book.svg" class="bg"/>
</i>
<span translate>Address Book</span>
<span>{{'Address Book' | translate}}</span>
<i class="icon bp-arrow-right"></i>
</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">
<img src="img/icon-help-support.svg" class="bg"/>
</i>
<span translate>Help &amp; Support</span>
<span>{{'Help & Support' | translate }}</span>
<i class="icon big-icon-svg">
<img src="img/icon-link.svg" class="bg just-a-hint"/>
</i>
</a>
<a class="item item-icon-left item-icon-right" ui-sref="tabs.feedback">
<i class="icon big-icon-svg">
<img src="img/icon-language.svg" class="bg"/>
<img src="img/icon-send-feedback.svg" class="bg"/>
</i>
<span translate>Send Feedback</span>
<span>{{'Send Feedback' | translate}}</span>
<i class="icon bp-arrow-right"></i>
</a>
<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">
<img src="img/icon-send-feedback.svg" class="bg"/>
<img src="img/icon-heart.svg" class="bg"/>
</i>
<span translate>Share {{appName}}</span>
<span>{{'Share'|translate}} {{appName}}</span>
<i class="icon bp-arrow-right"></i>
</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">
<i class="icon big-icon-svg">
<img src="img/icon-notifications.svg" class="bg"/>
</i>
<span translate>Notifications</span>
<span>{{'Notifications' | translate}}</span>
<i class="icon bp-arrow-right"></i>
</a>
<!-- See https://github.com/bitpay/bitpay-wallet/issues/265 -->
<!-- <a class="item item&#45;icon&#45;left item&#45;icon&#45;right" ui&#45;sref="tabs.language"> -->
<!-- <i class="icon big&#45;icon&#45;svg"> -->
<!-- <img src="img/icon&#45;language.svg" class="bg"/> -->
<!-- </i> -->
<!-- <span translate>Language</span> -->
<!-- <span class="item&#45;note"> -->
<!-- {{currentLanguageName|translate}} -->
<!-- </span> -->
<!-- <i class="icon bp&#45;arrow&#45;right"></i> -->
<!-- </a> -->
<!-- -->
<a class="item item-icon-left item-icon-right" ui-sref="tabs.language">
<i class="icon big-icon-svg">
<img src="img/icon-language.svg" class="bg"/>
</i>
<span>{{'Language' | translate}}</span>
<span class="item-note">
{{currentLanguageName|translate}}
</span>
<i class="icon bp-arrow-right"></i>
</a>
<a class="item has-setting-value item-icon-left item-icon-right" ui-sref="tabs.unit">
<i class="icon big-icon-svg">
<img src="img/icon-unit.svg" class="bg"/>
</i>
<span class="setting-title" translate>Bitcoin Unit</span>
<span class="setting-title">{{'Bitcoin Unit' | translate}}</span>
<span class="setting-value">
{{unitName}}
</span>
@ -80,7 +78,7 @@
<i class="icon big-icon-svg">
<img src="img/icon-alternative-currency.svg" class="bg"/>
</i>
<span class="setting-title" translate>Alternative Currency</span>
<span class="setting-title">{{'Alternative Currency' | translate}}</span>
<span class="setting-value">
{{selectedAlternative.name}}
</span>
@ -91,14 +89,14 @@
<i class="icon big-icon-svg">
<img src="img/icon-network.svg" class="bg"/>
</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">
{{feeOpts[currentFeeLevel]|translate}}
</span>
<i class="icon bp-arrow-right"></i>
</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
ui-sref="tabs.preferences({'walletId': item.id})"
@ -112,8 +110,8 @@
{{item.m}}-of-{{item.n}}
</span>
</span>
<span class="right text-light assertive" ng-show="!item.isComplete()" translate>
Incomplete
<span class="right text-light assertive" ng-show="!item.isComplete()">
{{'Incomplete' | translate}}
</span>
<i class="icon bp-arrow-right"></i>
</a>
@ -137,28 +135,18 @@
<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">
<i class="icon big-icon-svg">
<img src="img/icon-advanced.svg" class="bg"/>
</i>
<span translate>Advanced</span>
<span>{{'Advanced' | translate}}</span>
<i class="icon bp-arrow-right"></i>
</a>
<a class="item item-icon-left item-icon-right" href ui-sref="tabs.about">
<i class="icon big-icon-svg">
<img src="img/icon-about.svg" class="bg"/>
</i>
<span translate>About</span> {{appName}}
<span>{{'About' | translate}}</span> {{appName}}
<i class="icon bp-arrow-right"></i>
</a>
<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-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-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-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-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-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-tab>
</ion-tabs>

View File

@ -11,7 +11,7 @@
</div>
<button class="button button-standard button-primary"
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
</button>
</ion-content>

View File

@ -9,26 +9,28 @@
<div class="item item-divider" translate>
Translation Credits
</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">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">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">xm2hi<span class="item-note" translate>Chinese</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 class="padding">
<p>
<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>
<a class="button button-standard button-primary" ng-click="openExternalLink()" translate>Contribute Translations</a>
</div>
</ion-content>
</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-received-outline.svg" ng-if="btx.action === 'received'">
<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 class="sending-label" ng-if="btx.confirmations === 0">
<img src="img/icon-confirming.svg">

View File

@ -198,7 +198,7 @@
Recent
</span>
<span ng-if="!isDateInCurrentMonth(getDate(btx.time))">
{{getDate(btx.time) | date:'MMMM'}}
{{getDate(btx.time) | amDateFormat:'MMMM'}}
</span>
</div>
@ -215,7 +215,7 @@
<div class="wallet-details__tx-title" ng-if="!isUnconfirmed(btx)">
<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" translate> Received</div>
<div ng-if="!btx.note.body" class="wallet-details__tx-message ellipsis" translate>Received</div>
</div>
<div ng-show="btx.action == 'sent'" class="ellipsis">
@ -253,7 +253,9 @@
</span>
<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 | 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>
</span>
</div>