Merge pull request #1401 from cmgustavo/bug/01-typos-translate

Translation support for alerts/confirms/prompts
This commit is contained in:
Matias Alejo Garcia 2014-09-22 09:33:04 -03:00
commit 133369dd18
21 changed files with 397 additions and 112 deletions

View File

@ -97,7 +97,7 @@ angular.module('copayApp.controllers').controller('ImportController',
if (!backupFile) {
$scope.loading = false;
notification.error('Error', 'Please, select your backup file or paste the file contents');
notification.error('Error', 'Please, select your backup file');
$scope.loading = false;
return;
}

View File

@ -1,7 +1,7 @@
'use strict';
angular.module('copayApp.controllers').controller('MoreController',
function($scope, $rootScope, $location, backupService, walletFactory, controllerUtils, notification, rateService) {
function($scope, $rootScope, $location, $filter, backupService, walletFactory, controllerUtils, notification, rateService) {
var w = $rootScope.wallet;
$scope.unitOpts = [{
@ -80,7 +80,7 @@ angular.module('copayApp.controllers').controller('MoreController',
if (removed) {
controllerUtils.updateBalance();
}
notification.info('Tx Proposals Purged', removed + ' transaction proposal purged');
notification.info('Transactions Proposals Purged', removed + ' ' + $filter('translate')('transaction proposal purged'));
};
$scope.updateIndexes = function() {
@ -88,7 +88,7 @@ angular.module('copayApp.controllers').controller('MoreController',
w.updateIndexes(function(err) {
notification.info('Scan Ended', 'Updating balance');
if (err) {
notification.error('Error', 'Error updating indexes: ' + err);
notification.error('Error', $filter('translate')('Error updating indexes: ') + err);
}
controllerUtils.updateAddressList();
controllerUtils.updateBalance(function() {

View File

@ -109,7 +109,7 @@ angular.module('copayApp.controllers').controller('SendController',
$scope.submitForm = function(form) {
if (form.$invalid) {
var message = 'Unable to send transaction proposal.';
var message = 'Unable to send transaction proposal';
notification.error('Error', message);
return;
}
@ -152,7 +152,7 @@ angular.module('copayApp.controllers').controller('SendController',
message += ' Message from server: ' + merchantData.ack.memo;
message += ' For merchant: ' + merchantData.pr.pd.payment_url;
}
notification.success('Success!', message);
notification.success('Success', message);
$scope.loadTxs();
} else {
w.sendTx(ntxid, function(txid, merchantData) {
@ -165,9 +165,9 @@ angular.module('copayApp.controllers').controller('SendController',
message += ' Message from server: ' + merchantData.ack.memo;
message += ' For merchant: ' + merchantData.pr.pd.payment_url;
}
notification.success('Transaction broadcast', message);
notification.success('Transaction broadcasted', message);
} else {
notification.error('Error', 'There was an error sending the transaction.');
notification.error('Error', 'There was an error sending the transaction');
}
$scope.loading = false;
$scope.loadTxs();
@ -421,7 +421,7 @@ angular.module('copayApp.controllers').controller('SendController',
notification.error('Error', 'There was an error sending the transaction');
} else {
if (!merchantData) {
notification.success('Transaction broadcast', 'Transaction id: ' + txid);
notification.success('Transaction broadcasted', 'Transaction id: ' + txid);
} else {
var message = 'Transaction ID: ' + txid;
if (merchantData.pr.ca) {

View File

@ -1,6 +1,6 @@
'use strict';
angular.module('copayApp.controllers').controller('SidebarController', function($scope, $rootScope, $sce, $location, $http, notification, controllerUtils) {
angular.module('copayApp.controllers').controller('SidebarController', function($scope, $rootScope, $sce, $location, $http, $filter, notification, controllerUtils) {
$scope.menu = [{
'title': 'Receive',
@ -60,7 +60,7 @@ angular.module('copayApp.controllers').controller('SidebarController', function(
if ($rootScope.wallet) {
$scope.$on('$idleWarn', function(a,countdown) {
if (!(countdown%5))
notification.warning('Session will be closed', 'Your session is about to expire due to inactivity in ' + countdown + ' seconds');
notification.warning('Session will be closed', $filter('translate')('Your session is about to expire due to inactivity in') + ' ' + countdown + ' ' + $filter('translate')('seconds'));
});
$scope.$on('$idleTimeout', function() {

View File

@ -1,14 +1,13 @@
'use strict';
angular.module('copayApp.controllers').controller('VersionController',
function($scope, $rootScope, $http, notification) {
function($scope, $rootScope, $http, $filter, notification) {
var w = $rootScope.wallet;
$scope.version = copay.version;
$scope.commitHash = copay.commitHash;
$scope.networkName = w ? w.getNetworkName() : '';
$scope.defaultLanguage = config.defaultLanguage;
if (_.isUndefined($rootScope.checkVersion))
$rootScope.checkVersion = true;
@ -20,7 +19,7 @@ angular.module('copayApp.controllers').controller('VersionController',
};
var latestVersion = data[0].name.replace('v', '').split('.').map(toInt);
var currentVersion = copay.version.split('.').map(toInt);
var title = 'Copay ' + data[0].name + ' available.';
var title = 'Copay ' + data[0].name + ' ' + $filter('translate')('available.');
var content;
if (currentVersion[0] < latestVersion[0]) {
content = 'It\'s important that you update your wallet at https://copay.io';

View File

@ -19,7 +19,7 @@ BackupService.prototype.download = function(wallet) {
var copayerName = this.getCopayer(wallet);
var filename = (copayerName ? copayerName + '-' : '') + walletName + '-keybackup.json.aes';
this.notifications.success('Backup created', 'Encrypted backup file saved.');
this.notifications.success('Backup created', 'Encrypted backup file saved');
var blob = new Blob([ew], {
type: 'text/plain;charset=utf-8'
});

View File

@ -2,7 +2,7 @@
var bitcore = require('bitcore');
angular.module('copayApp.services')
.factory('controllerUtils', function($rootScope, $sce, $location, notification, $timeout, uriHandler, rateService) {
.factory('controllerUtils', function($rootScope, $sce, $location, $filter, notification, $timeout, uriHandler, rateService) {
var root = {};
root.redirIfLogged = function() {
@ -51,7 +51,7 @@ angular.module('copayApp.services')
});
w.on('corrupt', function(peerId) {
notification.error('Error', 'Received corrupt message from ' + peerId);
notification.error('Error', $filter('translate')('Received corrupt message from ') + peerId);
});
w.on('ready', function(myPeerID) {
$rootScope.wallet = w;
@ -111,13 +111,13 @@ angular.module('copayApp.services')
var user = w.publicKeyRing.nicknameForCopayer(e.cId);
switch (e.type) {
case 'signed':
notification.info('Transaction Update', 'A transaction was signed by ' + user);
notification.info('Transaction Update', $filter('translate')('A transaction was signed by') + ' ' + user);
break;
case 'rejected':
notification.info('Transaction Update', 'A transaction was rejected by ' + user);
notification.info('Transaction Update', $filter('translate')('A transaction was rejected by') + ' ' + user);
break;
case 'corrupt':
notification.error('Transaction Error', 'Received corrupt transaction from ' + user);
notification.error('Transaction Error', $filter('translate')('Received corrupt transaction from') + ' ' + user);
break;
}
});
@ -142,7 +142,7 @@ angular.module('copayApp.services')
$rootScope.$watch('txAlertCount', function(txAlertCount) {
if (txAlertCount && txAlertCount > 0) {
notification.info('New Transaction', ($rootScope.txAlertCount == 1) ? 'You have a pending transaction proposal' : 'You have ' + $rootScope.txAlertCount + ' pending transaction proposals', txAlertCount);
notification.info('New Transaction', ($rootScope.txAlertCount == 1) ? 'You have a pending transaction proposal' : $filter('translate')('You have') + ' ' + $rootScope.txAlertCount + ' ' + $filter('translate')('pending transaction proposals'), txAlertCount);
}
});
};

340
po/es.po
View File

@ -9,43 +9,40 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.6.9\n"
"X-Generator: Poedit 1.6.8\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: views/create.html
msgid "(*) The limits are imposed by the bitcoin network."
msgstr "(*) Los límites son impuestos por la red de bitcoin."
#: views/dummy-translations.html
msgid "A transaction was rejected by"
msgstr "Una transacción fue rechazada por"
#: views/dummy-translations.html
msgid "A transaction was signed by"
msgstr "Una transacción fue firmada por"
#: views/more.html
#, fuzzy
msgid ""
"ALL Transactions Proposals will be discarted. This needs to be done on "
"<b>ALL<b> peers of a wallet, to prevent the old proposals to be resynced "
"again.\n"
" </b></b>"
"<b>ALL</b> peers of a wallet, to prevent the old proposals to be resynced "
"again."
msgstr ""
"TODAS las Propuestas de Transacciones serán descartadas. Es necesario que lo "
"hagan <b>TODOS<b> los compañeros del monedero, para prevenir que las viejas "
"propuestas sean re sincronizadas de nuevo.\n"
" </b></b>"
"hagan <b>TODOS</b> los compañeros del monedero, para prevenir que las viejas "
"propuestas sean re sincronizadas de nuevo."
#: views/modals/address-book.html
msgid "Add Address"
msgstr "Agregar Dirección"
#: views/modals/address-book.html
msgid "Add Address Book Entry"
msgstr "Nueva entrada"
#: views/send.html
msgid "Add New Entry"
msgstr "Nueva Entrada"
#: views/send.html views/modals/address-book.html
msgid "Add"
msgstr "Agregar"
#: views/send.html views/modals/address-book.html
msgid "Address"
msgstr "Dirección"
#: views/send.html
#: views/send.html views/modals/address-book.html
msgid "Address Book"
msgstr "Libreta de Direcciones"
@ -82,6 +79,10 @@ msgstr "Volver"
msgid "Backup"
msgstr "Copia de Seguridad"
#: views/dummy-translations.html
msgid "Backup created"
msgstr "Copia de Seguridad creada"
#: views/copayers.html
msgid "Backup wallet"
msgstr "Hacer copia de seguridad"
@ -115,9 +116,8 @@ msgid "Certificate:"
msgstr "Certificado:"
#: views/create.html
#, fuzzy
msgid "Choose a password"
msgstr "Escribe tu contraseña"
msgstr "Escribe una contraseña"
#: views/import.html
msgid "Choose backup file from your computer"
@ -147,10 +147,21 @@ msgstr "Continuar de todas maneras"
msgid "Copayers"
msgstr "Compañeros"
#: views/dummy-translations.html
msgid "Copied to clipboard"
msgstr "Copiado al portapapeles"
#: views/modals/qr-address.html
msgid "Copy to clipboard"
msgstr "Copiar al portapapeles"
#: views/dummy-translations.html
msgid ""
"Could not connect to the Insight server. Check your settings and network "
"configuration"
msgstr ""
"No se pudo conectar con el servidor Insight. Verifica la configuración de red"
#: views/home.html
msgid "Create a new wallet"
msgstr "Crear un nuevo monedero"
@ -205,14 +216,38 @@ msgstr "Descargar Archivo"
msgid "Empty. Create an alias for your addresses"
msgstr "Vacío. Crea una etiqueta para tus direcciones"
#: views/dummy-translations.html
msgid "Encrypted backup file saved"
msgstr "Archivo de copia de seguridad encriptado guardado"
#: views/dummy-translations.html
msgid "Error updating indexes:"
msgstr "Error al actualizar índices:"
#: views/create.html
msgid "Family vacation funds"
msgstr "Fondos para vacaciones en familia"
#: views/dummy-translations.html
msgid "Fatal error connecting to Insight server"
msgstr "Error fatal al conectar con el servidor Insight"
#: views/transactions.html views/includes/transaction.html
msgid "Fee"
msgstr "Tasa"
#: views/dummy-translations.html
msgid "Finished"
msgstr "Finalizado"
#: views/dummy-translations.html
msgid "Form Error"
msgstr "Error en formulario"
#: views/dummy-translations.html
msgid "Funds received!"
msgstr "¡Fondos recibidos!"
#: views/join.html views/send.html
msgid "Get QR code"
msgstr "Obtener código QR"
@ -234,45 +269,59 @@ msgstr ""
"Si todos los fondos fueron removidos de tu monedero y no deseas tener los "
"datos guardados en tu computadora, puedes eliminar tu monedero."
#: views/home.html
#: views/dummy-translations.html views/home.html
msgid "Import a backup"
msgstr "Importar backup"
msgstr "Importar una copia de seguridad"
#: views/import.html
msgid "Import backup"
msgstr "Importar copia de seguridad"
#: views/dummy-translations.html
msgid "Importing wallet - Reading backup..."
msgstr "Importando monedero - Leyendo archivo..."
#: views/dummy-translations.html
msgid "Importing wallet - Setting things up..."
msgstr "Importando monedero - Configurando..."
#: views/dummy-translations.html
msgid "Importing wallet - We are almost there..."
msgstr "Importando monedero - Finalizando..."
#: views/send.html
msgid "Including fee of"
msgstr "Incluye tasa de"
#: views/settings.html
#, fuzzy
msgid "Insight API server"
msgstr "Servidor de API Insight"
#: views/settings.html
msgid ""
"Insight API server is open-source software. You can run your own instances, "
"check <a href=\"http://insight.is\" target=\"_blank\">Insight API Homepage</"
"a>"
msgstr ""
"Servidor API de insight es un software código-abierto. Puedes correr tu "
"Servidor de API insight es un software código-abierto. Puedes correr tu "
"propia instancia en <a href=\"http://insight.is\" target=\"_blank\">Insight "
"API Homepage</a>"
#: views/settings.html
#, fuzzy
msgid "Insight API servers"
msgstr "Servidor API Insight"
#: views/send.html
msgid "Insufficient funds"
msgstr "Fondos insuficientes"
#: views/dummy-translations.html
msgid "It's important that you update your wallet at https://copay.io"
msgstr "Es importante que actualices tu monedero en https://copay.io"
#: views/more.html
msgid ""
"It's important to backup your wallet so that you can recover it in case of "
"disaster"
msgstr ""
"Es importante hacer copia de seguridad de tu monedero para que puedas "
"recuperarlo en caso de pérdidas"
"recuperarlo en caso de pérdidas de datos de tu computadora"
#: views/join.html
msgid "Join"
@ -302,6 +351,14 @@ msgstr "Dejar mensaje privado a tus compañeros"
msgid "Locked"
msgstr "Bloqueado"
#: views/dummy-translations.html
msgid "Login Required"
msgstr "Inicio de Sesión Requerido"
#: views/includes/sidebar.html
msgid "Manual Update"
msgstr "Actualización Manual"
#: views/more.html
msgid "Master Private Key"
msgstr "Master Private Key"
@ -322,10 +379,22 @@ msgstr "Nombre"
msgid "Network Error. Attempting to reconnect..."
msgstr "Error de Red. Intentando reconectar..."
#: views/dummy-translations.html
msgid "Networking Error"
msgstr "Error de Red"
#: views/dummy-translations.html
msgid "New Transaction"
msgstr "Nueva Transacción"
#: views/copayers.html
msgid "New Wallet Created"
msgstr "Nuevo Monedero Creado"
#: views/dummy-translations.html
msgid "New entry has been created"
msgstr "Nueva entrada fue creada"
#: views/create.html
msgid "Next"
msgstr "Siguiente"
@ -398,23 +467,40 @@ msgid "Payment Expiration:"
msgstr "Vencimiento de Pago:"
#: views/more.html
#, fuzzy
msgid ""
"Pending Transactions Proposals will be discarted. This needs to be done on "
"<b>ALL<b> peers of a wallet, to prevent the old proposals to be resynced "
"again.\n"
" </b></b>"
"<b>ALL</b> peers of a wallet, to prevent the old proposals to be resynced "
"again."
msgstr ""
"Las Propuestas de Transacciones Pendientes serán descartadas. Esto es "
"necesario hacerlo con <b>TODOS</b> los compañeros del monedero, para "
"prevenir que viejas propuestas sean re sincronizadas de nuevo.\n"
" </b></b>"
"prevenir que viejas propuestas sean re sincronizadas de nuevo."
#: views/dummy-translations.html
msgid "Please complete required fields"
msgstr "Por favor complete los campos requeridos"
#: views/dummy-translations.html
msgid "Please enter the required fields"
msgstr "Por favor ingrese los campos requeridos"
#: views/dummy-translations.html
msgid "Please open wallet to complete payment"
msgstr "Por favor abrir un monedero para completar el pago"
#: views/dummy-translations.html
msgid "Please update your wallet at https://copay.io"
msgstr "Por favor actualiza tu monedero de https://copay.io"
#: views/dummy-translations.html
msgid "Please, select your backup file"
msgstr "Por favor, selecciona el archivo de copia de seguridad"
#: views/uri-payment.html
msgid "Preparing payment..."
msgstr "Preparando pago..."
#: views/create.html views/join.html
#: views/join.html
msgid "Private Key (Hex)"
msgstr "Clave Privada (Hex)"
@ -446,6 +532,14 @@ msgstr "Listo"
msgid "Receive"
msgstr "Recibir"
#: views/dummy-translations.html
msgid "Received corrupt message from"
msgstr "Se recibió un mensaje corrupto de"
#: views/dummy-translations.html
msgid "Received corrupt transaction from"
msgstr "Se recibió una transacción corrupta de"
#: views/includes/transaction.html
msgid "Reject"
msgstr "Rechazar"
@ -454,7 +548,7 @@ msgstr "Rechazar"
msgid "Repeat password"
msgstr "Repite la contraseña"
#: views/import.html views/join.html
#: views/import.html views/join.html views/modals/address-book.html
msgid "Required"
msgstr "Requerido"
@ -470,6 +564,10 @@ msgstr "Explorar"
msgid "Scan Wallet Addresses"
msgstr "Explorar Direcciones del Monedero"
#: views/dummy-translations.html
msgid "Scaning for transactions"
msgstr "Explorando transacciones"
#: views/import.html
msgid "Select a backup file"
msgstr "Seleccionar el archivo de copia de seguridad"
@ -482,6 +580,10 @@ msgstr "Seleccione las firmas requeridas (*)"
msgid "Select total number of copayers (*)"
msgstr "Seleccione el total de compañeros (*)"
#: views/dummy-translations.html
msgid "Send"
msgstr "Enviar"
#: views/send.html
msgid "Send Proposals"
msgstr "Enviar Propuestas"
@ -502,6 +604,18 @@ msgstr "Enviado"
msgid "Server Says:"
msgstr "Mensaje del Servidor:"
#: views/dummy-translations.html
msgid "Session closed"
msgstr "Sesión cerrada"
#: views/dummy-translations.html
msgid "Session closed because a long time of inactivity"
msgstr "La sesión fue cerrada por mucho tiempo de inactividad"
#: views/dummy-translations.html
msgid "Session will be closed"
msgstr "La sesión se cerrará"
#: views/home.html views/more.html
msgid "Settings"
msgstr "Configuración"
@ -543,6 +657,34 @@ msgstr "Ignorar propuestas de transacciones desde la Copia de Seguridad"
msgid "Skipping fields: {{skipFields}}"
msgstr "Saltear campos: {{skipFields}}"
#: views/dummy-translations.html
msgid "Success"
msgstr "Listo"
#: views/dummy-translations.html
msgid "The balance is updated using the derived addresses"
msgstr "El balance es actualizado utilizando direcciones derivadas"
#: views/dummy-translations.html
msgid "The secret string you entered is invalid"
msgstr "La palabra secreta ingresada no es válida"
#: views/dummy-translations.html
msgid "The transaction proposal has been created"
msgstr "La propuesta de transacción fue creada"
#: views/dummy-translations.html
msgid "The wallet is full"
msgstr "El monedero esta completo"
#: views/dummy-translations.html
msgid "There was an error sending the transaction"
msgstr "Hubo un error al enviar la transacción"
#: views/dummy-translations.html
msgid "There was an error signing the transaction"
msgstr "Hubo un error al firmar la transacción"
#: views/warning.html
msgid "This wallet appears to be currently open."
msgstr "Este monedero parece estar actualmente abierto."
@ -560,8 +702,8 @@ msgstr ""
"sincronización de direcciones a los demás compañeros conectados."
#: views/send.html
msgid "To:"
msgstr "Para:"
msgid "To"
msgstr "A"
#: views/transactions.html
msgid "Total"
@ -571,26 +713,62 @@ msgstr "Total"
msgid "Total amount for this transaction:"
msgstr "Cantidad total de esta transacción:"
#: views/dummy-translations.html
msgid "Transaction Error"
msgstr "Error en Transacción"
#: views/includes/transaction.html
msgid "Transaction ID"
msgstr "ID Transacción"
msgstr "ID de Transacción"
#: views/transactions.html
msgid "Transaction Proposals"
msgstr "Propuestas de Transacción"
#: views/dummy-translations.html
msgid "Transaction Update"
msgstr "Actualización de una Transacción"
#: views/dummy-translations.html
msgid "Transaction broadcasted"
msgstr "Transacción transmitida"
#: views/includes/transaction.html
msgid "Transaction finally rejected"
msgstr "Transacción finalmente rechazada"
#: views/dummy-translations.html
msgid "Transaction rejected"
msgstr "Transacción rechazada"
#: views/dummy-translations.html
msgid "Transactions Proposals Purged"
msgstr "Propuestas de Transacciones Purgadas"
#: views/dummy-translations.html
msgid "Unable to send transaction proposal"
msgstr "No se puede enviar propuesta de transacción"
#: views/dummy-translations.html
msgid "Updating balance"
msgstr "Actualizando balance"
#: views/send.html
msgid "Use all funds"
msgstr "Todos los fondos"
#: views/create.html
msgid "Use test network"
msgstr "Red de prueba"
#: views/join.html
msgid "User information"
msgstr "Información de Usuario"
#: views/dummy-translations.html
msgid "Using derived addresses from your wallet"
msgstr "Usando direcciones derivadas de tu monedero"
#: views/modals/address-book.html
msgid "Valid"
msgstr "Válido"
@ -627,14 +805,29 @@ msgstr "Unidad del monedero"
msgid "Wallet name"
msgstr "Nombre del monedero"
#: views/dummy-translations.html
msgid "Wallet network configuration missmatch"
msgstr "Configuración de la Red del monedero no coinciden"
#: views/warning.html
msgid "Warning!"
msgstr "¡Advertencia!"
#: views/create.html
#, fuzzy
msgid "Your Password"
msgstr "Tu contraseña"
#: views/dummy-translations.html
msgid "Wrong password"
msgstr "Contraseña incorrecta"
#: views/dummy-translations.html
msgid "You have"
msgstr "Tienes"
#: views/dummy-translations.html
msgid "You have a pending transaction proposal"
msgstr "Tienes una propuesta de transacción pendiente"
#: views/dummy-translations.html
msgid "You rejected the transaction successfully"
msgstr "Rechazaste la transacción con éxito"
#: views/more.html
msgid ""
@ -652,10 +845,14 @@ msgstr "Tu nombre"
msgid "Your name (optional)"
msgstr "Tu nombre (opcional)"
#: views/open.html
#: views/create.html views/open.html
msgid "Your password"
msgstr "Tu contraseña"
#: views/dummy-translations.html
msgid "Your session is about to expire due to inactivity in"
msgstr "Tu sesión está va a expirar por inactividad en"
#: views/import.html
msgid "Your wallet password"
msgstr "Contraseña de tu monedero"
@ -664,6 +861,10 @@ msgstr "Contraseña de tu monedero"
msgid "advanced options"
msgstr "opciones avanzadas"
#: views/dummy-translations.html
msgid "available."
msgstr "disponible."
#: views/addresses.html
msgid "change"
msgstr "vuelto"
@ -673,9 +874,8 @@ msgid "first seen at"
msgstr "Visto el"
#: views/transactions.html
#, fuzzy
msgid "mined"
msgstr "Minado el"
msgstr "minado el"
#: views/send.html
msgid "not valid"
@ -689,18 +889,30 @@ msgstr "de"
msgid "optional"
msgstr "opcional"
#: views/dummy-translations.html
msgid "pending transaction proposals"
msgstr "propuestas de transacciones pendientes"
#: views/copayers.html
msgid "people have"
msgstr "personas"
#: views/send.html views/modals/address-book.html
#: views/send.html
msgid "required"
msgstr "requerido"
#: views/dummy-translations.html
msgid "seconds"
msgstr "segundos"
#: views/send.html
msgid "too long!"
msgstr "¡demasiado largo!"
#: views/dummy-translations.html
msgid "transaction proposal purged"
msgstr "propuestas de transacciones purgadas"
#: views/send.html
msgid "valid!"
msgstr "¡válido!"
@ -717,6 +929,29 @@ msgstr "deben unirse"
msgid "{{tx.missingSignatures}} signatures missing"
msgstr "Faltan {{tx.missingSignatures}} firmas"
#~ msgid "Scan Ended"
#~ msgstr "Búsqueda Finalizada"
#~ msgid "There is an error in the form."
#~ msgstr "Hubo un error en el formulario."
#, fuzzy
#~ msgid "Wrong password que parece"
#~ msgstr "Contraseña incorrecta"
#~ msgid "Add Address"
#~ msgstr "Agregar Dirección"
#~ msgid "Add Address Book Entry"
#~ msgstr "Nueva entrada"
#~ msgid "Add New Entry"
#~ msgstr "Nueva Entrada"
#, fuzzy
#~ msgid "Your Password"
#~ msgstr "Tu contraseña"
#~ msgid "Bitcoin Network"
#~ msgstr "Red Bitcoin"
@ -744,9 +979,6 @@ msgstr "Faltan {{tx.missingSignatures}} firmas"
#~ msgid "Your Wallet Password"
#~ msgstr "Contraseña de tu Monedero"
#~ msgid "Send"
#~ msgstr "Enviar"
#~ msgid ""
#~ "{{$root.wallet.requiredCopayers}}-of-{{$root.wallet.totalCopayers}} wallet"
#~ msgstr "Monedero {{requiredCopayers}}-de-{{totalCopayers}}"

View File

@ -319,6 +319,7 @@ describe("Unit: Controllers", function() {
describe("Unit: Version Controller", function() {
var scope, $httpBackendOut;
var GH = 'https://api.github.com/repos/bitpay/copay/tags';
beforeEach(angular.mock.module('copayApp'));
beforeEach(inject(function($controller, $injector) {
$httpBackend = $injector.get('$httpBackend');
$httpBackend.when('GET', GH)

View File

@ -24,8 +24,8 @@
<input id="Name" type="text" placeholder="{{'Name'|translate}}" class="form-control" ng-model="$parent.myNickname">
</div>
<div>
<label for="walletPassword">
<span translate>Your Password</span>
<label translate for="walletPassword">
Your password
</label>
<input id="walletPassword" type="password" placeholder="{{'Choose a password'|translate}}" class="form-control" ng-model="$parent.walletPassword" name="walletPassword" check-strength="passwordStrength" tooltip-html-unsafe="Password strength:
<i>{{passwordStrength}}</i><br/><span
@ -42,7 +42,7 @@
<div class="text-left line-sidebar-t">
<input id="network-name" type="checkbox" ng-model="networkName" ng-true-value="testnet" ng-false-value="livenet" class="form-control" ng-click="changeNetwork()" ng-checked="networkName == 'testnet' ? true : false">
<label for="network-name">Use test network</label>
<label for="network-name" translate>Use test network</label>
</div>
</div>
@ -53,7 +53,7 @@
</a>
<div ng-hide="hideAdv">
<p>
<input type="text" placeholder="{{'Private Key (Hex)'|translate}}" name="private" ng-model="private">
<input type="text" placeholder="BIP32 master extended private key (hex)" name="private" ng-model="private">
</div>
</div>

View File

@ -1,3 +1,60 @@
<span translate>Receive</span>
<span translate>History</span>
{{'Receive'|translate}}
{{'History'|translate}}
{{'Wrong password'|translate}}
{{'Copied to clipboard'|translate}}
{{'Please enter the required fields'|translate}}
{{'Import a backup'|translate}}
{{'Importing wallet - Reading backup...'|translate}}
{{'Importing wallet - Setting things up...'|translate}}
{{'Importing wallet - We are almost there...'|translate}}
{{'Error updating indexes:'|translate}}
{{'Please, select your backup file'|translate}}
{{'Please enter the required fields'|translate}}
{{'Fatal error connecting to Insight server'|translate}}
{{'The wallet is full'|translate}}
{{'Wallet network configuration missmatch'|translate}}
{{'The secret string you entered is invalid'|translate}}
{{'Transactions Proposals Purged'|translate}}
{{'transaction proposal purged'|translate}}
{{'Updating balance'|translate}}
{{'Scaning for transactions'|translate}}
{{'Using derived addresses from your wallet'|translate}}
{{'Finished'|translate}}
{{'The balance is updated using the derived addresses'|translate}}
{{'Login Required'|translate}}
{{'Please open wallet to complete payment'|translate}}
{{'Send'|translate}}
{{'Unable to send transaction proposal'|translate}}
{{'The transaction proposal has been created'|translate}}
{{'Form Error'|translate}}
{{'Please complete required fields'|translate}}
{{'Success'|translate}}
{{'New entry has been created'|translate}}
{{'There was an error sending the transaction'|translate}}
{{'Transaction rejected'|translate}}
{{'You rejected the transaction successfully'|translate}}
{{'There was an error signing the transaction'|translate}}
{{'Session will be closed'|translate}}
{{'Your session is about to expire due to inactivity in'|translate}}
{{'seconds'|translate}}
{{'Session closed'|translate}}
{{'Session closed because a long time of inactivity'|translate}}
{{'available.'|translate}}
{{'It\'s important that you update your wallet at https://copay.io'|translate}}
{{'Please update your wallet at https://copay.io'|translate}}
{{'Backup created'|translate}}
{{'Encrypted backup file saved'|translate}}
{{'Networking Error'|translate}}
{{'Could not connect to the Insight server. Check your settings and network configuration'|translate}}
{{'Received corrupt message from '|translate}}
{{'Transaction Update'|translate}}
{{'A transaction was signed by'|translate}}
{{'A transaction was rejected by'|translate}}
{{'Transaction Error'|translate}}
{{'Received corrupt transaction from'|translate}}
{{'New Transaction'|translate}}
{{'You have a pending transaction proposal'|translate}}
{{'You have'|translate}}
{{'pending transaction proposals'|translate}}
{{'Funds received!'|translate}}
{{'Transaction broadcasted'|translate}}

View File

@ -1,7 +1,7 @@
<div class="import" ng-controller="ImportController">
<div data-alert class="loading-screen" ng-show="loading">
<i class="size-60 fi-bitcoin-circle icon-rotate spinner"></i>
{{ importStatus }}
{{ importStatus|translate }}
</div>
<div class="row" ng-init="choosefile=0; pastetext=0" ng-show="!loading">

View File

@ -10,12 +10,11 @@
class="ellipsis"
tooltip="ID: {{copayer.peerId}}"
tooltip-placement="bottom">
<small class="text-gray" ng-show="copayer.index == 0"><i class="fi-check m5r"></i><span translate>Me</span></small>
<small class="text-gray" ng-show="copayer.index == 0">
<i class="fi-check m5r"></i>{{'Me'|translate}}</small>
<small class="text-gray" ng-show="copayer.index > 0"><i class="fi-check m5r"></i>{{copayer.nick}}</small>
</div>
<div translate class="success label m10t" ng-show="isBackupReady(copayer)">
Ready
</div>
<div translate class="success label m10t" ng-show="isBackupReady(copayer)">Ready</div>
</div>
</div>

View File

@ -15,9 +15,7 @@
width="30">
<div class="ellipsis" tooltip-placement="top" tooltip="{{copayer.nick}}">
<small class="text-gray" ng-show="copayer.index == 0">
<span translate>Me</span>
</small>
<small class="text-gray" ng-show="copayer.index == 0">{{'Me'|translate}}</small>
<small class="text-gray" ng-show="copayer.index > 0">{{copayer.nick}}</small>
</div>
</div>

View File

@ -15,7 +15,7 @@
<span class="size-12 right">{{$root.wallet.requiredCopayers}}-of-{{$root.wallet.totalCopayers}}</span>
</p>
<div class="line-sidebar-t">
<span translate>Balance</span>
{{'Balance'|translate}}
<span class="gray small side-bar right" title="Manual Refresh"><i class="size-16 fi-refresh"></i></span>
<span ng-if="$root.updatingBalance">
<i class="fi-bitcoin-circle icon-rotate spinner"></i>
@ -25,7 +25,7 @@
</span>
</div>
<div class="m10t" ng-show="lockedBalance">
<span translate>Locked</span>
{{'Locked'|translate}}
<span ng-if="$root.updatingBalance">
<i class="fi-bitcoin-circle icon-rotate spinner"></i>
</span>
@ -43,7 +43,7 @@
</li>
<li>
<a href="#" class="db p20h" title="Close"
ng-click="signout()"><i class="size-24 m20r fi-power"></i> <span translate>Close</span></a>
ng-click="signout()"><i class="size-24 m20r fi-power"></i> {{'Close'|translate}}</a>
</li>
</ul>

View File

@ -11,12 +11,12 @@
<a href="#!/receive" class="name-wallet" tooltip-placement="bottom" tooltip="ID: {{$root.wallet.id}}">
<span>{{$root.wallet.getName()}}</span>
</a>
<a class="button gray small side-bar right" title="Manual Refresh"
<a class="button gray small side-bar right" title="{{'Manual Update'|translate}}"
ng-disabled="$root.loading"
ng-click="refresh()"><i class="size-16 fi-refresh"></i></a>
</div>
<div class="founds size-14 m10v">
<span translate>Balance</span>
{{'Balance'|translate}}
<span ng-if="$root.updatingBalance">
<i class="fi-bitcoin-circle icon-rotate spinner"></i>
</span>
@ -29,7 +29,7 @@
tooltip-placement="bottom">{{totalBalance || 0 |noFractionNumber}} {{$root.wallet.settings.unitName}}
</span>
<div class="m10t" ng-show="lockedBalance">
<span translate>Locked</span> &nbsp;
{{'Locked'|translate}} &nbsp;
<span ng-if="$root.updatingBalance">
<i class="fi-bitcoin-circle icon-rotate spinner"></i>
</span>
@ -56,7 +56,7 @@
</li>
<li>
<a href="#!/" class="db p20h" title="Close"
ng-click="signout()"><i class="size-21 m20r fi-power"></i> <span translate>Close</span></a>
ng-click="signout()"><i class="size-21 m20r fi-power"></i> {{'Close'|translate}}</a>
</li>
</ul>

View File

@ -1,5 +1,5 @@
<div ng-controller="VersionController">
<small>v{{version}} ({{defaultLanguage}})</small>
<small>v{{version}}</small>
<small>#{{commitHash}}</small>
<small ng-if="networkName ==='testnet' || networkName ==='livenet'">[ {{networkName}} ]</small>
</div>

View File

@ -1,22 +1,21 @@
<h2 translate>Add Address Book Entry</h2>
<h2 translate>Address Book</h2>
<form name="addressBookForm" ng-submit="submitAddressBook(addressBookForm)" novalidate>
<label for="newaddress"><span translate>Address</span>
<small translate ng-hide="!addressBookForm.newaddress.$pristine || newaddress">required</small>
<small translate ng-hide="!addressBookForm.newaddress.$pristine || newaddress">Required</small>
<small translate class="is-valid" ng-show="!addressBookForm.newaddress.$invalid && newaddress">Valid</small>
<small translate class="has-error" ng-show="addressBookForm.newaddress.$invalid && newaddress">
Not valid</small>
<small translate class="has-error" ng-show="addressBookForm.newaddress.$invalid && newaddress">Not valid</small>
<input type="text" id="newaddress" name="newaddress" ng-disabled="loading"
placeholder="{{'Address'|translate}}" ng-model="newaddress" valid-address required>
</label>
<label for="newlabel"><span translate>Label</span>
<small translate ng-hide="!addressBookForm.newlabel.$pristine || newlabel">required</small>
<small translate ng-hide="!addressBookForm.newlabel.$pristine || newlabel">Required</small>
<input type="text" id="newlabel" name="newlabel" ng-disabled="loading"
placeholder="{{'Label'|translate}}" ng-model="newlabel" required>
</label>
<a translate class="button warning small default" ng-click="cancel()">Cancel</a>
<input type="submit" class="button small primary right"
ng-disabled="addressBookForm.$invalid || loading"
value="{{'Add Address'|translate}}">
value="{{'Add'|translate}}">
</form>
<a class="close-reveal-modal" ng-click="cancel()">&#215;</a>

View File

@ -33,7 +33,7 @@
<h3><i class="fi-minus-circle m10r"></i> <span translate> Delete Wallet </span></h3>
<p translate class="large-8 columns text-gray">If all funds have been removed from your wallet and you do not wish to have the wallet data stored on your computer anymore, you can delete your wallet.</p>
<div class="large-4 columns">
<a translate class="button warning expand" ng-really-message="'Are you sure to delete this wallet from this computer?'|translate" ng-really-click="deleteWallet()"> Delete</a>
<a translate class="button warning expand" ng-really-message="{{'Are you sure to delete this wallet from this computer?'|translate}}" ng-really-click="deleteWallet()"> Delete</a>
</div>
</div>
<p>
@ -73,7 +73,7 @@
<div class="oh large-12 columns panel">
<h3><i class="fi-minus-circle m10r"></i> <span translate>Purge Pending Transaction Proposals</span> </h3>
<p translate class="large-8 columns text-gray">
Pending Transactions Proposals will be discarted. This needs to be done on <b>ALL<b> peers of a wallet, to prevent the old proposals to be resynced again.
Pending Transactions Proposals will be discarted. This needs to be done on <b>ALL</b> peers of a wallet, to prevent the old proposals to be resynced again.
</p>
<div class="large-4 columns">
<a translate class="button warning expand" ng-click="purge()">
@ -84,7 +84,7 @@
<div class="oh large-12 columns panel">
<h3><i class="fi-minus-circle m10r"></i> <span translate>Purge ALL Transaction Proposals</span> </h3>
<p translate class="large-8 columns text-gray">
ALL Transactions Proposals will be discarted. This needs to be done on <b>ALL<b> peers of a wallet, to prevent the old proposals to be resynced again.
ALL Transactions Proposals will be discarted. This needs to be done on <b>ALL</b> peers of a wallet, to prevent the old proposals to be resynced again.
</p>
<div class="large-4 columns">
<a translate class="button warning expand" ng-click="purge(true)">

View File

@ -14,7 +14,7 @@
<div class="row collapse">
<div class="large-12 columns">
<div class="row collapse">
<label for="address"><span translate>To:</span>
<label for="address"><span translate>To</span>
<small translate ng-hide="!sendForm.address.$pristine || address">required</small>
<small translate class="is-valid" ng-show="!sendForm.address.$invalid && address">valid!</small>
<small translate class="has-error" ng-show="sendForm.address.$invalid && address">not valid</small>
@ -181,7 +181,7 @@
<tr>
<th translate>Label</th>
<th translate>Address</th>
<th class="hide-for-small-only" translate>Creator</th>
<th ng-class="{'hide-for-small-only' : $root.wallet.isShared()}" ng-show="$root.wallet.isShared()" translate>Creator</th>
<th class="hide-for-small-only" translate>Date</th>
<th class="hide-for-small-only">&nbsp;</th>
</tr>
@ -192,14 +192,14 @@
ng-class="{'addressbook-disabled': info.hidden}">
<td><a ng-click="copyAddress(addr)" title="Copy address">{{info.label}}</a></td>
<td class="size-12">{{addr}} <span class="btn-copy" clip-copy="addr"></span></td>
<td class="hide-for-small-only">{{$root.wallet.publicKeyRing.nicknameForCopayer(info.copayerId)}}</td>
<td ng-show="$root.wallet.isShared()" ng-class="{'hide-for-small-only' : $root.wallet.isShared()}">{{$root.wallet.publicKeyRing.nicknameForCopayer(info.copayerId)}}</td>
<td class="hide-for-small-only"><time>{{info.createdTs | amCalendar}}</time></td>
<td class="hide-for-small-only" width="5"><a ng-click="toggleAddressBookEntry(addr)">{{info.hidden ?
'Enable' : 'Disable'}}</a></td>
</tr>
</tbody>
</table>
<button translate class="button tiny primary text-center" ng-click="openAddressBookModal()">Add New Entry</button>
<button translate class="button tiny primary text-center" ng-click="openAddressBookModal()">Add</button>
</div>
</div>
</div>

View File

@ -14,7 +14,7 @@
</select>
</fieldset>
<fieldset>
<legend translate>Insight API servers</legend>
<legend translate>Insight API server</legend>
<label for="insight-livenet">Livenet</label>
<input type="text" ng-model="insightLivenet" class="form-control" name="insight-livenet">
<label for="insight-testnet">Testnet</label>