Merge pull request #8274 from cmgustavo/translate/files-01

Translate/files 01
This commit is contained in:
Gabriel Edgardo Bazán 2018-03-21 12:35:26 -03:00 committed by GitHub
commit 2e634a888e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
107 changed files with 3293 additions and 579 deletions

1
.gitignore vendored
View File

@ -31,6 +31,7 @@ src/assets/appConfig.json
src/assets/externalServices.json
src/assets/img/app
src/assets/i18n/crowdin_api_key.txt
src/assets/i18n/po/*.mo
src/index.html
src/manifest.json

View File

@ -68,7 +68,7 @@
"e2e:test": "protractor",
"e2e:capture-latest": "npm run apply:copay && npm run e2e && npm run apply:bitpay && npm run e2e",
"e2e:update": "webdriver-manager update --gecko false",
"extract": "ngx-translate-extract --input ./src --output ./src/assets/i18n/app.pot --clean --sort --format pot",
"extract": "ngx-translate-extract --input ./src --output ./src/assets/i18n/po/template.pot --clean --sort --format pot",
"start:ios": "npm run build:ios && npm run open:ios",
"start:android": "npm run run:android",
"build:ios": "ionic cordova build ios --debug",
@ -167,6 +167,7 @@
"@types/jasminewd2": "^2.0.3",
"@types/lodash": "^4.14.104",
"ajv": "^6.2.0",
"bhttp": "^1.2.4",
"codecov": "^3.0.0",
"connect": "^3.6.5",
"fs-extra": "^5.0.0",

View File

@ -211,7 +211,7 @@ import { LongPress } from '../directives/long-press/long-press';
import { NoLowFee } from '../directives/no-low-fee/no-low-fee'
export function createTranslateLoader(http: HttpClient) {
return new TranslatePoHttpLoader(http, 'assets/i18n', '.po');
return new TranslatePoHttpLoader(http, 'assets/i18n/po', '.po');
}
@NgModule({
@ -341,7 +341,7 @@ export function createTranslateLoader(http: HttpClient) {
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: createTranslateLoader,
useFactory: (createTranslateLoader),
deps: [HttpClient]
}
}),

View File

@ -86,7 +86,7 @@ if (no_build == false) { // Reminder: Any changes to the script below must also
for (var i in files) {
debugger;
if (files[i].slice(0, 9) == 'v4appstore_' && files[i].slice(-4) == '.txt' && files[i] != 'appstore_en.txt') {
if (files[i].slice(0, 9) == 'appstore_' && files[i].slice(-4) == '.txt' && files[i] != 'appstore_en.txt') {
var english_file = fs.readFileSync(local_file_name2, 'utf8');
var compare_file = fs.readFileSync(path.join(__dirname, 'docs/' + files[i]), 'utf8')
english_file = english_file.replace(/\r\n/g, '\n');
@ -95,7 +95,7 @@ if (no_build == false) { // Reminder: Any changes to the script below must also
fs.unlinkSync(path.join(__dirname, 'docs/' + files[i]));
};
};
if (files[i].slice(0, 11) == 'v4updateinfo_' && files[i].slice(-4) == '.txt' && files[i] != 'updateinfo_en.txt') {
if (files[i].slice(0, 11) == 'updateinfo_' && files[i].slice(-4) == '.txt' && files[i] != 'updateinfo_en.txt') {
var english_file = fs.readFileSync(local_file_name3, 'utf8');
var compare_file = fs.readFileSync(path.join(__dirname, 'docs/' + files[i]), 'utf8')
english_file = english_file.replace(/\r\n/g, '\n');
@ -111,7 +111,7 @@ if (no_build == false) { // Reminder: Any changes to the script below must also
var files = fs.readdirSync('./po');
for (var i in files) {
if (files[i] != 'app.pot') {
if (files[i] != 'template.pot') {
var po_file = fs.readFileSync(path.join(__dirname, 'po/' + files[i]), 'utf8');
var po_array = po_file.split('\n');
for (var j in po_array) {
@ -179,7 +179,7 @@ if (no_build == false) { // Reminder: Any changes to the script below must also
var files = fs.readdirSync('./docs');
for (var i in files) {
if (files[i].slice(0, 9) == 'v4appstore_' && files[i].slice(-4) == '.txt' && files[i] != 'appstore_en.txt') {
if (files[i].slice(0, 9) == 'appstore_' && files[i].slice(-4) == '.txt' && files[i] != 'appstore_en.txt') {
var english_file = fs.readFileSync(local_file_name2, 'utf8');
var compare_file = fs.readFileSync(path.join(__dirname, 'docs/' + files[i]), 'utf8')
english_file = english_file.replace(/\r\n/g, '\n');
@ -188,7 +188,7 @@ if (no_build == false) { // Reminder: Any changes to the script below must also
fs.unlinkSync(path.join(__dirname, 'docs/' + files[i]));
};
};
if (files[i].slice(0, 11) == 'v4updateinfo_' && files[i].slice(-4) == '.txt' && files[i] != 'updateinfo_en.txt') {
if (files[i].slice(0, 11) == 'updateinfo_' && files[i].slice(-4) == '.txt' && files[i] != 'updateinfo_en.txt') {
var english_file = fs.readFileSync(local_file_name3, 'utf8');
var compare_file = fs.readFileSync(path.join(__dirname, 'docs/' + files[i]), 'utf8')
english_file = english_file.replace(/\r\n/g, '\n');
@ -204,7 +204,7 @@ if (no_build == false) { // Reminder: Any changes to the script below must also
var files = fs.readdirSync('./po');
for (var i in files) {
if (files[i] != 'app.pot') {
if (files[i] != 'template.pot') {
var po_file = fs.readFileSync(path.join(__dirname, 'po/' + files[i]), 'utf8');
var po_array = po_file.split('\n');
for (var j in po_array) {

View File

@ -9,7 +9,7 @@ var bhttp = require('bhttp');
var crowdin_identifier = 'copay'
var local_file_name1 = path.join(__dirname, 'app.pot')
var local_file_name1 = path.join(__dirname, 'po/template.pot')
// Similar to Github, normalize all line breaks to CRLF so that different people
// using different OSes to update does not constantly swith format back and forth.
@ -45,7 +45,7 @@ var crowdin_api_key = fs.readFileSync(path.join(__dirname, 'crowdin_api_key.txt'
if (crowdin_api_key != '') {
var payload = {
'files[app.pot]': local_file1,
'files[template.pot]': local_file1,
'files[appstore/appstore_en.txt]': local_file2,
'files[appstore/updateinfo_en.txt]': local_file3
};

View File

@ -0,0 +1,23 @@
Sichere Bitcoins zu eigenen Bedingungen, mit einem quelloffenen Gemeinschaftswallet (elektronische Brieftasche mit Mehrfachunterschriften) von BitPay.
Copay Nutzer können ihre Beträge individuell speichern oder ihre Finanzen mit anderen Nutzern in Gemeinschaftswallets teilen, die je nach Einstellung mehrere Bestätigungen (elektronische Unterschriften) benötigen und so nichtautorisierte Zahlungen verhindern. Ein paar Einsatzmöglichkeiten, wie ein solches Wallet mit anderen Copayern genutzt werden kann:
Ansparen von Beträgen für Urlaub oder gemeinsame Anschaffungen (z.B. mit Freunden)
Überwachung von Ausgaben und Einkünften der Familie.
Organisation der Ausgaben in Firmen, Vereinen oder Organisationen.
Folgende Funktionen wurden in diese Version von Copay eingebaut um ein Bitcoin Wallet anzubieten, das keine Kompromisse in Sicherheit oder Zugänglichkeit eingeht:
Anlage und Verwaltung von mehreren Wallets innerhalb der Anwendung
Intiutive mehrfachunterschriften Sicherheit für persönliche und geteilete Wallets
Einfache Ausgabenvorschläge für geteilte Walltes und Gruppenzahlungen
Hierarchische deterministische(HD) Adresserzeugung und Sicherung der Wallets
Gerätebasierte Sicherheit: Alle privaten Schlüssel werden auf dem Gerät und nicht in der Cloud gespreichert
Unterstützung von Bitcoin Testnet Wallets
Gleichzeitiger Zugriff über alle wichtigen mobilen Systeme und Desktop-Plattformen
Zahlungsprotokoll (BIP70-BIP73) Unterstützung: Leicht identifizierbare Zahlungsanforderungen und nachvollziehbare sichere Bitcoinzahlungen.
Unterstützung von 150+ verschiedenen Währungen und Stückelung in BTC oder bits
E-Mail Benachrichtigung für Zahlungen und Transaktionen
Anpasspare Wallets: Eigene Namen und Hintergrundfarben
Unterstützung von 9 Sprachen (EN, CS, FR, DE, IT, ES, JA, PL, RU)
Copay ist eine kostenlose und quelloffene Software, die auf nicht firmeneigenen Servern läuft und es somit nicht nötig ist, sich auf ein bestimmtes Unternehmen und dessen kontinuierliche Unterstützung zu verlassen. Jeder hat die Möglichkeit den Quelltext zu überprüfen oder auf GitHub (https://github.com/bitpay/copay) eigene Änderungen beizutragen und an der Weiterentwicklung mitzuwirken.

View File

@ -0,0 +1,23 @@
Secure bitcoin on your own terms with an open source, multisignature wallet from BitPay.
Copay users can hold funds individually or share finances securely with other users with multisignature wallets, which prevent unauthorized payments by requiring multiple approvals. Here are some ways Copay can be used with others:
To save for vacations or joint purchases with friends
To track family spending and allowances
To manage business, club, or organization funds and expenses
We built the following features into this version of Copay for a bitcoin wallet that doesn't compromise on security or accessibility:
Multiple wallet creation and management in-app
Intuitive multisignature security for personal or shared wallets
Easy spending proposal flow for shared wallets and group payments
Hierarchical deterministic (HD) address generation and wallet backups
Device-based security: all private keys are stored locally, not in the cloud
Support for Bitcoin testnet wallets
Synchronous access across all major mobile and desktop platforms
Payment protocol (BIP70-BIP73) support: easily-identifiable payment requests and verifiably secure bitcoin payments
Support for 150+ currency pricing options and unit denomination in BTC or bits
Email notifications for payments and transfers
Customizable wallet naming and background colors
9 supported languages (EN, CS, FR, DE, IT, ES, JA, PL, RU)
Copay is free and open source software run on non-proprietary servers, so there's no need to rely on any company for continuous support. Anyone can review or contribute to Copay's source code on GitHub (https://github.com/bitpay/copay).

View File

@ -0,0 +1,23 @@
Asegura tus bitcoin con tus propias reglas con el monedero de código abierto, multifirma de BitPay.
Los usuario de Copay pueden mantener sus fondos individuales o compartir sus finanzas de forma segura con otros usuarios utilizando monederos multifirmas, que previenen de pagos sin autorización al requerir múltiples aprobaciones. Estas son algunas formas en que puede ser utilizado Copay con otros usuarios:
Ahorrar para vacaciones o compras conjuntas con amigos
Controlar los gastos familiares
Manejar los fondos y gastos de negocios, clubes y organizaciones.
Construimos las siguientes características en esta versión de Copay que no compromete la seguridad ni la accesibilidad:
Creación y manejo de múltiples monederos dentro de la misma aplicación
Seguridad multifirma intuitiva para monederos personales y compartidos
Sencillo flujo de propuesta de gastos para monederos compartidos y grupos de pagos
Generación de direcciones HD (Hierarchical deterministic) y copias de seguridad
Seguridad basada en el dispositivo: todas las claves privadas se guardan localmente, no en la nube
Soporta monederos bitcoin en testnet
Acceso sincrónico desde las principales plataformas móviles y de escritorio
Soporte al protocolo de pago (BIP70-BIP73): solicitudes de pagos fácilmente identificable y verificables como pago seguro en bitcoin
Soporte a más de 150 precios de monedas y unidades de denominación en BTC o bits
Notificaciones por email de pagos y transferencias
Monederos con nombres y colores de fondo personalizables
Soporte en 9 idiomas (EN, CS, FR, DE, IT, ES, JA, PL, RU)
Copay es un software gratuito y de código abierto que funciona en servidores no-propietarios, por lo que no es necesario confiar en una empresa para soporte continuo. Cualquier persona puede revisar y contribuir al código fuente de Copay en GitHub (https://github.com/bitpay/copay).

View File

@ -0,0 +1,23 @@
Sécurisez vos bitcoins selon vos conditions avec un portefeuille open source et multi-signatures par BitPay.
Les utilisateurs de Copay peuvent détenir leurs fonds de manière individuelle, ou partager leurs finances de manière sécurisée avec les autres utilisateurs en utilisant des portefeuilles multi-signatures, ce qui empêche les paiements non autorisés en exigeant des approbations multiples. Voici quelques exemples d'utilisation que vous pouvez avoir avec Copay et avec d'autres utilisateurs :
• Économiser pour des vacances ou partager des frais avec des amis.
• Suivre des dépenses et remboursements familiaux.
• Gérer des fonds et des dépenses pour une entreprise, un club ou une organisation.
Nous avons développé les fonctionnalités suivantes dans cette version de Copay pour un portefeuille bitcoin qui ne fait pas de compromis sur la sécurité ou sur l'accessibilité :
• Création et gestion de portefeuilles multiples.
• Sécurité de multi-signatures intuitive pour les portefeuilles personnels ou partagés.
• Demande de paiement facile pour les portefeuilles partagés et pour les paiements de groupe.
• Génération d'adresse déterministe hiérarchique (HD) et sauvegardes de portefeuilles.
• Sécurité basée sur l'appareil : toutes les clés privées sont stockées localement, pas dans le cloud.
• Prise en charge des portefeuilles bitcoin testnet.
• Accès synchrone sur toutes les principales plateformes mobiles et de bureau.
• Prise en charge de Payment protocol (BIP70-BIP73) : demandes de paiement facilement identifiables et paiements bitcoins sécurisés et vérifiables.
• Prise en charge de plus de 150 devises et dénomination d'unité en BTC ou en bits.
• Notifications e-mail pour les paiements et les transferts.
• Nom de portefeuille et couleurs de fond personnalisables.
• 9 langues prises en charge (EN, CS, FR, DE, IT, ES, JA, PL, RU)
Copay est un logiciel gratuit et open source qui tourne sur des serveurs non-propriétaires, il n'y a donc pas besoin de compter sur une entreprise pour un support continuel. N'importe qui peut examiner ou contribuer au code source de Copay sur GitHub (https://github.com/bitpay/copay).

View File

@ -0,0 +1,23 @@
Metti al sicuro i tuoi bitcoins, alle tue condizioni, con un portafoglio open source e multifirma realizzato da BitPay.
Gli utenti Copay possono gestire i propri fondi individualmente, o condividerli in maniera sicura con altri utenti grazie ai portafogli multifirma, che prevengono pagamenti non autorizzati richiedendo più approvazioni. Ecco alcuni modi per utilizzare Copay con altre persone:
Per rismarmiare soldi per le vacanze o per acquisti congiunti con gli amici
Per tenere traccia di spese familiari o indennità
Per gestire i fondi e le spese di aziende, club, or organizzazioni
In questa versione di Copay abbiamo realizzato le seguenti funzioni per un portafoglio bitcoin che non comprometta sicurezza o accessibilità:
Creazione e gestione integrata di portafogli multipli
Sicurezza multifirma intuitiva per portafogli personali o condivisi
Proposte di pagamento facili da iniziare per portafogli condivisi e pagamenti di gruppo
Generazione di portafogli gerarchici deterministici (HD) e funzionalità di backup
Sicurezza integrata nel dispositivo: tutte le chiave private sono memorizzate localmente, non nel cloud
Supporto per portafogli della testnet Bitcoin
Accesso sincrono in tutte le piattaforme mobile e desktop
Supporto per il protocollo di pagamento (BIP70-BIP73): richieste di pagamento facilmente identificabili e pagamenti bitcoin sicuri e verificabili
Supporto per 150+ valute e denominazione in BTC o bits
Notifiche email per pagamenti o trasferimenti
Colori di sfondo e nomi dei portafogli personalizzabli
9 lingue supportate (EN, CS, FR, DE, IT, ES, JA, PL, RU)
Copay è un software gratuito e open source che non dipende da server proprietari, pertanto il supporto del software non dipende da nessuna azienda. Chiunque può rivedere o contribuire al codice sorgente di Copay su GitHub (https://github.com/bitpay/copay).

View File

@ -0,0 +1,23 @@
ビットコインにおける高度なセキュリティーを手軽に扱えるオープンソースマルチシグネチャウォレットです。
Copayは個人のご利用はもちろんのこと、複数人によるウォレット管理の権限分散も簡単なウォレットソフトを通してご活用いただけます。 例えば:
友達との旅行や買い物のために透明性抜群の環境で貯蓄したい時
家族のお小遣いや日常の家計簿管理がしたい時
ビジネス・クラブ・団体の資金や財産管理を透明な管理分散がしたい時
下記の機能でセキュリティーも利便性も妥協しない最高のウォレットをCopayでご提供させていただきました
■ 複数のウォレットの作成・管理がアプリ内で管理可能
■ マルチシグネチャのウォレット分散管理でも個人ウォレットでも使いやすさ抜群
■ 送金の提案・承認・却下の流れが非常に直感的で分散管理が簡単
■ 階級的決定性ウォレット(HDウォレット)でアドレス生成とバックアップ管理をしているためバックアップは永久に各参加者1回ずつのみ
■ 端末に依存するセキュリティー、秘密鍵が全て端末に保管され、サーバに送ることは無い
■ ビットコインの開発テスト用ネットワークにも対応
■ メジャーなプラットフォーム全てに対応 (Windows, Mac, Linux, Android, iPhone, Windows Phone)
■ ペイメントプロトコルにも対応(BIP 70-73)、暗号通信と証明書を使ったマーチャントとの安全なペイメントの実現
■ 世界中の150個以上の通貨の表示に対応、自国通貨との為替レートを計算する必要なし。ビットコインの単位も BTC と bits にも対応
■ ペイメントや提案のメール通知も可能
■ ウォレットごとの背景色設定や通称設定も可能でカスタマイズ性抜群
■ 9ヶ国語対応 (英日仏西伊独捷葡露)
Copayは永久無料でオープンソースのソフトです。サーバーもオープンソースなので、独自運用や法人の利用やソース流用は許可します。 ソースをご覧の際に間違いなどが見つかった場合、Githubにてご報告・ソース修正のプルリクエストなどをお願いします。(https://github.com/bitpay/copay)

View File

@ -0,0 +1,23 @@
비트코인을 당신이 원하는 방식으로 안전하게 보관할 수 있는 오픈소스 다중서명 지갑이 BitPay에서 출시됐습니다.
Copay는 사용자의 개인적인 자금 보관은 물론이고, 여러 명의 동의가 필요한 다중서명 지갑을 통해 누군가 독단적으로 자금을 써버리는 일을 방지하고 여럿이 함께 자금을 관리 할 수 있습니다. 예를 들면 이런 식으로 사용할 수 있습니다:
친구들과 함께 휴가를 떠나거나 공동구매를 하기 위해 돈을 모을 때
가족의 소비와 지출을 관리하고 싶을 때
사업, 동호회, 단체의 자금과 소비를 관리 하고 싶을 때
이번 버전 Copay는 안전과 접근성에 대해 타협하지 않는 비트코인 지갑이 되기 위해 다음과 같은 기능이 포함돼 있습니다
앱 안에서 가능한 여러 개의 지갑 생성과 관리
개인, 공유 지갑을 위한 직관적인 다중서명 안전장치
공유 지갑과 공동지불을 위해 손쉽게 가능한 지불제안
계층결정론적(Hierarchical deterministic, HD) 주소 생성과 지갑 백업
장치기반 보안: 모든 비밀키는 클라우드가 아닌 장치 내부에 보관됩니다
비트코인 테스트넷 지갑 지원
모든 주요 모바일, 데스크탑 플랫폼에서의 동시 접속을 지원합니다
Payment protocol (BIP70-BIP73)지원: 쉽게 확인 가능한 지불요청과 증명 가능한 비트코인 안전 결제
150가지가 넘는 통화 지원과 BTC와 bits의 단위 지원
지불, 송금의 이메일 알림
바꿀 수 있는 지갑의 이름과 배경색
9 지원 되는 언어 (EN, CS, FR, DE, IT, ES, JA, PL, RU)
Copay는 누구나 운영할 수 있는 서버에서 돌아가는 무료 오픈소스 소프트웨어입니다. 그러므로 어떤 한 회사의 지속적인 지원에 의지할 필요가 없습니다. 누구나 GitHub(https://github.com/bitpay/copay)에서 Copay의 소스코드를 검토하거나 참여할 수 있습니다

View File

@ -0,0 +1,23 @@
Beveilig bitcoin op je eigen voorwaarden met een open source, meervoudige ondertekening-portemonnee van BitPay.
Copay gebruikers kunnen individueel saldo beheren of veilig financiën delen met andere gebruikers door middel van portemonnees met meervoudige ondertekening, dit voorkomt ongeautoriseerde betalingen doordat meerdere goedkeuringen nodig zijn. Hier zijn een aantal manieren waarop Copay gebruikt kan worden met anderen:
Om te sparen voor vakanties of gezamenlijke aankopen met vrienden
Voor het bijhouden van de familieuitgaven en zakgeld
Voor het beheer van het saldo en de uitgaven van een bedrijf, club of organisatie
We hebben de volgende functies ingebouwd in deze versie van Copay voor een bitcoin portemonnee die niet inlevert op beveiliging of toegankelijkheid:
Het aanmaken en beheren van meerdere portemonnees binnen de app
Intuïtieve meervoudige-ondertekening beveiliging voor persoonlijke of gedeelde portemonnees
Eenvoudige bestedingsvoorstellen voor gedeelde portemonnees en groepsbetalingen
Hiërarchisch deterministische (HD) adres generatie en portemonnee backups
Apparaat gebaseerde beveiliging: alle privé sleutels worden lokaal opgeslagen, niet in de cloud
Ondersteuning voor Bitcoin testnet portemonnees
Gesynchroniseerde toegang vanaf alle grote mobiele en desktop platformen
Ondersteuning voor betalings protocol (BIP70-BIP73): gemakkelijk te herkennen betalingsverzoeken en verifieerbaar veilige bitcoin betalingen
Ondersteuning voor prijsweergave in 150+ valuta's en eenheid denominatie in BTC of bits
Email meldingen voor betalingen en overdrachten
Aanpasbare portemonnee namen en achtergrond kleuren
10 ondersteunde talen (EN, CZ, FR, DE, IT, ES, JA, PL, RU, NL)
Copay is gratis open source software draaiend op niet-merkgebonden servers, dus het is niet nodig te vertrouwen op enig bedrijf voor blijvende ondersteuning. Iedereen kan de broncode van Copay inzien of er aan bijdragen via GitHub (https://github.com/bitpay/copay).

View File

@ -0,0 +1,23 @@
Bezpieczne bitcoiny na twoich własnych warunkach, z elektronicznym portfelem open source z multipodpisami od BitPay.
Użytkownicy Copay mogą posiadać fundusze indywidualnie lub bezpiecznie dzielić je z innymi użytkownikami w portfelach z multipodpisami, które uniemożliwiają nieautoryzowane płatności wymagając wielu potwierdzeń. Oto kilka sposobów, jak portfele Copay mogą być używane w połączeniu z innymi użytkownikami:
Oszczędzanie na wakacje lub wspólne zakupy z przyjaciółmi
Monitorowanie wydatków i dochodów rodzinnych
Zarządzanie wydatkami firm, klubów lub organizacji
Stworzyliśmy następujące funkcje portfela bitcoin w tej wersji Copay, które nie zagrażają bezpieczeństwu lub dostępności:
Tworzenie i zarządzanie wieloma portfelami w aplikacji
Intuicyjne bezpieczeństwo dzięki multipodpisom dla portfeli prywatnych i współdzielonych
Proste zlecenia płatności dla współdzielonych portfeli i płatności grupowych
Protokół HD (Hierarchical deterministic) do generowania adresów i kopii zapasowych portfela
Zabezpieczenia: wszystkie klucze prywatne przechowywane lokalnie, a nie w chmurze
Wsparcie dla Bitcoin testnet wallets
Jednoczesny dostęp ze wszystkich głównych platform mobilnych i stacjonarnych
Wsparcie protokołów płatności (BIP70-BIP73): łatwe do zidentyfikowania wnioski o płatność i bezpieczne, weryfikowalne płatności bitcoin
Wsparcie dla wyświetlania ponad 150 walut w jednostkach BTC lub bit
Powiadomienia o płatnościach i transferach za pośrednictwem poczty elektronicznej
Konfigurowanie nazwy i koloru tła portfela
9 obsługiwanych języków (EN, CS, FR, DE, IT, ES, JA, PL, RU)
Copay jest bezpłatnym oprogramowaniem open source, które działa na niezastrzeżonych serwerach, nie jest zatem konieczne, aby opierać się na konkretnej firmie w celu jego dalszego wsparcia. Każdy ma możliwość sprawdzenia kodu źródłowego i zgłoszenia propozycji zmian w Copay na GitHub (https://github.com/bitpay/copay).

View File

@ -0,0 +1,23 @@
Armazene bitcoin com seus próprios termos com uma carteira de multi-assinaturas, open source, do BitPay.
Usuários Copay podem manter fundos individualmente ou compartilhar finanças seguramente com outros usuários por meio de carteiras multi-assinadas, que previnem pagamentos não autorizados por meio de múltiplas aprovações. Algumas formas que a Copay pode ser usada com outros:
Para economizar para férias ou juntar compras com amigos
Para rastrear despesas familiares e descontos
Para gerenciar negócios, clube ou organizar saldos e despesas
Nós construímos as seguintes funcionalidades nesta versão da Copay para uma carteira bitcoin que não comprometa segurança ou acessibilidade:
Criação de múltiplas carteiras com gerenciamento no aplicativo
Segurança de multi-assinaturas intuitiva para carteiras pessoais ou compartilhadas
Fácil fluxo de propostas de gastos para carteiras compartilhadas e pagamentos agrupados
Geração de endereço Hierarchical deterministic (HD) e backups de carteiras
Segurança baseada em dispositivo: todas as chaves privadas são armazenadas localmente e não na nuvem
Suporte para carteiras de testes na Bitcoin testnet
Acesso síncrono entre todas as principais plataformas móveis e desktops
Suporte a protocolo de pagamento (BIP70-BIP73): solicitações de pagamento facilmente identificadas e pagamentos seguros em bitcoins verificáveis
Suporte para mais de 150 opções de moedas e denominação de unidades em BTC ou bits
Notificações por e-mail para pagamentos e transferências
Nomes e cores de fundo customizáveis para carteiras
9 idiomas suportados (EN, CS, FR, DE, IT, ES, JA, PL, RU)
Copay é gratuito e um software livre rodando em servidores não-proprietários, que não precisa de nenhuma empresa para o suporte contínuo. Qualquer um pode revisar ou contribuir para o código-fonte da Copay no GitHub (https://github.com/bitpay/copay).

View File

@ -0,0 +1,23 @@
Обезопасьте биткойны на своих условиях кошельком от BitPay с открытым исходным кодом и мультиподписью.
Пользователи Copay могут хранить средства самостоятельно или безопасно управлять средствами совместно с помощью кошельков с мультиподписью, которые предотвращают несанкционированный платежи, требуя несколько одобрений. Вот некоторые способы того, как Copay может быть использован совместно:
Накопить на отпуск или совершать покупки вместе с друзьями
Отслеживать семейные траты и карманные деньги
Управлять средствами и расходами бизнеса, клуба, или организации
Мы встроили следующие функции в эту версию Copay - биткойн-кошелька, который не идёт на компромиссы в отношении безопасности или доступности:
Создание и управление множеством кошельков внутри приложения
Интуитивно-понятная реализация мультиподписи, для большей безопасности личных или совместных кошельков
Легкий процесс трат в совместных кошельках и для групповых платежей
Иерархически-детерминированная (HD) генерация адресов и бэкакоп кошельков
Безопасность на основе устройств: все закрытые ключи хранятся локально, а не в облаке
Поддержка кошельков Bitcoin testnet
Синхронный доступ со всех основных мобильных и настольных платформ
Поддержка платежных протоколов (BIP70-BIP73): легко идентифицируемые платежные запросы и проверяемо-безопасные биткойн-платежи
Поддержка отображения баланса в более чем 150 валютах, а так же поддержка деноминирования в BTC или bits
Уведомления о платежах и переводах по email
Настраиваемые названия и фоновые цвета кошельков
9 поддерживаемых языков (EN, CS, FR, DE, IT, ES, JA, PL, RU)
Copay бесплатен и является программным обеспечением с открытым исходным кодом, запускаемым на не-проприетарных серверах, поэтому нет необходимости полагаться на какую-либо компанию и её постоянную поддержку. Любой может просмотреть и сделать предложение по изменению исходного кода Copay на GitHub (https://github.com/bitpay/copay).

View File

@ -0,0 +1,23 @@
采用 BitPay 开放源码的多重签名钱包,根据自己的条件保管比特币。
Copay 户可以单独保管资金或与通过使用多重签名钱包与其他用户一起安全共同保管财政,由于需要多个用户批准,因此可防止未经授权的付款。 以下是 Copay 可与其他人共同使用的方法:
与好友为假期旅游而储蓄或一起购物
跟踪家庭开支和津贴
可用来管理商务,团体,或集团的收支
我们在此版本的 Copay 建立以下功能,使 Copay 钱包从不妥协于安全性和可访问性:
应用程序的多个钱包创建和管理
个人或共享钱包的直观多重签名安全
共享钱包和团体支付简单易用
分层确定性HD地址生成和钱包备份
基于设备的安全:所有私钥都存储在本地,而不是在云中
支持 testnet 比特币钱包
支持所有主要移动端和桌面平台的同步访问
支持支付协议BIP70-BIP73容易辨认的付款请求和可验证的安全比特币支付
支持 150 + 货币定价及比特币的面值单位
电子邮件通知比特币的支付和转移
可自定义的钱包名和背景颜色
支持 9 种语言 (EN, CS, FR, DE, IT, ES, JA, PL, RU)
Copay 是自由和开放源码软件,在非专有服务器上运行,因此无需依靠任何公司以提供永续支持。 任何人都可以查看或对位于 GitHub (https://github.com/bitpay/copay) 的 Copay 源代码作出贡献。

View File

View File

@ -0,0 +1 @@

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

Binary file not shown.

View File

@ -1,25 +0,0 @@
msgid ""
msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Project-Id-Version: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: \n"
"Language-Team: \n"
"X-Generator: Poedit 2.0.3\n"
"Last-Translator: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Language: en\n"
msgid "Home"
msgstr "Home"
msgid "Receive"
msgstr "Receive"
msgid "Send"
msgstr "Send"
msgid "Settings"
msgstr "Settings"

Binary file not shown.

View File

@ -1,25 +0,0 @@
msgid ""
msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Project-Id-Version: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: \n"
"Language-Team: \n"
"X-Generator: Poedit 2.0.3\n"
"Last-Translator: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Language: es\n"
msgid "Home"
msgstr "Inicio"
msgid "Receive"
msgstr "Recibir"
msgid "Send"
msgstr "Enviar"
msgid "Settings"
msgstr "Configuración"

2125
src/assets/i18n/po/es.po Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
<ion-header>
<ion-navbar>
<ion-title>{{'Add Wallet' | translate}}</ion-title>
<ion-title>{{'New wallet' | translate}}</ion-title>
</ion-navbar>
</ion-header>
@ -9,7 +9,7 @@
<ion-icon item-start>
<img src="assets/img/icon-wallet.svg" class="icon-wallet" />
</ion-icon>
<span translate>New personal wallet</span>
<span translate>Create personal wallet</span>
</button>
<button class="list-button" ion-item (click)="goToCreateWallet(true)">
<ion-icon item-start>
@ -29,4 +29,4 @@
</ion-icon>
<span translate>Import wallet</span>
</button>
</ion-content>
</ion-content>

View File

@ -23,7 +23,9 @@
{{ secret || ('Loading...'|translate) }}
</div>
</div>
<button ion-button clear color="danger" type="button" *ngIf="secret" (click)="showDeletePopup()" translate>Cancel invitation</button>
<button ion-button clear color="danger" type="button" *ngIf="secret" (click)="showDeletePopup()">
{{'Cancel invitation' | translate}}
</button>
</ion-item>
</ion-list>
@ -64,4 +66,4 @@
</div>
</div>
</ion-content>
</ion-content>

View File

@ -7,25 +7,25 @@
<ion-content no-bounce>
<form [formGroup]="createForm" (ngSubmit)="setOptsAndCreate()">
<ion-item>
<ion-label stacked>Wallet name</ion-label>
<ion-label stacked>{{'Wallet name' | translate}}</ion-label>
<ion-input type="text" formControlName="walletName"></ion-input>
</ion-item>
<div *ngIf="isShared">
<ion-item>
<ion-label stacked>Your name</ion-label>
<ion-label stacked>{{'Your name' | translate}}</ion-label>
<ion-input type="text" formControlName="myName"></ion-input>
</ion-item>
<ion-item>
<ion-label stacked>Total number of copayers</ion-label>
<ion-label stacked>{{'Total number of copayers' | translate}}</ion-label>
<ion-select formControlName="totalCopayers" (ionChange)="setTotalCopayers(createForm.value.totalCopayers)">
<ion-option *ngFor="let copayer of copayers" [value]="copayer">{{copayer}}</ion-option>
</ion-select>
</ion-item>
<ion-item>
<ion-label stacked>Required number of signatures</ion-label>
<ion-label stacked>{{'Required number of signatures' | translate}}</ion-label>
<ion-select formControlName="requiredCopayers">
<ion-option *ngFor="let signature of signatures" [value]="signature">{{signature}}</ion-option>
</ion-select>
@ -43,25 +43,25 @@
<ion-item-divider></ion-item-divider>
<ion-item (click)="showAdvOpts = !showAdvOpts">
<ion-label *ngIf="!showAdvOpts">Show advanced options</ion-label>
<ion-label *ngIf="showAdvOpts">Hide advanced options</ion-label>
<ion-label *ngIf="!showAdvOpts">{{'Show advanced options' | translate}}</ion-label>
<ion-label *ngIf="showAdvOpts">{{'Hide advanced options' | translate}}</ion-label>
</ion-item>
<div *ngIf="showAdvOpts">
<ion-item>
<ion-label stacked>Wallet service URL</ion-label>
<ion-label stacked>Wallet Service URL</ion-label>
<ion-input type="text" formControlName="bwsURL"></ion-input>
</ion-item>
<ion-item>
<ion-label stacked>Wallet key</ion-label>
<ion-label stacked>{{'Wallet key' | translate}}</ion-label>
<ion-select formControlName="selectedSeed" (ionChange)="seedOptionsChange(createForm.value.selectedSeed)">
<ion-option *ngFor="let opt of seedOptions" [value]="opt.id">{{opt.label}}</ion-option>
</ion-select>
</ion-item>
<ion-item *ngIf="createForm.value.selectedSeed == 'set'">
<ion-label stacked>Wallet recovery phrase</ion-label>
<ion-label stacked>{{'Wallet recovery phrase' | translate}}</ion-label>
<ion-input type="text" formControlName="recoveryPhrase"></ion-input>
</ion-item>
@ -71,7 +71,7 @@
</ion-item>
<ion-item *ngIf="createForm.value.selectedSeed == 'set'">
<ion-label stacked>Derivation path</ion-label>
<ion-label stacked>{{'Derivation path' | translate}}</ion-label>
<ion-input type="text" formControlName="derivationPath"></ion-input>
</ion-item>
@ -84,5 +84,7 @@
</ion-content>
<ion-footer>
<button ion-button full class="button-footer" (click)="setOptsAndCreate()" [disabled]="!createForm.valid">{{'Create wallet' | translate}}</button>
</ion-footer>
<button ion-button full class="button-footer" (click)="setOptsAndCreate()" [disabled]="!createForm.valid">
{{'Create wallet' | translate}}
</button>
</ion-footer>

View File

@ -70,7 +70,7 @@ export class CreateWalletPage implements OnInit {
) {
this.isShared = this.navParams.get('isShared');
this.title = this.isShared ? 'Create shared wallet' : 'Create personal wallet';
this.title = this.isShared ? this.translate.instant('Create shared wallet') : this.translate.instant('Create personal wallet');
this.defaults = this.configProvider.getDefaults();
this.tc = this.isShared ? this.defaults.wallet.totalCopayers : 1;

View File

@ -1,6 +1,6 @@
<ion-header>
<ion-navbar>
<ion-title>Import wallet</ion-title>
<ion-title>{{'Import wallet' | translate}}</ion-title>
</ion-navbar>
</ion-header>
@ -22,35 +22,34 @@
<ul>
<li translate>The password of the recovery phrase (if set)</li>
<li translate>The derivation path</li>
<li translate>The wallet service URL</li>
<li translate>The Wallet Service URL</li>
</ul>
<small translate>
NOTE: To import a wallet from a 3rd party software, please go to Add Wallet &gt; Create Wallet, and specify the Recovery
Phrase there.
<small>
<span translate>NOTE: To import a wallet from a 3rd party software, please go to Add Wallet &gt; Create Wallet, and specify the Recovery Phrase there.</span>
</small>
</ion-item>
</ion-card>
<form [formGroup]="importForm" (ngSubmit)="import()">
<ion-item *ngIf="selectedTab == 'words'">
<ion-label stacked>Type the recovery phrase (usually 12 words)</ion-label>
<ion-label stacked>{{'Type the recovery phrase (usually 12 words)' | translate}}</ion-label>
<ion-textarea formControlName="words" [value]="importForm.value.words"></ion-textarea>
<ion-icon *ngIf="!fromOnboarding" class="scanner-icon" name="qr-scanner" item-right (click)="openScanner()"></ion-icon>
</ion-item>
<div *ngIf="selectedTab == 'file'">
<ion-item *ngIf="!isSafari && !isCordova">
<ion-label stacked>Choose a backup file from your computer</ion-label>
<ion-label stacked>{{'Choose a backup file from your computer' | translate}}</ion-label>
<ion-input type="file" accept="json" [(ngModel)]="formFile" (change)="fileChangeEvent($event)" formControlName="file"></ion-input>
</ion-item>
<ion-item *ngIf="isSafari || isCordova">
<ion-label stacked>Paste the backup plain text code</ion-label>
<ion-label stacked>{{'Paste the backup plain text code' | translate}}</ion-label>
<ion-textarea formControlName="backupText" rows="5" [value]="importForm.value.backupText"></ion-textarea>
</ion-item>
<ion-item>
<ion-label stacked>Password</ion-label>
<ion-label stacked>{{'Password' | translate}}</ion-label>
<ion-input type="password" formControlName="filePassword"></ion-input>
</ion-item>
</div>
@ -66,19 +65,19 @@
<ion-item-divider></ion-item-divider>
<ion-item (click)="toggleShowAdvOpts()">
<ion-label *ngIf="!showAdvOpts">Show advanced options</ion-label>
<ion-label *ngIf="showAdvOpts">Hide advanced options</ion-label>
<ion-label *ngIf="!showAdvOpts">{{'Show advanced options' | translate}}</ion-label>
<ion-label *ngIf="showAdvOpts">{{'Hide advanced options' | translate}}</ion-label>
</ion-item>
<div *ngIf="showAdvOpts">
<div *ngIf="selectedTab == 'words'">
<ion-item>
<ion-label stacked>Password</ion-label>
<ion-label stacked>{{'Password' | translate}}</ion-label>
<ion-input type="password" formControlName="mnemonicPassword"></ion-input>
</ion-item>
<ion-item>
<ion-label stacked>Derivation path</ion-label>
<ion-label stacked>{{'Derivation path' | translate}}</ion-label>
<ion-input type="text" formControlName="derivationPath" [value]="importForm.value.derivationPath"></ion-input>
</ion-item>
@ -89,7 +88,7 @@
</div>
<ion-item>
<ion-label stacked>Wallet service URL</ion-label>
<ion-label stacked>Wallet Service URL</ion-label>
<ion-input type="text" formControlName="bwsURL"></ion-input>
</ion-item>
</div>
@ -97,5 +96,7 @@
</ion-content>
<ion-footer>
<button ion-button full class="button-footer" (click)="import()" [disabled]="!importForm.valid">Import wallet</button>
</ion-footer>
<button ion-button full class="button-footer" (click)="import()" [disabled]="!importForm.valid">
{{'Import wallet' | translate}}
</button>
</ion-footer>

View File

@ -39,7 +39,7 @@
<div *ngIf="showAdvOpts">
<ion-item>
<ion-label stacked>{{'Wallet service URL' | translate}}</ion-label>
<ion-label stacked>Wallet Service URL</ion-label>
<ion-input type="text" formControlName="bwsURL"></ion-input>
</ion-item>
@ -64,5 +64,7 @@
</ion-content>
<ion-footer>
<button ion-button full class="button-footer" (click)="setOptsAndJoin()" [disabled]="!joinForm.valid" translate>Join wallet</button>
<button ion-button full class="button-footer" (click)="setOptsAndJoin()" [disabled]="!joinForm.valid">
{{'Join wallet' | translate}}
</button>
</ion-footer>

View File

@ -33,9 +33,10 @@
</div>
</div>
<div class="bottom-absolute">
<div translate class="footer-text">We'll confirm on the next screen.</div>
<button *ngIf="currentIndex == 0" ion-button class="button-standard" [disabled]="credentialsEncrypted || error" (click)="slideNext()"
translate>I've written it down</button>
<div translate class="footer-text">We will confirm on the next screen.</div>
<button *ngIf="currentIndex == 0" ion-button class="button-standard" [disabled]="credentialsEncrypted || error" (click)="slideNext()">
{{'I have written it down' | translate}}
</button>
</div>
</div>
</ion-slide>
@ -63,8 +64,12 @@
</div>
<div *ngIf="selectComplete" class="bottom-absolute">
<div class="footer-text">{{'Is this correct?' | translate}}</div>
<button *ngIf="currentIndex == 1 && selectComplete" ion-button class="button-standard" (click)="slideNext()" translate>Confirm</button>
<button ion-button clear class="button-standard" (click)="setFlow()" translate>Clear</button>
<button *ngIf="currentIndex == 1 && selectComplete" ion-button class="button-standard" (click)="slideNext()">
{{'Confirm' | translate}}
</button>
<button ion-button clear class="button-standard" (click)="setFlow()">
{{'Clear' | translate}}
</button>
</div>
</ion-slide>
@ -76,14 +81,17 @@
<ion-input type="password" id="password" [(ngModel)]="password" autocapitalize="off" spellcheck="false"></ion-input>
</ion-item>
<ion-item-divider text-wrap class="assertive">
{{'This recovery phrase was created with a password. To recover this wallet both the recovery phrase and password are needed.'
| translate}}
{{'This recovery phrase was created with a password. To recover this wallet both the recovery phrase and password are needed.' | translate}}
</ion-item-divider>
<div class="bottom-absolute">
<button ion-button block [disabled]="!password" (click)="finalStep()" translate>Confirm</button>
<button *ngIf="currentIndex == 2" [disabled]="!password" ion-button class="button-standard" (click)="finalStep()" translate>Confirm</button>
<button ion-button block [disabled]="!password" (click)="finalStep()">
{{'Confirm' | translate}}
</button>
<button *ngIf="currentIndex == 2" [disabled]="!password" ion-button class="button-standard" (click)="finalStep()">
{{'Confirm' | translate}}
</button>
</div>
</ion-slide>
</ion-slides>
</ion-content>
</ion-content>

View File

@ -10,6 +10,8 @@
</div>
<div class="bottom-absolute">
<p translate class="bottom-description">Anyone with your backup phrase can access or spend your bitcoin.</p>
<button ion-button class="button-standard" (click)="openWarningModal()" translate>Got it</button>
<button ion-button class="button-standard" (click)="openWarningModal()">
{{'Got it' | translate}}
</button>
</div>
</ion-content>
</ion-content>

View File

@ -36,6 +36,8 @@
required padding></ion-textarea>
</form>
<button ion-button class="button-standard" (click)="sendFeedback(feedbackForm.value.comment)" [disabled]="!feedbackForm.valid">Send</button>
<button ion-button class="button-standard" (click)="sendFeedback(feedbackForm.value.comment)" [disabled]="!feedbackForm.valid">
{{'Send' | translate}}
</button>
</ion-content>
</ion-content>

View File

@ -64,7 +64,7 @@ export class SendFeedbackPage {
this.comment = this.translate.instant("There's obviously something we're doing wrong. How could we improve your experience?");
break;
case 3:
this.reaction = this.translate.instant("Hmm...");
this.reaction = "Hmm...";
this.comment = this.translate.instant("We'd love to do better. How could we improve your experience?");
break;
case 4:

View File

@ -171,8 +171,8 @@
</button>
</div>
<div item-end *ngIf="showReorderBch">
<button ion-button clear color="secondary" (click)="reorderBch()" translate>
Done
<button ion-button clear color="secondary" (click)="reorderBch()">
{{'Done' | translate}}
</button>
</div>
</ion-item-divider>
@ -195,16 +195,13 @@
</span>
<span *ngIf="wallet.isComplete() && !wallet.needsBackup">
<span *ngIf="!wallet.balanceHidden && !wallet.scanning">
{{wallet.status && wallet.status.totalBalanceStr ? (wallet.status.totalBalanceStr) : ( wallet.cachedBalance ? wallet.cachedBalance
+ (wallet.cachedBalanceUpdatedOn ? ' &middot; ' + ( wallet.cachedBalanceUpdatedOn * 1000 | amTimeAgo) : '')
: '')}}
{{wallet.status && wallet.status.totalBalanceStr ? (wallet.status.totalBalanceStr) : ( wallet.cachedBalance ? wallet.cachedBalance + (wallet.cachedBalanceUpdatedOn ? ' &middot; ' + ( wallet.cachedBalanceUpdatedOn * 1000 | amTimeAgo) : '') : '')}}
</span>
<span *ngIf="wallet.scanning" translate>Scanning funds</span>
<span *ngIf="wallet.balanceHidden && !wallet.scanning">[
<span translate>Balance Hidden</span>]</span>
<span *ngIf="wallet.credentials.m > 1">{{wallet.credentials.m}}-of-{{wallet.credentials.n}}</span>
<ion-icon *ngIf="!wallet.balanceHidden && wallet.status && (wallet.status.totalBalanceSat != wallet.status.spendableAmount)"
name="timer"></ion-icon>
<ion-icon *ngIf="!wallet.balanceHidden && wallet.status && (wallet.status.totalBalanceSat != wallet.status.spendableAmount)" name="timer"></ion-icon>
<span *ngIf="wallet.error" class="wallet-warning">{{wallet.error}}</span>
</span>
</div>
@ -230,8 +227,7 @@
<img src="assets/img/icon-card.svg" class="icon-card" />
</ion-icon>
<div class="item-title">BitPay Visa&reg; Card ({{card.lastFourDigits}})</div>
<div class="item-subtitle">{{card.balance ? (card.balance | currency:card.currencySymbol:2) : 'Add funds to get started'|translate}} {{card.updatedOn
? (' &middot; ' + (card.updatedOn * 1000 | amTimeAgo)) : ''}}</div>
<div class="item-subtitle">{{card.balance ? (card.balance | currency:card.currencySymbol:2) : 'Add funds to get started'|translate}} {{card.updatedOn ? (' &middot; ' + (card.updatedOn * 1000 | amTimeAgo)) : ''}}</div>
</button>
</ion-list>
</div>
@ -256,4 +252,4 @@
</ion-list>
</div>
</ion-content>
</ion-content>

View File

@ -6,7 +6,7 @@
</ion-icon>
<h4 text-wrap>
{{card.merchant.name || 'Unknown Merchant'}}
<span *ngIf="card.pending && card.transactionId">
<span *ngIf="card.pending && card.transactionId" translate>
View Confirmation Status
</span>
</h4>

View File

@ -23,12 +23,12 @@
<ion-note item-right>
<div class="amount">
<span *ngIf="tx.action == 'sent'"></span>
<span *ngIf="tx.action == 'invalid'" translate> (possible double spend) </span>
<span *ngIf="tx.action == 'invalid'" translate>(possible double spend)</span>
<span *ngIf="tx.action != 'invalid'"> {{tx.amount | satToUnit: tx.coin}}</span>
</div>
<div class="date">
<time *ngIf="tx.createdOn && createdWithinPastDay(tx.createdOn * 1000)">{{tx.createdOn * 1000 | amTimeAgo}}</time>
<time *ngIf="tx.createdOn && !createdWithinPastDay(tx.createdOn * 1000)">{{tx.createdOn * 1000 | date:'MMMM d, y'}}</time>
<time *ngIf="tx.createdOn && !createdWithinPastDay(tx.createdOn * 1000)">{{tx.createdOn * 1000 | amDateFormat:'MMM D, YYYY'}}</time>
</div>
</ion-note>
</button>
</button>

View File

@ -32,13 +32,11 @@
</span>
<span *ngIf="wallet.isComplete() && !wallet.needsBackup">
<span *ngIf="!wallet.balanceHidden && !wallet.scanning">
{{wallet.status && wallet.status.totalBalanceStr ? (wallet.status.totalBalanceStr) : ( wallet.cachedBalance ? wallet.cachedBalance
+ (wallet.cachedBalanceUpdatedOn ? ' &middot; ' + ( wallet.cachedBalanceUpdatedOn * 1000 | amTimeAgo) : '')
: '')}}
{{wallet.status && wallet.status.totalBalanceStr ? (wallet.status.totalBalanceStr) : ( wallet.cachedBalance ? wallet.cachedBalance + (wallet.cachedBalanceUpdatedOn ? ' &middot; ' + ( wallet.cachedBalanceUpdatedOn * 1000 | amTimeAgo) : '') : '')}}
</span>
<span *ngIf="wallet.scanning" translate>Scanning funds</span>
<span *ngIf="wallet.balanceHidden && !wallet.scanning">[<span translate>Balance Hidden</span>]</span>
<span class="text-gray" *ngIf="wallet.credentials.m > 1">{{wallet.credentials.m}}-of-{{wallet.credentials.n}}</span>
<span class="text-gray" *ngIf="wallet.credentials.m > 1" translate>{{wallet.credentials.m}}-of-{{wallet.credentials.n}}</span>
<ion-icon *ngIf="!wallet.balanceHidden && wallet.status && (wallet.status.totalBalanceSat != wallet.status.spendableAmount)"
name="timer"></ion-icon>
<span *ngIf="wallet.error" class="error">{{wallet.error}}</span>

View File

@ -1,8 +1,8 @@
<ion-header>
<ion-navbar>
<ion-buttons start>
<button (click)="close()" ion-button translate>
Close
<button (click)="close()" ion-button>
{{'Close' | translate}}
</button>
</ion-buttons>
</ion-navbar>
@ -10,7 +10,7 @@
<ion-content>
<ion-list *ngIf="type === 'url'">
<ion-item-divider>{{'Website' |translate}}</ion-item-divider>
<ion-item-divider>Website</ion-item-divider>
<ion-item>
{{data}}
<ion-icon item-start>
@ -89,4 +89,4 @@
<span translate>Copy to clipboard</span>
</button>
</ion-list>
</ion-content>
</ion-content>

View File

@ -2,7 +2,7 @@
<ion-navbar>
<ion-title>Details</ion-title>
<ion-buttons start>
<button (click)="close()" ion-button translate>
<button (click)="close()" ion-button>
Close
</button>
</ion-buttons>
@ -110,4 +110,4 @@
<button ion-item block text-center *ngIf="card.status == 'FAILURE' || card.cardStatus == 'Canceled' || card.cardStatus == 'Expired' || card.status == 'expired'"
class="button-footer assertive" (click)="remove()">Remove</button>
<button ion-item block text-center *ngIf="card.status == 'SUCCESS' && card.cardStatus == 'Fulfilled'" class="assertive" (click)="cancelGiftCard()">Cancel</button>
</ion-content>
</ion-content>

View File

@ -1,7 +1,7 @@
<ion-header>
<ion-navbar>
<ion-title>{{'Buy' | translate}}</ion-title>
<ion-title>Buy Gift Card</ion-title>
</ion-navbar>
</ion-header>
@ -24,7 +24,7 @@
<ion-item-group class="info">
<button ion-item (click)="showWallets()" class="wallets-list">
<div translate>From</div>
<div>From</div>
<div class="wallet">
<ion-icon item-start>
<img *ngIf="network == 'testnet'" [ngStyle]="{'background-color': wallet && wallet.color}" src="assets/img/icon-wallet-testnet.svg"
@ -40,14 +40,14 @@
Details
</ion-item-divider>
<ion-item>
<span translate>Gift Card</span>
<span>Gift Card</span>
<ion-note item-end>
{{amount | currency:'$ ':2}}
<span *ngIf="amount"> {{currencyIsoCode}}</span>
</ion-note>
</ion-item>
<ion-item>
<span translate>Network Cost</span>
<span>Network cost</span>
<ion-note item-end>
<span>{{invoiceFee | currency:'$ ':2}}
<span *ngIf="invoiceFee"> {{currencyIsoCode}}</span>
@ -55,7 +55,7 @@
</ion-note>
</ion-item>
<ion-item>
<span translate>Miner Fee</span>
<span>Miner fee</span>
<ion-note item-end>
<span>{{networkFee | currency:'$ ':2}}
<span *ngIf="networkFee"> {{currencyIsoCode}}</span>
@ -63,7 +63,7 @@
</ion-note>
</ion-item>
<ion-item>
<span translate>Total</span>
<span>Total</span>
<ion-note item-end>
<span *ngIf="totalAmount">{{totalAmount | currency:'$ ':2}} {{currencyIsoCode}}</span>
<span *ngIf="totalAmountStr">({{totalAmountStr}})</span>
@ -86,5 +86,5 @@
</ion-content>
<ion-footer>
<button ion-button full class="button-footer" (click)="buyConfirm()" [disabled]="!(wallet && totalAmountStr)" translate>Confirm purchase</button>
<button ion-button full class="button-footer" (click)="buyConfirm()" [disabled]="!(wallet && totalAmountStr)">Confirm purchase</button>
</ion-footer>

View File

@ -15,14 +15,12 @@
<ion-slides pager="true">
<ion-slide>
<p class="slider-text" translate>
Turn bitcoin into dollars, swipe anywhere Visa
<sup>&reg;</sup> is accepted.
Turn bitcoin into dollars, swipe anywhere Visa&reg; is accepted.
</p>
</ion-slide>
<ion-slide>
<p class="slider-text" translate>
Get local cash anywhere you go, from any Visa
<sup>&reg;</sup> compatible ATM. ATM bank fees may apply.
Get local cash anywhere you go, from any Visa&reg; compatible ATM. ATM bank fees may apply.
</p>
</ion-slide>
<ion-slide>
@ -32,7 +30,11 @@
</ion-slide>
</ion-slides>
<div padding>
<button ion-button class="button-standard" (click)="orderBitPayCard()">Order the BitPay Card</button>
<button ion-button clear color="blank" class="button-standard" (click)="connectBitPayCard()">Connect my BitPay Card</button>
<button ion-button class="button-standard" (click)="orderBitPayCard()">
{{'Order the BitPay Card' | translate}}
</button>
<button ion-button clear color="blank" class="button-standard" (click)="connectBitPayCard()">
{{'Connect my BitPay Card' | translate}}
</button>
</div>
</ion-content>
</ion-content>

View File

@ -49,13 +49,13 @@
</ion-note>
</ion-item>
<ion-item>
<span translate>Network Cost</span>
<span translate>Network cost</span>
<ion-note item-end>
<span>{{invoiceFee | currency:currencySymbol:2}} {{currencyIsoCode}}</span>
</ion-note>
</ion-item>
<ion-item>
<span translate>Miner Fee</span>
<span translate>Miner fee</span>
<ion-note item-end>
<span>{{networkFee | currency:currencySymbol:2}} {{currencyIsoCode}}</span>
</ion-note>
@ -74,8 +74,8 @@
</ion-content>
<ion-footer>
<button ion-button full class="button-footer" (click)="topUpConfirm()" [disabled]="!(wallet && totalAmountStr)" translate>
Add funds
<button ion-button full class="button-footer" (click)="topUpConfirm()" [disabled]="!(wallet && totalAmountStr)">
{{'Add funds' | translate}}
</button>
</ion-footer>

View File

@ -12,7 +12,7 @@
{{balance | currency:currencySymbol:2 }}
</div>
<button ion-button color="primary" (click)="topUp()" *ngIf="balance" no-low-fee>
<span translate>Add Funds</span> &rarr;
<span translate>Add funds</span> &rarr;
</button>
<div class="card-info">

View File

@ -23,7 +23,7 @@ page-bitpay-card {
}
.balance-str {
cursor: pointer;
margin-bottom: 5px;
margin-bottom: 8px;
font-size: 35px;
font-weight: 600;
}

View File

@ -16,7 +16,7 @@
<div *ngIf="bitpayCard">
<ion-item-divider>
<span translate>BitPay Visa&reg; Cards</span>
<span>BitPay Visa&reg; Cards</span>
</ion-item-divider>
<ion-item>
<div>
@ -33,4 +33,4 @@
</ion-item>
</div>
</ion-list>
</ion-content>
</ion-content>

View File

@ -4,7 +4,7 @@
Details
</ion-title>
<ion-buttons start>
<button (click)="close()" ion-button translate>
<button (click)="close()" ion-button>
Close
</button>
</ion-buttons>

View File

@ -4,7 +4,7 @@
Details
</ion-title>
<ion-buttons start>
<button (click)="close()" ion-button translate>
<button (click)="close()" ion-button>
Close
</button>
</ion-buttons>

View File

@ -1,7 +1,7 @@
<ion-header>
<ion-navbar>
<ion-title>{{'Buy'|translate}}</ion-title>
<ion-title>{{'Buy Gift Card'|translate}}</ion-title>
</ion-navbar>
</ion-header>
@ -44,7 +44,7 @@
</ion-note>
</ion-item>
<ion-item>
<span translate>Network Cost</span>
<span translate>Network cost</span>
<ion-note item-end>
<span>{{invoiceFee | currency:'$ ':2}}
<span *ngIf="invoiceFee"> {{currencyIsoCode}}</span>
@ -52,7 +52,7 @@
</ion-note>
</ion-item>
<ion-item>
<span translate>Miner Fee</span>
<span translate>Miner fee</span>
<ion-note item-end>
<span>{{networkFee | currency:'$ ':2}}
<span *ngIf="networkFee"> {{currencyIsoCode}}</span>
@ -72,5 +72,7 @@
</ion-content>
<ion-footer>
<button ion-button block class="button-footer" (click)="buyConfirm()" [disabled]="!(wallet && totalAmountStr)">Confirmar a compra</button>
<button ion-button block class="button-footer" (click)="buyConfirm()" [disabled]="!(wallet && totalAmountStr)">
Confirmar a compra
</button>
</ion-footer>

View File

@ -3,8 +3,8 @@
<ion-navbar>
<ion-title>Details</ion-title>
<ion-buttons start>
<button (click)="close()" ion-button translate>
Close
<button (click)="close()" ion-button>
{{'Close' | translate}}
</button>
</ion-buttons>
</ion-navbar>
@ -16,7 +16,7 @@
<div class="header-modal">
<img src="assets/img/mercado-libre/giftcard-pt.svg" alt="Mercado Livre Brazil Gift Card">
<div class="header-modal-amount">
<span translate>Gift Card Amount:</span>
<span translate>Gift Card Amount</span>:
<span class="text-bold">
{{card.amount | currency : '$ ' : 2}} {{card.currency}}
</span>
@ -31,8 +31,8 @@
Claim code:
<span class="text-bold" copy-to-clipboard="{{card.pin}}">{{card.pin}}</span>
</div>
<button class="redeem" ion-button outline (click)="openRedeemLink()" translate>
Redeem Now
<button class="redeem" ion-button outline (click)="openRedeemLink()">
{{'Redeem Now' | translate}}
</button>
</div>
@ -65,15 +65,16 @@
<ion-list>
<button class="links" ion-item (click)="openExternalLink(card.invoiceUrl)">
<span translate>See invoice &rarr;</span>
<span translate>See invoice</span> &rarr;
</button>
<button class="links" ion-item *ngIf="card.status == 'FAILURE'" (click)="openSupportWebsite()">
<span><span translate>Help & Support</span> &rarr;</span>
<span><span translate>Help &amp; Support</span> &rarr;</span>
</button>
<button ion-item block *ngIf="card.cardStatus == 'inactive' || card.cardStatus == 'expired' || card.status == 'expired'"
class="assertive" (click)="remove()">Remove</button>
<button ion-item block *ngIf="card.cardStatus == 'inactive' || card.cardStatus == 'expired' || card.status == 'expired'" class="assertive" (click)="remove()">
{{'Remove' | translate}}
</button>
</ion-list>
</ion-content>

View File

@ -14,10 +14,14 @@
<img src="assets/img/mercado-libre/mlbr.svg" alt="Mercado Libre">
</div>
<div class="description" translate padding>
<b>Only</b> redeemable on Mercado Livre (Brazil)
Only redeemable on Mercado Livre (Brazil)
</div>
<button *ngIf="!showOauthForm" ion-button outline class="button-standard" (click)="goTo('Amount')" no-low-fee translate>Buy a Gift Card</button>
<button *ngIf="!showOauthForm" ion-button clear small block color="dark" (click)="openExternalLink('https://www.mercadolivre.com.br')" translate>Visit mercadolivre.com.br &rarr;</button>
<button *ngIf="!showOauthForm" ion-button outline class="button-standard" (click)="goTo('Amount')" no-low-fee>
{{'Buy Gift Card' | translate}}
</button>
<button *ngIf="!showOauthForm" ion-button clear small block color="dark" (click)="openExternalLink('https://www.mercadolivre.com.br')">
{{'Visit mercadolivre.com.br' | translate}} &rarr;
</button>
</div>
</div>
<div class="container" *ngIf="giftCards">
@ -28,7 +32,7 @@
<div class="integration-giftCard-logo">
<img src="assets/img/mercado-libre/mlbr.svg" alt="Mercado Libre">
<div class="subtitle" translate>
<b>Only</b> redeemable on Mercado Livre (Brazil)
Only redeemable on Mercado Livre (Brazil)
</div>
<button color="dark" ion-button clear icon-right no-low-fee (click)="goTo('Amount')">
<span translate>Buy Gift Card</span>
@ -47,10 +51,10 @@
{{item.value.amount | currency : '$ ' : 2}} {{item.value.currency}}
</h2>
<span>
<span class="assertive" *ngIf="item.value.status == 'FAILURE'">Error</span>
<span class="dark" *ngIf="item.value.status == 'expired'">Invoice expired</span>
<span class="calm" *ngIf="item.value.status == 'invalid'">Still pending</span>
<span class="positive" *ngIf="item.value.status == 'PENDING'">Pending</span>
<span class="assertive" *ngIf="item.value.status == 'FAILURE'" translate>Error</span>
<span class="dark" *ngIf="item.value.status == 'expired'" translate>Invoice expired</span>
<span class="calm" *ngIf="item.value.status == 'invalid'" translate>Still pending</span>
<span class="positive" *ngIf="item.value.status == 'PENDING'" translate>Pending</span>
<span class="assertive" *ngIf="item.value.cardStatus == 'inactive'" translate>Inactive</span>
<span class="assertive" *ngIf="item.value.cardStatus == 'expired'" translate>Expired</span>
</span>

View File

@ -10,7 +10,7 @@
<ion-item>
<div class="sending-label">
<img src="assets/img/shapeshift/icon-shapeshift.svg" alt="shapeshift">
<span translate>Shift</span>
<span>Shift</span>
</div>
<div class="amount-label">
<div class="amount">{{amountStr}}</div>
@ -71,18 +71,15 @@
<ion-item-divider class="item-description" *ngIf="withdrawalStr" no-lines text-wrap>
<span translate>
A total of {{amountStr}} ({{fiatAmount | currency}} {{currencyIsoCode}}) will be exchanged for {{withdrawalStr}} ({{fiatWithdrawal
| currency}} {{currencyIsoCode}}). Would you like to proceed?
A total of {{amountStr}} ({{fiatAmount | currency}} {{currencyIsoCode}}) will be exchanged for {{withdrawalStr}} ({{fiatWithdrawal | currency}} {{currencyIsoCode}}). Would you like to proceed?
</span>
</ion-item-divider>
<!-- TODO: Translate -->
</ion-list>
</ion-content>
<ion-footer>
<button ion-button full class="button-footer" (click)="confirmTx()" [disabled]="!fromWallet || !totalAmountStr || !toWallet"
translate>
Click to shift
<button ion-button full class="button-footer" (click)="confirmTx()" [disabled]="!fromWallet || !totalAmountStr || !toWallet">
{{'Click to confirm' | translate}}
</button>
</ion-footer>
</ion-footer>

View File

@ -4,8 +4,8 @@
{{'Details' | translate}}
</ion-title>
<ion-buttons start>
<button (click)="close()" ion-button translate>
Close
<button (click)="close()" ion-button>
{{'Close' | translate}}
</button>
</ion-buttons>
</ion-navbar>
@ -97,12 +97,12 @@
<ion-item-divider></ion-item-divider>
<button ion-item detail-none *ngIf="ssData.transaction" (click)="openTransaction(ssData.transaction)" translate>
See transaction
<button ion-item detail-none *ngIf="ssData.transaction" (click)="openTransaction(ssData.transaction)">
{{'See transaction' | translate}}
</button>
<button class="assertive" ion-item detail-none (click)="remove()" translate>
Remove
<button class="assertive" ion-item detail-none (click)="remove()">
{{'Remove' | translate}}
</button>
</ion-list>
</ion-content>
</ion-content>

View File

@ -25,12 +25,10 @@
Incomplete
</span>
<span *ngIf="fromWallet.isComplete()">
<span *ngIf="!fromWallet.balanceHidden && !fromWallet.scanning"> {{fromWallet.status.totalBalanceStr ? fromWallet.status.totalBalanceStr : ( fromWallet.cachedBalance ? fromWallet.cachedBalance
+ (fromWallet.cachedBalanceUpdatedOn ? ' &middot; ' + ( fromWallet.cachedBalanceUpdatedOn * 1000 | amTimeAgo)
: '') : '' ) }} </span>
<span *ngIf="fromWallet.scanning" translate> Scanning funds... </span>
<span *ngIf="!fromWallet.balanceHidden && !fromWallet.scanning"> {{fromWallet.status.totalBalanceStr ? fromWallet.status.totalBalanceStr : ( fromWallet.cachedBalance ? fromWallet.cachedBalance + (fromWallet.cachedBalanceUpdatedOn ? ' &middot; ' + ( fromWallet.cachedBalanceUpdatedOn * 1000 | amTimeAgo) : '') : '' ) }} </span>
<span *ngIf="fromWallet.scanning" translate>Scanning funds</span>...
<span *ngIf="fromWallet.balanceHidden && !fromWallet.scanning">[<span translate>Balance Hidden</span>]</span>
<span *ngIf="fromWallet.balanceHidden && !fromWallet.scanning" translate>[Balance Hidden]</span>
<span *ngIf="fromWallet.n > 1">
{{fromWallet.m}}-of-{{fromWallet.n}}
</span>
@ -60,12 +58,10 @@
Incomplete
</span>
<span *ngIf="toWallet.isComplete()">
<span *ngIf="!toWallet.balanceHidden && !toWallet.scanning"> {{toWallet.status.totalBalanceStr ? toWallet.status.totalBalanceStr : ( toWallet.cachedBalance ? toWallet.cachedBalance
+ (toWallet.cachedBalanceUpdatedOn ? ' &middot; ' + ( toWallet.cachedBalanceUpdatedOn * 1000 | amTimeAgo)
: '') : '' ) }} </span>
<span *ngIf="toWallet.scanning" translate> Scanning funds... </span>
<span *ngIf="!toWallet.balanceHidden && !toWallet.scanning"> {{toWallet.status.totalBalanceStr ? toWallet.status.totalBalanceStr : ( toWallet.cachedBalance ? toWallet.cachedBalance + (toWallet.cachedBalanceUpdatedOn ? ' &middot; ' + ( toWallet.cachedBalanceUpdatedOn * 1000 | amTimeAgo) : '') : '' ) }} </span>
<span *ngIf="toWallet.scanning" translate>Scanning funds</span>...
<span *ngIf="toWallet.balanceHidden && !toWallet.scanning">[<span translate>Balance Hidden</span>]</span>
<span *ngIf="toWallet.balanceHidden && !toWallet.scanning" translate>[Balance Hidden]</span>
<span class="tab-home__wallet__multisig-number" *ngIf="toWallet.n > 1">
{{toWallet.m}}-of-{{toWallet.n}}
</span>
@ -126,10 +122,9 @@
<ion-checkbox class="check" [(ngModel)]="termsAccepted"></ion-checkbox>
</ion-item>
<div class="terms">
<p translate>
I agree to the
<a (click)="openTerms()"> Terms </a>
and certify that I am the beneficial owner of the input assets and the destination address.
<p>
<span translate>I agree to the Terms and certify that I am the beneficial owner of the input assets and the destination address.</span>
<a (click)="openTerms()" translate>Click to open Terms</a>.
</p>
</div>
</div>
@ -138,7 +133,7 @@
<ion-footer>
<button ion-button full class="button-footer" no-low-fee type="button" *ngIf="fromWallets.length > 0 && toWallets.length > 0"
[disabled]="!fromWallet || !toWallet || !termsAccepted" (click)="setAmount()" translate>
Continue
[disabled]="!fromWallet || !toWallet || !termsAccepted" (click)="setAmount()">
{{'Continue' | translate}}
</button>
</ion-footer>

View File

@ -12,8 +12,12 @@
<h4 translate>The Safest, Fastest Asset Exchange on Earth</h4>
<p translate>Trade any leading blockchain asset for any other. Protection by Design. No Account Needed.</p>
</div>
<button ion-button outline class="button-standard" color="light" no-low-fee (click)="goTo('Shift')" translate>Start</button>
<button ion-button clear small color="light" (click)="openExternalLink('https://shapeshift.io')" translate>Visit Shapeshift.io &rarr;</button>
<button ion-button outline class="button-standard" color="light" no-low-fee (click)="goTo('Shift')">
{{'Start' | translate}}
</button>
<button ion-button clear small color="light" (click)="openExternalLink('https://shapeshift.io')">
{{'Visit ShapeShift.io' | translate}} &rarr;
</button>
</div>
</div>
@ -21,7 +25,7 @@
<div class="main-header">
<img src="assets/img/shapeshift/logo-shapeshift.svg" width="180" (click)="update()">
<button ion-button clear icon-right color="light" no-low-fee (click)="goTo('Shift')">
<span translate>Shift</span>
<span>Shift</span>
<ion-icon name="arrow-forward"></ion-icon>
</button>
</div>
@ -54,4 +58,4 @@
Contact the ShapeShift support team.
</a>
</div>
</ion-footer>
</ion-footer>

View File

@ -9,8 +9,11 @@
<div class="bottom-absolute">
<ion-icon name="ios-arrow-round-down-outline" class="arrow-down"></ion-icon>
<p class="bottom-description" translate>Your wallet is never saved to cloud storage or standard device backups.</p>
<button class="primary" ion-button class="button-standard" (click)="initBackupFlow()" translate>Backup wallet</button>
<button class="secondary" ion-button clear class="button-standard btn-transparent primary-color" (click)="doBackupLater()"
translate>Do it later</button>
<button class="primary" ion-button class="button-standard" (click)="initBackupFlow()">
{{'Backup wallet' | translate}}
</button>
<button class="secondary" ion-button clear class="button-standard btn-transparent primary-color" (click)="doBackupLater()">
{{'Do it later' | translate}}
</button>
</div>
</ion-content>
</ion-content>

View File

@ -24,9 +24,13 @@
<ion-label>{{'Get news and updates from BitPay' | translate}}</ion-label>
<ion-checkbox formControlName="accept" checked="true"></ion-checkbox>
</ion-item>
<button ion-button class="button-standard" type="submit" [disabled]="!emailForm.valid">Continue</button>
<button ion-button class="button-standard" type="submit" [disabled]="!emailForm.valid">
{{'Continue' | translate}}
</button>
</form>
<button ion-button clear class="button-standard btn-transparent primary-color" (click)="skip()">Skip</button>
<button ion-button clear class="button-standard btn-transparent primary-color" (click)="skip()">
{{'Skip' | translate}}
</button>
</div>
<div class="email-form" *ngIf="showConfirmForm">
@ -34,7 +38,11 @@
<p translate>Is this email address correct?</p>
<p>{{ emailForm.value.email }}</p>
</div>
<button ion-button class="button-standard" (click)="save()" translate>Confirm</button>
<button ion-button class="button-standard btn-transparent primary-color" (click)="showConfirm()" translate>Edit</button>
<button ion-button class="button-standard" (click)="save()">
{{'Confirm' | translate}}
</button>
<button ion-button class="button-standard btn-transparent primary-color" (click)="showConfirm()">
{{'Edit' | translate}}
</button>
</div>
</ion-footer>
</ion-footer>

View File

@ -7,12 +7,14 @@
<p translate class="top-description">Bitcoin is different &ndash; it cannot be safely held with a bank or web service.</p>
<ion-list class="checkbox-list" no-lines text-wrap>
<ion-item>
<ion-label>I understand that my funds are held securely on this device, not by a company.</ion-label>
<ion-label>
{{'I understand that my funds are held securely on this device, not by a company' | translate}}.
</ion-label>
<ion-checkbox [(ngModel)]="accepted.first"></ion-checkbox>
</ion-item>
<ion-item>
<ion-label>I understand that if this app is moved to another device or deleted, my bitcoin can only be recovered with the backup
phrase.
<ion-label>
{{'I understand that if this app is moved to another device or deleted, my bitcoin can only be recovered with the backup phrase' | translate}}.
</ion-label>
<ion-checkbox [(ngModel)]="accepted.second"></ion-checkbox>
</ion-item>
@ -22,12 +24,15 @@
<div class="checkbox-list">
<div *ngIf="accepted.first && accepted.second">
<ion-item no-lines text-wrap>
<ion-label>I have read, understood, and agree to the Terms of Use.</ion-label>
<ion-label>
{{'I have read, understood, and agree to the Terms of Use' | translate}}.
</ion-label>
<ion-checkbox [(ngModel)]="terms.accepted"></ion-checkbox>
</ion-item>
<a (click)="openDisclaimer()" translate>Terms of Use</a>
</div>
<button ion-button class="button-standard" [disabled]="!accepted.first || !accepted.second || !terms.accepted" (click)="confirm()"
translate>Confirm &amp; Finish</button>
<button ion-button class="button-standard" [disabled]="!accepted.first || !accepted.second || !terms.accepted" (click)="confirm()">
{{'Confirm &amp; Finish' | translate}}
</button>
</div>
</ion-footer>
</ion-footer>

View File

@ -1,11 +1,14 @@
<ion-content no-bounce>
<div class="logo-tagline">
<img src='assets/img/app/logo-negative.svg' />
<p [ngClass]="{'primary-color': !isCopay, 'comment-color': isCopay}" translate>Take control of your money,
<br />get started with bitcoin.</p>
<p [ngClass]="{'primary-color': !isCopay, 'comment-color': isCopay}" translate>Take control of your money, get started with bitcoin.</p>
</div>
<div class="bottom-absolute">
<button ion-button class="button-standard" (click)="getStarted()" translate>Get started</button>
<button ion-button clear class="button-standard primary-color" (click)="restoreFromBackup()" translate>Restore from backup</button>
<button ion-button class="button-standard" (click)="getStarted()">
{{'Get started' | translate}}
</button>
<button ion-button clear class="button-standard primary-color" (click)="restoreFromBackup()">
{{'Restore from backup' | translate}}
</button>
</div>
</ion-content>
</ion-content>

View File

@ -2,8 +2,8 @@
<ion-navbar>
<ion-buttons end>
<button ion-button class="primary-color" (click)="createDefaultWallet()" *ngIf="currentIndex == 0" translate>
Skip
<button ion-button class="primary-color" (click)="createDefaultWallet()" *ngIf="currentIndex == 0">
{{'Skip' | translate}}
</button>
</ion-buttons>
</ion-navbar>
@ -13,13 +13,14 @@
<ion-content no-bounce>
<ion-slides pager="true" (ionSlideDidChange)="slideChanged()">
<ion-slide>
<h3 class="title" translate>Bitcoin is secure,
<br/>digital money.</h3>
<h3 class="title" translate>Bitcoin is secure, digital money.</h3>
<p translate class="top-description">You can spend bitcoin at millions of websites and stores worldwide.</p>
<img src='assets/img/app/onboarding/tour-phone.svg' />
<div class="bottom-absolute">
<p translate class="bottom-description">Just scan the code to pay.</p>
<button ion-button clear class="button-standard btn-transparent primary-color" (click)="slideNext()" translate>Got it</button>
<button ion-button clear class="button-standard btn-transparent primary-color" (click)="slideNext()">
{{'Got it' | translate}}
</button>
</div>
</ion-slide>
@ -32,8 +33,8 @@
<img src='assets/img/app/onboarding/tour-currency.svg' />
<div class="bottom-absolute">
<p translate class="bottom-description">The exchange rate changes with the market.</p>
<button ion-button clear class="button-standard btn-transparent primary-color" (click)="slideNext()" translate>
Makes sense
<button ion-button clear class="button-standard btn-transparent primary-color" (click)="slideNext()">
{{'Makes sense' | translate}}
</button>
</div>
</ion-slide>
@ -44,10 +45,10 @@
<img src='assets/img/app/onboarding/tour-control.svg' />
<div class="bottom-absolute">
<p translate class="bottom-description">Not even BitPay can access it.</p>
<button ion-button class="button-standard" (click)="createDefaultWallet()" translate>
Create bitcoin wallet
<button ion-button class="button-standard" (click)="createDefaultWallet()">
{{'Create bitcoin wallet' | translate}}
</button>
</div>
</ion-slide>
</ion-slides>
</ion-content>
</ion-content>

View File

@ -9,8 +9,8 @@
<span translate>No wallets available to receive funds</span>
</div>
<div *ngIf="!noMatchingWallet">
<h4 class="title" translate>
<span translate>Funds found: </span>
<h4 class="title">
<span translate>Funds found</span>:
<span *ngIf="balanceSat">{{balanceSat | satToUnit: wallet.coin}}</span>
<span *ngIf="!balanceSat">...</span>
</h4>
@ -29,6 +29,7 @@
</div>
</ion-content>
<ion-footer>
<button ion-button block class="button-footer" (click)="sweepWallet()" [disabled]="sending || balanceSat <= 0 || noMatchingWallet"
translate>Sweep</button>
</ion-footer>
<button ion-button block class="button-footer" (click)="sweepWallet()" [disabled]="sending || balanceSat <= 0 || noMatchingWallet">
{{'Sweep' | translate}}
</button>
</ion-footer>

View File

@ -2,8 +2,8 @@
<ion-navbar>
<ion-title>{{'Payment request' | translate}}</ion-title>
<ion-buttons start>
<button (click)="close()" ion-button translate>
Close
<button (click)="close()" ion-button>
{{'Close' | translate}}
</button>
</ion-buttons>
</ion-navbar>
@ -68,4 +68,4 @@
</ion-note>
</ion-item>
</ion-list>
</ion-content>
</ion-content>

View File

@ -2,8 +2,8 @@
<ion-navbar>
<ion-buttons start>
<button (click)="close()" ion-button translate>
Close
<button (click)="close()" ion-button>
{{'Close' | translate}}
</button>
</ion-buttons>
</ion-navbar>

View File

@ -18,7 +18,9 @@
<span translate>Funds received to a wallet cannot be retrieved if the wallet is not backed up.</span>
<a (click)="openWikiBackupNeeded()" translate>Learn more</a>
</div>
<button ion-button class="button-standard" (click)="goToBackup()" translate>Backup wallet</button>
<button ion-button class="button-standard" (click)="goToBackup()">
{{'Backup wallet' | translate}}
</button>
</div>
<div *ngIf="wallet && wallet.isComplete() && !wallet.needsBackup" class="qr-container">
@ -47,7 +49,9 @@
<div class="subtitle">
<span translate>All signing devices must be added to this multisig wallet before bitcoin addresses can be created.</span>
</div>
<button ion-button class="button-standard" (click)="goCopayers()" translate>Open wallet</button>
<button ion-button class="button-standard" (click)="goCopayers()">
{{'Open wallet' | translate}}
</button>
</div>
<div *ngIf="!wallet" class="no-wallet-message">
@ -77,8 +81,8 @@
+ (wallet.cachedBalanceUpdatedOn ? ' &middot; ' + ( wallet.cachedBalanceUpdatedOn * 1000 | amTimeAgo) : '') : '')}}
</span>
<span *ngIf="wallet.scanning" translate>Scanning funds</span>
<span *ngIf="wallet.balanceHidden && !wallet.scanning">[<span translate>Balance Hidden</span>]</span>
<span class="text-gray" *ngIf="wallet.credentials.m > 1">{{wallet.credentials.m}}-of-{{wallet.credentials.n}}</span>
<span *ngIf="wallet.balanceHidden && !wallet.scanning"><span translate>[Balance Hidden]</span></span>
<span class="text-gray" *ngIf="wallet.credentials.m > 1" translate>{{wallet.credentials.m}}-of-{{wallet.credentials.n}}</span>
<ion-icon *ngIf="!wallet.balanceHidden && wallet.status && (wallet.status.totalBalanceSat != wallet.status.spendableAmount)"
ios="ios-timer-outline" md="md-timer"></ion-icon>
<span *ngIf="wallet.error" class="wallet-warning">{{wallet.error}}</span>

View File

@ -24,12 +24,15 @@
<div *ngIf="currentState == scannerStates.unavailable" translate>Please connect a camera to get started.</div>
</div>
<div>
<button ion-button outline class="button-standard" *ngIf="currentState == scannerStates.unauthorized" (click)="authorize()"
translate>Allow Camera Access</button>
<button ion-button outline class="button-standard" *ngIf="currentState == scannerStates.denied && canOpenSettings" (click)="openSettings()"
translate>Open Settings</button>
<button ion-button outline class="button-standard" *ngIf="currentState == scannerStates.unavailable" (click)="attemptToReactivate()"
translate>Retry Camera</button>
<button ion-button outline class="button-standard" *ngIf="currentState == scannerStates.unauthorized" (click)="authorize()">
{{'Allow camera access' | translate}}
</button>
<button ion-button outline class="button-standard" *ngIf="currentState == scannerStates.denied && canOpenSettings" (click)="openSettings()">
{{'Open settings' | translate}}
</button>
<button ion-button outline class="button-standard" *ngIf="currentState == scannerStates.unavailable" (click)="attemptToReactivate()">
{{'Retry camera' | translate}}
</button>
</div>
</div>
</div>
@ -46,4 +49,4 @@
<div class="page-scan-has-problems not-supported-message" *ngIf="notSupportedMessage">
{{notSupportedMessage}}
</div>
</ion-content>
</ion-content>

View File

@ -1,9 +1,9 @@
<ion-header>
<ion-navbar hideBackButton="true">
<ion-title>{{'Bitcoin Network Fee Policy'|translate}}</ion-title>
<ion-title>{{'Fee level' | translate}}</ion-title>
<ion-buttons start>
<button [disabled]="customSatPerByte >= maxFeeAllowed || showError" (click)="ok()" ion-button translate>
Done
<button (click)="cancel()" icon-only ion-button>
<ion-icon name="close"></ion-icon>
</button>
</ion-buttons>
</ion-navbar>
@ -16,9 +16,9 @@
<ion-list [hidden]="!feeLevel">
<ion-item-divider></ion-item-divider>
<ion-item class="fee-level">
<ion-label>Fee level</ion-label>
<ion-label>{{'Fee level' | translate}}</ion-label>
<ion-select [(ngModel)]="selectedFee" (ionChange)="changeSelectedFee(selectedFee)">
<ion-option *ngFor="let fee of feeOpts" [value]="fee">{{ feeProvider.feeOpts[fee] }}</ion-option>
<ion-option *ngFor="let fee of feeOpts" [value]="fee">{{ feeProvider.feeOpts[fee] | translate }}</ion-option>
</ion-select>
</ion-item>
<ion-item-divider></ion-item-divider>
@ -51,8 +51,8 @@
<ion-list class="fee-custom" *ngIf="customFeePerKB">
<ion-item>
<ion-label color="primary" floating>Enter custom fee in sat/byte</ion-label>
<ion-input type="number" placeholder="{{'Enter custom fee'|translate}}" min="minFee" max="maxFee" (ionChange)="checkFees(customSatPerByte)"
<ion-label color="primary" floating>{{'Enter custom fee in sat/byte' | translate}}</ion-label>
<ion-input type="number" min="minFee" max="maxFee" (ionChange)="checkFees(customSatPerByte)"
[(ngModel)]="customSatPerByte" required></ion-input>
</ion-item>
<ion-item class="fee-error" *ngIf="showError">
@ -64,5 +64,9 @@
<span *ngIf="showMaxWarning" translate>You should not set a fee higher than {{maxFeeRecommended}} satoshis/byte.</span>
</ion-item>
</ion-list>
<button [disabled]="customSatPerByte >= maxFeeAllowed || showError" (click)="ok()" full class="button-standard" ion-button>
{{'Apply changes' | translate}}
</button>
</div>
</ion-content>

View File

@ -143,6 +143,10 @@ export class ChooseFeeLevelPage {
this.viewCtrl.dismiss({ newFeeLevel: this.feeLevel, customFeePerKB: this.customFeePerKB });
}
public cancel(): void {
this.viewCtrl.dismiss();
}
public changeSelectedFee(newFeeLevelValue: string): void {
if (this.feeLevel != newFeeLevelValue) {
this.logger.debug('New fee level: ' + newFeeLevelValue);

View File

@ -20,8 +20,8 @@
</div>
</ion-item>
<button ion-item class="item-fee" (click)="chooseFeeLevel()">
<div class="fee-title" translate>
Bitcoin miner fee: {{tx.feeLevelName | translate}}
<div class="fee-title">
<span translate>Bitcoin miner fee</span>: {{tx.feeLevelName | translate}}
</div>
<div class="fee-loading" *ngIf="!wallet || !tx.txp[wallet.id]">
<div>...</div>
@ -126,4 +126,4 @@
<ion-footer>
<button ion-button full class="button-footer" (click)="approve(tx, wallet)" [disabled]="!wallet || noWalletMessage || critialError || !tx.txp[wallet.id]">{{buttonText}}</button>
</ion-footer>
</ion-footer>

View File

@ -41,6 +41,7 @@ page-confirm {
font-weight: 400;
}
.fee-details {
margin-top: 3px;
font-size: 12.5px;
color: color($colors, light-grey);
}

View File

@ -694,6 +694,8 @@ export class ConfirmPage {
myModal.onDidDismiss((data: any) => {
if (_.isEmpty(data)) return;
this.logger.debug('New fee level choosen:' + data.newFeeLevel + ' was:' + this.tx.feeLevel);
this.usingCustomFee = data.newFeeLevel == 'custom' ? true : false;

View File

@ -5,9 +5,10 @@
<div class="modal-content">
<div class="modal-heading" translate>Bitcoin miner fees unusually high</div>
<div class="modal-message" translate>
Bitcoin (BTC) miner fees are high due to record demand for limited space on the Bitcoin network. BitPay does not receive
and does not control bitcoin miner fees.
Bitcoin (BTC) miner fees are high due to record demand for limited space on the Bitcoin network. BitPay does not receive and does not control bitcoin miner fees.
</div>
<button ion-button clear color="danger" class="button-standard" (click)="close()" translate>I understand</button>
<button ion-button clear color="danger" class="button-standard" (click)="close()">
{{'I understand' | translate}}
</button>
</div>
</ion-content>
</ion-content>

View File

@ -16,7 +16,7 @@
</ion-item>
<ion-item class="commit-hash" (click)="openExternalLink()">
<ion-icon class="custom-icon" name="logo-github" item-start></ion-icon>
{{'Commit hash' | translate}}
Commit hash
<ion-note item-end>
#{{commitHash}}
</ion-note>
@ -32,4 +32,4 @@
</button>
</ion-list>
</ion-content>
</ion-content>

View File

@ -30,7 +30,7 @@
<ion-footer>
<div class="filter-container">
<div class="labels">
<div *ngFor="let option of logOptions | keys" [ngClass]="{'info-label': option.value.weight==3}" translate>{{option.value.label}}</div>
<div *ngFor="let option of logOptions | keys" [ngClass]="{'info-label': option.value.weight==3}">{{option.value.label}}</div>
</div>
<ion-range min="1" max="4" step="1" snaps="true" color="secondary" [(ngModel)]="filterValue" (ionChange)="setOptionSelected(filterValue)"></ion-range>
</div>

View File

@ -32,6 +32,8 @@
</ion-item>
</form>
<button ion-button class="button-standard" (click)="save()" [disabled]="addressBookAdd.invalid || submitAttempt" translate>Save</button>
<button ion-button class="button-standard" (click)="save()" [disabled]="addressBookAdd.invalid || submitAttempt">
{{'Save' | translate}}
</button>
</ion-content>
</ion-content>

View File

@ -3,8 +3,8 @@
<ion-navbar>
<ion-title>{{ 'Address Book' | translate }}</ion-title>
<ion-buttons *ngIf="!isEmptyList" end>
<button ion-button (click)="addEntry()" translate>
Add
<button ion-button (click)="addEntry()">
{{'Add' | translate}}
</button>
</ion-buttons>
</ion-navbar>
@ -19,7 +19,9 @@
</ion-icon>
<div class="zero-state-heading" translate>No contacts yet</div>
<div class="zero-state-description" translate>Get started by adding your first one.</div>
<button ion-button class="button-standard" (click)="addEntry()" translate>Add Contact</button>
<button ion-button class="button-standard" (click)="addEntry()">
{{'Add Contact' | translate}}
</button>
</div>
<div *ngIf="!isEmptyList">
@ -34,4 +36,4 @@
</button>
</ion-list>
</div>
</ion-content>
</ion-content>

View File

@ -28,9 +28,13 @@
</div>
</ion-item>
<ion-item-divider></ion-item-divider>
<button ion-item class="btn-send" (click)="sendTo()" translate>Send Money</button>
<button ion-item class="btn-send" (click)="sendTo()">
{{'Send Money' | translate}}
</button>
<ion-item-divider></ion-item-divider>
<button ion-item class="btn-remove" (click)="remove(address)" translate>Remove</button>
<button ion-item class="btn-remove" (click)="remove(address)">
{{'Remove' | translate}}
</button>
<ion-item-divider></ion-item-divider>
</ion-list>
</ion-content>
</ion-content>

View File

@ -27,9 +27,9 @@
<ion-label>{{'Recent Transaction Card' | translate}}</ion-label>
<ion-toggle [(ngModel)]="recentTransactionsEnabled" (ionChange)="recentTransactionsChange()"></ion-toggle>
</div>
<span translate>If enabled, the Recent Transactions card - a list of transactions occuring across all wallets - will appear in the Home
tab.
<span translate>
If enabled, the Recent Transactions card - a list of transactions occuring across all wallets - will appear in the Home tab.
</span>
</div>
<ion-item-divider></ion-item-divider>
</ion-content>
</ion-content>

View File

@ -32,7 +32,9 @@
<span *ngIf="wallet.error" class="wallet-warning">{{wallet.error}}</span>
</div>
<ion-note item-end>
<button ion-button (click)="duplicate(wallet)" translate>Duplicate</button>
<button ion-button (click)="duplicate(wallet)">
{{'Duplicate' | translate}}
</button>
</ion-note>
</ion-item>
</ion-list>
@ -56,10 +58,10 @@
</ion-list>
<ion-item-divider text-wrap>
<span translate>Some of your wallets are not eligible for Bitcoin Cash support. You can try to access BCH funds from these wallets
using the
</span>
<a class="pointer" (click)="openRecoveryToolLink()" translate>recovery tool.</a>
<span translate>
Some of your wallets are not eligible for Bitcoin Cash support. You can try to access BCH funds from these wallets using the recovery tool
</span>.
<a (click)="openRecoveryToolLink()" translate>Click to open the recovery tool</a>.
</ion-item-divider>
</div>
</ion-content>
</ion-content>

View File

@ -16,8 +16,7 @@
</ion-item>
<ion-item-divider text-wrap>
<div translate>
Were always looking for translation contributions! You can make corrections or help to make this app available in your native
language by joining our community on Crowdin.
We are always looking for translation contributions! You can make corrections or help to make this app available in your native language by joining our community on Crowdin.
</div>
<div translate>
Don't see your language on Crowdin? Contact the Owner on Crowdin! We'd love to support your language.
@ -25,6 +24,8 @@
</ion-item-divider>
</ion-list>
<button ion-button class="button-standard" (click)="openExternalLink()" translate>Contribute Translations</button>
<button ion-button class="button-standard" (click)="openExternalLink()">
{{'Contribute translations' | translate}}
</button>
</ion-content>
</ion-content>

View File

@ -44,16 +44,16 @@
<form [formGroup]="emailForm">
<ion-item>
<ion-label stacked>{{ 'Email Address' | translate }}</ion-label>
<ion-label stacked>{{ 'Email' | translate }}</ion-label>
<ion-input formControlName="email" type="email"></ion-input>
</ion-item>
<div text-center>
<button ion-button class="button-standard" (click)="saveEmail()" [disabled]="emailForm.invalid" translate>
Save
<button ion-button class="button-standard" (click)="saveEmail()" [disabled]="emailForm.invalid">
{{'Save' | translate}}
</button>
</div>
</form>
</div>
</ion-list>
</ion-content>
</ion-content>

View File

@ -148,8 +148,7 @@
<img src="assets/img/icon-card.svg" class="icon-card" />
</ion-icon>
<div class="item-title">BitPay Visa&reg; Card ({{card.lastFourDigits}})</div>
<div class="item-subtitle">{{card.balance ? (card.balance | currency:card.currencySymbol:2) : 'Add funds to get started'|translate}} {{card.updatedOn
? (' &middot; ' + (card.updatedOn * 1000 | amTimeAgo)) : ''}}</div>
<div class="item-subtitle">{{card.balance ? (card.balance | currency:card.currencySymbol:2) : 'Add funds to get started'|translate}} {{card.updatedOn ? (' &middot; ' + (card.updatedOn * 1000 | amTimeAgo)) : ''}}</div>
</button>
</ion-list>
</div>
@ -188,4 +187,4 @@
</button>
<ion-item-divider></ion-item-divider>
</ion-list>
</ion-content>
</ion-content>

View File

@ -9,8 +9,8 @@
<ion-list>
<ion-item-divider text-wrap class="settings-explanation">
<div class="settings-heading" translate>What do you call this wallet?</div>
<div class="settings-description" translate>When this wallet was created, it was called &ldquo;{{walletName}}&rdquo;. You can change the name displayed on this
device below.
<div class="settings-description" translate>
When this wallet was created, it was called &ldquo;{{walletName}}&rdquo;. You can change the name displayed on this device below.
</div>
</ion-item-divider>
<form [formGroup]="walletNameForm">
@ -18,7 +18,9 @@
<ion-label stacked>{{'Name' | translate}}</ion-label>
<ion-input type="text" formControlName="walletName" [value]="walletNameForm.value.walletName" required></ion-input>
</ion-item>
<button ion-button class="button-standard" (click)="save()" [disabled]="!walletNameForm.valid" translate>Save</button>
<button ion-button class="button-standard" (click)="save()" [disabled]="!walletNameForm.valid">
{{'Save' | translate}}
</button>
</form>
</ion-list>
</ion-content>
</ion-content>

View File

@ -2,8 +2,8 @@
<ion-toolbar>
<ion-title>{{'All addresses' | translate}}</ion-title>
<ion-buttons start>
<button ion-button (click)="dismiss()" translate>
Close
<button ion-button (click)="dismiss()">
{{'Close' | translate}}
</button>
</ion-buttons>
</ion-toolbar>

View File

@ -7,25 +7,25 @@
<ion-content>
<page-wallet-item [wallet]="wallet"></page-wallet-item>
<ion-item-divider text-wrap text-center>
<span translate>Each bitcoin wallet can generate billions of addresses from your 12-word backup. A new address is automatically generated
and shown each time you receive a payment.
<span translate>
Each bitcoin wallet can generate billions of addresses from your 12-word backup. A new address is automatically generated and shown each time you receive a payment.
</span>
<a (click)="showInfo = !showInfo" *ngIf="!showInfo" translate>Why?</a>
<div *ngIf="showInfo">
<br>
<span translate>It's a good idea to avoid reusing addresses - this both protects your privacy and keeps your bitcoins secure against
hypothetical attacks by quantum computers.</span>
<span translate>
It's a good idea to avoid reusing addresses - this both protects your privacy and keeps your bitcoins secure against hypothetical attacks by quantum computers.</span>
<a (click)="showInfo = !showInfo" translate>Hide</a>
</div>
</ion-item-divider>
<button ion-item (click)="scan()" translate>
Scan addresses for funds
<button ion-item (click)="scan()">
{{'Scan addresses for funds' | translate}}
</button>
<button ion-item *ngIf="viewAll" (click)="viewAllAddresses()" translate>
View all addresses
<button ion-item *ngIf="viewAll" (click)="viewAllAddresses()">
{{'View all addresses' | translate}}
</button>
<div class="loading" *ngIf="loading">
@ -45,13 +45,11 @@
<div *ngIf="gapReached">
<h5 translate>Unused addresses limit</h5>
<p>
<span translate>The maximum number of consecutive unused addresses (20) has been reached. When one of your unused addresses receives
a payment, a new address will be generated and shown in your Receive tab.</span>&nbsp
<span translate>The maximum number of consecutive unused addresses (20) has been reached. When one of your unused addresses receives a payment, a new address will be generated and shown in your Receive tab.</span>
<a (click)="readMore()" *ngIf="!showMore" translate>Read more</a>
</p>
<p *ngIf="showMore">
<span translate>The restore process will stop when 20 addresses are generated in a row which contain no funds. To safely generate
more addresses, make a payment to one of the unused addresses which has already been generated.</span>&nbsp
<span translate>The restore process will stop when 20 addresses are generated in a row which contain no funds. To safely generate more addresses, make a payment to one of the unused addresses which has already been generated.</span>
<a (click)="readMore()" translate>Read less</a>
</p>
</div>
@ -85,9 +83,9 @@
</ion-item>
<ion-item text-wrap>
<span translate> Approximate Bitcoin network fee to transfer wallet's balance (with normal priority) </span>
<span translate>Approximate Bitcoin network fee to transfer wallet's balance (with normal priority)</span>
<p class="info">{{minFeePer}} [{{minFee}}]</p>
</ion-item>
</div>
</ion-list>
</ion-content>
</ion-content>

View File

@ -12,5 +12,7 @@
<p translate>
THIS ACTION CANNOT BE REVERSED
</p>
<button ion-button class="button-standard" color="danger" (click)="showDeletePopup()" translate>Delete</button>
</ion-content>
<button ion-button class="button-standard" color="danger" (click)="showDeletePopup()">
{{'Delete' | translate}}
</button>
</ion-content>

View File

@ -8,10 +8,10 @@
<div [attr.padding]="isIOS ? '' : null">
<ion-segment [(ngModel)]="segments">
<ion-segment-button value="file/text">
File/Text
{{'File/Text' | translate}}
</ion-segment-button>
<ion-segment-button value="qr-code" (click)="generateQrCode()">
QR Code
{{'QR Code' | translate}}
</ion-segment-button>
</ion-segment>
</div>
@ -44,19 +44,11 @@
<ion-item-divider *ngIf="!canSign || exportWalletForm.value.noSignEnabled" text-wrap>
<div class="warning" *ngIf="!canSign">
<ion-icon name="ios-warning-outline"></ion-icon>
<span translate>
WARNING: The private key of this wallet is not available. The export allows to check the wallet balance, transaction history,
and create spend proposals from the export. However, does not allow to approve (sign) proposals, so
<b>funds will not be accessible from the export</b>.
</span>
<span translate>WARNING: The private key of this wallet is not available. The export allows to check the wallet balance, transaction history, and create spend proposals from the export. However, does not allow to approve (sign) proposals, so funds will not be accessible from the export.</span>
</div>
<div class="warning" *ngIf="exportWalletForm.value.noSignEnabled">
<ion-icon name="ios-warning-outline"></ion-icon>
<span translate>
WARNING: Not including the private key allows to check the wallet balance, transaction history, and create spend proposals
from the export. However, does not allow to approve (sign) proposals, so
<b>funds will not be accessible from the export</b>.
</span>
<span translate>WARNING: Not including the private key allows to check the wallet balance, transaction history, and create spend proposals from the export. However, does not allow to approve (sign) proposals, so funds will not be accessible from the export.</span>
</div>
</ion-item-divider>
<button *ngIf="!isSafari && !isCordova" class="button-standard" ion-button type="submit" (click)="downloadWalletBackup()"
@ -86,4 +78,4 @@
</div>
</ion-list>
</div>
</ion-content>
</ion-content>

View File

@ -9,14 +9,13 @@
<h1 class="assertive" translate>Warning!</h1>
<div class="warning-message">
<p translate>
Your extended private keys are all that is needed to access your bitcoin funds. Be sure to protect your private keys and
store them only on secure devices. BitPay does not have access to your private keys, so you alone are responsible
for your keys. If you share key access with external services, you take responsibility for the risk of theft or breach.
Only advanced users should handle extended private keys directly.
Your extended private keys are all that is needed to access your bitcoin funds. Be sure to protect your private keys and store them only on secure devices. BitPay does not have access to your private keys, so you alone are responsible for your keys. If you share key access with external services, you take responsibility for the risk of theft or breach. Only advanced users should handle extended private keys directly.
</p>
</div>
<div copy-to-clipboard="{{xPrivKey}}">
<button ion-button class="button-standard" translate>Copy to clipboard</button>
<button ion-button class="button-standard">
{{'Copy to clipboard' | translate}}
</button>
</div>
</div>
</ion-content>
</ion-content>

View File

@ -7,7 +7,7 @@
<page-wallet-item *ngIf="wallet" [wallet]="wallet"></page-wallet-item>
<ion-list>
<ion-item (click)="saveBlack()">
<span translate>Wallet Name (at creation)</span>
<span translate>Name (at creation)</span>
<ion-note item-end>
{{walletName}}
</ion-note>
@ -19,7 +19,7 @@
</ion-note>
</ion-item>
<ion-item copy-to-clipboard="{{walletId}}">
<span translate>Wallet Id</span>
<span>Wallet Id</span>
<div padding-top>
<ion-note text-wrap>
{{walletId}}
@ -27,13 +27,13 @@
</div>
</ion-item>
<ion-item>
<span translate>Wallet Configuration (m-n)</span>
<span translate>Configuration (m-n)</span>
<ion-note item-end>
{{M}}-{{N}}
</ion-note>
</ion-item>
<ion-item>
<span translate>Wallet Network</span>
<span translate>Network</span>
<ion-note item-end>
{{network}}
</ion-note>
@ -71,7 +71,7 @@
</ion-item>
<ion-item-divider>{{'Extended Public Keys' | translate}}</ion-item-divider>
<ion-item *ngFor="let pk of pubKeys; let i=index" copy-to-clipboard="{{pk}}">
<span translate>Copayer {{i}}</span>
<span>Copayer {{i}}</span>
<div padding-top>
<ion-note text-wrap>
{{pk}}
@ -94,4 +94,4 @@
</ion-item>
<ion-item-divider></ion-item-divider>
</ion-list>
</ion-content>
</ion-content>

View File

@ -1,6 +1,6 @@
<ion-header>
<ion-navbar>
<ion-title>{{'Wallet Service URL' | translate}}</ion-title>
<ion-title>Wallet Service URL</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
@ -8,17 +8,18 @@
<ion-list>
<form [formGroup]="walletServiceForm">
<ion-item>
<ion-label stacked>{{'Wallet Service URL' | translate}}</ion-label>
<ion-label stacked>Wallet Service URL</ion-label>
<ion-input type="text" formControlName="bwsurl" [value]="walletServiceForm.value.bwsurl" required></ion-input>
</ion-item>
<ion-item-divider text-wrap>
<span translate>{{appName}} depends on Bitcore Wallet Service (BWS) for blockchain information, networking and Copayer synchronization.
The default configuration points to https://bws.bitpay.com (BitPay's public BWS instance).</span>
<span translate>{{appName}} depends on Bitcore Wallet Service (BWS) for blockchain information, networking and Copayer synchronization. The default configuration points to https://bws.bitpay.com (BitPay's public BWS instance).</span>
<a (click)="resetDefaultUrl()" translate>
Use default url
</a>
</ion-item-divider>
<button ion-button class="button-standard" (click)="save()" [disabled]="!walletServiceForm.valid" translate>Save</button>
<button ion-button class="button-standard" (click)="save()" [disabled]="!walletServiceForm.valid">
{{'Save' | translate}}
</button>
</form>
</ion-list>
</ion-content>
</ion-content>

Some files were not shown because too many files have changed in this diff Show More