Merge pull request #2592 from cmgustavo/feat/translation-02

Bug fixes and setting language option
This commit is contained in:
Matias Alejo Garcia 2015-04-23 10:21:18 -03:00
commit 302c6e8949
45 changed files with 1609 additions and 1863 deletions

2142
po/es.po

File diff suppressed because it is too large Load diff

156
po/fr.po
View file

@ -9,20 +9,33 @@ msgstr ""
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Language: fr_FR\n"
"X-Generator: Poedit 1.7.6\n"
"Language: fr\n"
"X-Generator: Poedit 1.6.10\n"
#: public/views/splash/1.html
msgid "* In case you need to import wallets from previous Copay versions go to <b>Menu</b>"
msgstr "* Si vous avez besoin d'importer des portefeuilles depuis les versions précédentes de Copay, allez au <b>Menu</b>"
msgid ""
"* In case you need to import wallets from previous Copay versions go to "
"<b>Menu</b>"
msgstr ""
"* Si vous avez besoin d'importer des portefeuilles depuis les versions "
"précédentes de Copay, allez au <b>Menu</b>"
#: public/views/modals/txp-details.html
msgid "* Only transactions created by yourself with no peer signatures can be removed"
msgstr "* Seules les transactions créées par vous-même sans signatures de pairs peuvent être supprimées"
msgid ""
"* Only transactions created by yourself with no peer signatures can be "
"removed"
msgstr ""
"* Seules les transactions créées par vous-même sans signatures de pairs "
"peuvent être supprimées"
#: public/views/backup.html
msgid "* You can safely install your backup on other device and use your wallet from many devices at the same time."
msgstr "* Vous pouvez installer en toute sécurité votre sauvegarde sur un autre appareil et utiliser votre portefeuille depuis plusieurs appareils en même temps"
msgid ""
"* You can safely install your backup on other device and use your wallet "
"from many devices at the same time."
msgstr ""
"* Vous pouvez installer en toute sécurité votre sauvegarde sur un autre "
"appareil et utiliser votre portefeuille depuis plusieurs appareils en même "
"temps"
#: public/views/modals/address-book.html
msgid "Add"
@ -40,8 +53,7 @@ msgstr "Ajouter une entrée"
msgid "Add wallet"
msgstr "Ajouter un portefeuille"
#: public/views/paymentUri.html
#: public/views/modals/address-book.html
#: public/views/paymentUri.html public/views/modals/address-book.html
#: public/views/modals/qr-address.html
msgid "Address"
msgstr "Adresse"
@ -54,8 +66,7 @@ msgstr "Carnet d'adresses"
msgid "Alternative Currency"
msgstr "Devise alternative"
#: public/views/paymentUri.html
#: public/views/send.html
#: public/views/paymentUri.html public/views/send.html
msgid "Amount"
msgstr "Montant"
@ -67,8 +78,7 @@ msgstr "Montant en"
msgid "Available Balance"
msgstr "Solde disponible"
#: public/views/create.html
#: public/views/join.html
#: public/views/create.html public/views/join.html
msgid "BIP32 master extended private key"
msgstr "Clé privée étendue maîtresse BIP32"
@ -89,8 +99,11 @@ msgid "Backup options"
msgstr "Options de sauvegarde"
#: public/views/receive.html
msgid "Before receiving funds, it is highly recommended you backup your wallet keys."
msgstr "Avant de recevoir des fonds, il est fortement recommandé de sauvegarder les clés de votre portefeuille."
msgid ""
"Before receiving funds, it is highly recommended you backup your wallet keys."
msgstr ""
"Avant de recevoir des fonds, il est fortement recommandé de sauvegarder les "
"clés de votre portefeuille."
#: public/views/paymentUri.html
msgid "Bitcoin URI is NOT valid!"
@ -116,10 +129,8 @@ msgstr "Mais non diffusée. Essayez de l'envoyer manuellement"
msgid "CANCEL"
msgstr "ANNULER"
#: public/views/copayers.html
#: public/views/send.html
#: public/views/modals/address-book.html
#: public/views/modals/confirmation.html
#: public/views/copayers.html public/views/send.html
#: public/views/modals/address-book.html public/views/modals/confirmation.html
msgid "Cancel"
msgstr "Annuler"
@ -131,12 +142,9 @@ msgstr "Certifié par :"
msgid "Choose backup file from your computer"
msgstr "Choisissez un fichier de sauvegarde depuis votre ordinateur"
#: public/views/modals/address-book.html
#: public/views/modals/copayers.html
#: public/views/modals/paypro.html
#: public/views/modals/qr-address.html
#: public/views/modals/scanner.html
#: public/views/modals/tx-details.html
#: public/views/modals/address-book.html public/views/modals/copayers.html
#: public/views/modals/paypro.html public/views/modals/qr-address.html
#: public/views/modals/scanner.html public/views/modals/tx-details.html
#: public/views/modals/txp-details.html
#: public/views/modals/walletSelection.html
msgid "Close"
@ -162,8 +170,7 @@ msgstr "Copiez la sauvegarde dans un endroit sûr"
msgid "Copy this text as it is in a safe place (notepad or email)"
msgstr "Copiez le texte dans un endroit sûr (bloc-notes ou e-mail)"
#: public/views/backup.html
#: public/views/modals/qr-address.html
#: public/views/backup.html public/views/modals/qr-address.html
msgid "Copy to clipboard"
msgstr "Copier dans le presse-papier"
@ -179,8 +186,7 @@ msgstr "Impossible de récupérer l'historique des transactions"
msgid "Could not update Wallet"
msgstr "Impossible de mettre à jour le portefeuille"
#: public/views/create.html
#: public/views/walletHome.html
#: public/views/create.html public/views/walletHome.html
msgid "Create"
msgstr "Créer"
@ -192,8 +198,7 @@ msgstr "Créer un nouveau portefeuille"
msgid "Create, join or import"
msgstr "Créer, joindre ou importer"
#: public/views/create.html
#: public/views/createProfile.html
#: public/views/create.html public/views/createProfile.html
msgid "Creating wallet..."
msgstr "Création du portefeuille..."
@ -261,8 +266,7 @@ msgstr "Acquisition des transactions..."
msgid "Global settings"
msgstr "Paramètres globaux"
#: public/views/create.html
#: public/views/join.html
#: public/views/create.html public/views/join.html
msgid "Hide"
msgstr "Masquer"
@ -298,13 +302,11 @@ msgstr "Importer un portefeuille"
msgid "Importing wallet..."
msgstr "Importation du portefeuille..."
#: public/views/modals/tx-details.html
#: public/views/modals/txp-details.html
#: public/views/modals/tx-details.html public/views/modals/txp-details.html
msgid "Information"
msgstr "Information"
#: public/views/create.html
#: public/views/join.html
#: public/views/create.html public/views/join.html
msgid "John"
msgstr "John"
@ -340,13 +342,11 @@ msgstr "Faire un paiement à"
msgid "Master extended private key"
msgstr "Clé privée étendue maîtresse"
#: public/views/includes/copayers.html
#: public/views/modals/copayers.html
#: public/views/includes/copayers.html public/views/modals/copayers.html
msgid "Me"
msgstr "Moi"
#: public/views/modals/paypro.html
#: public/views/modals/tx-details.html
#: public/views/modals/paypro.html public/views/modals/tx-details.html
msgid "Merchant Message:"
msgstr "Message marchand :"
@ -378,8 +378,7 @@ msgstr "Aucune propositions de dépense en attente à ce moment."
msgid "No transactions yet"
msgstr "Aucune transaction"
#: public/views/send.html
#: public/views/modals/address-book.html
#: public/views/send.html public/views/modals/address-book.html
msgid "Not valid"
msgstr "Non valide"
@ -403,14 +402,15 @@ msgstr "Ok"
msgid "Opening Wallet..."
msgstr "Ouverture du portefeuille..."
#: public/views/import.html
#: public/views/importLegacy.html
#: public/views/import.html public/views/importLegacy.html
msgid "Password"
msgstr "Mot de passe"
#: public/views/includes/password.html
msgid "Password cannot be recovered. Be sure to write it down"
msgstr "Le mot de passe ne peut pas être récupéré. Assurez-vous de l'écrire sur papier"
msgstr ""
"Le mot de passe ne peut pas être récupéré. Assurez-vous de l'écrire sur "
"papier"
#: public/views/import.html
msgid "Paste backup plain text code"
@ -433,8 +433,11 @@ msgid "Payment to"
msgstr "Paiement à"
#: public/views/preferencesDeleteWallet.html
msgid "Permanently delete this wallet. WARNING: this action cannot be reversed."
msgstr "Supprimer définitivement ce portefeuille. ATTENTION : cette action ne peut pas être annulée."
msgid ""
"Permanently delete this wallet. WARNING: this action cannot be reversed."
msgstr ""
"Supprimer définitivement ce portefeuille. ATTENTION : cette action ne peut "
"pas être annulée."
#: public/views/walletHome.html
msgid "Personal Wallet"
@ -468,13 +471,11 @@ msgstr "Rejeter"
msgid "Remove transaction"
msgstr "Supprimer la transaction"
#: public/views/backup.html
#: public/views/includes/password.html
#: public/views/backup.html public/views/includes/password.html
msgid "Repeat password"
msgstr "Répéter le mot de passe"
#: public/views/import.html
#: public/views/join.html
#: public/views/import.html public/views/join.html
#: public/views/modals/address-book.html
msgid "Required"
msgstr "Requis"
@ -564,11 +565,15 @@ msgid "Share this secret with your copayers"
msgstr "Partagez ce secret avec vos copayers"
#: public/views/receive.html
msgid "Share this with anyone to have them send you payments. To protect your privacy, new addresses are generated automatically once you use them."
msgstr "Partagez ceci avec quiconque pour recevoir des paiements. Pour protéger votre anonymat, de nouvelles adresses sont générées automatiquement une fois que vous les utilisez."
msgid ""
"Share this with anyone to have them send you payments. To protect your "
"privacy, new addresses are generated automatically once you use them."
msgstr ""
"Partagez ceci avec quiconque pour recevoir des paiements. Pour protéger "
"votre anonymat, de nouvelles adresses sont générées automatiquement une fois "
"que vous les utilisez."
#: public/views/create.html
#: public/views/join.html
#: public/views/create.html public/views/join.html
msgid "Show"
msgstr "Montrer"
@ -597,20 +602,26 @@ msgid "The transaction was removed by creator"
msgstr "La transaction a été supprimée par le créateur"
#: public/views/backup.html
msgid "This wallet have its private key encrypted. Exporting a backup will keep the private key encrypted on the backup."
msgstr "Ce portefeuille a sa clé privée chiffrée. Exporter une sauvegarde gardera la clé privée chiffrée lors de la sauvegarde."
msgid ""
"This wallet have its private key encrypted. Exporting a backup will keep the "
"private key encrypted on the backup."
msgstr ""
"Ce portefeuille a sa clé privée chiffrée. Exporter une sauvegarde gardera la "
"clé privée chiffrée lors de la sauvegarde."
#: public/views/walletHome.html
msgid "This wallet is not registered at the given Bitcore Wallet Service (BWS). You can recreate it from the local information."
msgstr "Ce portefeuille n'est pas enregistré dans le Bitcore Wallet Service (BWS). Vous pouvez le recréer depuis l'information locale."
msgid ""
"This wallet is not registered at the given Bitcore Wallet Service (BWS). You "
"can recreate it from the local information."
msgstr ""
"Ce portefeuille n'est pas enregistré dans le Bitcore Wallet Service (BWS). "
"Vous pouvez le recréer depuis l'information locale."
#: public/views/send.html
#: public/views/includes/transaction.html
#: public/views/send.html public/views/includes/transaction.html
msgid "To"
msgstr "À"
#: public/views/modals/paypro.html
#: public/views/modals/tx-details.html
#: public/views/modals/paypro.html public/views/modals/tx-details.html
msgid "To:"
msgstr "À :"
@ -642,8 +653,7 @@ msgstr "Transaction envoyée !"
msgid "Trying to reconnnect..."
msgstr "Tentative de reconnexion..."
#: public/views/history.html
#: public/views/modals/tx-details.html
#: public/views/history.html public/views/modals/tx-details.html
msgid "Unconfirmed"
msgstr "Non confirmée"
@ -727,13 +737,11 @@ msgstr "Attention !"
msgid "You do not have any wallet"
msgstr "Vous n'avez aucun portefeuille"
#: public/views/backup.html
#: public/views/import.html
#: public/views/backup.html public/views/import.html
msgid "Your backup password"
msgstr "Votre mot de passe de sauvegarde"
#: public/views/create.html
#: public/views/join.html
#: public/views/create.html public/views/join.html
msgid "Your nickname"
msgstr "Votre surnom"
@ -745,8 +753,7 @@ msgstr "Votre mot de passe"
msgid "Your profile password"
msgstr "Votre mot de passe de profil"
#: public/views/create.html
#: public/views/join.html
#: public/views/create.html public/views/join.html
msgid "advanced options"
msgstr "options avancées"
@ -758,8 +765,7 @@ msgstr "change"
msgid "in pending transactions"
msgstr "dans les transactions en attente"
#: public/views/copayers.html
#: public/views/create.html
#: public/views/copayers.html public/views/create.html
#: public/views/walletHome.html
msgid "of"
msgstr "de"

