diff --git a/customize.dist/messages.js b/customize.dist/messages.js index fdd11d3d6..32635fee7 100644 --- a/customize.dist/messages.js +++ b/customize.dist/messages.js @@ -1,126 +1,127 @@ -define(['/customize/languageSelector.js', - '/customize/translations/messages.js', - '/customize/translations/messages.es.js', - '/customize/translations/messages.fr.js', - - // 1) additional translation files can be added here... - - '/bower_components/jquery/dist/jquery.min.js'], - - // 2) name your language module here... - function(LS, Default, Spanish, French) { - var $ = window.jQuery; - - // 3) add your module to this map so it gets used - var map = { - 'fr': French, - 'es': Spanish, - }; - - var defaultLanguage = 'en'; - - var language = LS.getLanguage(); - - var messages; - - if (!language || language === defaultLanguage || language === 'default' || !map[language]) { - messages = Default; - } - else { - // Add the translated keys to the returned object - messages = $.extend(true, {}, Default, map[language]); - } - - // messages_languages return the available translations and their name in an object : - // { "en": "English", "fr": "French", ... } - messages._languages = { - 'en': Default._languageName - }; - for (var l in map) { - messages._languages[l] = map[l]._languageName || l; - } - - messages._initSelector = LS.main; - messages._checkTranslationState = function () { - var missing = []; - Object.keys(map).forEach(function (code) { - var translation = map[code]; - Object.keys(Default).forEach(function (k) { - if (/^_/.test(k) || /nitialState$/.test(k)) { return; } - if (!translation[k]) { - var warning = "key [" + k + "] is missing from translation [" + code + "]"; - missing.push(warning); - } - }); - if (typeof(translation._languageName) !== 'string') { - var warning = 'key [_languageName] is missing from translation [' + code + ']'; - missing.push(warning); - } - }); - return missing; - }; - - // Get keys with parameters - messages._getKey = function (key, argArray) { - if (!messages[key]) { return '?'; } - var text = messages[key]; - return text.replace(/\{(\d+)\}/g, function (str, p1) { - return argArray[p1] || null; - }); - }; - - messages._applyTranslation = function () { - $('[data-localization]').each(function (i, e) { - var $el = $(this); - var key = $el.data('localization'); - $el.html(messages[key]); - }); - $('[data-localization-title]').each(function (i, e) { - var $el = $(this); - var key = $el.data('localization-title'); - $el.attr('title', messages[key]); - }); - }; - - // Non translatable keys - messages.initialState = [ - '

', - 'This is CryptPad, the zero knowledge realtime collaborative editor.', - '
', - 'What you type here is encrypted so only people who have the link can access it.', - '
', - 'Even the server cannot see what you type.', - '

', - '

', - '', - 'What you see here, what you hear here, when you leave here, let it stay here', - '', - '

', - ].join(''); - - messages.codeInitialState = [ - '/*\n', - ' This is CryptPad, the zero knowledge realtime collaborative editor.\n', - ' What you type here is encrypted so only people who have the link can access it.\n', - ' Even the server cannot see what you type.\n', - ' What you see here, what you hear here, when you leave here, let it stay here.\n', - '*/' - ].join(''); - - messages.slideInitialState = [ - '# CryptSlide\n', - '* This is a zero knowledge realtime collaborative editor.\n', - '* What you type here is encrypted so only people who have the link can access it.\n', - '* Even the server cannot see what you type.\n', - '* What you see here, what you hear here, when you leave here, let it stay here.\n', - '\n', - '---', - '\n', - '# How to use\n', - '1. Write your slides content using markdown syntax\n', - '2. Separate your slides with ---\n', - '3. Click on the "Play" button to see the result' - ].join(''); - - return messages; -}); +define(['/customize/languageSelector.js', + '/customize/translations/messages.js', + '/customize/translations/messages.es.js', + '/customize/translations/messages.fr.js', + + // 1) additional translation files can be added here... + '/customize/translations/messages.pl.js', + '/bower_components/jquery/dist/jquery.min.js'], + + // 2) name your language module here... + function(LS, Default, Spanish, French, Polish) { + var $ = window.jQuery; + + // 3) add your module to this map so it gets used + var map = { + 'fr': French, + 'es': Spanish, + 'pl': Polish, + }; + + var defaultLanguage = 'en'; + + var language = LS.getLanguage(); + + var messages; + + if (!language || language === defaultLanguage || language === 'default' || !map[language]) { + messages = Default; + } + else { + // Add the translated keys to the returned object + messages = $.extend(true, {}, Default, map[language]); + } + + // messages_languages return the available translations and their name in an object : + // { "en": "English", "fr": "French", ... } + messages._languages = { + 'en': Default._languageName + }; + for (var l in map) { + messages._languages[l] = map[l]._languageName || l; + } + + messages._initSelector = LS.main; + messages._checkTranslationState = function () { + var missing = []; + Object.keys(map).forEach(function (code) { + var translation = map[code]; + Object.keys(Default).forEach(function (k) { + if (/^_/.test(k) || /nitialState$/.test(k)) { return; } + if (!translation[k]) { + var warning = "key [" + k + "] is missing from translation [" + code + "]"; + missing.push(warning); + } + }); + if (typeof(translation._languageName) !== 'string') { + var warning = 'key [_languageName] is missing from translation [' + code + ']'; + missing.push(warning); + } + }); + return missing; + }; + + // Get keys with parameters + messages._getKey = function (key, argArray) { + if (!messages[key]) { return '?'; } + var text = messages[key]; + return text.replace(/\{(\d+)\}/g, function (str, p1) { + return argArray[p1] || null; + }); + }; + + messages._applyTranslation = function () { + $('[data-localization]').each(function (i, e) { + var $el = $(this); + var key = $el.data('localization'); + $el.html(messages[key]); + }); + $('[data-localization-title]').each(function (i, e) { + var $el = $(this); + var key = $el.data('localization-title'); + $el.attr('title', messages[key]); + }); + }; + + // Non translatable keys + messages.initialState = [ + '

', + 'This is CryptPad, the zero knowledge realtime collaborative editor.', + '
', + 'What you type here is encrypted so only people who have the link can access it.', + '
', + 'Even the server cannot see what you type.', + '

', + '

', + '', + 'What you see here, what you hear here, when you leave here, let it stay here', + '', + '

', + ].join(''); + + messages.codeInitialState = [ + '/*\n', + ' This is CryptPad, the zero knowledge realtime collaborative editor.\n', + ' What you type here is encrypted so only people who have the link can access it.\n', + ' Even the server cannot see what you type.\n', + ' What you see here, what you hear here, when you leave here, let it stay here.\n', + '*/' + ].join(''); + + messages.slideInitialState = [ + '# CryptSlide\n', + '* This is a zero knowledge realtime collaborative editor.\n', + '* What you type here is encrypted so only people who have the link can access it.\n', + '* Even the server cannot see what you type.\n', + '* What you see here, what you hear here, when you leave here, let it stay here.\n', + '\n', + '---', + '\n', + '# How to use\n', + '1. Write your slides content using markdown syntax\n', + '2. Separate your slides with ---\n', + '3. Click on the "Play" button to see the result' + ].join(''); + + return messages; +}); diff --git a/customize.dist/translations/messages.pl.js b/customize.dist/translations/messages.pl.js new file mode 100644 index 000000000..f6d59142e --- /dev/null +++ b/customize.dist/translations/messages.pl.js @@ -0,0 +1,229 @@ +define(function () { + var out = {}; + + // translations must set this key for their language to be available in + // the language dropdowns that are shown throughout Cryptpad's interface + out._languageName = 'Polish'; + + out.main_title = "Cryptpad: Wspólne edytowanie w czasie rzeczywistym, bez wiedzy specjalistycznej"; + out.main_slogan = "Jedność siłą - Współpraca kluczem"; + + out.type = {}; + out.type.pad = 'Pad'; + out.type.code = 'Kod'; + out.type.poll = 'Balot'; + out.type.slide = 'Prezentacja'; + + out.errorBox_errorType_disconnected = 'Utracono połączenie'; + out.errorBox_errorExplanation_disconnected = [ + 'Połączenie z serwerem zostało zerwane, możesz odświeżyć połączenie przeładowując stronę lub kontynuować przeglądanie dokumentu ', + 'klikając poza obszar komunikatu.' + ].join(''); + + out.common_connectionLost = 'Przerwano połączenie z serwerem'; + + out.disconnected = 'Rozłączony'; + out.synchronizing = 'Synchronizacja'; + out.reconnecting = 'Wznawianie połączenia...'; + out.lag = 'Lag'; + out.readonly = 'Tylko do odczytu'; + out.anonymous = "Anonimowy"; + out.yourself = "Ty"; + out.anonymousUsers = "użytkownicy anonimowi"; + out.anonymousUser = "użytkownik anonimowy"; + out.shareView = "URL tylko do odczytu"; + out.shareEdit = "URL do edycji"; + out.users = "Użytkownicy"; + out.and = "i"; + out.viewer = "czytający"; + out.viewers = "osoby czytające"; + out.editor = "edytujący"; + out.editors = "osoby edytujące"; + + out.greenLight = "Wszystkie systemy działają poprawnie"; + out.orangeLight = "Słabe łącze może wpłynąć na działanie aplikacji"; + out.redLight = "Zostałeś rozłączony z sesją"; + + out.importButton = 'IMPORTUJ'; + out.importButtonTitle = 'Importuj dokument z pliku lokalnego'; + + out.exportButton = 'EXPORTUJ'; + out.exportButtonTitle = 'Zapisz ten dokument do pliku'; + out.exportPrompt = 'Jak chciałbyś nazwać swój plik?'; + + out.back = '⇐ Wróć'; + out.backToCryptpad = '⇐ Wróć do Cryptpad'; + + out.userButton = 'UŻYTKOWNIK'; + out.userButtonTitle = 'Zmień swoją nazwę użytkownika'; + out.changeNamePrompt = 'Zmień swoją nazwę (Pozostaw puste, by być anonimowym): '; + + out.renameButton = 'PRZEMIANUJ'; //Can be changed to "Zmień nazwę" + out.renameButtonTitle = 'Zmień nazwę pod którą plik wyświetli się na stronie głównej'; + out.renamePrompt = 'Jak chciałbyś nazwać ten pad?'; + out.renameConflict = 'Inny pad już ma taką nazwę'; + out.clickToEdit = "Naciśnij by edytować"; + + out.forgetButton = 'ZAPOMNIJ'; + out.forgetButtonTitle = 'Usuń ten dokument z listy wyświetlanej na stronie głównej'; + out.forgetPrompt = 'Wciskając OK usuniesz ten URL z pamięci lokalnej, jesteś tego pewien?'; + + out.shareButton = 'Udostępnij'; + out.shareButtonTitle = "Kopiuj URL do schowka"; + out.shareSuccess = 'Pomyślnie skopiowano URL'; + out.shareFailed = "Wystąpił błąd przy kopiowaniu"; + + out.presentButton = 'PREZENTUJ'; + out.presentButtonTitle = "Otwórz tryb prezentacji"; + out.presentSuccess = 'Naciśnij ESC aby wyjść z trybu prezentacji'; + out.sourceButton = 'POKAŻ ŹRÓDŁO'; + out.sourceButtonTitle = "Opuść tryb prezentacji"; + + out.backgroundButton = 'KOLOR TŁA'; + out.backgroundButtonTitle = 'Zmień kolor tła dla tej prezentacji'; + out.colorButton = 'KOLOR TEKSTU'; + out.colorButtonTitle = 'Zmień kolor tekstu dla tej prezentacji'; + + out.commitButton = 'ZAPISZ'; //Can be discussed + + out.getViewButton = 'URL tylko do odczytu'; + out.getViewButtonTitle = 'Kopiuj URL dokumentu tylko do odczytu'; + out.readonlyUrl = 'Dokument tylko do odczytu'; + out.copyReadOnly = "Kopiuj URL do schowka"; + out.openReadOnly = "Otwórz w nowej karcie"; + out.editShare = "Udostępnij URL do edycji"; + out.editShareTitle = "Zapisz URL do edycji w schowku"; + out.viewShare = "Udostępnij URL tylko do odczytu"; + out.viewShareTitle = "Zapisz URL tylko do odczytu w schowku"; + out.viewOpen = "Otwórz podgląd w nowej karcie"; + out.viewOpenTitle = "Otwórz ten dokument w nowej karcie, tylko do odczytu"; + + out.notifyJoined = "{0} dołączył do sesji współpracy"; + out.notifyRenamed = "{0} jest teraz znany jako {1}"; + out.notifyLeft = "{0} opuścił sesję współpracy"; + + out.disconnectAlert = 'Utracono połączenie sieciowe!'; + + out.tryIt = 'Wypróbuj!'; + out.recentPads = 'Ostatnio otwarte dokumenty (przechowywane jedynie w twojej przeglądarce)'; + + out.okButton = 'OK (enter)'; + out.cancelButton = 'Anuluj (esc)'; + + out.loginText = '

Twoja nazwa użytkownika i hasło są użyte do wygenerowania unikalnego klucza nie zapisanego na serwerze.

\n' + + '

Uważaj by nie zapomnieć swoich danych, odzyskanie ich jest niemożliwe.

'; + + out.forget = "Zapomnij"; + + // Polls + + out.poll_title = "Prosty koordynator planu dnia"; // Choice of "Koordynator" can be discussed + out.poll_subtitle = "Proste planowanie tygodnia, w czasie rzeczywistym"; + + out.poll_p_save = "Twoje ustawienia aktualizowane są na bierząco. Nie martw się o zapisywanie."; + out.poll_p_encryption = "Wszystko co robisz jest szyfrowane, więc tylko osoby z linkiem mają tu dostęp. Nawet serwer nie widzi co kombinujesz."; + out.poll_p_howtouse = "Wpisz swoje imię w polu poniżej i zaznacz kiedy będziesz dostępny."; + + out.promptName = "Jak się nazywasz ?"; + + out.wizardButton = 'KREATOR'; + out.wizardLog = "Naciśnij przycisk w lewym-górnym rogu by wrócić do planu"; + out.wizardTitle = "Uzyj kreatora by stworzyć opcje do głosowanie"; + out.wizardConfirm = "Jesteś pewny, że chcesz dodać te opcje do głosowania?"; + + out.poll_closeWizardButton = "Zamknij kreator"; + out.poll_closeWizardButtonTitle = "Zamyka kreator"; + out.poll_wizardComputeButton = "Ustawienia kalkulacji"; + out.poll_wizardClearButton = "Wyczyść tabelę"; + out.poll_wizardDescription = "Automatycznie stwórz część opcji poprzez wpisanie ilości dat i godzin"; + out.poll_wizardAddDateButton = "+ Daty"; + out.poll_wizardAddTimeButton = "+ Godziny"; + + out.poll_addUserButton = "+ Użytkownik"; + out.poll_addUserButtonTitle = "Naciśnij, by dodać użytkownika"; + out.poll_addOptionButton = "+ Opcja"; + out.poll_addOptionButtonTitle = "Naciśnij, by dodać opcję"; + out.poll_addOption = "Zaproponuj opcję"; + out.poll_optionPlaceholder = "Opcja"; + out.poll_addUser = "Podaj imię"; + out.poll_userPlaceholder = "Twoje imię"; + out.poll_removeOption = "Jesteś pewien, że chcesz usunąć tę opcję?"; + out.poll_removeOptionTitle = "Usuń wiersz"; + out.poll_removeUser = "Jesteś pewien, że chcesz usunąć tego użytkownika?"; + out.poll_removeUserTitle = "Usuń kolumnę"; + out.poll_editOption = "Jesteś pewien, że chcesz edytować tę opcję?"; + out.poll_editOptionTitle = "Edytuj wiersz"; + out.poll_editUser = "Jesteś pewien, że chcesz edytować tego uzytkownika?"; + out.poll_editUserTitle = "Edytuj kolumnę"; + + out.poll_titleHint = "Tytuł"; + out.poll_descriptionHint = "Opis"; + + // index.html + + out.main_p1 = 'CryptPad to edytor czasu rzeczywistego stawiający na wspólpracę i prostotę użytkowania. Szyfrowanie w twojej przeglądarce, chroni twoje dane przed serwerem, chmurą i ABW. Tajny klucz jest przechowywany w adresie strony identyfikator fragmentu w URI którego nigdy nie przekazujemy serwerowi, a dostępny jest dla javascript. Udostępniając URL(link), przekazujesz innym upoważnienie do uczestnictwa.'; + out.main_p2 = 'Ten projekt wykorzystuje wizualny edytor CKEditor , CodeMirror, oraz silnik czasu rzeczywistego ChainPad.'; + out.main_howitworks = 'Jak to działa'; + out.main_howitworks_p1 = 'CryptPad wykorzystuje wariant algorytmu Transformacji operacyjnej który jest wstanie odnaleźć rozdzielony konsensus wprowadzanych danych. Używa do tego Łańcuch blokowy Nakamoto, twór zpopularyzowany przez Bitcoin. W ten sposób algorytm może pominąć potrzebę centralnego serwera do rozwiązywania Konfliktów Operacji Przekształcania poprzez Edycję. Bez potrzeby rozwiązywania konfliktów, serwer może pozostać w niewiedzy o zawartości która jest edytowana w dokumencie.'; + out.main_about = 'O projekcie'; + out.main_about_p1 = 'Możesz przeczytać więcej o naszej polityce prywatności oraz warunkach korzystania z usług.'; + + out.main_about_p2 = 'Jeżeli masz jakieś pytania lub komentarze, możesz napisać na tweeterze, otworzyć problem na githubie, przywitać się na ircu (irc.freenode.net), lub wysłać nam email.'; + + out.table_type = 'Typ'; + out.table_link = 'Link'; + out.table_created = 'Stworzone'; + out.table_last = 'Ostatnio otwarte'; + + out.button_newpad = 'STWÓRZ NOWY PAD WYSIWYG'; + out.button_newcode = 'STWÓRZ NOWY PAD DO KODU'; + out.button_newpoll = 'STWÓRZ NOWE GŁOSOWANIE'; + out.button_newslide = 'STWÓRZ NOWĄ PREZENTACJĘ'; + + // privacy.html + + out.policy_title = 'Polityka prywatności CryptPad'; + out.policy_whatweknow = 'Co o tobie wiemy'; + out.policy_whatweknow_p1 = 'Jako aplikacja udostępniana w internecie, CryptPad ma dostęp do metadanych wystawianych przez protokół HTTP. W skład tych danych wchodzi adres IP oraz różne inne nagłówki HTTP które pozwalają na identyfikację twojej przeglądarki. Możesz podejrzeć jakie informacje udostępnia twoja przeglądarka odwiedzając WhatIsMyBrowser.com.'; + out.policy_whatweknow_p2 = 'Używamy Piwik, Open Sourcowej platformy analitycznej, aby dowiedzieć się czegoś o naszych użytkownikach. Piwik mówi nam, skąd dowiedziałeś się o Cryptpad. Bezpośrednio przez adres, silnik wyszukiwany, czy z polecenia innej usługi internetowej jak Reddit czy Twitter. Uczymy się również gdy nas odwiedzasz, jakie linki odwiedzasz z naszej strony informacyjnej i jak długo pozostajesz na konkretnych stronach.'; + out.policy_whatweknow_p3 = 'Te narzędzia analityczne wykorzystywane są wyłącznie na strona informacyjncyh. Nie zbieramy informacji o twoim użytkowaniu naszej aplikacji.'; + out.policy_howweuse = 'Jak wykorzystujemy zebraną wiedzę'; + out.policy_howweuse_p1 = 'Dzieki tym informacjom możemy podejmować lepsze decyzje przy promocji CryptPad, poprzez ocenę które z podjętych przez nas prób okazały się udane. Informacja o twojej lokalizacji daje nam znać, czy powinniśmy zapewnić lepsze wsparcie dla języków poza Angielskim.'; + out.policy_howweuse_p2 = "Informacje o twojej przeglądarce (czy jest to aplikacja desktopowa, czy działająca na systemie mobilnym) pozwalają nam na decydowanie przy priorytezowaniu ulepszeń funkcji. Nasz zespół deweloperski jest mały, a my staramy się dokonywać wyborów które poprawią doświadczenia jak największej liczby użytkowników."; + out.policy_whatwetell = 'Jakie dane przekazujemy innym'; + out.policy_whatwetell_p1 = 'Nie dostarczamy osobom trzecim żadnych danych które udało się nam zebrać, lub tych które nam przekazałeś sam, dopóki nie jesteśmy do tego zobligowani prawnie.'; + out.policy_links = 'Adresy innych stron'; + out.policy_links_p1 = 'Ta witryna zawiera łącza do innych stron, włączając w to te stworzone przez inne organizacje. Nie jesteśmy odpowiedzialni za praktyki dotyczące prywatności oraz zawartość usługodawców poza tą witryną. Jako główną zasadę przyjmujemy, że łącza do stron zewnętrznych uruchamiane są w nowej karcie lub oknie, aby upewnić cię iż opuszczasz Cryptpad.'; + out.policy_ads = 'Promocja i reklama'; + out.policy_ads_p1 = 'Nie wyświetlamy żadnej zawartości promocyjnej online, choć możemy udostępniać łącza do podmiotów finansujących nasze badania.'; + out.policy_choices = 'Co możesz zrobić'; + out.policy_choices_open = 'Nasz kod jest open source, więc zawsze masz możliwość hostowania swojej własnej wersji Cryptpad.'; + out.policy_choices_vpn = 'Jeżeli chcesz korzystać z wersji udostępnianej przez nas, lecz nie chcesz pokazywać swojego adresu IP, możesz chronić swój adres wykorzystując przeglądarki Tor, lub VPN.'; + out.policy_choices_ads = 'Masz również możliwość blokady naszej platformy analitycznej wykorzystując narzędzia adblock, takie jak Privacy Badger.'; + + // terms.html + + out.tos_title = "Warunki korzystania z usług Cryptpad"; + out.tos_legal = "Prosimy nie bądź złośliwy, obelżywy i nie wykorzystuj tego oprogramowania do cełow niezgodnych z prawem."; + out.tos_availability = "Mamy nadzieję iż uznasz tą usługę za przydatną, lecz dostępność i wydajność nie mogą być przez nas gwarantwane. Prosimy, eksportuj swoje dane regularnie."; + out.tos_e2ee = "Dokumenty Cryptpad mogą być odczytywane i modyfikowane przez każdego kto może zgadnąć lub w inny sposób uzyskać identyfikator dokumentu. Zalecamy abyś korzystał z oprogramowania do szyfrowania końcowego (e2ee) wiadomości sieciowych i nie będziesz rościł sobie żadnych wierzytelności w wypadku gdy taki URL dostanie się w niepowołane ręce."; + out.tos_logs = "Metadane dostarczane przez twoją przeglądarkę do serwera mogą być zapisywane i przechowywane w celu utrzymywania serwisu."; + out.tos_3rdparties = "Nie dostarczamy indywidualizowanych danych do osób trzecich, poza sytuacjami dyktowanymi prawnie."; + + // BottomBar.html + + out.bottom_france = 'Stworzone z we '; + out.bottom_support = 'Projekt XWiki SAS Labs we wspolpracy z OpenPaaS-ng'; + + // Header.html + + out.header_france = 'Pełne z France od XWiki SAS'; + + + // TODO Hardcode cause YOLO + //out.header_xwiki = 'XWiki SAS'; + out.header_support = ' OpenPaaS-ng'; + out.header_logoTitle = 'Przejdź na stronę główną'; + + return out; +});