From cf634f766f6bf08d10073dba34e92ef630319c96 Mon Sep 17 00:00:00 2001 From: sdarbinyan Date: Mon, 4 May 2026 23:56:38 +0400 Subject: [PATCH] language --- dist/3rdpartylicenses.txt | 355 ------------------ dist/favicon.ico | Bin 4286 -> 15406 bytes dist/index.html | 13 +- dist/styles-4STSJS4C.css | 1 - public/i18n/en.json | 73 ++++ public/i18n/hy.json | 73 ++++ public/i18n/ru.json | 73 ++++ src/app/pages/create-page/create-page.html | 27 +- src/app/pages/create-page/create-page.ts | 3 +- .../pages/fastcheck-page/fastcheck-page.html | 39 +- .../pages/fastcheck-page/fastcheck-page.ts | 3 +- .../legacy-pay-page/legacy-pay-page.html | 20 +- .../pages/legacy-pay-page/legacy-pay-page.ts | 3 +- src/app/site-footer/site-footer.html | 33 +- src/app/site-footer/site-footer.ts | 2 + src/app/site-header/site-header.html | 30 +- src/app/site-header/site-header.scss | 38 ++ src/app/site-header/site-header.ts | 11 +- src/app/translate/translate.pipe.ts | 11 + src/app/translate/translation.service.ts | 36 ++ 20 files changed, 405 insertions(+), 439 deletions(-) delete mode 100644 dist/3rdpartylicenses.txt delete mode 100644 dist/styles-4STSJS4C.css create mode 100644 public/i18n/en.json create mode 100644 public/i18n/hy.json create mode 100644 public/i18n/ru.json create mode 100644 src/app/translate/translate.pipe.ts create mode 100644 src/app/translate/translation.service.ts 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 1843a995de3ed7e3cda31b0da0498b2d6889b2c6..9bc1c9bb508d680e17ce641d8efcb893157a33dc 100644 GIT binary patch literal 15406 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 D%SGJZ literal 4286 zcmc&&-Afcv6rcWso_hAHGy_pW>M6r|sE58E>Z#KFC`v0xQ7|+Ul<2J}%FH4u&5Ayt zLVHL|EQ%=5P(d_G6lV5&cXr*`onPnNb*5cyLATlUE@x+UcDcWE&-vZoxo0J54ZYIR zBz~8=*GkelNs@BN=#jLYjGv1^-(}`SEb>5-U<_S{Ha!YYS0n88JE2r=f_!4VCB}2{ zoSv>GXg@~*!ipIo4S}I&u-EN~;FV@sf*a%i!kmoZ|L_DLOk?n8 z%Z5^(183`D=zgyu8$w4oho)5|flIV*=hdSKjtoMZ`VNFcCVtp4hv1K)h>Z`{3@Vg&t5%{Q0l_a5Nu){o-!e&TWBQwt;F$hPC)K zpZjJtbdQs`=OgT>+NlMh`&2}{p3|5!hBK@ZTLSahCL-*!MQ&$fIYI$93J#NP}!-;fVsmkjmYebR!h z)^X3+qqGlfHAPUV=CKZ%*4GK&tLyM|){FWm^v^2Z8`#lTo_mSWnWQ8=A-*YerdY8i zMf>v~_o6T1o+Fv@isv6;ik@gy&)<#I^HKj%S1fcaWqIJ5PH|^!9{#~z>WT6b;?IhG z7X4R#qz4q}^v3-s^<$~&KZ|L-vHhoTL-gMxq95blETP^Y4%Y HwXS~vNEo~x 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; + } +}