View file

@ -9,8 +9,8 @@ msgstr ""
"Last-Translator: \n"
"Language-Team: dabura667\n"
"MIME-Version: 1.0\n"
"Language: ja_JP\n"
"X-Generator: Poedit 1.6.4\n"
"Language: ja\n"
"X-Generator: Poedit 1.6.10\n"
#: public/views/splash/1.html
msgid ""

View file

@ -16,38 +16,21 @@ msgstr ""
msgid "* You can safely install your backup on other device and use your wallet from many devices at the same time."
msgstr ""
#: public/views/modals/address-book.html
msgid "Add"
msgstr ""
#: public/views/modals/address-book.html
msgid "Add a new entry"
msgstr ""
#: public/views/modals/address-book.html
msgid "Add entry"
msgstr ""
#: public/views/includes/sidebar.html
msgid "Add wallet"
msgstr ""
#: public/views/paymentUri.html
#: public/views/modals/address-book.html
#: public/views/modals/qr-address.html
msgid "Address"
msgstr ""
#: public/views/modals/address-book.html
msgid "Address Book"
msgstr ""
#: public/views/preferences.html
msgid "Alternative Currency"
msgstr ""
#: public/views/paymentUri.html
#: public/views/send.html
#: public/views/modals/txp-details.html
msgid "Amount"
msgstr ""
@ -55,13 +38,12 @@ msgstr ""
msgid "Amount in"
msgstr ""
#: public/views/send.html
msgid "Available Balance"
#: public/views/preferencesLanguage.html
msgid "Applying changes"
msgstr ""
#: public/views/create.html
#: public/views/join.html
msgid "BIP32 master extended private key"
#: public/views/send.html
msgid "Available Balance"
msgstr ""
#: public/views/includes/topbar.html
@ -92,18 +74,6 @@ msgstr ""
msgid "Bitcoin address"
msgstr ""
#: public/views/preferences.html
msgid "Bitcore Wallet Service"
msgstr ""
#: public/views/preferencesBwsUrl.html
msgid "Bitcore Wallet Service URL"
msgstr ""
#: public/views/modals/tx-details.html
msgid "Blockchain"
msgstr ""
#: public/views/modals/txp-details.html
msgid "Broadcast Transaction"
msgstr ""
@ -122,27 +92,23 @@ msgstr ""
#: public/views/copayers.html
#: public/views/send.html
#: public/views/modals/address-book.html
#: public/views/modals/confirmation.html
msgid "Cancel"
msgstr ""
#: public/views/modals/paypro.html
msgid "Certified by:"
msgid "Certified by"
msgstr ""
#: public/views/import.html
msgid "Choose backup file from your computer"
msgstr ""
#: public/views/modals/address-book.html
#: public/views/modals/copayers.html
#: public/views/modals/paypro.html
#: public/views/modals/qr-address.html
#: public/views/modals/scanner.html
#: public/views/modals/tx-details.html
#: public/views/modals/txp-details.html
#: public/views/modals/walletSelection.html
msgid "Close"
msgstr ""
@ -151,7 +117,7 @@ msgid "Color"
msgstr ""
#: public/views/modals/tx-details.html
msgid "Confirmations:"
msgid "Confirmations"
msgstr ""
#: public/views/modals/copayers.html
@ -167,7 +133,6 @@ msgid "Copy this text as it is in a safe place (notepad or email)"
msgstr ""
#: public/views/backup.html
#: public/views/modals/qr-address.html
msgid "Copy to clipboard"
msgstr ""
@ -175,6 +140,14 @@ msgstr ""
msgid "Could not connect to Wallet Service"
msgstr ""
#: public/views/history.html
msgid "Could not fetch transaction history"
msgstr ""
#: public/views/walletHome.html
msgid "Could not update Wallet"
msgstr ""
#: public/views/create.html
#: public/views/walletHome.html
msgid "Create"
@ -188,21 +161,17 @@ msgstr ""
msgid "Create, join or import"
msgstr ""
#: public/views/modals/txp-details.html
msgid "Created by"
msgstr ""
#: public/views/create.html
#: public/views/createProfile.html
msgid "Creating wallet..."
msgstr ""
#: public/views/modals/address-book.html
msgid "Creator"
msgstr ""
#: public/views/modals/address-book.html
msgid "Date"
msgstr ""
#: public/views/modals/tx-details.html
msgid "Date:"
msgid "Date"
msgstr ""
#: public/views/preferences.html
@ -217,10 +186,6 @@ msgstr ""
msgid "ENTER"
msgstr ""
#: public/views/modals/address-book.html
msgid "Empty. Create an alias for your addresses"
msgstr ""
#: public/views/preferences.html
msgid "Encrypt Private Key"
msgstr ""
@ -229,12 +194,9 @@ msgstr ""
msgid "Enter your password"
msgstr ""
#: public/views/modals/address-book.html
msgid "Entry"
msgstr ""
#: public/views/modals/paypro.html
msgid "Expires:"
#: public/views/modals/txp-details.html
msgid "Expires"
msgstr ""
#: public/views/create.html
@ -249,10 +211,6 @@ msgstr ""
msgid "Generate new address"
msgstr ""
#: public/views/receive.html
msgid "Generating a new address..."
msgstr ""
#: public/views/history.html
msgid "Getting transactions..."
msgstr ""
@ -266,6 +224,14 @@ msgstr ""
msgid "Hide"
msgstr ""
#: public/views/create.html
msgid "If not given, a random key will be generated"
msgstr ""
#: public/views/join.html
msgid "If not given, a secure key will be generated"
msgstr ""
#: public/views/importLegacy.html
msgid "Import"
msgstr ""
@ -312,18 +278,14 @@ msgstr ""
msgid "Joining shared wallet..."
msgstr ""
#: public/views/modals/address-book.html
msgid "Label"
#: public/views/preferences.html
msgid "Language"
msgstr ""
#: public/views/importLegacy.html
msgid "Learn more about Wallet Migration"
msgstr ""
#: public/views/modals/walletSelection.html
msgid "Loading..."
msgstr ""
#: public/views/paymentUri.html
msgid "Make a payment to"
msgstr ""
@ -339,7 +301,7 @@ msgstr ""
#: public/views/modals/paypro.html
#: public/views/modals/tx-details.html
msgid "Merchant Message:"
msgid "Merchant message"
msgstr ""
#: public/views/paymentUri.html
@ -350,29 +312,34 @@ msgstr ""
msgid "More"
msgstr ""
#: public/views/history.html
msgid "Moved"
msgstr ""
#: public/views/walletHome.html
msgid "Multisignature wallet"
msgstr ""
#: public/views/receive.html
msgid "My Bitcoin address:"
msgid "My Bitcoin address"
msgstr ""
#: public/views/walletHome.html
msgid "No pending spend proposals at the moment."
msgstr ""
#: public/views/history.html
msgid "No transactions yet"
msgstr ""
#: public/views/send.html
#: public/views/modals/address-book.html
msgid "Not valid"
msgstr ""
#: public/views/send.html
msgid "Note"
msgstr ""
#: public/views/modals/tx-details.html
msgid "Note:"
#: public/views/modals/txp-details.html
msgid "Note"
msgstr ""
#: public/views/modals/confirmation.html
@ -401,13 +368,17 @@ msgid "Paste backup plain text code"
msgstr ""
#: public/views/join.html
msgid "Paste wallet secret here"
msgid "Paste invitation here"
msgstr ""
#: public/views/modals/tx-status.html
msgid "Payment Sent"
msgstr ""
#: public/views/modals/txp-details.html
msgid "Payment details"
msgstr ""
#: public/views/modals/paypro.html
msgid "Payment protocol request"
msgstr ""
@ -428,8 +399,8 @@ msgstr ""
msgid "Preferences"
msgstr ""
#: public/views/modals/scanner.html
msgid "QR-Scanner"
#: public/views/history.html
msgid "Received"
msgstr ""
#: public/views/walletHome.html
@ -445,21 +416,16 @@ msgid "Reject"
msgstr ""
#: public/views/modals/txp-details.html
msgid "Remove"
msgid "Remove transaction"
msgstr ""
#: public/views/backup.html
#: public/views/includes/password.html
msgid "Repeat Password"
msgstr ""
#: public/views/backup.html
msgid "Repeat password"
msgstr ""
#: public/views/import.html
#: public/views/join.html
#: public/views/modals/address-book.html
msgid "Required"
msgstr ""
@ -479,6 +445,10 @@ msgstr ""
msgid "Save"
msgstr ""
#: public/views/walletHome.html
msgid "Scan status finished with error"
msgstr ""
#: public/views/walletHome.html
msgid "Scanning Wallet funds..."
msgstr ""
@ -495,10 +465,6 @@ msgstr ""
msgid "Select a wallet"
msgstr ""
#: public/views/modals/walletSelection.html
msgid "Select a wallet to make the payment"
msgstr ""
#: public/views/create.html
msgid "Select required signatures"
msgstr ""
@ -515,28 +481,32 @@ msgstr ""
msgid "Send by email"
msgstr ""
#: public/views/history.html
msgid "Sent"
msgstr ""
#: public/views/importLegacy.html
msgid "Server"
msgstr ""
#: public/views/includes/password.html
msgid "Set up a Password"
msgstr ""
#: public/views/backup.html
msgid "Set up a Password for your backup"
msgstr ""
#: public/views/includes/password.html
msgid "Set up a password"
msgstr ""
#: public/views/receive.html
msgid "Share address"
msgstr ""
#: public/views/copayers.html
msgid "Share secret"
msgid "Share invitation"
msgstr ""
#: public/views/copayers.html
msgid "Share this secret with your copayers"
msgid "Share this invitation with your copayers"
msgstr ""
#: public/views/receive.html
@ -553,17 +523,23 @@ msgid "Sign"
msgstr ""
#: public/views/modals/tx-details.html
#: public/views/modals/txp-details.html
msgid "Signatures"
msgstr ""
#: public/views/includes/pin.html
msgid "Skip"
msgstr ""
#: public/views/walletHome.html
msgid "Spend proposals"
msgstr ""
#: public/views/history.html
#: public/views/walletHome.html
msgid "Tap to retry"
msgstr ""
#: public/views/modals/txp-details.html
msgid "The transaction was removed by creator"
msgstr ""
#: public/views/backup.html
msgid "This wallet have its private key encrypted. Exporting a backup will keep the private key encrypted on the backup."
msgstr ""
@ -572,14 +548,16 @@ msgstr ""
msgid "This wallet is not registered at the given Bitcore Wallet Service (BWS). You can recreate it from the local information."
msgstr ""
#: public/views/send.html
#: public/views/includes/transaction.html
msgid "To"
#: public/views/modals/txp-details.html
msgid "Time"
msgstr ""
#: public/views/send.html
#: public/views/includes/transaction.html
#: public/views/modals/paypro.html
#: public/views/modals/tx-details.html
msgid "To:"
#: public/views/modals/txp-details.html
msgid "To"
msgstr ""
#: public/views/walletHome.html
@ -647,10 +625,6 @@ msgstr ""
msgid "View backup"
msgstr ""
#: public/views/modals/address-book.html
msgid "Visible"
msgstr ""
#: public/views/receive.html
msgid "WARNING: Backup needed"
msgstr ""
@ -672,11 +646,15 @@ msgid "Waiting..."
msgstr ""
#: public/views/join.html
msgid "Wallet Secret"
msgid "Wallet Invitation"
msgstr ""
#: public/views/join.html
msgid "Wallet Secret is not valid!"
msgid "Wallet Invitation is not valid!"
msgstr ""
#: public/views/includes/clientError.html
msgid "Wallet Service Error"
msgstr ""
#: public/views/copayers.html
@ -718,10 +696,6 @@ msgstr ""
msgid "advanced options"
msgstr ""
#: public/views/modals/qr-address.html
msgid "change"
msgstr ""
#: public/views/send.html
msgid "in pending transactions"
msgstr ""
@ -729,6 +703,7 @@ msgstr ""
#: public/views/copayers.html
#: public/views/create.html
#: public/views/walletHome.html
#: public/views/includes/sidebar.html
msgid "of"
msgstr ""

