From 869dab9d1f956e0ec7a5194e139713fe979fe64f Mon Sep 17 00:00:00 2001 From: wukko Date: Fri, 19 Aug 2022 23:54:20 +0600 Subject: [PATCH] ukrainian localization and new error popup --- README.md | 18 +++--- package.json | 2 +- src/front/cobalt.css | 62 ++++++++++++-------- src/front/emoji/dragon_face.svg | 8 +-- src/front/emoji/frowning_face.svg | 8 +++ src/front/emoji/magic_wand.svg | 2 +- src/front/emoji/money_bag.svg | 2 +- src/front/emoji/party_popper.svg | 6 +- src/front/emoji/sparkles.svg | 6 +- src/localization/languages/en.json | 13 +++-- src/localization/languages/es.json | 2 +- src/localization/languages/fr.json | 2 +- src/localization/languages/id.json | 2 +- src/localization/languages/pl.json | 2 +- src/localization/languages/ru.json | 29 +++++----- src/localization/languages/uk.json | 93 ++++++++++++++++++++++++++++++ src/modules/emoji.js | 6 +- src/modules/pageRender/elements.js | 11 ++-- src/modules/pageRender/page.js | 13 +++-- 19 files changed, 210 insertions(+), 77 deletions(-) create mode 100644 src/front/emoji/frowning_face.svg create mode 100644 src/localization/languages/uk.json diff --git a/README.md b/README.md index 26888a74..8617c90b 100644 --- a/README.md +++ b/README.md @@ -23,10 +23,11 @@ It preserves original media quality so you get best downloads possible (unless y - YouTube Music ## Translations -- Spanish: [@adrigoomy](https://github.com/adrigoomy) -- French: [@lexito-o](https://github.com/lexito-o) -- Indonesian: [@LyfeV](https://github.com/LyfeV) +- Spanish: [@adrigoomy](https://github.com/adrigoomy) (translation is outdated, update needed) +- French: [@lexito-o](https://github.com/lexito-o) (translation is outdated, update needed) +- Indonesian: [@LyfeV](https://github.com/LyfeV) (translation is outdated, update needed) - Polish: [@hexandcube](https://github.com/hexandcube) +- Ukrainian: Löffel ## How you can help cobalt speak your language Take English or Russian localization from [this directory](https://github.com/wukko/cobalt/tree/current/src/localization/languages) and use it as a base for your translation. Then simply make a pull request and it'll be out for everyone upon review! @@ -34,14 +35,15 @@ Take English or Russian localization from [this directory](https://github.com/wu ### What you should keep in mind: - Do **NOT** use formal language, that's boring and lame. Use informal language on all occasions. - Strings are **ALWAYS** lowercase unless it's an internal value like {ContactLink} or STRESSED LIKE THIS. -- Keep translations as friendly and fun as possible. -- Word-for-word translations from original language are not valid. -- You can rephrase sentences as long as they keep the same sense. +- Keep translations as friendly and fun as possible. Just as if cobalt user was your buddy. +- Robotic translations from original language are not valid. +- You can (and should) rephrase sentences as long as they keep the same sense, if you think it'd be better that way. - You can add wordplays or puns if it feels natural to do so. -- Even though I love cursing, keep that away from translations. +- Even though I love cursing, keep that to minimum in translations, and do **NOT** use offensive words. - Always check if there are issues in UI with your localization. - There's no need to translate `ChangelogContentTitle` and `ChangelogContent`, because those are very often changed. You can remove both of them from your translation file. -- Add "(in english)" in translation language to `ChangelogLastCommit` and `ChangelogLastMajor`, because those are almost always kept exclusively in English. Remove that phrase if you do translate major update changelog. +- Add "(in english)" translated to your language at the end of `ChangelogLastCommit` and `ChangelogLastMajor`. Those are almost always kept exclusively in English. Remove that phrase if you do translate major update changelog. + - Example: `"ChangelogLastCommit": "последний коммит (на английском)"` - Be nice. ## TO-DO diff --git a/package.json b/package.json index dfd46750..de45f81d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "cobalt", "description": "save what you love", - "version": "3.1", + "version": "3.2", "author": "wukko", "exports": "./src/cobalt.js", "type": "module", diff --git a/src/front/cobalt.css b/src/front/cobalt.css index 5cf2fed9..e849e471 100644 --- a/src/front/cobalt.css +++ b/src/front/cobalt.css @@ -249,6 +249,9 @@ input[type="checkbox"] { font-size: 0.9rem; max-height: 80%; } +.popup.small { + width: 20% +} #popup-backdrop { opacity: 0.5; background-color: var(--background); @@ -375,7 +378,7 @@ input[type="checkbox"] { padding-bottom: 0.4rem; color: var(--accent); } -.subtitle.extra { +.extra { margin-top: 1rem; } .small-padding .subtitle { @@ -389,6 +392,9 @@ input[type="checkbox"] { line-height: 1.3rem!important; color: var(--accent-unhover-2); } +.subtext { + color: var(--accent-unhover-2); +} .switch { padding: 0.8rem; width: 100%; @@ -463,10 +469,18 @@ input[type="checkbox"] { zoom: 300%; } } +@media screen and (max-width: 1550px) { + .popup.small { + width: 25% + } +} @media screen and (max-width: 1440px) { #cobalt-main-box { width: 65%; } + .popup.small { + width: 30% + } .popup { width: 40%; } @@ -475,6 +489,9 @@ input[type="checkbox"] { #cobalt-main-box { width: 70%; } + .popup.small { + width: 35% + } .popup { width: 50%; } @@ -483,6 +500,9 @@ input[type="checkbox"] { #cobalt-main-box { width: 75%; } + .popup.small { + width: 40% + } .popup { width: 60%; } @@ -491,35 +511,22 @@ input[type="checkbox"] { .popup { height: 80% } + .popup.small { + height: auto; + } .bottom-link { padding-bottom: 2rem; } } /* mobile page */ @media screen and (max-width: 949px) { - #logo-area { - padding-right: 0; - padding-top: 0; - position: fixed; - line-height: 0; - margin-top: -2rem; - width: 100%; - text-align: center; - } #cobalt-main-box { width: 85%; - display: flex; - border: none; - padding: 0; } - .popup, .popup.scrollable { - border: none; - width: 90%; - height: 90%; - max-height: 100%; - } - .bottom-link { - padding-bottom: 2rem; + #close-error { + bottom: 5%; + position: absolute; + width: var(--without-padding); } } @media screen and (max-width: 475px) { @@ -529,6 +536,16 @@ input[type="checkbox"] { .tab .emoji { margin-right: 0; } + #cobalt-main-box { + width: 90%; + } +} +@media screen and (max-width: 949px) { + #close-error { + bottom: 5%; + position: absolute; + width: var(--without-padding); + } #logo-area { padding-right: 0; padding-top: 0; @@ -539,12 +556,11 @@ input[type="checkbox"] { text-align: center; } #cobalt-main-box { - width: 90%; display: flex; border: none; padding: 0; } - .popup, .popup.scrollable { + .popup, .popup.scrollable, .popup.small { border: none; width: 90%; height: 90%; diff --git a/src/front/emoji/dragon_face.svg b/src/front/emoji/dragon_face.svg index 6225b42c..861ae074 100644 --- a/src/front/emoji/dragon_face.svg +++ b/src/front/emoji/dragon_face.svg @@ -2,10 +2,10 @@ - - - - + + + + diff --git a/src/front/emoji/frowning_face.svg b/src/front/emoji/frowning_face.svg new file mode 100644 index 00000000..04106077 --- /dev/null +++ b/src/front/emoji/frowning_face.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/front/emoji/magic_wand.svg b/src/front/emoji/magic_wand.svg index 9df52acf..b10883b6 100644 --- a/src/front/emoji/magic_wand.svg +++ b/src/front/emoji/magic_wand.svg @@ -1,5 +1,5 @@ - + diff --git a/src/front/emoji/money_bag.svg b/src/front/emoji/money_bag.svg index e5059e2c..561ee98a 100644 --- a/src/front/emoji/money_bag.svg +++ b/src/front/emoji/money_bag.svg @@ -1,4 +1,4 @@ - + diff --git a/src/front/emoji/party_popper.svg b/src/front/emoji/party_popper.svg index 6d69b12f..93113d0f 100644 --- a/src/front/emoji/party_popper.svg +++ b/src/front/emoji/party_popper.svg @@ -1,5 +1,5 @@ - + @@ -7,8 +7,8 @@ - - + + diff --git a/src/front/emoji/sparkles.svg b/src/front/emoji/sparkles.svg index ddce2e7d..e9702d09 100644 --- a/src/front/emoji/sparkles.svg +++ b/src/front/emoji/sparkles.svg @@ -1,5 +1,5 @@ - - - + + + diff --git a/src/localization/languages/en.json b/src/localization/languages/en.json index 0339eca2..c0cc9d6b 100644 --- a/src/localization/languages/en.json +++ b/src/localization/languages/en.json @@ -5,13 +5,15 @@ "ContactLink": "let me know" }, "strings": { - "ChangelogContentTitle": "small quality of life improvements (3.1)", - "ChangelogContent": "- tiktok videos can now be downloaded without watermark, you just have to enable it in video settings (+)!\n- you now can pass \"u\" query to main website to fill out the input area right away (co.wukko.me?u=your_link_here).\n- added ability to select text in certain areas of website.\n- some internal stuff has been cleaned up.\n\nfollow cobalt's twitter account for polls, updates, and more: @justusecobalt\n\nprevious version:\n\neverything what you've been waiting for. welcome to cobalt 3.0 :)\n\nstuff that you can notice:\n\n- you can now download audio from any supported service, in any format that you set in settings (+). yes, that includes mp3, which you all have been waiting for :D\n- it's now easier to switch between download modes (just a single toggle on the bottom).\n- your youtube download format has been reset, sorry, but that was required to implement all audio downloads.\n- default download format for youtube videos on all platforms is now webm. except for ios.\n\n- cobalt now has emoji, just to spice up the black and white ui. all of them have been tuned to look the best in both themes. isn't it cool?\n- about, changelog, and donation popups have been merged into just one, for covnenience.\n- changelog got a huge upgrade (as you can see), and now there are both major changes and latest commit info, just so commits can finally go back to being batshit insane.\n- changelog popup appears on every major update, but you can disable it in settings, if you want to.\n- changelog now opens by default when pressing \"?\" button. i don't think anyone reads \"about\" as often.\n- settings (+) have been split into three tabs, also for convenience and ease of use.\n\n- added support for donation links. you can now donate through boosty, not only via crypto :D\n- donate popup has been rearranged and tuned just a tiny bit. \n\n- you can now click away from any popup by pressing the void behind it.\n- you can also press \"escape\" key on keyboard to close any popup.\n\n- switchers and buttons are now way easier on eye. white border is gone from where it's unneeded.\n- buttons are now very satisfying to press.\n- switchers are scrollable if there's not enough space to fit all contents on screen.\n- scaling is now even better than before.\n\ninternal stuff:\n\n- frontend won't send video related stuff if audio mode is on.\n- matching has, yet again, gone through mitosis, and is now probably the cleanest it can get.\n- page rendering is now modular, something like what frameworks have but way lighter. this makes adding new features WAY easier.\n- removed some stuff that didn't make sense (like storing language of stream request).\n- cleaned up insides of cobalt, of course.\n- almost all links now open in new tab, just like they should have from the very beginning.\n\nknown issues:\n- impossible to download audio from vk. i'll try to fix it in the next update.\n- headers are not sticky in tabbed popups. maybe this is a good thing, i'll think about it.\n\nif you ever notice any issues, make sure to report them on github. your report doesn't have to sound professional, just do your best to describe the issue.", + "ChangelogContentTitle": "ukrainian localization and new error popup (3.2)", + "FollowTwitter": "follow cobalt's twitter account for polls, updates, and more: @justusecobalt", + "ChangelogContent": "- added ukrainian localization (thanks to löffel).\n- new error popup! it's now prettier, more compact, and has an easily accessible close button.\n- russian localization has been patched up a bit\n- cleaned up css a bit\n- added github contributors to made with love message.\n- emojis have been tuned to have the same shade of yellow.\n- updated translation guidelines in readme a bit.", + "LinkInput": "paste the link here", "AboutSummary": "{appName} is your go-to place for social media downloads. zero ads, trackers, or any other creepy bullshit attached. simply paste a share link and you're ready to rock!", "AboutSupportedServices": "currently supported services:", "EmbedBriefDescription": "save content from social media without creeps following you around", - "MadeWithLove": "made with <3 by wukko", + "MadeWithLove": "made with <3 by wukko and all contributors on github", "AccessibilityInputArea": "link input area", "AccessibilityOpenAbout": "open about popup", "AccessibilityDownloadButton": "download button", @@ -32,7 +34,7 @@ "ErrorPageRenderFail": "something went wrong and page couldn't render. if it's a recurring or critical issue, please {ContactLink}. it'd be useful if you provided current commit hash ({s}) and error recreation steps. thank you :D", "ErrorRateLimit": "you're making way too many requests. calm down and try again in a few minutes.", "ErrorCouldntFetch": "couldn't fetch metadata. check if your link is correct and try again.", - "ErrorLengthLimit": "current length limit is {s} minutes. what you tried to download was longer than {s} minutes. pick something else to download!", + "ErrorLengthLimit": "current length limit is {s} minutes. what you tried to download is longer than {s} minutes. pick something else to download!", "ErrorBadFetch": "something went wrong with info fetching. you can try a different format and resolution or just try again later.", "ErrorCorruptedStream": "this download is unfortunately corrupted. try again or try a different format and resolution.", "ErrorNoInternet": "there's no internet or {appName} api is down. check your connection and try again.", @@ -89,6 +91,7 @@ "SettingsAudioFormatDescription": "when best format is selected, you get audio in best quality available, because audio is kept in its original format. if you select anything other than that, you'll get a slightly compressed file.", "Keyphrase": "save what you love", "SettingsDisableChangelogOnUpdate": "don't show changelog after major updates", - "SettingsRemoveWatermark": "disable watermark" + "SettingsRemoveWatermark": "disable watermark", + "ErrorPopupCloseButton": "got it" } } diff --git a/src/localization/languages/es.json b/src/localization/languages/es.json index 1f5c4031..6c465059 100644 --- a/src/localization/languages/es.json +++ b/src/localization/languages/es.json @@ -9,7 +9,7 @@ "AboutSummary": "{appName} es tu lugar ideal para descargas de redes sociales. sin anuncios u otras mierdas sospechosas. ¡solo necesitas pegar un enlace y listo!", "AboutSupportedServices": "servicios compatibles:", "EmbedBriefDescription": "guarda contenido de redes sociales sin preocuparte por rastreadores", - "MadeWithLove": "hecho con <3 por wukko, traducción por adrigoomy", + "MadeWithLove": "hecho con <3 por wukko y todos los contribuyentes en github", "AccessibilityInputArea": "cuadro de captura", "AccessibilityOpenAbout": "abrir ventana emergente de acerca de", "AccessibilityDownloadButton": "botón de descarga", diff --git a/src/localization/languages/fr.json b/src/localization/languages/fr.json index 887455de..68aa9a78 100644 --- a/src/localization/languages/fr.json +++ b/src/localization/languages/fr.json @@ -9,7 +9,7 @@ "AboutSummary": "{appName} est l'endroit parfait pour télécharger des vidéos sur les médias sociaux. zéro pubs, trackers ou tout autre merde. colle simplement le lien d'un post pour commencer!", "AboutSupportedServices": "services supportés:", "EmbedBriefDescription": "sauvegarde du contenu des médias sociaux facilement et sans tracking", - "MadeWithLove": "fait avec <3 par wukko, traduction par lexito", + "MadeWithLove": "fait avec <3 par wukko et tous les contributeurs sur github", "AccessibilityInputArea": "zone de saisie du lien", "AccessibilityOpenAbout": "ouvrir la fenêtre contextuelle de la section à propos", "AccessibilityDownloadButton": "bouton télécharger", diff --git a/src/localization/languages/id.json b/src/localization/languages/id.json index 5f6b618f..8f2b02bc 100644 --- a/src/localization/languages/id.json +++ b/src/localization/languages/id.json @@ -9,7 +9,7 @@ "AboutSummary": "{appName} adalah tempat terbaik kamu untuk download video sosial media tanpa iklan, pelacak, atau omong kosong lainnya. tinggal tempel link dan udah deh", "AboutSupportedServices": "layanan yang didukung:", "EmbedBriefDescription": "simpan konten dari sosial media tanpa hal aneh mengikuti kamu", - "MadeWithLove": "dibuat dengan <3 oleh wukko, terjemahan oleh Lyfe", + "MadeWithLove": "dibuat dengan <3", "AccessibilityInputArea": "tempat tempel link", "AccessibilityOpenAbout": "buka bagian pengantar", "AccessibilityDownloadButton": "tombol download", diff --git a/src/localization/languages/pl.json b/src/localization/languages/pl.json index 855ce14b..0f7cbdc4 100644 --- a/src/localization/languages/pl.json +++ b/src/localization/languages/pl.json @@ -9,7 +9,7 @@ "AboutSummary": "{appName} to najlepsze miejsce na pobieranie z mediów społecznościowych. zero reklam, trackerów i innych podobnych głupot. po prostu wklejasz link do udostępniania i lecisz!", "AboutSupportedServices": "aktualnie wspierane strony:", "EmbedBriefDescription": "pobieraj rzeczy z social mediów bez reklam i trackerów", - "MadeWithLove": "stworzone z <3 przez wukko, przetłumaczone przez hexandcube", + "MadeWithLove": "wykonane z <3 przez wukko i wszystkich współtwórców na github", "AccessibilityInputArea": "pole wklejania linku", "AccessibilityOpenAbout": "otwórz okno informacji", "AccessibilityDownloadButton": "przycisk pobierania", diff --git a/src/localization/languages/ru.json b/src/localization/languages/ru.json index 2340a1a8..c5dbfd70 100644 --- a/src/localization/languages/ru.json +++ b/src/localization/languages/ru.json @@ -6,10 +6,10 @@ }, "strings": { "LinkInput": "вставь ссылку сюда", - "AboutSummary": "{appName} — твой друг при скачивании контента из соц. сетей. никакой рекламы или трекеров. просто вставь ссылку, и ты прекрасен.", + "AboutSummary": "{appName} — твой друг при скачивании контента из соц. сетей. никакой рекламы или трекеров. вставляешь ссылку, получаешь файл, наслаждаешься жизнью.", "AboutSupportedServices": "что поддерживается:", "EmbedBriefDescription": "сохраняй что хочешь, без мороки и вторжения в личное пространство", - "MadeWithLove": "сделано с <3 ~ wukko", + "MadeWithLove": "сделано с <3 всеми контрибьюторами на гитхабе и wukko", "AccessibilityInputArea": "зона вставки ссылки", "AccessibilityOpenAbout": "открыть окно с информацией", "AccessibilityDownloadButton": "кнопка скачивания", @@ -19,23 +19,23 @@ "AccessibilityOpenDonate": "сделать пожертвование", "TitlePopupAbout": "что за {appName}?", "TitlePopupSettings": "настройки", - "TitlePopupError": "о нет...", + "TitlePopupError": "опаньки...", "TitlePopupChangelog": "что нового?", "TitlePopupDonate": "поддержи {appName}", "TitlePopupDownload": "скачивание", - "ErrorSomethingWentWrong": "что-то пошло совсем не так, поэтому у меня не получилось ничего для тебя достать. ты можешь попробовать ещё раз, но если так и не получится, {ContactLink}.", - "ErrorUnsupported": "этот сервис ещё не поддерживается, или с твоей ссылкой что-то не так.", + "ErrorSomethingWentWrong": "что-то пошло совсем не так, и у меня не получилось ничего для тебя достать. ты можешь попробовать ещё раз, но если так и не получится, {ContactLink}.", + "ErrorUnsupported": "с твоей ссылкой что-то не так, или же этот сервис ещё не поддерживается. может быть, ты вставил не ту ссылку?", "ErrorBrokenLink": "{s} поддерживается, но с твоей ссылкой что-то не так. может быть, ты её не полностью скопировал?", - "ErrorNoLink": "я не умею угадывать твои желания. попробуй в следующий раз вставить ссылку.", + "ErrorNoLink": "я не гадалка и не могу угадывать, что ты хочешь скачать. попробуй в следующий раз вставить ссылку.", "ErrorPageRenderFail": "что-то пошло не так, поэтому у меня не получилось срендерить страницу. если это что-то критичное, пожалуйста, {ContactLink}. приложи хэш текущего коммита ({s}) с действиями для получения ошибки. можно на русском языке. спасибо :)", "ErrorRateLimit": "ты делаешь слишком много запросов. успокойся и попробуй ещё раз через несколько минут.", "ErrorCouldntFetch": "мне не удалось получить информацию о твоей ссылке. проверь её и попробуй ещё раз.", - "ErrorLengthLimit": "твоё видео длиннее чем {s} минут(ы). это превышает текущий лимит. скачай что-нибудь покороче, а не войну и мир.", - "ErrorBadFetch": "что-то пошло не так с получением информации о твоей ссылке. попробуй другой формат и разрешение. если не получится, то попробуй ещё раз чуть позже.", - "ErrorCorruptedStream": "эта загрузка повреждена. попробуй ещё раз. если не получится, то попробуй другой формат и разрешение.", + "ErrorLengthLimit": "твоё видео длиннее чем {s} минут(ы). это превышает текущий лимит. скачай что-нибудь покороче, а не экранизацию \"войны и мира\".", + "ErrorBadFetch": "произошла ошибки при получении информации о твоей ссылке. попробуй другой формат и разрешение. если не получится, то попробуй ещё раз чуть позже.", + "ErrorCorruptedStream": "этот файл сломан на стороне {s}. ты можешь попробовать ещё раз, но если не получится, то попробуй другой формат и разрешение.", "ErrorNoInternet": "кажется, нет подключения к интернету. возможно лежит сервер {appName}. в любом случае, проверь подключение к интернету и попробуй ещё раз.", - "ErrorCantConnectToServiceAPI": "у меня не получилось подключится к серверу {s}. возможно {s} лежит, или же меня добавили в чёрный список. попробуй ещё раз чуть позже.", - "ErrorEmptyDownload": "мне нечего скачать. попробуй другую ссылку!", + "ErrorCantConnectToServiceAPI": "у меня не получилось подключится к серверу {s}. возможно {s} лежит, или же мой ip добавили в чёрный список. попробуй ещё раз чуть позже.", + "ErrorEmptyDownload": "я не нашёл того, что могу скачать. попробуй другую ссылку!", "ErrorLiveVideo": "я не могу скачать прямой эфир. дождись окончания трансляции и попробуй ещё раз.", "ErrorNoStreamID": "нет такого streamId.", "ErrorNoType": "нет такого типа ответа от сервера.", @@ -62,8 +62,8 @@ "SettingsQualityDescription": "если выбранное разрешение недоступно, то выбирается ближайшее к нему. если ты хочешь твитнуть загруженное видео, то выбирай комбинацию из mp4 и 720p. твиттер такие видео обычно воспринимает намного лучше.", "DonateSubtitle": "помоги мне платить за хостинг", "DonateDescription": "я не люблю крипто в его текущем состоянии, но у меня нет другого надёжного способа оплаты хостинга.", - "LinkGitHubIssues": ">> сообщай о проблемах и смотри исходный код на github", - "LinkGitHubChanges": ">> смотри предыдущие изменения на github", + "LinkGitHubIssues": ">> сообщай о проблемах и смотри исходный код на гитхабе", + "LinkGitHubChanges": ">> смотри предыдущие изменения на гитхабе", "LinkDonateContact": ">> напиши мне, если в этом списке нет подходящей валюты", "NoScriptMessage": "{appName} использует javascript для обработки ссылок и интерактивного интерфейса. ты должен разрешить использование javascript, чтобы пользоваться сайтом. тут нет никаких трекеров или рекламы, обещаю.", "DownloadPopupDescriptionIOS": "так как у тебя устройство на ios, тебе нужно зажать кнопку \"скачать\" и выбрать что-то похожее на \"сохранить в галерею\" в появившемся окне.", @@ -87,6 +87,7 @@ "SettingsAudioFormatDescription": "когда выбран \"лучший\" формат, ты получишь аудио максимально возможного качества, так как оно останется в оригинальном формате. если же выбрано что-то другое, то аудио будет немного сжато.", "Keyphrase": "сохраняй то, что любишь", "SettingsDisableChangelogOnUpdate": "не показывать изменения после обновлений", - "SettingsRemoveWatermark": "убрать ватермарку" + "SettingsRemoveWatermark": "убрать ватермарку", + "ErrorPopupCloseButton": "ясно" } } diff --git a/src/localization/languages/uk.json b/src/localization/languages/uk.json new file mode 100644 index 00000000..ad997d10 --- /dev/null +++ b/src/localization/languages/uk.json @@ -0,0 +1,93 @@ +{ + "name": "українська", + "code": "uk", + "substrings": { + "ContactLink": "дай нам знати" + }, + "strings": { + "LinkInput": "встав лінк сюди", + "AboutSummary": "{appName} – твій помічник із завантаження контенту з соцмереж. ніякої реклами, ніяких трекерів. вставляєш лінк, отримаєш файл, і допиваєш у спокої свій смузі.", + "AboutSupportedServices": "ось що підтримується:", + "EmbedBriefDescription": "зберігай контент із соцмереж без реклами і трекерів", + "MadeWithLove": "зроблено з <3 всіма контриб'юторами на github и wukko <3", + "AccessibilityInputArea": "строка, щоб вставити в неї лінк", + "AccessibilityOpenAbout": "відкрити інфу про {appName}", + "AccessibilityDownloadButton": "кнопка завантаження", + "AccessibilityOpenSettings": "відкрити налаштування", + "AccessibilityOpenChangelog": "відкрити \"що нового?\"", + "AccessibilityClosePopup": "закрити вікно", + "AccessibilityOpenDonate": "відкрити інфу про донати", + "TitlePopupAbout": "що за {appName}?", + "TitlePopupSettings": "налаштування", + "TitlePopupError": "опаньки...", + "TitlePopupChangelog": "що нового?", + "TitlePopupDonate": "підтримай {appName}", + "TitlePopupDownload": "завантажити", + "ErrorSomethingWentWrong": "сталося щось не те і в мене нічого не вийшло. можеш спробувати знову, але якщо все так і не працюватиме, {ContactLink}.", + "ErrorUnsupported": "цей сервіс ми ще не підтримаємо, або лінк зламаний.", + "ErrorBrokenLink": "це, здається, {s}, але з цим лінком ми нічого не зможемо завантажити. ти впевнений, що він повністю правильний?", + "ErrorNoLink": "ми не вміємо здогадуватись, що ти хочеш завантажити. перш встав лінк.", + "ErrorPageRenderFail": "сторінка зламалась і не змогла відобразитися. якщо це не вперш, будь ласка, {ContactLink}. буде круто, якщо ти також відправиш хеш поточного коміту ({s}) та кроки для відтворення помилки. дякую :D", + "ErrorRateLimit": "забагато запитів. якщо ти робот, все гаразд, так і сиди. якщо людина, повтори через кілька хвилин.", + "ErrorCouldntFetch": "ми не змогли отримати метадані. перевір, чи правильний лінк вставлений, і спробуй ще раз.", + "ErrorLengthLimit": "це відео триває більше {s} хвилин(и). ми не вміємо завантажувати настільки довгі файли. завантаж, мабуть, щось інше.", + "ErrorBadFetch": "щось трапилось з отриманням даних файлу. спробуй обрати інший формат чи дозвіл, або просто спробуй пізніше.", + "ErrorCorruptedStream": "цей файл зламаний на боку вихідного сервісу. спробуй ще раз, або обери інший формат чи дозвіл.", + "ErrorNoInternet": "немає інтернету, або сервер {appName} лежить. перевір з'єднання з інтернетом та спробуй ще раз.", + "ErrorCantConnectToServiceAPI": "не вдалося отримати дані з {s}. можливо, {s} лежить, або він додав ip серверу {appName} до чорного списку. спробуй ще раз пізніше.", + "ErrorEmptyDownload": "я не знайшов того, що можу завантажити. спробуй завантажити щось інше.", + "ErrorLiveVideo": "ми не вміємо завантажувати прямі етери. дочекайся кінця етеру та спробуй знову.", + "ErrorNoStreamID": "такого streamId немає.", + "ErrorNoType": "такий тип відповіді ми не вміємо обробляти.", + "SettingsAppearanceSubtitle": "вигляд", + "SettingsThemeSubtitle": "тема", + "SettingsFormatSubtitle": "формат файлу", + "SettingsMiscSubtitle": "інші налаштування", + "SettingsDownloadsSubtitle": "завантаження", + "SettingsQualitySubtitle": "якість", + "SettingsThemeAuto": "авто", + "SettingsThemeLight": "світла", + "SettingsThemeDark": "темна", + "SettingsQualitySwitchMax": "макс", + "SettingsQualitySwitchHigh": "висока\n", + "SettingsQualitySwitchMedium": "середня\n", + "SettingsQualitySwitchLow": "низька\n", + "SettingsQualitySwitchLowest": "найнижча", + "SettingsFormatSwitchAudio": "тільки аудіо", + "SettingsKeepDownloadButton": "зробити >> видимим", + "AccessibilityKeepDownloadButton": "завжди показувати кнопку завантаження", + "SettingsEnableDownloadPopup": "питати щодо засобу зберігання", + "AccessibilityEnableDownloadPopup": "питати що робити з завантаженнями", + "SettingsFormatDescription": "обери webm для максимально можливої якості. webm частіше за все кращі за якістю, але пристрої на ios не можуть програвати їх без сторонніх програм.", + "SettingsQualityDescription": "якщо обраний дозвіл недоступний, ми завантажемо у дозволі, найближчому до обраного. якщо ти завантажуєш, щоб потім запостити у твіттер, обирай комбінацію mp4 та 720p. з такими відео він працює найкраще.", + "DonateSubtitle": "допоможи платити за оренду серверу", + "DonateDescription": "крипто, яким воно зараз є, мені не дуже подобається. але це єдиний надійний засіб, щоб ми отримували гроші і розплачувалися за кордоном.", + "LinkGitHubIssues": ">> повідомляй про зловлені помилки та переглядай вихідний код на github", + "LinkGitHubChanges": ">> переглянь попередні оновлення та зроби свій внесок в проект на github", + "LinkDonateContact": ">> дай нам знати, якщо валюти, у якій ти б хотів задонатити, немає у списку", + "NoScriptMessage": "{appName} використовує javascript, щоб запрошувати інформацію у сайтів та робити інтерфейс інтерактивним. тобі треба дозволити javascript, щоб користатися сайтом. тут ніколи не буде ніяких реклам та трекерів.", + "DownloadPopupDescriptionIOS": "в тебе пристрій на ios, тож для завантаження тобі треба натиснути та утримувати кнопку завантаження, потім у з'явившемуся вікні обрати \"завантажити відео\". це продовжуматиметься, доки apple не припинить змушувати розробників використати safari webview в усіх браузерах.", + "DownloadPopupDescription": "кнопка завантаження відкриває нову вкладку з запитуваним файлом. це можна змінити у налаштуваннях.", + "DownloadPopupWayToSave": "обери спосіб зберігання", + "ClickToCopy": "натисни, щоб скопіювати", + "Download": "завантажити", + "CopyURL": "скопіювати url", + "AboutTab": "інфа", + "ChangelogTab": "зміни", + "DonationsTab": "донати", + "SettingsVideoTab": "відео", + "SettingsAudioTab": "аудіо", + "SettingsOtherTab": "інше", + "ChangelogLastCommit": "останній коммит (англійською мовою)", + "ChangelogLastMajor": "останнє велике оновлення (англійською мовою)", + "ModeToggleDefault": "розумний режим", + "AccessibilityModeToggle": "змінити режим завантаження", + "DonateLinksDescription": "лінки на донати відкриваються у нових вкладках. це найкращій спосіб донатити, якщо хочеш, щоб ми безпосередньо отримували гроші.", + "SettingsAudioFormatBest": "найкращий", + "SettingsAudioFormatDescription": "якщо обрано найкращий формат, буде завантажено оригінал аудіо. якщо обрано щось інше, завантажений файл буде трохи стисненим.", + "Keyphrase": "збережи, що любиш", + "SettingsDisableChangelogOnUpdate": "не показувати \"що нового\" після великих оновлень", + "SettingsRemoveWatermark": "прибрати вотермарку", + "ErrorPopupCloseButton": "ясно" + } +} diff --git a/src/modules/emoji.js b/src/modules/emoji.js index 98bce6e0..e4ddded5 100644 --- a/src/modules/emoji.js +++ b/src/modules/emoji.js @@ -9,11 +9,13 @@ const names = { "🪄": "magic_wand", "🐲": "dragon_face", "💸": "money_with_wings", - "⚙️": "gear" + "⚙️": "gear", + "☹️": "frowning_face" } let sizing = { 22: 0.4, - 30: 0.7 + 30: 0.7, + 48: 0.9 } export default function(emoji, size, disablePadding) { if (!size) size = 22; diff --git a/src/modules/pageRender/elements.js b/src/modules/pageRender/elements.js index a9c60878..410d844a 100644 --- a/src/modules/pageRender/elements.js +++ b/src/modules/pageRender/elements.js @@ -40,18 +40,21 @@ export function popup(obj) { } } return ` - ${!obj.embed ? `` : ''}` } export function multiPagePopup(obj) { diff --git a/src/modules/pageRender/page.js b/src/modules/pageRender/page.js index 47db6e15..5a011b55 100644 --- a/src/modules/pageRender/page.js +++ b/src/modules/pageRender/page.js @@ -67,7 +67,6 @@ export default function(obj) { name: "about", title: `${emoji("🐲")} ${loc(obj.lang, 'AboutTab')}`, content: popup({ - embed: true, name: "about", header: { aboveTitle: { @@ -90,7 +89,6 @@ export default function(obj) { name: "changelog", title: `${emoji("🎉")} ${loc(obj.lang, 'ChangelogTab')}`, content: popup({ - embed: true, name: "changelog", header: { closeAria: loc(obj.lang, 'AccessibilityClosePopup'), @@ -103,6 +101,8 @@ export default function(obj) { text: loc('en', 'ChangelogContentTitle'), classes: ["changelog-subtitle"], nopadding: true + }, { + text: loc('en', 'FollowTwitter') }, { text: loc('en', 'ChangelogContent') }, { @@ -123,7 +123,6 @@ export default function(obj) { name: "donate", title: `${emoji("💰")} ${loc(obj.lang, 'DonationsTab')}`, content: popup({ - embed: true, name: "donate", header: { closeAria: loc(obj.lang, 'AccessibilityClosePopup'), @@ -239,6 +238,7 @@ export default function(obj) { })} ${popup({ name: "download", + standalone: true, header: { closeAria: loc(obj.lang, 'AccessibilityClosePopup'), subtitle: loc(obj.lang, 'TitlePopupDownload') @@ -253,11 +253,16 @@ export default function(obj) { })} ${popup({ name: "error", + standalone: true, + buttonOnly: true, + emoji: emoji("☹️", 48, 1), + classes: ["small"], + buttonText: loc(obj.lang, 'ErrorPopupCloseButton'), header: { closeAria: loc(obj.lang, 'AccessibilityClosePopup'), title: loc(obj.lang, 'TitlePopupError') }, - body: `
` + body: `
` })}