CWA-215 | applied new design to address book page

Oleksandr Sobol committed May 19, 2020 at 20:47 UTC 3f1bb416d453f0e43436e18d2ff807677c4cc537
17 files changed +179 -109
assets/images/2.0x/litecoin.png
Binary files /dev/null and b/assets/images/2.0x/litecoin.png differ
assets/images/3.0x/litecoin.png
Binary files /dev/null and b/assets/images/3.0x/litecoin.png differ
assets/images/litecoin.png
Binary files /dev/null and b/assets/images/litecoin.png differ
lib/generated/i18n.dart
+46
@@ -29,6 +29,8 @@ class S implements WidgetsLocalizations {
29 String get add_new_word => "Add new word";
30 String get address_book => "Address Book";
31 String get address_book_menu => "Address book";
32 + String get address_remove_contact => "Remove contact";
33 + String get address_remove_content => "Are you sure that you want to remove selected contact?";
34 String get all => "ALL";
35 String get amount => "Amount: ";
36 String get amount_is_estimate => "The receive amount is an estimate";
@@ -766,6 +768,8 @@ class $de extends S {
768 @override
769 String get trade_history_title => "Handelsgeschichte";
770 @override
771 + String get address_remove_contact => "Kontakt entfernen";
772 + @override
773 String get error_text_wallet_name => "Der Wallet darf nur Buchstaben und Zahlen enthalten\nund muss zwischen 1 und 15 Zeichen lang sein";
774 @override
775 String get restore_description_from_keys => "Stellen Sie Ihr Wallet von generiert wieder her Tastenanschläge, die von Ihren privaten Schlüsseln gespeichert wurden";
@@ -836,6 +840,8 @@ class $de extends S {
840 @override
841 String get ok => "OK";
842 @override
843 + String get address_remove_content => "Sind Sie sicher, dass Sie den ausgewählten Kontakt entfernen möchten?";
844 + @override
845 String get wallet_list_title => "Monero Wallet";
846 @override
847 String get authentication => "Authentifizierung";
@@ -1378,6 +1384,8 @@ class $hi extends S {
1384 @override
1385 String get trade_history_title => "व्यापार का इतिहास";
1386 @override
1387 + String get address_remove_contact => "संपर्क हटाये";
1388 + @override
1389 String get error_text_wallet_name => "वॉलेट नाम में केवल अक्षर, संख्याएं हो सकती हैं\nऔर 1 और 15 वर्णों के बीच लंबा होना चाहिए";
1390 @override
1391 String get restore_description_from_keys => "अपने वॉलेट को जेनरेट से पुनर्स्थापित करें आपकी निजी कुंजी से कीस्ट्रोक्स सहेजे गए";
@@ -1448,6 +1456,8 @@ class $hi extends S {
1456 @override
1457 String get ok => "ठीक है";
1458 @override
1459 + String get address_remove_content => "क्या आप वाकई चयनित संपर्क को हटाना चाहते हैं?";
1460 + @override
1461 String get wallet_list_title => "Monero बटुआ";
1462 @override
1463 String get authentication => "प्रमाणीकरण";
@@ -1990,6 +2000,8 @@ class $ru extends S {
2000 @override
2001 String get trade_history_title => "История сделок";
2002 @override
2003 + String get address_remove_contact => "Удалить контакт";
2004 + @override
2005 String get error_text_wallet_name => "Имя кошелька может содержать только буквы, цифры\nи должно быть от 1 до 15 символов в длину";
2006 @override
2007 String get restore_description_from_keys => "Вы можете восстановить кошелёк с помощью приватных ключей";
@@ -2060,6 +2072,8 @@ class $ru extends S {
2072 @override
2073 String get ok => "OK";
2074 @override
2075 + String get address_remove_content => "Вы уверены, что хотите удалить выбранный контакт?";
2076 + @override
2077 String get wallet_list_title => "Monero Кошелёк";
2078 @override
2079 String get authentication => "Аутентификация";
@@ -2602,6 +2616,8 @@ class $ko extends S {
2616 @override
2617 String get trade_history_title => "무역 역사";
2618 @override
2619 + String get address_remove_contact => "연락처 삭제";
2620 + @override
2621 String get error_text_wallet_name => "지갑 이름은 문자, 숫자 만 포함 할 수 있습니다\n1 ~ 15 자 사이 여야합니다";
2622 @override
2623 String get restore_description_from_keys => "개인 키에서 저장된 생성 된 키 스트로크에서 월렛 복원";
@@ -2672,6 +2688,8 @@ class $ko extends S {
2688 @override
2689 String get ok => "승인";
2690 @override
2691 + String get address_remove_content => "선택한 연락처를 삭제 하시겠습니까?";
2692 + @override
2693 String get wallet_list_title => "모네로 월렛";
2694 @override
2695 String get authentication => "입증";
@@ -3214,6 +3232,8 @@ class $pt extends S {
3232 @override
3233 String get trade_history_title => "Histórico de trocas";
3234 @override
3235 + String get address_remove_contact => "Remover contato";
3236 + @override
3237 String get error_text_wallet_name => "O nome da carteira só pode conter letras, números\ne deve ter entre 1 e 15 caracteres";
3238 @override
3239 String get restore_description_from_keys => "Restaure sua carteira a partir de suas chaves privadas";
@@ -3284,6 +3304,8 @@ class $pt extends S {
3304 @override
3305 String get ok => "Ok";
3306 @override
3307 + String get address_remove_content => "Tem certeza de que deseja remover o contato selecionado?";
3308 + @override
3309 String get wallet_list_title => "Carteira Monero";
3310 @override
3311 String get authentication => "Autenticação";
@@ -3826,6 +3848,8 @@ class $uk extends S {
3848 @override
3849 String get trade_history_title => "Історія операцій";
3850 @override
3851 + String get address_remove_contact => "Видалити контакт";
3852 + @override
3853 String get error_text_wallet_name => "Ім'я гаманця може містити тільки букви, цифри\nі повинно бути від 1 до 15 символів в довжину";
3854 @override
3855 String get restore_description_from_keys => "Ви можете відновити гаманець за допомогою приватних ключів";
@@ -3896,6 +3920,8 @@ class $uk extends S {
3920 @override
3921 String get ok => "OK";
3922 @override
3923 + String get address_remove_content => "Ви впевнені, що хочете видалити вибраний контакт?";
3924 + @override
3925 String get wallet_list_title => "Monero Гаманець";
3926 @override
3927 String get authentication => "Аутентифікація";
@@ -4438,6 +4464,8 @@ class $ja extends S {
4464 @override
4465 String get trade_history_title => "取引履歴";
4466 @override
4467 + String get address_remove_contact => "連絡先を削除します";
4468 + @override
4469 String get error_text_wallet_name => "ウォレット名には文字のみを含めることができます\n1〜15文字である必要があります";
4470 @override
4471 String get restore_description_from_keys => "生成されたウォレットを復元します秘密鍵から保存されたキーストローク";
@@ -4508,6 +4536,8 @@ class $ja extends S {
4536 @override
4537 String get ok => "OK";
4538 @override
4539 + String get address_remove_content => "選択した連絡先を削除してもよろしいですか?";
4540 + @override
4541 String get wallet_list_title => "Monero 財布";
4542 @override
4543 String get authentication => "認証";
@@ -5054,6 +5084,8 @@ class $pl extends S {
5084 @override
5085 String get trade_history_title => "Historia handlu";
5086 @override
5087 + String get address_remove_contact => "Usuń kontakt";
5088 + @override
5089 String get error_text_wallet_name => "Nazwa portfela może zawierać tylko litery i cyfry\ni musi mieć od 1 do 15 znaków";
5090 @override
5091 String get restore_description_from_keys => "Przywróć swój portfel z wygenerowanego naciśnięcia klawiszy zapisane z kluczy prywatnych";
@@ -5124,6 +5156,8 @@ class $pl extends S {
5156 @override
5157 String get ok => "Dobrze";
5158 @override
5159 + String get address_remove_content => "Czy na pewno chcesz usunąć wybrany kontakt?";
5160 + @override
5161 String get wallet_list_title => "Portfel Monero";
5162 @override
5163 String get authentication => "Poświadczenie";
@@ -5666,6 +5700,8 @@ class $es extends S {
5700 @override
5701 String get trade_history_title => "Historia del comercio";
5702 @override
5703 + String get address_remove_contact => "Remover contacto";
5704 + @override
5705 String get error_text_wallet_name => "El nombre de la billetera solo puede contener letras, números \ny debe tener entre 1 y 15 caracteres de longitud";
5706 @override
5707 String get restore_description_from_keys => "Restaure su billetera de las pulsaciones de teclas generadas guardadas de sus claves privadas";
@@ -5736,6 +5772,8 @@ class $es extends S {
5772 @override
5773 String get ok => "OK";
5774 @override
5775 + String get address_remove_content => "¿Estás seguro de que quieres eliminar el contacto seleccionado?";
5776 + @override
5777 String get wallet_list_title => "Monedero Monero";
5778 @override
5779 String get authentication => "Autenticación";
@@ -6278,6 +6316,8 @@ class $nl extends S {
6316 @override
6317 String get trade_history_title => "Handelsgeschiedenis";
6318 @override
6319 + String get address_remove_contact => "Contact verwijderen";
6320 + @override
6321 String get error_text_wallet_name => "Naam portemonnee kan alleen letters, cijfers bevatten\nen moet tussen de 1 en 15 tekens lang zijn";
6322 @override
6323 String get restore_description_from_keys => "Herstel uw portemonnee van gegenereerd toetsaanslagen opgeslagen van uw privésleutels";
@@ -6348,6 +6388,8 @@ class $nl extends S {
6388 @override
6389 String get ok => "OK";
6390 @override
6391 + String get address_remove_content => "Weet u zeker dat u het geselecteerde contact wilt verwijderen?";
6392 + @override
6393 String get wallet_list_title => "Monero portemonnee";
6394 @override
6395 String get authentication => "Authenticatie";
@@ -6890,6 +6932,8 @@ class $zh extends S {
6932 @override
6933 String get trade_history_title => "交易历史";
6934 @override
6935 + String get address_remove_contact => "刪除聯繫人";
6936 + @override
6937 String get error_text_wallet_name => "钱包名称只能包含字母,数字\n且必须介于1到15个字符之间";
6938 @override
6939 String get restore_description_from_keys => "R从生成的电子钱包从您的私钥中保存的击键";
@@ -6960,6 +7004,8 @@ class $zh extends S {
7004 @override
7005 String get ok => "好";
7006 @override
7007 + String get address_remove_content => "您確定要刪除所選的聯繫人嗎?";
7008 + @override
7009 String get wallet_list_title => "Monero 钱包";
7010 @override
7011 String get authentication => "认证方式";
lib/src/screens/address_book/address_book_page.dart
+109 -109
@@ -10,6 +10,7 @@ import 'package:cake_wallet/generated/i18n.dart';
10 import 'package:cake_wallet/src/domain/common/crypto_currency.dart';
11 import 'package:cake_wallet/src/stores/address_book/address_book_store.dart';
12 import 'package:cake_wallet/src/screens/base_page.dart';
13 +import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
14
15 class AddressBookPage extends BasePage {
16 AddressBookPage({this.isEditable = true});
@@ -17,14 +18,11 @@ class AddressBookPage extends BasePage {
18 final bool isEditable;
19
20 @override
20 - bool get isModalBackButton => true;
21 + Color get backgroundColor => PaletteDark.historyPanel;
22
23 @override
24 String get title => S.current.address_book;
25
25 - @override
26 - AppBarStyle get appBarStyle => AppBarStyle.withShadow;
27 -
26 @override
27 Widget trailing(BuildContext context) {
28 if (!isEditable) {
@@ -34,17 +32,17 @@ class AddressBookPage extends BasePage {
32 final addressBookStore = Provider.of<AddressBookStore>(context);
33
34 return Container(
37 - width: 28.0,
38 - height: 28.0,
35 + width: 32.0,
36 + height: 32.0,
37 decoration: BoxDecoration(
40 - shape: BoxShape.circle, color: Theme.of(context).selectedRowColor),
38 + shape: BoxShape.circle, color: PaletteDark.menuList),
39 child: Stack(
40 alignment: Alignment.center,
41 children: <Widget>[
44 - Icon(Icons.add, color: Palette.violet, size: 22.0),
42 + Icon(Icons.add, color: Colors.white, size: 22.0),
43 ButtonTheme(
46 - minWidth: 28.0,
47 - height: 28.0,
44 + minWidth: 32.0,
45 + height: 32.0,
46 child: FlatButton(
47 shape: CircleBorder(),
48 onPressed: () async {
@@ -63,20 +61,30 @@ class AddressBookPage extends BasePage {
61 final addressBookStore = Provider.of<AddressBookStore>(context);
62
63 return Container(
64 + color: PaletteDark.historyPanel,
65 padding: EdgeInsets.only(top: 20.0, bottom: 20.0),
66 child: Observer(
67 builder: (_) => ListView.separated(
69 - separatorBuilder: (_, __) => Divider(
70 - color: Theme.of(context).dividerTheme.color,
71 - height: 1.0,
72 - ),
68 + separatorBuilder: (_, __) => Container(
69 + height: 1,
70 + padding: EdgeInsets.only(left: 24),
71 + color: PaletteDark.menuList,
72 + child: Container(
73 + height: 1,
74 + color: PaletteDark.mainBackgroundColor,
75 + ),
76 + ),
77 itemCount: addressBookStore.contactList == null
78 ? 0
79 : addressBookStore.contactList.length,
80 itemBuilder: (BuildContext context, int index) {
81 final contact = addressBookStore.contactList[index];
82 + final image = _getCurrencyImage(contact.type);
83
79 - final content = ListTile(
84 + final isDrawTop = index == 0 ? true : false;
85 + final isDrawBottom = index == addressBookStore.contactList.length - 1 ? true : false;
86 +
87 + final content = GestureDetector(
88 onTap: () async {
89 if (!isEditable) {
90 Navigator.of(context).pop(contact);
@@ -86,39 +94,69 @@ class AddressBookPage extends BasePage {
94 final isCopied = await showNameAndAddressDialog(
95 context, contact.name, contact.address);
96
89 - if (isCopied) {
97 + if (isCopied != null && isCopied) {
98 await Clipboard.setData(
99 ClipboardData(text: contact.address));
100 Scaffold.of(context).showSnackBar(
101 SnackBar(
94 - content: Text('Copied to Clipboard'),
102 + content: Text(
103 + S.of(context).copied_to_clipboard,
104 + style: TextStyle(
105 + color: Colors.white
106 + ),
107 + ),
108 backgroundColor: Colors.green,
109 duration: Duration(milliseconds: 1500),
110 ),
111 );
112 }
113 },
101 - leading: Container(
102 - height: 25.0,
103 - width: 48.0,
104 - alignment: Alignment.center,
105 - decoration: BoxDecoration(
106 - color: _getCurrencyBackgroundColor(contact.type),
107 - borderRadius: BorderRadius.circular(6.0),
108 - ),
109 - child: Text(
110 - contact.type.toString(),
111 - style: TextStyle(
112 - fontSize: 11.0,
113 - color: _getCurrencyTextColor(contact.type),
114 + child: Column(
115 + children: <Widget>[
116 + isDrawTop
117 + ? Container(
118 + width: double.infinity,
119 + height: 1,
120 + color: PaletteDark.mainBackgroundColor,
121 + )
122 + : Offstage(),
123 + Container(
124 + width: double.infinity,
125 + color: PaletteDark.menuList,
126 + child: Padding(
127 + padding: const EdgeInsets.only(left: 24, top: 16, bottom: 16, right: 24),
128 + child: Row(
129 + mainAxisSize: MainAxisSize.min,
130 + mainAxisAlignment: MainAxisAlignment.start,
131 + crossAxisAlignment: CrossAxisAlignment.center,
132 + children: <Widget>[
133 + image != null
134 + ? image
135 + : Offstage(),
136 + Padding(
137 + padding: image != null
138 + ? EdgeInsets.only(left: 12)
139 + : EdgeInsets.only(left: 0),
140 + child: Text(
141 + contact.name,
142 + style: TextStyle(
143 + fontSize: 14,
144 + color: Colors.white
145 + ),
146 + ),
147 + )
148 + ],
149 + )
150 + ),
151 ),
115 - ),
116 - ),
117 - title: Text(
118 - contact.name,
119 - style: TextStyle(
120 - fontSize: 16.0,
121 - color: Theme.of(context).primaryTextTheme.title.color),
152 + isDrawBottom
153 + ? Container(
154 + width: double.infinity,
155 + height: 1,
156 + color: PaletteDark.mainBackgroundColor,
157 + )
158 + : Offstage(),
159 + ],
160 ),
161 );
162
@@ -130,7 +168,7 @@ class AddressBookPage extends BasePage {
168 child: content,
169 secondaryActions: <Widget>[
170 IconSlideAction(
133 - caption: 'Edit',
171 + caption: S.of(context).edit,
172 color: Colors.blue,
173 icon: Icons.edit,
174 onTap: () async {
@@ -141,7 +179,7 @@ class AddressBookPage extends BasePage {
179 },
180 ),
181 IconSlideAction(
144 - caption: 'Delete',
182 + caption: S.of(context).delete,
183 color: Colors.red,
184 icon: CupertinoIcons.delete,
185 onTap: () async {
@@ -171,95 +209,68 @@ class AddressBookPage extends BasePage {
209 ));
210 }
211
174 - Color _getCurrencyBackgroundColor(CryptoCurrency currency) {
175 - Color color;
212 + Image _getCurrencyImage(CryptoCurrency currency) {
213 + Image image;
214 switch (currency) {
215 case CryptoCurrency.xmr:
178 - color = Palette.cakeGreenWithOpacity;
216 + image = Image.asset('assets/images/monero.png', height: 24, width: 24);
217 break;
218 case CryptoCurrency.ada:
181 - color = Colors.blue[200];
219 + image = null;
220 break;
221 case CryptoCurrency.bch:
184 - color = Colors.orangeAccent;
222 + image = null;
223 break;
224 case CryptoCurrency.bnb:
187 - color = Colors.blue;
225 + image = null;
226 break;
227 case CryptoCurrency.btc:
190 - color = Colors.orange;
228 + image = Image.asset('assets/images/bitcoin.png', height: 24, width: 24);
229 break;
230 case CryptoCurrency.dash:
193 - color = Colors.blue;
231 + image = null;
232 break;
233 case CryptoCurrency.eos:
196 - color = Colors.orangeAccent;
234 + image = null;
235 break;
236 case CryptoCurrency.eth:
199 - color = Colors.black;
237 + image = null;
238 break;
239 case CryptoCurrency.ltc:
202 - color = Colors.blue[200];
240 + image = Image.asset('assets/images/litecoin.png', height: 24, width: 24);
241 break;
242 case CryptoCurrency.nano:
205 - color = Colors.orange;
243 + image = null;
244 break;
245 case CryptoCurrency.trx:
208 - color = Colors.black;
246 + image = null;
247 break;
248 case CryptoCurrency.usdt:
211 - color = Colors.blue[200];
249 + image = null;
250 break;
251 case CryptoCurrency.xlm:
214 - color = color = Colors.blue;
252 + image = null;
253 break;
254 case CryptoCurrency.xrp:
217 - color = Colors.orangeAccent;
218 - break;
219 - default:
220 - color = Colors.white;
221 - }
222 - return color;
223 - }
224 -
225 - Color _getCurrencyTextColor(CryptoCurrency currency) {
226 - Color color;
227 - switch (currency) {
228 - case CryptoCurrency.xmr:
229 - color = Palette.cakeGreen;
230 - break;
231 - case CryptoCurrency.ltc:
232 - case CryptoCurrency.ada:
233 - case CryptoCurrency.usdt:
234 - color = Palette.lightBlue;
255 + image = null;
256 break;
257 default:
237 - color = Colors.white;
258 + image = null;
259 }
239 - return color;
260 + return image;
261 }
262
263 Future<bool> showAlertDialog(BuildContext context) async {
264 return await showDialog(
265 context: context,
266 builder: (BuildContext context) {
246 - return AlertDialog(
247 - title: const Text(
248 - 'Remove contact',
249 - textAlign: TextAlign.center,
250 - ),
251 - content: const Text(
252 - 'Are you sure that you want to remove selected contact?',
253 - textAlign: TextAlign.center,
254 - ),
255 - actions: <Widget>[
256 - FlatButton(
257 - onPressed: () => Navigator.of(context).pop( false),
258 - child: const Text('Cancel')),
259 - FlatButton(
260 - onPressed: () => Navigator.of(context).pop(true),
261 - child: const Text('Remove')),
262 - ],
267 + return AlertWithTwoActions(
268 + alertTitle: S.of(context).address_remove_contact,
269 + alertContent: S.of(context).address_remove_content,
270 + leftButtonText: S.of(context).remove,
271 + rightButtonText: S.of(context).cancel,
272 + actionLeftButton: () => Navigator.of(context).pop(true),
273 + actionRightButton: () => Navigator.of(context).pop(false)
274 );
275 });
276 }
@@ -269,24 +280,13 @@ class AddressBookPage extends BasePage {
280 return await showDialog(
281 context: context,
282 builder: (BuildContext context) {
272 - return AlertDialog(
273 - title: Text(
274 - name,
275 - textAlign: TextAlign.center,
276 - style: TextStyle(fontWeight: FontWeight.bold),
277 - ),
278 - content: Text(
279 - address,
280 - textAlign: TextAlign.center,
281 - ),
282 - actions: <Widget>[
283 - FlatButton(
284 - onPressed: () => Navigator.of(context).pop(false),
285 - child: Text('Cancel')),
286 - FlatButton(
287 - onPressed: () => Navigator.of(context).pop(true),
288 - child: Text('Copy'))
289 - ],
283 + return AlertWithTwoActions(
284 + alertTitle: name,
285 + alertContent: address,
286 + leftButtonText: S.of(context).copy,
287 + rightButtonText: S.of(context).cancel,
288 + actionLeftButton: () => Navigator.of(context).pop(true),
289 + actionRightButton: () => Navigator.of(context).pop(false)
290 );
291 });
292 }
res/values/strings_de.arb
+2
@@ -21,6 +21,8 @@
21 "contact_name" : "Name des Ansprechpartners",
22 "reset" : "Zurücksetzen",
23 "save" : "speichern",
24 + "address_remove_contact" : "Kontakt entfernen",
25 + "address_remove_content" : "Sind Sie sicher, dass Sie den ausgewählten Kontakt entfernen möchten?",
26
27
28 "authenticated" : "Authentifiziert",
res/values/strings_en.arb
+2
@@ -21,6 +21,8 @@
21 "contact_name" : "Contact Name",
22 "reset" : "Reset",
23 "save" : "Save",
24 + "address_remove_contact" : "Remove contact",
25 + "address_remove_content" : "Are you sure that you want to remove selected contact?",
26
27
28 "authenticated" : "Authenticated",
res/values/strings_es.arb
+2
@@ -21,6 +21,8 @@
21 "contact_name" : "Nombre de contacto",
22 "reset" : "Reiniciar",
23 "save" : "Salvar",
24 + "address_remove_contact" : "Remover contacto",
25 + "address_remove_content" : "¿Estás seguro de que quieres eliminar el contacto seleccionado?",
26
27
28 "authenticated" : "Autenticados",
res/values/strings_hi.arb
+2
@@ -21,6 +21,8 @@
21 "contact_name" : "संपर्क नाम",
22 "reset" : "रीसेट",
23 "save" : "बचाना",
24 + "address_remove_contact" : "संपर्क हटाये",
25 + "address_remove_content" : "क्या आप वाकई चयनित संपर्क को हटाना चाहते हैं?",
26
27
28 "authenticated" : "प्रमाणीकृत",
res/values/strings_ja.arb
+2
@@ -21,6 +21,8 @@
21 "contact_name" : "連絡先",
22 "reset" : "リセットする",
23 "save" : "セーブ",
24 + "address_remove_contact" : "連絡先を削除します",
25 + "address_remove_content" : "選択した連絡先を削除してもよろしいですか?",
26
27
28 "authenticated" : "認証済み",
res/values/strings_ko.arb
+2
@@ -21,6 +21,8 @@
21 "contact_name" : "담당자 이름",
22 "reset" : "다시 놓기",
23 "save" : "구하다",
24 + "address_remove_contact" : "연락처 삭제",
25 + "address_remove_content" : "선택한 연락처를 삭제 하시겠습니까?",
26
27
28 "authenticated" : "인증",
res/values/strings_nl.arb
+2
@@ -21,6 +21,8 @@
21 "contact_name" : "Contactnaam",
22 "reset" : "Reset",
23 "save" : "Opslaan",
24 + "address_remove_contact" : "Contact verwijderen",
25 + "address_remove_content" : "Weet u zeker dat u het geselecteerde contact wilt verwijderen?",
26
27
28 "authenticated" : "Authenticated",
res/values/strings_pl.arb
+2
@@ -21,6 +21,8 @@
21 "contact_name" : "Nazwa Kontaktu",
22 "reset" : "Nastawić",
23 "save" : "Zapisać",
24 + "address_remove_contact" : "Usuń kontakt",
25 + "address_remove_content" : "Czy na pewno chcesz usunąć wybrany kontakt?",
26
27
28 "authenticated" : "Zalegalizowany",
res/values/strings_pt.arb
+2
@@ -21,6 +21,8 @@
21 "contact_name" : "Nome do contato",
22 "reset" : "Limpar",
23 "save" : "Salvar",
24 + "address_remove_contact" : "Remover contato",
25 + "address_remove_content" : "Tem certeza de que deseja remover o contato selecionado?",
26
27
28 "authenticated" : "Autenticado",
res/values/strings_ru.arb
+2
@@ -21,6 +21,8 @@
21 "contact_name" : "Имя контакта",
22 "reset" : "Сброс",
23 "save" : "Сохранить",
24 + "address_remove_contact" : "Удалить контакт",
25 + "address_remove_content" : "Вы уверены, что хотите удалить выбранный контакт?",
26
27
28 "authenticated" : "Аутентифицировано",
res/values/strings_uk.arb
+2
@@ -21,6 +21,8 @@
21 "contact_name" : "Ім'я контакту",
22 "reset" : "Скинути",
23 "save" : "Зберегти",
24 + "address_remove_contact" : "Видалити контакт",
25 + "address_remove_content" : "Ви впевнені, що хочете видалити вибраний контакт?",
26
27
28 "authenticated" : "Аутентифіковано",
res/values/strings_zh.arb
+2
@@ -21,6 +21,8 @@
21 "contact_name" : "联系人姓名",
22 "reset" : "重启",
23 "save" : "保存",
24 + "address_remove_contact" : "刪除聯繫人",
25 + "address_remove_content" : "您確定要刪除所選的聯繫人嗎?",
26
27
28 "authenticated" : "已认证",