View file

@ -38,7 +38,7 @@
ng-class="{'main': index.hasProfile, 'main-dark': mainDark, 'animation-left': index.swipeLeft,
'animation-right': index.swipeRight}"
ui-view="main"></section>
<div ui-view="menu"></div>
<div ui-view="menu" ng-if="!index.noFocusedWallet && !$root.hideMenuBar"></div>
<a class="close-menu" ng-click="index.closeMenu()"></a>
</div>

View file

@ -15,7 +15,7 @@
name="password" ng-model="backup.password">
</div>
<label for="password" translate>Repeat Password</label>
<label for="password" translate>Repeat password</label>
<div class="input">
<input type="password" class="form-control"
placeholder="{{'Repeat password'|translate}}"

View file

@ -61,7 +61,7 @@
<small translate>If not given, a random key will be generated</small>
<input id="ext-master"
type="text"
placeholder="{{'BIP32 master extended private key'|translate}}"
placeholder="BIP32 master extended private key"
name="privateKey" ng-model="privateKey">
</div>
</div>

View file

@ -5,11 +5,11 @@
<span ng-if="index.updatingTxHistory" class="text-gray animated flash infinite" translate>Getting transactions...</span>
<span ng-if="!index.updatingTxHistory">
<span ng-show="index.txHistoryError && !index.notAuthorized" ng-click='index.openWallet()'>
Could not fetch transaction history
<br> [Tap to retry]
<span translate>Could not fetch transaction history</span>
<br> [<span translate>Tap to retry</span>]
</span>
<span ng-if="!index.txHistoryError">
No transactions yet
<span ng-if="!index.txHistoryError" translate>
No transactions yet
</span>
</span>
</div>
@ -21,9 +21,9 @@
class="row collapse last-transactions-content">
<div class="large-3 medium-3 small-3 columns">
<span class="label tu radius" ng-show="btx.action == 'received'"
ng-style="{'background-color':index.backgroundColor}">Received</span>
<span class="label tu gray radius" ng-show="btx.action == 'sent'">Sent</span>
<span class="label tu gray radius" ng-show="btx.action == 'moved'">Moved</span>
ng-style="{'background-color':index.backgroundColor}" translate>Received</span>
<span class="label tu gray radius" ng-show="btx.action == 'sent'" translate>Sent</span>
<span class="label tu gray radius" ng-show="btx.action == 'moved'" translate>Moved</span>
</div>
<div class="large-5 medium-5 small-5 columns">

