diff --git a/following.html b/following.html index 6f7c88a..a869b89 100755 --- a/following.html +++ b/following.html @@ -117,13 +117,13 @@ diff --git a/home.html b/home.html index fcd8724..65eb83e 100755 --- a/home.html +++ b/home.html @@ -118,13 +118,13 @@ @@ -166,7 +166,7 @@
-

Top Trends

+

Top Trends

@@ -185,8 +185,8 @@
diff --git a/js/interface_common.js b/js/interface_common.js index 4a9fb20..eb1b200 100755 --- a/js/interface_common.js +++ b/js/interface_common.js @@ -125,6 +125,9 @@ function openProfileModal(e) unfollow(username); }); }; + + $(".tox-ctc").attr("title", polyglot.t("Copy to clipboard")); + $(".bitmessage-ctc").attr("title", polyglot.t("Copy to clipboard")); } function newHashtagModal(hashtag) { @@ -1111,7 +1114,7 @@ function convert2Unicodes(s, ta) { if (unicodeConversionStack.length > 0){ var ub = ta.closest(".post-area-new").find(".undo-unicode"); - ub.text("undo: " + unicodeConversionStack[0].u); + ub.text(polyglot.t("undo") + ": " + unicodeConversionStack[0].u); $.MAL.enableButton(ub); } else { $.MAL.disableButton(ta.closest(".post-area-new").find(".undo-unicode")); @@ -1144,7 +1147,7 @@ function undoLastUnicode(e) { } if (unicodeConversionStack.length > 0) - $(this).text("undo: " + unicodeConversionStack[0].u); + $(this).text(polyglot.t("undo") + ": " + unicodeConversionStack[0].u); else $.MAL.disableButton($(this)); diff --git a/js/interface_localization.js b/js/interface_localization.js index bbd1981..2936f53 100755 --- a/js/interface_localization.js +++ b/js/interface_localization.js @@ -4,7 +4,7 @@ // uses Polyglot.js ( https://github.com/airbnb/polyglot.js ) to translate interface // translators: add your language code here such as "es" for Spanish, "ru" for Russian -var knownLanguages = ["en","es","nl","it","fr","ru","de","zh","ja","pt-BR","tr","uk"]; +var knownLanguages = ["en","es","nl","it","fr","ru","de","zh","ja","pt-BR","tr","uk","cs"]; if( $.Options.getOption('locLang','auto') == 'auto'){ // detect language with JavaScript @@ -226,11 +226,31 @@ if(preferredLanguage == "en"){ "follows you": "follows you", "Show conversation": "Show conversation", "Mark all as read": "Mark all as read", - "show_more_count": "%{count} more...", + "show_more_count": "%{smart_count} more...", "hide": "hide", "Show more in this conversation...": "Show more in this conversation...", "conversation_title": "Conversation of @%{username}", - "copy_to_clipboard": "Press Ctrl/Cmd+C to copy then Enter to close" + "copy_to_clipboard": "Press Ctrl/Cmd+C to copy then Enter to close", + "Normal posts": "Normal posts", + "Promoted posts": "Promoted posts", + "Messages": "Messages", + "Edit profile": "Edit profile", + "Top Trends": "Top Trends", + "twisted again by": "twisted again by", + "undo": "undo", + "Are you sure you want to exit the daemon?\nThe Twister client will stop working.": "Are you sure you want to exit the daemon?\nThe Twister client will stop working.", + "Daemon exited...": "Daemon exited...", + "Secret Key": "Secret Key", + "Copy to clipboard": "Copy to clipboard", + "Full name here": "Full name here", + "Describe yourself": "Describe yourself", + "Location": "Location", + "website": "website", + "Tox address": "Tox address", + "Bitmessage address": "Bitmessage address", + "Language": "Language", + "Sound": "Sound", + "Users": "Users", }; } if(preferredLanguage == "es"){ @@ -1875,7 +1895,7 @@ if(preferredLanguage == "tr"){ "follows you": "seni takip ediyor", "Show conversation": "Sohbeti göster", "Mark all as read": "hepsini okundu olarak işaretle", - "show_more_count": "%{count} tane daha...", + "show_more_count": "%{smart_count} tane daha...", "hide": "gizle", "Show more in this conversation...": "Sohbetin tamamını göster...", "conversation_title": "@%{username} kullanıcısının bir sohbeti", @@ -1883,6 +1903,230 @@ if(preferredLanguage == "tr"){ }; } +if(preferredLanguage == "cs"){ + polyglot.locale("cs"); + wordset = { + "Actions ▼": "Akce ▼", + "Active DHT nodes:": "Aktivní uzly DHT: ", + "Add DNS": "Přidat DNS", + "Add peer": "Přidat uzel", + "ajax_error": "Ajax chyba: %{error}", // JavaScript error + "All users publicly followed by": "Všichni uživatelé, které veřejně sleduje", + "Available": "Je volná", // username is available + "Block chain information": "Informace o blockchainu", + "Block chain is up-to-date, twister is ready to use!": "Blockchain je aktuální, twister je připraven k použití!", + "Block generation": "Generování bloků ", + "Cancel": "Zrušit", + "Change user": "Změnit uživatele", + "Checking...": "Ověřuji...", // checking if username is available + "Collapse": "Složit", // smaller view of a post + "Configure block generation": "Nastavení generace bloků", + "Connections:": "Připojení: ", // to network + "Connection lost.": "Žádné připojení do sítě.", + "days": "%{smart_count} dnem |||| %{smart_count} dny |||| %{smart_count} dny", + "Detailed information": "Podrobné informace", + "DHT network down.": "Síť DHT je nedostupná.", + "Direct Messages": "Přímé zprávy", + "Disable": "Vypnuto", + "Display mentions to @": "Zobrazit zmínky o @", + "Display retransmissions": "Zobrazit přeposlané", + "DNS to obtain list of peers:": "DNS pro načtení seznamu uzlů:", + "downloading_block_chain": "Stahuji blockchain, prosím počkejte (blockchain je %{days} dnů starý).", + "download_posts_status": "Staženo %{portion} příspěvků", // Downloaded 10/30 posts + "Enable": "Zapnuto", + "error": "Chyba: %{error}", + "error_connecting_to_daemon": "Chyba: Nemohu se připojit k vašemu lokálnímu serveru.", + "Error in 'createwalletuser' RPC.": "Chyba v RPC funkci 'createwalletuser'.", + "Error in 'importprivkey'": "Chyba v RPC funkci 'importprivkey'. RPC: %{rpc}", + "Error in 'sendnewusertransaction' RPC.": "Chyba v RPC funkci 'sendnewusertransaction'.", + "Expand": "Rozbalit", // larger view of a post + "Favorite": "Přidat k oblíbeným", + "File APIs not supported in this browser.": "Upozornění: váš webový prohlížeč nepodporuje File API.", + "Follow": "Sledovat", + "Followed by": "tohoto uživatele sleduje", + "followed_by": "Uživatelé, které sleduje %{username}", + "Followers": "Sledující", + "Following": "Sledovaní", + "Following users": "Sledovaní uživatelé", + "Force connection to peer:": "Vyžádat připojení k uzlu:", + "General information": "Obecné informace", + "Generate blocks (send promoted messages)": "Generovat bloky (posílat přednostní příspěvky)", + "Home": "Domů", // homepage + "hours": "%{smart_count} hodinou |||| %{smart_count} hodinami |||| %{smart_count} hodinami", + "Internal error: lastPostId unknown (following yourself may fix!)": "Vnitřní chyba: neznámé lastPostId", + "Known peers:": "Známé uzly: ", + "Last block is ahead of your computer time, check your clock.": "Čas posledního bloku je popředu před časem vašeho počítače, zkontrolujte seřízení hodin.", + "mentions_at": "Zmínky o @%{user}", + "minutes": "%{smart_count} minutou |||| %{smart_count} minutami |||| %{smart_count} minutami", + "Must be 16 characters or less.": "Příliš dlouhé, maximum je 16 znaků.", // username + "Network": "Síť", + "Network config": "Nastavení sítě", + "Network status": "Stav sítě", + "New direct message...": "Nová přímá zpráva...", + "New Post...": "Nový příspěvek...", + "new_posts": "%{smart_count} nový příspěvek |||| %{smart_count} nové příspěvky |||| %{smart_count} nových příspěvků", + "nobody": "nikdo", // used to promote a post without attaching the user + "Not available": "Tuto přezdívku již někdo používá", // username is not available + "Number of blocks in block chain:": "Počet bloků v blockchainu: ", + "Number of CPUs to use": "Kolik jader procesoru použít? ", + "Only alphanumeric and underscore allowed.": "Povolena jsou jen písmena, čísla a podtržítko.", + "peer address": "adresa uzlu", + "dns address": "adresa dns", + "Private": "Soukromé", + "Profile": "Profil", + "Postboard": "Nástěnka", + "post": "vložit", // verb - button to post a message + "Post to promote:": "Váš přednostní příspěvek: ", + "Posts": "Příspěvky", + "propagating_nickname": "Posílám novou přezdívku %{username} do sítě...", + "Public": "Veřejné", + "Refresh": "Obnovit", + "retransmit_this": "Chcete tento příspěvek přeposlat těm, kdo vás sledují?", + "Reply": "Odpovědět", + "Reply...": "Odpověď...", + "reply_to": "Odpověď pro %{fullname}", + "Retransmit": "Přeposlat", + "Retransmits": "Přeposlání", + "Retransmitted by": "Přeposlal(a)", + "search": "hledat", + "seconds": "%{smart_count} vteřinou |||| %{smart_count} vteřinami |||| %{smart_count} vteřinami", + "send": "odeslat", + "Send post with username": "Příspěvek vložit pod přezdívkou ", + "Sent Direct Message": "Poslat přímou zprávu", + "Sent Post to @": "Poslat veřejný příspěvek pro @", + "Setup account": "Upravit profil", + "switch_to_network": "Váš lokální server ještě není připojen k síti, nebo teprve stahuje\n" + + "aktuální blockchain. Pokud zůstanete na této stránce, vaše akce možná\n" + + "nebudou fungovat. Chcete se místo toho podívat na stav sítě?", + "The File APIs are not fully supported in this browser.": "Upozornění: váš webový prohlížeč nepodporuje File API.", + "time_ago": "před %{time}", // 5 minutes ago + "Time of the last block:": "Čas posledního bloku: ", + "Type message here": "Sem napište příspěvek", + "Unfollow": "Přestat sledovat", + "Update": "Aktualizovat", + "Updating status...": "Aktualizuji stav...", // status of block chain + "user_not_yet_accepted": "Ostatní uzly ještě nepřijaly tohoto nového uživatele.\n" + + "Proto zatím není možné uložit profil nebo vkládat příspěvky.\n" + + "Počkejte prosím pár minut.\n\n" + + "Tlačítko \"Uložit změny\" bude po dokončení tohoto procesu automaticky\n" + + "povoleno. Slibujeme, že je to naposledy, co musíte čekat než budete moci\n"+ + "používat twister.\n" + + "Tip: vyberte si mezitím svůj obrázek!", + "users_mentions": "Zmínky o @%{username}", + "users_profile": "Profil %{username}", + "username_undefined": "Uživatelské jméno není definováno, je třeba se přihlásit.", + "View": "Zobrazit", + "View All": "Zobrazit vše", + "Who to Follow": "Koho sledovat", + "Your message was sent!": "Vaše zpráva byla odeslána!", + "twister login": "přihlášení na twister", + "Existing local users": "Existující lokální účty", + "Or...": "Nebo...", + "Create a new user": "Vytvořit nový účet", + "Login": "Přihlásit", + "Check availability": "Ověřit dostupnost", + "Create this nickname": "Vytvořit tuto přezdívku", + "Type nickname here": "Napište sem přezdívku", + "Import secret key": "Importovat tajný klíč", + "52-characters secret": "52 znaků dlouhý tajný klíč", + "With nickname": "S přezdívkou", + "Import key": "Importovat klíč", + "Client Version:": "Verze klienta:", + "Mining difficulty:": "Obtížnost pro mining:", + "Block generation status": "Stav generování bloků", + "Current hash rate:": "Aktuální rychlost hashování:", + "Terminate Daemon:": "Ukončit server:", + "Exit": "Konec", + "Save Changes": "Uložit změny", + "Secret key:": "Tajný klíč:", + "You have to log in to post messages.": "Pro vkládání příspěvků je třeba se přihlásit.", + "You have to log in to post replies.": "Pro vkládání odpovědí je třeba se přihlásit.", + "You have to log in to retransmit messages.": "Pro přeposílání příspěvků je třeba se přihlásit.", + "You have to log in to use direct messages.": "Pro používání přímých zpráv je třeba se přihlásit.", + "You have to log in to follow users.": "Pro sledování jiných uživatelů je třeba se přihlásit.", + "You are not following anyone because you are not logged in.": "Nikoho nesledujete, protože nejste přihlášen(a).", + "You don't have any followers because you are not logged in.": "Nikdo vás nesleduje, protože nejste přihlášen(a).", + "No one can mention you because you are not logged in.": "Nikdo se o vás nemůže zmínit, protože nejste přihlášen(a).", + "You don't have any profile because you are not logged in.": "Nemáte žádný profil, protože nejste přihlášen(a).", + "Options": "Možnosti", + "Switch to Promoted posts": "Přepnout na přednostní příspěvky", + "Switch to Normal posts": "Přepnout na normální příspěvky", + "Use language": "Jazyk", + "Ignore": "Ignorovat", + "Theme": "Styl grafiky", + "Keys": "Klávesy", + "Sound notifications": "Zvuková upozornění", + "Send key": "Klávesa pro odeslání", + "Posts display": "Zobrazení příspěvků", + "Post editor": "Editor příspěvků", + "Inline image preview": "Náhled vložených obrázků", + "Display": "Zobrazit", + "Line feeds": "Nové řádky", + "Supported punctuations:": "Podporovaná znaménka:", + "Supported emotions:": "Podporovaní smajlíci:", + "Supported signs:": "Podporované značky:", + "Supported fractions:": "Podporované zlomky:", + "Automatic unicode conversion options": "Automatická konverze znaků Unicode", + "Convert punctuations to unicode": "Konvertovat interpunkční znaménka do Unicode", + "Convert emotions codes to unicode symbols": "Konvertovat smajlíky do Unicode", + "Convert common signs to unicode": "Konvertovat běžné značky do Unicode", + "Convert fractions to unicode": "Konvertovat zlomky do Unicode", + "Convert all": "Konvertovat vše", + "Auto": "Detekovat automaticky", + "Original": "Původní", + "none": "žádné", + "Custom": "Vlastní nastavení", + "Mentions": "Zmínky", + "Use proxy for image preview only": "Používat proxy jen pro náhledy obrázků", + "Use external links behind a proxy": "Otevírat externí odkazy skrze proxy server", + "There aren't any posts with this hashtag.": "Nebyly nalezeny žádné příspěvky s tímto štítkem.", + "Split only new post": "Dělit pouze nově vkládaný příspěvek", + "Split all": "Dělit všechny", + "Don't split": "Nedělit", + "Split long posts": "Dělení dlouhých příspěvků", + "Posts that begin with mention": "Příspěvky začínající zmínkou", + "Show all": "Ukázat všechny", + "Show only if I am in": "Ukázat jen když zmiňují mně", + "Show if it's between users I follow": "Ukázat pokud jsou posílány mezi uživateli, které sleduji", + "Postboard displays": "Zobrazení na nástěnce", + "RTs those are close to original twist": "Přeposlání blízká původnímu příspěvku", + "Show if the original is older than": "Ukázat pokud je už originál starší než", + "hour(s)": "hodin", + "only numbers are allowed!": "povolena jsou jen čísla!", + "Show with every user name": "Ukázat u každé přezdívky", + "Show at profile modal only": "Ukázat jen v okně profilu", + "Show if a user follows me": "Ukazovat, zda mně uživatel sleduje", + "follows you": "sleduje vás", + "Show conversation": "Zobrazit rozhovor", + "Mark all as read": "Označit všechny jako přečtené", + "show_more_count": "%{smart_count} další... |||| %{smart_count} další... |||| %{smart_count} dalších...", + "hide": "skrýt", + "Show more in this conversation...": "Zobrazit tento rozhovor...", + "conversation_title": "Rozhovor uživatele @%{username}", + "copy_to_clipboard": "Stiskněte Ctrl+C pro zkopírování, a pak Enter pro zavření tohoto okénka.", + "Normal posts": "Normální příspěvky", + "Promoted posts": "Přednostní příspěvky", + "Messages": "Zprávy", + "Edit profile": "Upravit profil", + "Top Trends": "Hlavní trendy", + "twisted again by": "přeposlal(a)", + "undo": "zpět", + "Are you sure you want to exit the daemon?\nThe Twister client will stop working.": "Skutečně chcete ukončit server?\nTwister tím vypnete.", + "Daemon exited...": "Server ukončen...", + "Secret Key": "Tajný klíč", + "Copy to clipboard": "Kopírovat do clipboardu", + "Full name here": "Sem patří celé jméno", + "Describe yourself": "Napište něco o sobě", + "Location": "Místo, kde žijete", + "website": "Webové stránky", + "Tox address": "Adresa pro Tox", + "Bitmessage address": "Adresa pro Bitmessage", + "Language": "Jazyk", + "Sound": "Zvuky", + "Users": "Uživatelé", + }; +} + // uncomment to see all translated words replaced with filler //for(var word in wordset){ // wordset[word] = "AAAA"; diff --git a/js/interface_profile-edit.js b/js/interface_profile-edit.js index eb038f5..4ae2919 100755 --- a/js/interface_profile-edit.js +++ b/js/interface_profile-edit.js @@ -103,18 +103,22 @@ function verifyUserAlreadyInBlockchain() }); } else { if( !newUserWarnDisplayed ) { - alert("Other peers have not yet accepted this new user.\n" + - "Unfortunately it is not possible to save profile\n" + - "or send any posts in this state.\n\n" + - "Please wait a few minutes to continue.\n\n" + - "The 'Save Changes' will be automatically enabled\n" + - "when the process completes. (I promise this is\n"+ - "the last time you will have to wait before using\n" + - "twister).\n\n" + - "Tip: choose your avatar in the meantime!"); + alert(polyglot.t("user_not_yet_accepted")); newUserWarnDisplayed = true; } setTimeout("verifyUserAlreadyInBlockchain()", 5000); } }, {} ); } + +function localizePlaceholders() +{ + $(".input-name").attr("placeholder",polyglot.t("Full name here")); + $(".input-description").attr("placeholder",polyglot.t("Describe yourself")); + $(".input-city").attr("placeholder",polyglot.t("Location")); + $(".input-website").attr("placeholder",polyglot.t("website")); + $(".input-tox").attr("placeholder",polyglot.t("Tox address")); + $(".input-bitmessage").attr("placeholder",polyglot.t("Bitmessage address")); +} + +$(document).ready(localizePlaceholders); diff --git a/js/mobile_abstract.js b/js/mobile_abstract.js index 567d5e5..614c72b 100755 --- a/js/mobile_abstract.js +++ b/js/mobile_abstract.js @@ -98,7 +98,7 @@ var MAL = function() var newTweetsBarMenu = $(".userMenu").find(".menu-news"); // added for home menu entry if( newPosts ) { document.title = "(" + String(newPosts) + ") twister"; - newTweetsBar.text(String(newPosts) + " new posts"); + newTweetsBar.text(polyglot.t("new_posts", newPosts)); newTweetsBar.fadeIn("slow"); newTweetsBarMenu.text(String(newPosts)); newTweetsBarMenu.addClass("show"); diff --git a/js/options.js b/js/options.js index 803ab03..1953df6 100755 --- a/js/options.js +++ b/js/options.js @@ -105,6 +105,7 @@ var TwisterOptions = function() $('#language').val($.Options.getOption('locLang','auto')) $('#language').on('change', function(){ $.Options.setOption('locLang', $(this).val()); + location.reload(); }) } @@ -347,3 +348,14 @@ var TwisterOptions = function() jQuery.Options = new TwisterOptions; +function localizeLabels() +{ + $("label[for=tab_language]").text(polyglot.t("Language")); + $("label[for=t-2]").text(polyglot.t("Theme")); + $("label[for=t-3]").text(polyglot.t("Sound")); + $("label[for=t-4]").text(polyglot.t("Keys")); + $("label[for=t-5]").text(polyglot.t("Postboard")); + $("label[for=t-6]").text(polyglot.t("Users")); +} + +$(document).ready(localizeLabels); diff --git a/js/twister_following.js b/js/twister_following.js index eb19360..aca4fdf 100755 --- a/js/twister_following.js +++ b/js/twister_following.js @@ -477,7 +477,7 @@ function getWhoFollows(username, item) { fillWhoFollows(list, item, 0, (list.length > 5 ? 5 : list.length)); if (list.length > 5) { - var more_link = $('' + polyglot.t('show_more_count', {'count': list.length - 5}) + ''); + var more_link = $('' + polyglot.t('show_more_count', {'smart_count': list.length - 5}) + ''); more_link.on('click', function() { fillWhoFollows(list, item, 5, list.length - 5); diff --git a/js/twister_network.js b/js/twister_network.js index d953ee2..bcf2ee8 100755 --- a/js/twister_network.js +++ b/js/twister_network.js @@ -222,7 +222,7 @@ function setSpamMsg() { } function exitDaemon() { - if (confirm('Are you sure you want to exit the daemon?\nThe Twister client will stop working.')) { + if (confirm(polyglot.t("Are you sure you want to exit the daemon?\nThe Twister client will stop working."))) { $( ".terminate-daemon").text("Exiting..."); $( ".terminate-daemon").addClass("disabled"); $.MAL.disableButton( $( ".terminate-daemon") ); diff --git a/login.html b/login.html index cb270f9..32ba271 100755 --- a/login.html +++ b/login.html @@ -55,7 +55,7 @@

twister login

-

Existing local users

+

Existing local users

@@ -66,7 +66,7 @@
-

Create a new user

+

Create a new user

@@ -81,11 +81,11 @@
-

Import secret key

+

Import secret key

-

With nickname

+

With nickname

diff --git a/options.html b/options.html index 6f2aa2a..cf6d26a 100755 --- a/options.html +++ b/options.html @@ -73,6 +73,7 @@ + @@ -185,7 +186,7 @@

Posts display

-

Line feeds

+

Line feeds