diff --git a/dist/3rdpartylicenses.txt b/dist/3rdpartylicenses.txt deleted file mode 100644 index 49e1d3d..0000000 --- a/dist/3rdpartylicenses.txt +++ /dev/null @@ -1,355 +0,0 @@ - --------------------------------------------------------------------------------- -Package: @angular/forms -License: "MIT" - -The MIT License - -Copyright (c) 2010-2026 Google LLC. https://angular.dev/license - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - --------------------------------------------------------------------------------- -Package: @angular/core -License: "MIT" - -The MIT License - -Copyright (c) 2010-2026 Google LLC. https://angular.dev/license - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - --------------------------------------------------------------------------------- -Package: rxjs -License: "Apache-2.0" - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright (c) 2015-2018 Google, Inc., Netflix, Inc., Microsoft Corp. and contributors - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - --------------------------------------------------------------------------------- -Package: tslib -License: "0BSD" - -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. --------------------------------------------------------------------------------- -Package: @angular/common -License: "MIT" - -The MIT License - -Copyright (c) 2010-2026 Google LLC. https://angular.dev/license - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - --------------------------------------------------------------------------------- -Package: @angular/platform-browser -License: "MIT" - -The MIT License - -Copyright (c) 2010-2026 Google LLC. https://angular.dev/license - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - --------------------------------------------------------------------------------- -Package: @angular/router -License: "MIT" - -The MIT License - -Copyright (c) 2010-2026 Google LLC. https://angular.dev/license - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - --------------------------------------------------------------------------------- diff --git a/dist/favicon.ico b/dist/favicon.ico index 1843a99..9bc1c9b 100644 Binary files a/dist/favicon.ico and b/dist/favicon.ico differ diff --git a/dist/index.html b/dist/index.html index 18ea6e6..a357bf6 100644 --- a/dist/index.html +++ b/dist/index.html @@ -1,17 +1,18 @@ - + - Оплата через СБП + fastCHECK - + - - + + + - + diff --git a/dist/styles-4STSJS4C.css b/dist/styles-4STSJS4C.css deleted file mode 100644 index 37fe311..0000000 --- a/dist/styles-4STSJS4C.css +++ /dev/null @@ -1 +0,0 @@ -*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html,body{height:100%}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:#1e40af} diff --git a/public/i18n/en.json b/public/i18n/en.json new file mode 100644 index 0000000..206b1fd --- /dev/null +++ b/public/i18n/en.json @@ -0,0 +1,73 @@ +{ + "header": { + "nav_about": "About", + "nav_contacts": "Contacts", + "nav_support": "Support", + "aria_nav": "Navigation", + "aria_menu": "Mobile menu", + "aria_burger": "Menu" + }, + "footer": { + "desc": "An innovative virtual check service for individuals. Create digital checks online and cash them out at partner bank ATMs 24/7.", + "contacts_heading": "Contacts", + "russia": "Russia", + "armenia": "Armenia", + "support_label": "Tech support", + "support_hours": "24/7", + "questions_label": "Questions", + "questions_hours": "10:00–19:00 MSK", + "legal_heading": "Legal details", + "legal_company": "LLC «VIAEXPORT»", + "legal_inn_ru": "TIN (RU): 9909675800", + "legal_inn_am": "TIN (AM): 01051049", + "legal_kpp": "KPP: 770287001", + "legal_ogrn": "OGRN: 282.110.1296681", + "legal_address": "Armenia, 0201, Yerevan, Minskaya St. 21-23, apt. 44", + "rights": "LLC «VIAEXPORT». All rights reserved.", + "director": "Director: Amirkhanyan Sargis Artashesovich" + }, + "fastcheck": { + "subtitle": "Enter fastCHECK details or create a new one", + "number_label": "fastCHECK number", + "number_placeholder": "1234-5678-0001", + "number_new": "New", + "amount_label": "Amount", + "amount_checking": "Checking…", + "code_label": "Code", + "code_placeholder": "00000", + "pay_btn": "Pay", + "modal_title": "Sign in via Telegram", + "modal_sub": "Scan QR or open the link", + "modal_loading": "Loading…", + "modal_open_tg": "Open in Telegram", + "modal_confirming": "Confirming payment…", + "modal_waiting": "Waiting for sign-in…", + "modal_paid_title": "Paid", + "modal_paid_sub": "fastCHECK successfully accepted." + }, + "create": { + "title": "New", + "subtitle": "Enter the amount to top up", + "back_label": "Back", + "payment_label": "Payment method", + "currency_label": "Currency", + "amount_label": "Payment amount", + "note_label": "Note", + "note_placeholder": "Reason for payment...", + "creating": "Creating…", + "create_btn": "Create" + }, + "sbp": { + "title": "Pay via SBP", + "subtitle": "Fast Payment System", + "amount_label": "Payment amount", + "currency_name": "Russian ruble", + "note_label": "Note", + "note_placeholder": "Reason for payment...", + "pay_loading": "Please wait...", + "pay_btn": "Proceed to payment" + }, + "common": { + "secure": "Secure connection" + } +} diff --git a/public/i18n/hy.json b/public/i18n/hy.json new file mode 100644 index 0000000..e36bca5 --- /dev/null +++ b/public/i18n/hy.json @@ -0,0 +1,73 @@ +{ + "header": { + "nav_about": "Ծառայության մասին", + "nav_contacts": "Կապ", + "nav_support": "Աջակցություն", + "aria_nav": "Նավիգացիա", + "aria_menu": "Բջջային ընտրացանկ", + "aria_burger": "Ընտրացանկ" + }, + "footer": { + "desc": "Ֆիզիկական անձանց համար վիրտուալ չեկերի նորարարական ծառայություն: Ստեղծեք թվային չեկեր առցանց և կանխիկացրեք դրանք գործընկեր բանկերի բանկոմատներում 24/7:", + "contacts_heading": "Կապ", + "russia": "Ռուսաստան", + "armenia": "Հայաստան", + "support_label": "Տեխ. աջակցություն", + "support_hours": "24/7", + "questions_label": "Հարցեր", + "questions_hours": "10:00–19:00 MSK", + "legal_heading": "Իրավաբանական տվյալներ", + "legal_company": "ООО «ВИАЭКСПОРТ»", + "legal_inn_ru": "ИНН (РФ): 9909675800", + "legal_inn_am": "ИНН (AM): 01051049", + "legal_kpp": "КПП: 770287001", + "legal_ogrn": "ОГРН: 282.110.1296681", + "legal_address": "Հայաստան, 0201, Երևան, Մինսկայա փ. 21-23, բն. 44", + "rights": "ООО «ВИАЭКСПОРТ»: Բոլոր իրավունքները պաշտպանված են:", + "director": "Տնօրեն՝ Ամիրխանյան Սարգիս Արտաշեսի" + }, + "fastcheck": { + "subtitle": "Մուտքագրեք fastCHECK տվյալները կամ ստեղծեք նորը", + "number_label": "fastCHECK համար", + "number_placeholder": "1234-5678-0001", + "number_new": "Նոր", + "amount_label": "Գումար", + "amount_checking": "Ստուգվում է…", + "code_label": "Կոդ", + "code_placeholder": "00000", + "pay_btn": "Վճարել", + "modal_title": "Մուտք գործել Telegram-ով", + "modal_sub": "Սկանավորեք QR կամ բացեք հղումը", + "modal_loading": "Բեռնվում է…", + "modal_open_tg": "Բացել Telegram-ում", + "modal_confirming": "Վճարման հաստատում…", + "modal_waiting": "Սպասում ենք մուտքի…", + "modal_paid_title": "Վճարված է", + "modal_paid_sub": "fastCHECK-ը հաջողությամբ ընդունված է:" + }, + "create": { + "title": "Նոր", + "subtitle": "Նշեք համալրման գումարը", + "back_label": "Հետ", + "payment_label": "Վճարման եղանակ", + "currency_label": "Արժույթ", + "amount_label": "Վճարման գումար", + "note_label": "Նշում", + "note_placeholder": "Վճարման պատճառ...", + "creating": "Ստեղծվում է…", + "create_btn": "Ստեղծել" + }, + "sbp": { + "title": "Վճարել SBP-ով", + "subtitle": "Արագ վճարումների համակարգ", + "amount_label": "Վճարման գումար", + "currency_name": "Ռուսական ռուբլի", + "note_label": "Նշում", + "note_placeholder": "Վճարման պատճառ...", + "pay_loading": "Սպասեք...", + "pay_btn": "Անցնել վճարմանը" + }, + "common": { + "secure": "Անվտանգ կապ" + } +} diff --git a/public/i18n/ru.json b/public/i18n/ru.json new file mode 100644 index 0000000..e9825ab --- /dev/null +++ b/public/i18n/ru.json @@ -0,0 +1,73 @@ +{ + "header": { + "nav_about": "О сервисе", + "nav_contacts": "Контакты", + "nav_support": "Поддержка", + "aria_nav": "Навигация", + "aria_menu": "Мобильное меню", + "aria_burger": "Меню" + }, + "footer": { + "desc": "Инновационный сервис виртуальных чеков для физических лиц. Создавайте цифровые чеки онлайн и обналичивайте их через банкоматы банков-партнёров 24/7.", + "contacts_heading": "Контакты", + "russia": "Россия", + "armenia": "Армения", + "support_label": "Техподдержка", + "support_hours": "24/7", + "questions_label": "Вопросы", + "questions_hours": "10:00–19:00 МСК", + "legal_heading": "Реквизиты", + "legal_company": "ООО «ВИАЭКСПОРТ»", + "legal_inn_ru": "ИНН (РФ): 9909675800", + "legal_inn_am": "ИНН (AM): 01051049", + "legal_kpp": "КПП: 770287001", + "legal_ogrn": "ОГРН: 282.110.1296681", + "legal_address": "Армения, 0201, Ереван, ул. Минская, дом 21-23, кв. 44", + "rights": "ООО «ВИАЭКСПОРТ». Все права защищены.", + "director": "Директор: Амирханян Саргис Арташесович" + }, + "fastcheck": { + "subtitle": "Введите данные fastCHECK или создайте новый", + "number_label": "Номер fastCHECK", + "number_placeholder": "1234-5678-0001", + "number_new": "Новый", + "amount_label": "Сумма", + "amount_checking": "Проверяем…", + "code_label": "Код", + "code_placeholder": "00000", + "pay_btn": "Оплатить", + "modal_title": "Войти через Telegram", + "modal_sub": "Отсканируйте QR или откройте ссылку", + "modal_loading": "Загрузка…", + "modal_open_tg": "Открыть в Telegram", + "modal_confirming": "Подтверждение оплаты…", + "modal_waiting": "Ожидание входа…", + "modal_paid_title": "Оплачено", + "modal_paid_sub": "fastCHECK успешно принят." + }, + "create": { + "title": "Новый", + "subtitle": "Укажите сумму для пополнения", + "back_label": "Назад", + "payment_label": "Способ оплаты", + "currency_label": "Валюта", + "amount_label": "Сумма платежа", + "note_label": "Примечание", + "note_placeholder": "Причина платежа...", + "creating": "Создание…", + "create_btn": "Создать" + }, + "sbp": { + "title": "Оплата через СБП", + "subtitle": "Система быстрых платежей", + "amount_label": "Сумма платежа", + "currency_name": "Российский рубль", + "note_label": "Примечание", + "note_placeholder": "Причина платежа...", + "pay_loading": "Подождите...", + "pay_btn": "Перейти к оплате" + }, + "common": { + "secure": "Защищённое соединение" + } +} diff --git a/src/app/pages/create-page/create-page.html b/src/app/pages/create-page/create-page.html index 7a976da..ea25c0c 100644 --- a/src/app/pages/create-page/create-page.html +++ b/src/app/pages/create-page/create-page.html @@ -2,24 +2,24 @@
- +