View file

@ -4,8 +4,10 @@
<i class="fi-alert"></i>
</div>
<div class="dr-notification-content">
<h3 class="dr-notification-title">Wallet Service Error</h3>
<div class="dr-notification-text ellipsis">{{index.clientError.message || index.clientError}}</div>
<h3 class="dr-notification-title" translate>Wallet Service Error</h3>
<div class="dr-notification-text ellipsis">
{{index.clientError.error || index.clientError.message || index.clientError}}
</div>
</div>
</div>
</div>

View file

@ -1,6 +0,0 @@
<div class="loading-screen">
<div class="loading-screen-content">
<img src="img/ajax-loader.gif" alt="Loading...">
<div class="text-gray size-12" ng-show="title">{{title|translate}}...</div>
</div>
</div>

View file

@ -1,9 +1,7 @@
<div
ng-show="!index.noFocusedWallet && !hideMenuBar"
class="bottom-bar row collapse"
ng-controller="menuController as menu">
<div class="medium-3 small-3 columns text-center bottombar-item" ng-repeat="item in menu.menu">
<a ng-click="menu.go(item.link)" ng-class="{'active': activeMenu == item.link}"
<div
class="bottom-bar row collapse">
<div class="medium-3 small-3 columns text-center bottombar-item" ng-repeat="item in index.menu">
<a ng-click="$root.go(item.link)" ng-class="{'active': activeMenu == item.link}"
ng-style="{'border-top-color':activeMenu==item.link ? index.backgroundColor : ''}">
<i class="size-36 {{item.icon}} db"></i>
<div class="size-10 tu">

View file

@ -7,8 +7,8 @@
>
<div class="columns m20t">
<label class="size-14 text-center" for="password" ng-if="index.askPassword.isSetup">
<span ng-show="!pass.isVerification" translate>Set up a Password</span>
<span ng-show="pass.isVerification" translate>Repeat Password</span>
<span ng-show="!pass.isVerification" translate>Set up a password</span>
<span ng-show="pass.isVerification" translate>Repeat password</span>
</label>
<label class="size-14 text-center" for="password" ng-if="!index.askPassword.isSetup">
<span translate>Enter your password</span>

View file

@ -1 +0,0 @@
<span class="photo-container"><i class="fi-torso size-42"></i></span>

View file

@ -1,54 +0,0 @@
<div ng-controller="pinController as pin" ng-init="pin.init(confirmPin, testPin)">
<h3 class="text-center text-white">
<span ng-show="pin.askForPin == 1">Setup a PIN</span>
<span ng-show="pin.askForPin == 2">Repeat PIN</span>
</h3>
<div class="text-center size-12 text-warning" ng-show="pin.error || cp.error">
{{(pin.error || cp.error)|translate}}
</div>
<div class="pin" ng-show="!pin.error && !cp.error">
<div class="pin-box">
<i class="icon-circle" ng-show="!pin.defined[0]"></i>
<i class="icon-circle-active" ng-show="pin.defined[0]"></i>
</div>
<div class="pin-box">
<i class="icon-circle" ng-show="!pin.defined[1]"></i>
<i class="icon-circle-active" ng-show="pin.defined[1]"></i>
</div>
<div class="pin-box">
<i class="icon-circle" ng-show="!pin.defined[2]"></i>
<i class="icon-circle-active" ng-show="pin.defined[2]"></i>
</div>
<div class="pin-box">
<i class="icon-circle" ng-show="!pin.defined[3]"></i>
<i class="icon-circle-active" ng-show="pin.defined[3]"></i>
</div>
</div>
<div class="pin-numbers">
<div class="pin-button-bar">
<a class="pin-button" ng-click="pin.press(1)">1</a>
<a class="pin-button" ng-click="pin.press(2)">2</a>
<a class="pin-button" ng-click="pin.press(3)">3</a>
</div>
<div class="pin-button-bar">
<a class="pin-button" ng-click="pin.press(4)">4</a>
<a class="pin-button" ng-click="pin.press(5)">5</a>
<a class="pin-button" ng-click="pin.press(6)">6</a>
</div>
<div class="pin-button-bar">
<a class="pin-button" ng-click="pin.press(7)">7</a>
<a class="pin-button" ng-click="pin.press(8)">8</a>
<a class="pin-button" ng-click="pin.press(9)">9</a>
</div>
<div class="pin-button-bar">
<a class="pin-button" ng-click="pin.skip()">
<i class="text-primary size-16 vm" translate>Skip</i>
</a>
<a class="pin-button" ng-click="pin.press(0)">0</a>
<a class="pin-button" ng-click="pin.clear()"><i class="fi-arrow-left"></i></a>
</div>
</div>
</div>

View file

@ -12,7 +12,7 @@
<div class="avatar-wallet"
ng-style="{'background-color':item.color}">{{(item.name || item.id) | limitTo: 1}}</div>
<div class="ellipsis name-wallet">{{item.name || item.id}}</div>
<div class="size-12">{{item.m}} of {{item.n}}</div>
<div class="size-12">{{item.m}} <span translate>of</span> {{item.n}}</div>
</a>
</li>
<li>

View file

@ -5,7 +5,7 @@
</a>
<a ng-show="goBackToState"
ng-click="$root.go(goBackToState); goBackToState = null"><i class="icon-arrow-left3 icon-back"></i>
<span class="text-back" translate>Back</span>
<span class="text-back">{{'Back'|translate}}</span>
</a>
</section>

View file

@ -2,7 +2,7 @@
ng-class="{'text-gray':!tx.pendingForUs}"
ng-click="openTxModal(tx, index.copayers)">
<div class="m5b size-12 text-gray">
<time>{{ (tx.ts || tx.createdTs ) | amTimeAgo}}</time>
<time>{{ (tx.ts || tx.createdOn ) * 1000 | amTimeAgo}}</time>
</div>
<div class="row collapse">
<div class="ellipsis small-8 columns size-14">

View file

@ -52,7 +52,7 @@
<small translate>If not given, a secure key will be generated</small>
<input id="ext-master"
type="text"
placeholder="{{'BIP32 master extended private key'|translate}}"
placeholder="BIP32 master extended private key"
name="privateKey" ng-model="privateKey">
</label>
</div>

View file

@ -1,82 +0,0 @@
<nav class="tab-bar text-right hide-for-large-up">
<span ng-click="close()" class="p10 text-white" translate>Close</span>
</nav>
<div class="modal-mobile">
<h1 ng-show="!showForm" translate>Address Book</h1>
<h1 ng-show="showForm" translate>Add a new entry</h1>
<p translate class="text-gray m15b" ng-show="!showForm && !hasEntry()" translate>
Empty. Create an alias for your addresses
</p>
<div class="box-notification" ng-show="success">
<span class="size-14 text-success">
{{success|translate}}
</span>
</div>
<table class="addressbook line-t" ng-show="!showForm && hasEntry()">
<thead class="show-for-large-up">
<tr>
<th translate>Entry</th>
<th class="show-for-large-up" ng-class="{'hide-for-small-only' : $root.wallet.isShared()}" ng-show="$root.wallet.isShared()" translate>Creator</th>
<th class="show-for-large-up" translate>Date</th>
<th class="show-for-large-up" translate>Visible</th>
</tr>
</thead>
<tbody>
<tr
ng-repeat="(addr, info) in addressBook"
ng-class="{'addressbook-disabled': info.hidden}">
<td ng-click="copyToSend(addr)">
<b>{{info.label}}</b><br>
<small class="address-size">{{::addr}}</small>
</td>
<td class="show-for-large-up" ng-click="copyToSend(addr)" ng-show="$root.wallet.isShared()">{{$root.wallet.publicKeyRing.nicknameForCopayer(info.copayerId)}}</td>
<td ng-click="copyToSend(addr)" class="show-for-large-up"><time>{{::info.createdTs | amCalendar}}</time></td>
<td class="show-for-large-up text-center">
<a ng-click="toggleAddressBookEntry(addr)" title="{{ info.hidden ? 'Enable' : 'Disable'}} address">
<i class="fi-checkbox size-21"
ng-class="{'text-success':!info.hidden, 'text-gray':info.hidden}"></i>
</a>
</td>
</tr>
</tbody>
</table>
<form ng-show="showForm" class="m0" name="addressBookForm"
ng-disabled="loading"
ng-submit="submitAddressBook(addressBookForm)" novalidate>
<div class="box-notification" ng-show="error">
<span class="size-14 text-warning">
{{error|translate}}
</span>
</div>
<div class="row collapse">
<label for="newaddress" class="left"><span translate>Address</span>
<small translate ng-hide="!addressBookForm.newaddress.$pristine || newaddress">Required</small>
</label>
<span class="has-error right size-12" ng-show="addressBookForm.newaddress.$invalid && newaddress">
<span class="icon-input"><i class="fi-x"></i></span>
<span translate>Not valid</span>
</span>
<small class="icon-input right" ng-show="!addressBookForm.newaddress.$invalid && newaddress"><i class="fi-check"></i></small>
</div>
<div class="input">
<input type="text" name="newaddress"
placeholder="{{'Address'|translate}}" ng-model="newaddress" valid-address required>
</div>
<label for="newlabel"><span translate>Label</span>
<small translate ng-hide="!addressBookForm.newlabel.$pristine || newlabel">Required</small>
<div class="input">
<input type="text" name="newlabel"
placeholder="{{'Label'|translate}}" ng-model="newlabel" required>
</div>
</label>
<a translate class="button secondary default" ng-show="!loading" ng-click="cancel(addressBookForm)">Cancel</a>
<button class="primary right"
ng-disabled="addressBookForm.$invalid || loading"
ng-click="submitAddressBook(addressBookForm)">{{'Add'|translate}}</button>
</form>
<a ng-show="!showForm" class="button primary expand" ng-disabled="loading" ng-click="toggleForm()">
<i class="fi-plus"></i> <span translate>Add entry</span>
</a>
<a class="close-reveal-modal show-for-large-up" ng-click="close()"><i class="fi-x size-18"></i></a>
</div>

View file

@ -24,24 +24,24 @@
<div class="line-b m10v"></div>
<div class="ellipsis m10v">
<i translate>To:</i> {{paypro.domain}}
<i translate>To</i>: {{paypro.domain}}
</div>
<div class="m10v">
<i translate>Certified by:</i>
<i translate>Certified by</i>:
<span ng-show="paypro.verified"><i class="fi-lock color-greeni"></i> {{paypro.verifyData.caName}}</span>
<span ng-show="!paypro.verified"><i class="fi-unlock color-yellowi"></i> <span translate>Untrusted</span></span>
</div>
<div ng-if="md.pr.pd.memo" class="m10v lh140">
<i translate>Merchant Message:</i>
<i translate>Merchant message</i>:
<span class="text-gray">
{{paypro.memo}}
</span>
</div>
<div ng-if="md.expirationDate" class="m10v">
<i translate>Expires:</i> {{paypro.expires | amTimeAgo }}
<i translate>Expires</i>: {{paypro.expires | amTimeAgo }}
</div>
</div>
</div>

View file

@ -1,26 +0,0 @@
<nav class="tab-bar">
<section class="right-small">
<a ng-click="cancel()">
<span class="text-close" translate>Close</span>
</a>
</section>
<section class="middle tab-bar-section">
<h1 class="title ellipsis" translate>
Address
</h1>
</section>
</nav>
<div class="p60t text-center" ng-init="addr = address.address">
<qrcode size="220" data="{{addr}}"></qrcode>
<div class="size-12" ng-class="{'enable_text_select': !isCordova}">
{{addr}}
</div>
<div class="m5t size-10 text-secondary" ng-show="address.isChange" translate>change</div>
<div class="text-center m10t" ng-if="isCordova">
<button class="secondary" ng-click="copyAddress(addr)">
<i class="fi-clipboard-pencil"></i> <span translate>Copy to clipboard</span>
</button>
</div>
</div>

View file

@ -5,7 +5,7 @@
</a>
</section>
<section class="middle tab-bar-section">
<h1 class="title ellipsis" translate>
<h1 class="title ellipsis">
QR-Scanner
</h1>
</section>

View file

@ -24,7 +24,7 @@
<h4 class="title m0" translate>Information</h4>
<ul class="no-bullet size-14 m0">
<li ng-if="btx.addressTo" class="line-b p10 oh">
<span class="text-gray" translate>To:</span>
<span class="text-gray" translate>To</span>:
<span class="right">
<span ng-if="btx.merchant">
<span ng-show="btx.merchant.pr.ca"><i class="fi-lock color-greeni"></i> {{btx.merchant.domain}}</span>
@ -36,25 +36,25 @@
</span>
</li>
<li ng-if="btx.time" class="line-b p10">
<span class="text-gray" translate>Date:</span>
<span class="text-gray" translate>Date</span>:
<span class="right">
<time>{{ btx.time * 1000 | amCalendar}}</time>
</span>
</li>
<li ng-if="btx.message" class="line-b p10 oh">
<span class="text-gray" translate>Note:</span>
<span class="text-gray" translate>Note</span>:
<span class="right">
{{btx.message}}
</span>
</li>
<li ng-if="btx.merchant" class="line-b p10 oh">
<span class="text-gray" translate>Merchant Message:</span>
<span class="text-gray" translate>Merchant message</span>:
<span class="right">
{{btx.merchant.pr.pd.memo}}
</span>
</li>
<li ng-if="btx.time" class="line-b p10">
<span class="text-gray" translate>Confirmations:</span>
<span class="text-gray" translate>Confirmations</span>:
<span class="right" >
<span class="text-warning" ng-show="!btx.confirmations || btx.confirmations == 0" translate>
Unconfirmed

View file

@ -11,38 +11,38 @@
</section>
</nav>
<div class="p45t" ng-init="updateCopayerList()">
<h4 class="title m0" translate> Information </h4>
<h4 class="title m0" translate>Information</h4>
<ul class="no-bullet size-14 m0">
<li class="line-b p10">
<span class="text-gray">To:</span>
<span class="text-gray" translate>To</span>:
<span class="right">{{tx.toAddress}}</span>
</li>
<li class="line-b p10">
<span class="text-gray">Amount:</span>
<span class="text-gray" translate>Amount</span>:
<span class="right">{{amountStr}}
<span class="label gray radius">{{alternativeAmountStr}}</span>
</span>
</li>
<li class="line-b p10">
<span class="text-gray">Time:</span>
<span class="text-gray" translate>Time</span>:
<span class="right">
<time>{{ (tx.ts || tx.createdOn ) * 1000 | amTimeAgo}}</time>
</span>
</li>
<li class="line-b p10 oh">
<span class="text-gray">Create by:</span>
<span class="text-gray" translate>Created by</span>:
<span class="right">{{tx.creatorName}}</span>
</li>
<li class="line-b p10 oh">
<span class="text-gray">Note:</span>
<span class="text-gray" translate>Note</span>:
<span class="right">{{tx.message}}</span>
</li>
</ul>
<div ng-if="tx.paypro">
<h4 class="title m0">PAYMENT DETAILS</h4>
<h4 class="title m0" translate>Payment details</h4>
<ul class="no-bullet size-14 m0">
<li class="line-b p10">
<span class="text-gray">To:</span>
<span class="text-gray" translate>To</span>:
<span class="right">
<span>
<span ng-show="tx.merchant.pr.ca"><i class="fi-lock"></i> {{tx.paypro.domain}}</span>
@ -52,7 +52,7 @@
</span>
</li>
<li class="line-b p10">
<span class="text-gray">Expires:</span>
<span class="text-gray" translate>Expires</span>:
<span class="right">
<time>{{tx.paypro.expirationDate | amTimeAgo }}</time>
</span>
@ -65,7 +65,7 @@
</div>
<div ng-if="tx.actions[0] && !txRejected && !txBroadcasted">
<h4 class="title m0">Signatures:</h4>
<h4 class="title m0" translate>Signatures</h4>
<ul class="no-bullet size-14 m0">
<li class="line-b p10 text-gray" ng-repeat="ac in tx.actions">
<i class="icon-contact size-24"></i>
@ -85,21 +85,9 @@
</div>
<div class="row column m20t text-center text-warning" ng-if="tx.removed">
<div class="row column m20t text-center text-warning" ng-if="tx.removed" translate>
The transaction was removed by creator
</div>
<div class="row column m20t" ng-if="tx.couldRemove">
<button class="button expand outline dark-gray m0 expand" ng-click="remove(tx);"
ng-disabled="loading" ng-show="tx.couldRemove">
<i class="fi-x icon-sign x"></i>
<span translate>Remove</span>
</button>
<div class="text-gray size-12 text-center" show="tx.couldRemove" translate>
* Only transactions created by yourself with no peer signatures can be removed
</div>
</div>
</div>
<div class="row m20t" ng-if="tx.pendingForUs">
<div class="large-5 medium-5 small-6 columns">
@ -142,5 +130,17 @@
Transaction finally rejected
</div>
</div>
<div class="row column m20t" ng-if="tx.couldRemove">
<button class="tiny expand outline dark-gray" ng-click="remove(tx)"
ng-disabled="loading" ng-show="tx.couldRemove">
<i class="fi-x icon-sign x"></i>
<span translate>Remove transaction</span>
</button>
<div class="text-gray size-12 text-center" show="tx.couldRemove" translate>
* Only transactions created by yourself with no peer signatures can be removed
</div>
</div>
</div>
<div class="extra-margin-bottom"></div>

View file

@ -1,30 +0,0 @@
<nav class="tab-bar text-right hide-for-large-up">
<span ng-click="cancel()" class="p10 text-white" translate>Close</span>
</nav>
<div class="modal-mobile" ng-init="setWallets()">
<h1 class="line-b" translate>Select a wallet to make the payment</h1>
<div class="m20v" ng-show="!wallets[0]" translate>Loading...</div>
<ul class="wallet-selection wallets" ng-show="wallets[0]">
<li ng-repeat="item in wallets track by $index" class="nav-item" ng-show="+item.balanceInfo.totalBalanceBTC > 0" ng-click="ok(item)">
<div class="col1">
<div class="avatar-wallet">{{item.getName() | limitTo: 1}}</div>
</div>
<div class="col2">
<a class="size-12 wallet-item">
<div class="oh">
<div class="right size-10 type-wallet">
[ {{item.requiredCopayers}} of {{item.totalCopayers}} ]</div>
<div class="ellipsis name-wallet">{{item.getName()}}</div>
</div>
<div class="oh">
<b class="m5r size-12">{{item.balanceInfo.totalBalance || 0}} {{item.settings.unitName}}</b>
<span class="alt-currency size-10">{{item.balanceInfo.totalBalanceAlternative}} {{item.balanceInfo.alternativeIsoCode}}</span>
</div>
</a>
</div>
</li>
</ul>
<a class="close-reveal-modal show-for-large-up" ng-click="cancel()"><i class="fi-x size-18"></i></a>
</div>