- Новый + {{ 'create.title' | translate }}  fastCHECK

-

Укажите сумму для пополнения

+

{{ 'create.subtitle' | translate }}

- Способ оплаты + {{ 'create.payment_label' | translate }}
@@ -73,7 +68,7 @@
- +
- + @@ -115,9 +110,9 @@ @if (loading()) { - Создание… + {{ 'create.creating' | translate }} } @else { - Создать  + {{ 'create.create_btn' | translate }}  fastCHECK } @@ -129,7 +124,7 @@ stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> - Защищённое соединение + {{ 'common.secure' | translate }}
diff --git a/src/app/pages/create-page/create-page.ts b/src/app/pages/create-page/create-page.ts index 0a3813c..f06d6a5 100644 --- a/src/app/pages/create-page/create-page.ts +++ b/src/app/pages/create-page/create-page.ts @@ -4,6 +4,7 @@ import { Router, RouterLink } from '@angular/router'; import { HttpClient } from '@angular/common/http'; import { FastcheckService } from '../../fastcheck.service'; import { FASTCHECK_API } from '../../api'; +import { TranslatePipe } from '../../translate/translate.pipe'; interface CreateFastcheckResponse { fastcheck: string; @@ -17,7 +18,7 @@ type Currency = 'RUB' | 'CNY' | 'USD' | 'EUR' | 'AMD'; @Component({ selector: 'app-create-page', - imports: [FormsModule, RouterLink], + imports: [FormsModule, RouterLink, TranslatePipe], templateUrl: './create-page.html', styleUrl: './create-page.scss' }) diff --git a/src/app/pages/fastcheck-page/fastcheck-page.html b/src/app/pages/fastcheck-page/fastcheck-page.html index 5f64f61..9b889c3 100644 --- a/src/app/pages/fastcheck-page/fastcheck-page.html +++ b/src/app/pages/fastcheck-page/fastcheck-page.html @@ -5,9 +5,7 @@ fastCHECK

- Введите данные - fastCHECK - или создайте новый + {{ 'fastcheck.subtitle' | translate }}

@@ -16,8 +14,7 @@
- +
@if (amountLoading()) { - Проверяем… + {{ 'fastcheck.amount_checking' | translate }} }
- + - Оплатить + {{ 'fastcheck.pay_btn' | translate }}
@@ -95,7 +92,7 @@ stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> - Защищённое соединение + {{ 'common.secure' | translate }}
@@ -113,21 +110,21 @@ stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"> - +
} @else { - - + +
@if (popupLoading() && !webSessionId()) { -
Загрузка…
+
{{ 'fastcheck.modal_loading' | translate }}
} @else if (webSessionId()) { QR Telegram } @@ -138,14 +135,14 @@ - Открыть в Telegram + {{ 'fastcheck.modal_open_tg' | translate }} } @if (popupLoading() && webSessionId()) { - + } @else if (webSessionId()) { - + } @if (popupError()) { diff --git a/src/app/pages/fastcheck-page/fastcheck-page.ts b/src/app/pages/fastcheck-page/fastcheck-page.ts index cae540c..4e9f59d 100644 --- a/src/app/pages/fastcheck-page/fastcheck-page.ts +++ b/src/app/pages/fastcheck-page/fastcheck-page.ts @@ -4,6 +4,7 @@ import { Router, RouterLink } from '@angular/router'; import { HttpClient } from '@angular/common/http'; import { FastcheckService } from '../../fastcheck.service'; import { FASTCHECK_API } from '../../api'; +import { TranslatePipe } from '../../translate/translate.pipe'; interface WebSessionResponse { sessionId: string; @@ -22,7 +23,7 @@ interface CheckFastcheckResponse { @Component({ selector: 'app-fastcheck-page', - imports: [FormsModule, RouterLink], + imports: [FormsModule, RouterLink, TranslatePipe], templateUrl: './fastcheck-page.html', styleUrl: './fastcheck-page.scss' }) diff --git a/src/app/pages/legacy-pay-page/legacy-pay-page.html b/src/app/pages/legacy-pay-page/legacy-pay-page.html index 3538cd7..000a7bb 100644 --- a/src/app/pages/legacy-pay-page/legacy-pay-page.html +++ b/src/app/pages/legacy-pay-page/legacy-pay-page.html @@ -6,14 +6,14 @@ СБП
-

Оплата через СБП

-

Система быстрых платежей

+

{{ 'sbp.title' | translate }}

+

{{ 'sbp.subtitle' | translate }}

- +
🇷🇺 RUB - Российский рубль + {{ 'sbp.currency_name' | translate }}
- + @@ -61,7 +61,11 @@ - {{ loading() ? 'Подождите...' : 'Перейти к оплате' }} + @if (loading()) { + {{ 'sbp.pay_loading' | translate }} + } @else { + {{ 'sbp.pay_btn' | translate }} + }
@@ -71,7 +75,7 @@ stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> - Защищённое соединение + {{ 'common.secure' | translate }}
diff --git a/src/app/pages/legacy-pay-page/legacy-pay-page.ts b/src/app/pages/legacy-pay-page/legacy-pay-page.ts index 0800580..8c5047e 100644 --- a/src/app/pages/legacy-pay-page/legacy-pay-page.ts +++ b/src/app/pages/legacy-pay-page/legacy-pay-page.ts @@ -2,6 +2,7 @@ import { Component, computed, inject, signal } from '@angular/core'; import { FormsModule } from '@angular/forms'; import { ActivatedRoute } from '@angular/router'; import { HttpClient } from '@angular/common/http'; +import { TranslatePipe } from '../../translate/translate.pipe'; interface LegacyPayResponse { payload?: string; @@ -17,7 +18,7 @@ interface LegacyPayResponse { */ @Component({ selector: 'app-legacy-pay-page', - imports: [FormsModule], + imports: [FormsModule, TranslatePipe], templateUrl: './legacy-pay-page.html', styleUrl: './legacy-pay-page.scss' }) diff --git a/src/app/site-footer/site-footer.html b/src/app/site-footer/site-footer.html index f8acadc..a38acae 100644 --- a/src/app/site-footer/site-footer.html +++ b/src/app/site-footer/site-footer.html @@ -9,23 +9,20 @@ fastCHECK - + diff --git a/src/app/site-footer/site-footer.ts b/src/app/site-footer/site-footer.ts index cf8101b..440a21c 100644 --- a/src/app/site-footer/site-footer.ts +++ b/src/app/site-footer/site-footer.ts @@ -1,7 +1,9 @@ import { Component } from '@angular/core'; +import { TranslatePipe } from '../translate/translate.pipe'; @Component({ selector: 'app-site-footer', + imports: [TranslatePipe], templateUrl: './site-footer.html', styleUrl: './site-footer.scss' }) diff --git a/src/app/site-header/site-header.html b/src/app/site-header/site-header.html index bc6aa38..25bcc4f 100644 --- a/src/app/site-header/site-header.html +++ b/src/app/site-header/site-header.html @@ -10,16 +10,23 @@ - } diff --git a/src/app/site-header/site-header.scss b/src/app/site-header/site-header.scss index c977834..ea5e659 100644 --- a/src/app/site-header/site-header.scss +++ b/src/app/site-header/site-header.scss @@ -71,6 +71,44 @@ } } + &__langs { + display: flex; + align-items: center; + gap: 2px; + margin-left: 8px; + + @media (max-width: 600px) { + display: none; + } + } + + &__lang { + padding: 5px 8px; + border-radius: 6px; + border: none; + background: transparent; + font-size: 12px; + font-weight: 600; + letter-spacing: 0.04em; + color: #94a3b8; + cursor: pointer; + transition: background 0.15s, color 0.15s; + font-family: inherit; + + &:hover { background: #f1f5f9; color: #475569; } + + &--active { + background: #eff6ff; + color: #1e40af; + } + } + + &__mobile-langs { + display: flex; + gap: 4px; + padding: 8px 14px 4px; + } + &__burger { display: none; margin-left: auto; diff --git a/src/app/site-header/site-header.ts b/src/app/site-header/site-header.ts index 2152d6e..552f410 100644 --- a/src/app/site-header/site-header.ts +++ b/src/app/site-header/site-header.ts @@ -1,14 +1,21 @@ -import { Component, signal } from '@angular/core'; +import { Component, inject, signal } from '@angular/core'; import { RouterLink } from '@angular/router'; +import { TranslatePipe } from '../translate/translate.pipe'; +import { TranslationService, Lang } from '../translate/translation.service'; @Component({ selector: 'app-site-header', - imports: [RouterLink], + imports: [RouterLink, TranslatePipe], templateUrl: './site-header.html', styleUrl: './site-header.scss' }) export class SiteHeader { + private i18n = inject(TranslationService); + menuOpen = signal(false); + currentLang = this.i18n.currentLang; + toggleMenu(): void { this.menuOpen.update(v => !v); } closeMenu(): void { this.menuOpen.set(false); } + setLang(lang: Lang): void { this.i18n.setLanguage(lang); } } diff --git a/src/app/translate/translate.pipe.ts b/src/app/translate/translate.pipe.ts new file mode 100644 index 0000000..bebb3ec --- /dev/null +++ b/src/app/translate/translate.pipe.ts @@ -0,0 +1,11 @@ +import { Pipe, PipeTransform, inject } from '@angular/core'; +import { TranslationService } from './translation.service'; + +@Pipe({ name: 'translate', pure: false, standalone: true }) +export class TranslatePipe implements PipeTransform { + private svc = inject(TranslationService); + + transform(key: string): string { + return this.svc.translate(key); + } +} diff --git a/src/app/translate/translation.service.ts b/src/app/translate/translation.service.ts new file mode 100644 index 0000000..c2d6478 --- /dev/null +++ b/src/app/translate/translation.service.ts @@ -0,0 +1,36 @@ +import { Injectable, inject, signal } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; + +export type Lang = 'ru' | 'en' | 'hy'; +type Translations = Record>; + +@Injectable({ providedIn: 'root' }) +export class TranslationService { + private http = inject(HttpClient); + + currentLang = signal('ru'); + private translations = signal({}); + + constructor() { + this.load('ru'); + } + + setLanguage(lang: Lang): void { + this.currentLang.set(lang); + this.load(lang); + } + + private load(lang: Lang): void { + this.http.get(`/i18n/${lang}.json`).subscribe({ + next: data => this.translations.set(data), + }); + } + + translate(key: string): string { + const dot = key.indexOf('.'); + if (dot === -1) return key; + const section = key.slice(0, dot); + const k = key.slice(dot + 1); + return this.translations()[section]?.[k] ?? key; + } +}