View file

@ -26,12 +26,21 @@
</li>
<h4 class="title m0" translate>Global settings</h4>
<li class="line-b p20" ng-click="$root.go('preferencesLanguage')">
<span translate>Language</span>
<span class="right text-gray">
<i class="icon-arrow-right3 size-24 right"></i>
{{index.defaultLanguageName}}
</span>
</li>
<li class="line-b p20" ng-click="$root.go('preferencesUnit')">
<span translate>Unit</span>
<span class="right text-gray">
<i class="icon-arrow-right3 size-24 right"></i>
{{preferences.unitName}}
</span>
</span>
</li>
<li class="line-b p20" ng-click="$root.go('preferencesAltCurrency')">
@ -43,7 +52,7 @@
</li>
<li class="line-b p20" ng-click="$root.go('preferencesBwsUrl')">
<span translate>Bitcore Wallet Service</span>
<span>Bitcore Wallet Service</span>
<span class="text-gray db">
<i class="icon-arrow-right3 size-24 right"></i>
{{preferences.bwsurl}}

View file

@ -1,6 +1,6 @@
<div class="preferences m20t columns" ng-controller="preferencesBwsUrlController as prefBwsUrl">
<form name="settingsBwsUrlForm" ng-submit="prefBwsUrl.save()" class="m20t">
<label translate>Bitcore Wallet Service URL</label>
<label>Bitcore Wallet Service URL</label>
<input type="text" id="bwsurl" type="text" name="bwsurl" ng-model="prefBwsUrl.bwsurl">
<input type="submit" class="button expand black radius" value="{{'Save'|translate}}"
ng-style="{'background-color':index.backgroundColor}">

View file

@ -0,0 +1,10 @@
<div class="preferences" ng-controller="preferencesLanguageController as prefLang">
<div class="animated infinite flash text-center m20t text-gray" ng-show="prefLang.loading" translate>Applying changes</div>
<div ng-show="!prefLang.loading"
ng-repeat="lang in index.availableLanguages"
ng-click="prefLang.save(lang.isoCode)" class="line-b p20 size-14">
<span>{{lang.name}}</span>
<i class="fi-check size-16 right" ng-show="index.defaultLanguageIsoCode == lang.isoCode"></i>
</div>
</div>
<div class="extra-margin-bottom"></div>

View file

@ -1,77 +1,69 @@
<div class="receive" ng-controller="receiveController as receive" ng-init="receive.getAddress()">
<div ng-show="index.needsBackup && !receive.skipBackup" class="p60t row text-center">
<div class="text-warning text-bold m15b">
<i class="fi-alert"></i>
<span translate>
WARNING: Backup needed
</span>
</div>
<div class="text-gray m15h" translate>
Before receiving funds, it is highly recommended you backup your wallet keys.
</div>
<div class="small-6 columns m20t">
<span class="button expand outline dark-gray tiny"
ng-click="receive.skipBackup = true">
<span translate>SKIP BACKUP</span>
</span>
</div>
<div class="small-6 columns m20t">
<span class="button black expand radius tiny"
ng-click="$root.go('backup')" ng-style="{'background-color':index.backgroundColor}" >
<span translate>Backup now</span>
</span>
</div>
</div>
<div ng-show="index.needsBackup && !receive.skipBackup" class="p60t row text-center">
<div class="text-warning text-bold m15b">
<i class="fi-alert"></i>
<span translate>
WARNING: Backup needed
</span>
</div>
<div class="text-gray m15h" translate>
Before receiving funds, it is highly recommended you backup your wallet keys.
</div>
<div ng-show="!index.needsBackup || receive.skipBackup">
<div class="row m20t" ng-show="receive.generatingAddress">
<div class="large-12 columns">
<div class="oh text-center">
<span class="text-gray" translate>Generating a new address...</span>
</div>
<div class="small-6 columns m20t">
<span class="button expand outline dark-gray tiny"
ng-click="receive.skipBackup = true">
<span translate>SKIP BACKUP</span>
</span>
</div>
<div class="small-6 columns m20t">
<span class="button black expand radius tiny"
ng-click="$root.go('backup')" ng-style="{'background-color':index.backgroundColor}" >
<span translate>Backup now</span>
</span>
</div>
</div>
<div ng-show="!receive.generatingAddress">
<div class="box-notification" ng-show="receive.error ">
<span class="text-warning size-14">
{{receive.error|translate}}
</span>
</div>
<div class="row" ng-show="receive.addr">
<div ng-show="!index.needsBackup || receive.skipBackup">
<div class="box-notification" ng-show="receive.error ">
<span class="text-warning size-14">
{{receive.error|translate}}
</span>
</div>
<div class="row" ng-if="receive.addr">
<!-- Address-->
<div class="large-12 columns">
<h2 class="text-center m10t" translate>My Bitcoin address:</h2>
<div class="text-center" ng-click="receive.copyAddress(receive.addr)">
<qrcode size="220" data="bitcoin:{{receive.addr}}"></qrcode>
<div class="m10t">
<h4 ng-class="{'enable_text_select': !index.isCordova}" class="size-12">{{receive.addr}}</h4>
</div>
</div>
<div class="m10t text-center" ng-show="index.isCordova">
<span class="button outline dark-gray tiny"
ng-click="receive.shareAddress(receive.addr)">
<i class="fi-share"></i>
<span translate>Share address</span>
</span>
</div>
<div class="line-t size-12" translate>
Share this with anyone to have them send you payments. To protect your privacy, new addresses are generated automatically once you use them.
<h2 class="text-center m10t" translate>My Bitcoin address</h2>
<div class="text-center animated fadeIn" ng-click="receive.copyAddress(receive.addr)">
<qrcode size="220" data="bitcoin:{{receive.addr}}"></qrcode>
<div class="m10t">
<h4 ng-class="{'enable_text_select': !index.isCordova}" class="size-12">{{receive.addr}}</h4>
</div>
</div>
<div class="m10t text-center" ng-show="index.isCordova">
<span class="button outline dark-gray tiny"
ng-click="receive.shareAddress(receive.addr)">
<i class="fi-share"></i>
<span translate>Share address</span>
</span>
</div>
<div class="line-t size-12" translate>
Share this with anyone to have them send you payments. To protect your privacy, new addresses are generated automatically once you use them.
</div>
</div>
</div>
<div class="row m20t" ng-show="receive.addr">
<div class="large-12 columns">
<a class="button black expand radius" ng-click="receive.newAddress()"
ng-style="{'background-color':index.backgroundColor}" translate>
Generate new address
</a>
</div>
<div class="row m20t" ng-if="receive.addr">
<div class="large-12 columns">
<button class="button black expand radius" ng-click="receive.newAddress()"
ng-style="{'background-color':index.backgroundColor}" ng-disabled="receive.generatingAddress" translate>
Generate new address
</button>
</div>
</div>
</div>
</div>
</div>

View file

@ -1,18 +1,17 @@
<div class="home-wallet" ng-controller="walletHomeController as home" ng-init="home.init()">
<div class="row" ng-show="!index.noFocusedWallet">
<div class="home-wallet" ng-controller="walletHomeController as home">
<div class="oh" ng-show="!index.noFocusedWallet">
<div class="amount" ng-style="{'background-color':index.backgroundColor}">
<div ng-if="!index.anyOnGoingProcess && !index.notAuthorized">
<div ng-show="index.updateError" ng-click='index.openWallet()'>
<span translate>Could not update Wallet</span>
<br><span translate>Tap to retry</span>
</div>
<div ng-show="index.walletScanStatus == 'error'" ng-click='index.retryScan()'>
<span translate>Scan status finished with error</span>
<br><span translate>Tap to retry</span>
</div>
<div ng-show="!index.updateError && index.walletScanStatus != 'error'">
<div class="size-36 animated fadeIn">
<strong>{{index.totalBalanceStr}}</strong>
@ -32,34 +31,29 @@
</div>
</div>
</div>
<div class="pr columns line-b">
<div class="avatar-wallet left"
ng-class="{'updating':index.anyOnGoingProcess}"
ng-style="{'background-color':index.backgroundColor}"
>
<div class="">{{index.walletName | limitTo: 1}}</div>
</div>
<div class="right">
<a ng-click="$root.go('preferences')" class="button outline light-gray tiny m0">
<i class="fi-widget size-18 vm"></i>
<span class="show-for-medium-up" translate>Preferences</span>
</a>
</div>
<div class="wallet-info" ng-click="openCopayersModal(index.copayers, index.copayerId)">
<p class="m0">
{{index.m}} <span translate>of</span> {{index.n}}
</p>
<div class="size-12 text-gray">
<span ng-if="index.n > 1" translate>Multisignature wallet </span>
<span ng-if="index.n == 1" translate>Personal Wallet</span>
<span ng-if="index.network != 'livenet'"> - Testnet</span>
</div>
</div>
<div class="pr columns line-b">
<div class="avatar-wallet left"
ng-class="{'updating':index.anyOnGoingProcess}"
ng-style="{'background-color':index.backgroundColor}">{{index.walletName | limitTo: 1}}</div>
<div class="right">
<a ng-click="$root.go('preferences')" class="button outline light-gray tiny m0">
<i class="fi-widget size-18 vm"></i>
<span class="show-for-medium-up" translate>Preferences</span>
</a>
</div>
<div class="wallet-info" ng-click="openCopayersModal(index.copayers, index.copayerId)">
<p class="m0">
{{index.m}} <span translate>of</span> {{index.n}}
</p>
<div class="size-12 text-gray">
<span ng-if="index.n > 1" translate>Multisignature wallet </span>
<span ng-if="index.n == 1" translate>Personal Wallet</span>
<span ng-if="index.network != 'livenet'"> - Testnet</span>
</div>
</div>
</div>
</div>
<div class="onGoingProcess"
ng-show="index.anyOnGoingProcess"
ng-style="{'background-color':index.backgroundColor}"
@ -73,31 +67,28 @@
<span translate ng-show="index.onGoingProcessName == 'recreating'">Recreating Wallet on BWS...</span>
</div>
<div ng-show="index.notAuthorized">
<div class="text-center text-warning">
<div class="m20t" ng-show="index.notAuthorized">
<div class="text-center text-warning">
<i class="fi-alert"></i>
<span translate>
WARNING: Wallet not registered
</span>
</div>
<div class="text-center text-gray m15r m15l" translate>
This wallet is not registered at the given Bitcore Wallet Service (BWS). You can recreate it from the local information.
</div>
<div class="text-center m10t ">
<span class="button outline dark-gray tiny"
ng-click="index.recreate()"
<span translate>Recreate</span>
</span>
</div>
<span translate>
WARNING: Wallet not registered
</span>
</div>
<div class="text-center text-gray m15r m15l" translate>
This wallet is not registered at the given Bitcore Wallet Service (BWS). You can recreate it from the local information.
</div>
<div class="text-center m10t ">
<span class="button outline dark-gray tiny"
ng-click="index.recreate()">
<span translate>Recreate</span>
</span>
</div>
</div>
<div ng-show="index.requiresMultipleSignatures && index.txps[0]">
<h4 class="title m0" translate>Spend proposals</h4>
<div class="last-transactions pr" ng-repeat="tx in index.txps | orderBy:'-createdTs'"
<div class="last-transactions pr" ng-repeat="tx in index.txps"
ng-include="'views/includes/transaction.html'">
</div>

View file

@ -652,13 +652,13 @@ a.pin-button:active {
.animation-left.ng-enter {
-webkit-transform: translate3d(100%, 0, 0);
transform: translate3d(100%, 0, 0);
-webkit-transition-delay: 0.1s;
-webkit-transition-delay: 0.05s;
opacity: 0;
}
.animation-right.ng-enter {
-webkit-transform: translate3d(-100%, 0, 0);
transform: translate3d(-100%, 0, 0);
-webkit-transition-delay: 0.1s;
-webkit-transition-delay: 0.05s;
opacity: 0;
}
.animation-left.ng-enter.ng-enter-active,
@ -672,15 +672,18 @@ a.pin-button:active {
.animation-right.ng-leave {
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
opacity: 0;
}
.animation-left.ng-leave.animation-left.ng-leave-active {
-webkit-transform: translate3d(-100%, 0, 0);
transform: translate3d(-100%, 0, 0);
-webkit-transition-delay: 0.05s;
opacity: 0;
}
.animation-right.ng-leave.animation-right.ng-leave-active {
-webkit-transform: translate3d(100%, 0, 0);
transform: translate3d(100%, 0, 0);
-webkit-transition-delay: 0.05s;
opacity: 0;
}

View file

@ -6,24 +6,21 @@ angular.module('copayApp.controllers').controller('createProfileController', fun
if (profileService.profile)
go.walletHome();
var pin='';
// $rootScope.$on('pin', function(event, pin) {
self.creatingProfile = true;
self.creatingProfile = true;
$timeout(function() {
profileService.create(pin, function(err) {
if (err) {
self.creatingProfile = false;
$log.warn(err);
self.error = err;
$scope.$apply();
$timeout(function() {
go.reload();
}, 3000);
} else {
go.walletHome();
}
});
}, 100);
// });
$timeout(function() {
profileService.create(function(err) {
if (err) {
self.creatingProfile = false;
$log.warn(err);
self.error = err;
$scope.$apply();
$timeout(function() {
go.reload();
}, 3000);
} else {
go.walletHome();
}
});
}, 100);
});

View file

@ -1,17 +1,47 @@
'use strict';
angular.module('copayApp.controllers').controller('indexController', function($rootScope, $scope, $log, $filter, $timeout, lodash, go, profileService, configService, isCordova, rateService, storageService) {
angular.module('copayApp.controllers').controller('indexController', function($rootScope, $scope, $log, $filter, $timeout, lodash, go, profileService, configService, isCordova, rateService, storageService, gettextCatalog, amMoment) {
var self = this;
self.isCordova = isCordova;
self.onGoingProcess = {};
self.limitHistory = 5;
self.hideMenuBar = false;
self.limitHistory = 5;
function strip(number) {
return (parseFloat(number.toPrecision(12)));
};
self.menu = [{
'title': 'Home',
'icon': 'icon-home',
'link': 'walletHome'
}, {
'title': 'Receive',
'icon': 'icon-receive',
'link': 'receive'
}, {
'title': 'Send',
'icon': 'icon-paperplane',
'link': 'send'
}, {
'title': 'History',
'icon': 'icon-history',
'link': 'history'
}];
self.availableLanguages = [{
name: 'English',
isoCode: 'en',
}, {
name: 'Spanish',
isoCode: 'es',
}, {
name: 'Français',
isoCode: 'fr',
}, {
name: '日本人',
isoCode: 'ja',
}];
self.setOngoingProcess = function(processName, isOn) {
$log.debug('onGoingProcess', processName, isOn);
self[processName] = isOn;
@ -193,6 +223,7 @@ angular.module('copayApp.controllers').controller('indexController', function($r
self.openWallet = function() {
var fc = profileService.focusedClient;
self.updateColor();
$rootScope.$apply();
$timeout(function() {
self.setOngoingProcess('openingWallet', true);
self.updateError = false;
@ -402,6 +433,43 @@ angular.module('copayApp.controllers').controller('indexController', function($r
});
};
self.setDefaultLanguage = function(setLang) {
var userLang
if (!setLang) {
userLang = configService.getSync().wallet.settings.defaultLanguage;
if (!userLang) {
// Auto-detect browser language
var androidLang;
if (navigator && navigator.userAgent && (androidLang = navigator.userAgent.match(/android.*\W(\w\w)-(\w\w)\W/i))) {
userLang = androidLang[1];
} else {
// works for iOS and Android 4.x
userLang = navigator.userLanguage || navigator.language;
}
userLang = userLang ? (userLang.split('-', 1)[0] || 'en') : 'en';
}
if (userLang != gettextCatalog.getCurrentLanguage()) {
$log.debug('Setting default language: ' + userLang);
gettextCatalog.setCurrentLanguage(userLang);
amMoment.changeLocale(userLang);
}
}
else {
configService.set({
wallet: {
settings: {
defaultLanguage: setLang
}
}
}, function() {
gettextCatalog.setCurrentLanguage(setLang);
amMoment.changeLocale(setLang);
});
}
self.defaultLanguageIsoCode = setLang || userLang;
self.defaultLanguageName = lodash.result(lodash.find(self.availableLanguages, { 'isoCode': self.defaultLanguageIsoCode }), 'name');
};
// UX event handlers
$rootScope.$on('Local/ColorUpdated', function(event) {
@ -469,6 +537,10 @@ angular.module('copayApp.controllers').controller('indexController', function($r
});
});
$rootScope.$on('Local/DefaultLanguage', function(event, setLang) {
self.setDefaultLanguage(setLang);
});
$rootScope.$on('Animation/Disable', function(event) {
$timeout(function() {
self.swipeLeft = false;

View file

@ -1,27 +0,0 @@
'use strict';
angular.module('copayApp.controllers').controller('menuController', function($state) {
this.menu = [{
'title': 'Home',
'icon': 'icon-home',
'link': 'walletHome'
}, {
'title': 'Receive',
'icon': 'icon-receive',
'link': 'receive'
}, {
'title': 'Send',
'icon': 'icon-paperplane',
'link': 'send'
}, {
'title': 'History',
'icon': 'icon-history',
'link': 'history'
}];
this.go = function(state) {
$state.go(state);
};
});

View file

@ -1,73 +0,0 @@
'use strict';
angular.module('copayApp.controllers').controller('pinController', function($scope, $timeout) {
this.init = function(confirmPin, testPin) {
this._firstpin = null;
this.askForPin = 1;
this.confirmPin = confirmPin;
this.clear();
if (testPin) {
console.log('WARN: using test pin:', testPin);
$timeout(function() {
$scope.$emit('pin', testPin);
}, 100);
}
};
this.clear = function() {
this.digits = [];
this.defined = [];
};
this.press = function(digit) {
var self = this;
$timeout(function() {
self._press(digit);
}, 1);
};
this._press = function(digit) {
var self = this;
this.error = null;
this.digits.push(digit);
this.defined.push(true);
if (this.digits.length == 4) {
var pin = this.digits.join('');
if (this.confirmPin) {
if (!this._firstpin) {
this._firstpin = pin;
this.askForPin = 2;
$timeout(function() {
self.clear();
}, 100);
return;
} else {
if (pin === this._firstpin) {
$scope.$emit('pin', pin);
return;
} else {
this._firstpin = null;
this.askForPin = 1;
$timeout(function() {
self.clear();
self.error = 'Entered PINs were not equal. Try again';
var _self = self;
$timeout(function() {
_self.error = null;
}, 2000);
}, 100);
return;
}
}
} else {
$scope.$emit('pin', pin);
}
}
};
this.skip = function() {
$scope.$emit('pin', null);
};
});

View file

@ -1,7 +1,7 @@
'use strict';
angular.module('copayApp.controllers').controller('preferencesController',
function($scope, $rootScope, $filter, $timeout, $modal, $log, configService, profileService) {
function($scope, $rootScope, $filter, $timeout, $modal, $log, lodash, configService, profileService) {
this.error = null;
this.success = null;
@ -12,7 +12,7 @@ angular.module('copayApp.controllers').controller('preferencesController',
this.selectedAlternative = {
name: config.wallet.settings.alternativeName,
isoCode: config.wallet.settings.alternativeIsoCode
};
};
var fc = profileService.focusedClient;
$scope.encrypt = fc.hasPrivKeyEncrypted();

View file

@ -0,0 +1,12 @@
'use strict';
angular.module('copayApp.controllers').controller('preferencesLanguageController',
function($scope, $timeout, go) {
this.save = function(newLang) {
$scope.$emit('Local/DefaultLanguage', newLang);
$timeout(function() {
go.preferences();
}, 100);
};
});

View file

@ -59,31 +59,5 @@ angular.module('copayApp.controllers').controller('receiveController',
}
};
this.openAddressModal = function(address) {
var self = this;
var ModalInstanceCtrl = function($scope, $modalInstance, address) {
$scope.address = address;
$scope.isCordova = self.isCordova;
$scope.copyAddress = function(addr) {
self.copyAddress(addr);
};
$scope.cancel = function() {
$modalInstance.dismiss('cancel');
};
};
$modal.open({
templateUrl: 'views/modals/qr-address.html',
windowClass: 'full',
controller: ModalInstanceCtrl,
resolve: {
address: function() {
return address;
}
}
});
};
}
);

View file

@ -67,7 +67,9 @@ angular.module('copayApp.controllers').controller('sendController',
this.formFocus = function(what) {
hideMenuBar(what);
if (isCordova) {
hideMenuBar(what);
}
if (!this.isWindowsPhoneApp) return
if (!what) {
@ -428,90 +430,4 @@ angular.module('copayApp.controllers').controller('sendController',
return value;
}
};
this.openAddressBook = function() {
var w = $rootScope.wallet;
var modalInstance = $modal.open({
templateUrl: 'views/modals/address-book.html',
windowClass: 'full',
controller: function($scope, $modalInstance) {
$scope.showForm = null;
$scope.addressBook = w.addressBook;
$scope.hasEntry = function() {
return _.keys($scope.addressBook).length > 0 ? true : false;
};
$scope.toggleAddressBookEntry = function(key) {
w.toggleAddressBookEntry(key);
};
$scope.copyToSend = function(addr) {
$modalInstance.close(addr);
};
$scope.cancel = function(form) {
$scope.error = $scope.success = $scope.newaddress = $scope.newlabel = null;
clearForm(form);
$scope.toggleForm();
};
$scope.toggleForm = function() {
$scope.showForm = !$scope.showForm;
};
var clearForm = function(form) {
form.newaddress.$pristine = true;
form.newaddress.$setViewValue('');
form.newaddress.$render();
form.newlabel.$pristine = true;
form.newlabel.$setViewValue('');
form.newlabel.$render();
form.$setPristine();
};
// TODO change to modal
$scope.submitAddressBook = function(form) {
if (form.$invalid) {
return;
}
$scope.blockUx = true;
$timeout(function() {
var errorMsg;
var entry = {
"address": form.newaddress.$modelValue,
"label": form.newlabel.$modelValue
};
try {
w.setAddressBook(entry.address, entry.label);
} catch (e) {
$log.warn(e);
errorMsg = e.message;
}
if (errorMsg) {
$scope.error = errorMsg;
} else {
clearForm(form);
$scope.toggleForm();
notification.success('Entry created', 'New addressbook entry created')
}
$scope.blockUx = false;
$rootScope.$digest();
}, 100);
return;
};
$scope.close = function() {
$modalInstance.dismiss('cancel');
};
},
});
modalInstance.result.then(function(addr) {
$scope.setForm(addr);
});
};
});

View file

@ -194,7 +194,7 @@ angular.module('copayApp.controllers').controller('walletHomeController', functi
};
$scope.cancel = function() {
$modalInstance.close();
$modalInstance.dismiss('cancel');
};
};

View file

@ -254,6 +254,23 @@ angular
}
}
})
.state('preferencesLanguage', {
url: '/preferencesLanguage',
walletShouldBeComplete: true,
needProfile: true,
views: {
'main': {
templateUrl: 'views/preferencesLanguage.html'
},
'topbar': {
templateUrl: 'views/includes/topbar.html',
controller: function($scope) {
$scope.titleSection = 'Language';
$scope.goBackToState = 'preferences';
}
}
}
})
.state('preferencesUnit', {
url: '/preferencesUnit',
templateUrl: 'views/preferencesUnit.html',
@ -418,19 +435,18 @@ angular
.run(function($rootScope, $state, $log, gettextCatalog, uriHandler, isCordova, amMoment, profileService) {
// Auto-detect browser language
// Commented for now (default: English)
//var userLang, androidLang;
//
//if (navigator && navigator.userAgent && (androidLang = navigator.userAgent.match(/android.*\W(\w\w)-(\w\w)\W/i))) {
// userLang = androidLang[1];
//} else {
// // works for iOS and Android 4.x
// userLang = navigator.userLanguage || navigator.language;
//}
var userLang, androidLang;
//userLang = userLang ? (userLang.split('-', 1)[0] || 'en') : 'en';
//gettextCatalog.setCurrentLanguage(userLang);
//amMoment.changeLocale(userLang);
if (navigator && navigator.userAgent && (androidLang = navigator.userAgent.match(/android.*\W(\w\w)-(\w\w)\W/i))) {
userLang = androidLang[1];
} else {
// works for iOS and Android 4.x
userLang = navigator.userLanguage || navigator.language;
}
userLang = userLang ? (userLang.split('-', 1)[0] || 'en') : 'en';
gettextCatalog.setCurrentLanguage(userLang);
amMoment.changeLocale(userLang);
// Register URI handler, not for mobileApp
if (!isCordova) {
@ -446,6 +462,7 @@ angular
preferencesColor: 12,
backup: 12,
delete: 12,
preferencesLanguage: 12,
preferencesUnit: 12,
preferencesAltCurrency: 12,
preferencesBwsUrl: 12,

View file

@ -58,8 +58,6 @@ angular.module('copayApp.services').factory('configService', function(localStora
var configCache = null;
root.getSync = function() {
if (!configCache)
throw new Error('configService#getSync called when cache is not initialized');

View file

@ -115,6 +115,7 @@ angular.module('copayApp.services')
configService.get(function(err) {
if (err) return cb(err);
$rootScope.$emit('Local/DefaultLanguage');
root.setWalletClients();
storageService.getFocusedWalletId(function(err, focusedWalletId) {
if (err) return cb(err);
@ -136,7 +137,7 @@ angular.module('copayApp.services')
});
};
root._createNewProfile = function(pin, cb) {
root._createNewProfile = function(cb) {
var walletClient = bwcService.getClient();
walletClient.createWallet('Personal Wallet', 'me', 1, 1, {
@ -260,8 +261,8 @@ angular.module('copayApp.services')
root.create = function(pin, cb) {
root._createNewProfile(pin, function(err, p) {
root.create = function(cb) {
root._createNewProfile(function(err, p) {
if (err) return cb(err);
root.bindProfile(p, function(err) {
storageService.storeNewProfile(p, function(err) {

View file

@ -1,17 +0,0 @@
'use strict';
describe('menuController', function(){
var state, scope, controller;
beforeEach(angular.mock.module('copayApp.controllers'));
beforeEach(angular.mock.module('stateMock'));
beforeEach(angular.mock.inject(function($rootScope, $controller, $state){
state = $state;
scope = $rootScope.$new();
controller = $controller('menuController', {$scope: scope});
}));
it('should have a menu variable', function(){
expect(controller.menu).not.toBeUndefined();
});
});

View file

@ -0,0 +1,11 @@
'use strict';
describe('sidebarController', function(){
var scope, controller;
beforeEach(angular.mock.module('copayApp.controllers'));
it('wallet selection', function(){
expect(true).not.toBeUndefined();
});
});