From 4d9f929ca34cb1dce12be685bce57842e0ff9190 Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Mon, 15 Aug 2016 13:12:49 +1200 Subject: [PATCH 1/9] Update translations --- admin/javascript/lang/hr.js | 30 +++++ admin/javascript/lang/ru.js | 24 ++-- admin/javascript/lang/src/hr.js | 22 ++++ admin/javascript/lang/src/ru.js | 24 ++-- javascript/lang/hr.js | 49 +++++++ javascript/lang/src/hr.js | 41 ++++++ lang/cs.yml | 9 ++ lang/eo.yml | 9 ++ lang/hr.yml | 227 ++++++++++++++++++++++++++++++++ lang/ru.yml | 164 +++++++++++++++++++++++ lang/sk.yml | 9 ++ 11 files changed, 584 insertions(+), 24 deletions(-) create mode 100644 admin/javascript/lang/hr.js create mode 100644 admin/javascript/lang/src/hr.js create mode 100644 javascript/lang/hr.js create mode 100644 javascript/lang/src/hr.js diff --git a/admin/javascript/lang/hr.js b/admin/javascript/lang/hr.js new file mode 100644 index 000000000..9762f754d --- /dev/null +++ b/admin/javascript/lang/hr.js @@ -0,0 +1,30 @@ +// This file was generated by silverstripe/cow from admin/javascript/lang/src/hr.js. +// See https://github.com/tractorcow/cow for details +if (typeof(ss) === 'undefined' || typeof(ss.i18n) === 'undefined') { + if (typeof(console) !== 'undefined') { // eslint-disable-line no-console + console.error('Class ss.i18n not defined'); // eslint-disable-line no-console + } +} else { + ss.i18n.addDictionary('hr', { + "CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nAre you sure you want to archive these pages?\n\nThese pages and all of their children pages will be unpublished and sent to the archive.", + "CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", + "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", + "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", + "CMSMAIN.BATCH_RESTORE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to restore to stage?\n\nChildren of archived pages will be restored to the root level, unless those pages are also being restored.", + "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "Označili ste {num} stranicu(a).\n\nJeste li sigurni da želite odjaviti?", + "CMSMAIN.SELECTONEPAGE": "Molimo odaberite bar jednu stranicu", + "Campaigns.ADDCAMPAIGN": "Dodaj kampanju", + "Campaigns.ITEM_SUMMARY_PLURAL": "%s stavki", + "Campaigns.ITEM_SUMMARY_SINGULAR": "%s stavka", + "Campaigns.PUBLISHCAMPAIGN": "Objavi kampanju", + "Campaigns.REVERTCAMPAIGN": "Vrati", + "LeftAndMain.CONFIRMUNSAVED": "Jeste li sigurni da želite otići s ove stranice?\n\nUPOZORENJE: Vaše promjene nisu spremljene.\n\nPritisnike OK za nastavka, ili Odustani za ostati na trenutnoj stranici.", + "LeftAndMain.CONFIRMUNSAVEDSHORT": "UPOZORENJE: Vaše promjene nisu spremljene.", + "LeftAndMain.PAGEWASDELETED": "Ova stranica je obrisana. Za uređivanje stranice, odaberite je s lijeve stranice.", + "ModelAdmin.DELETED": "Obrisano", + "ModelAdmin.REALLYDELETE": "Jeste li sigurni da želite obrisati?", + "ModelAdmin.SAVED": "Spremljeno", + "ModelAdmin.VALIDATIONERROR": "Greška validacije", + "SecurityAdmin.BATCHACTIONSDELETECONFIRM": "Jeste li sigurni da želite obrisati %s grupe?" +}); +} \ No newline at end of file diff --git a/admin/javascript/lang/ru.js b/admin/javascript/lang/ru.js index c503fc19e..c2b1fc0ae 100644 --- a/admin/javascript/lang/ru.js +++ b/admin/javascript/lang/ru.js @@ -6,18 +6,18 @@ if (typeof(ss) === 'undefined' || typeof(ss.i18n) === 'undefined') { } } else { ss.i18n.addDictionary('ru', { - "CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nAre you sure you want to archive these pages?\n\nThese pages and all of their children pages will be unpublished and sent to the archive.", - "CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", - "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", - "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", - "CMSMAIN.BATCH_RESTORE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to restore to stage?\n\nChildren of archived pages will be restored to the root level, unless those pages are also being restored.", - "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish", - "CMSMAIN.SELECTONEPAGE": "Please select at least one page", - "Campaigns.ADDCAMPAIGN": "Add campaign", - "Campaigns.ITEM_SUMMARY_PLURAL": "%s items", - "Campaigns.ITEM_SUMMARY_SINGULAR": "%s item", - "Campaigns.PUBLISHCAMPAIGN": "Publish campaign", - "Campaigns.REVERTCAMPAIGN": "Revert", + "CMSMAIN.BATCH_ARCHIVE_PROMPT": "Вы выбрали {num} страниц(у)\nВы уверены что хотите отправить их в архив?\n\nПубликации этих страниц и их под-страниц будут отменены и отправлены в архив. ", + "CMSMAIN.BATCH_DELETELIVE_PROMPT": "Вы выбрали {num} страниц(у)\n\nВы уверены что хотите отменить публикацию этих страниц?", + "CMSMAIN.BATCH_DELETE_PROMPT": "Вы выбрали {num} страниц(у)\n\nВы уверены что хотите их удалить?", + "CMSMAIN.BATCH_PUBLISH_PROMPT": "Вы выбрали {num} страниц(у)\n\nВы уверены что хотите их опубликовать?", + "CMSMAIN.BATCH_RESTORE_PROMPT": "Вы выбрали {num} страниц(у)\n\nВы уверены что хотите восстановить эти страницы в черновик?\n\nПод-страницы архивных страниц будут восстановлены в корень если эти страницы также не отмечены для восстановления.", + "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "Вы выбрали {num} страниц(у)\n\nВы уверены что хотите отменить их публикацию?", + "CMSMAIN.SELECTONEPAGE": "Пожалуйста, выберите хотя бы одну страницу.", + "Campaigns.ADDCAMPAIGN": "Добавить кампанию", + "Campaigns.ITEM_SUMMARY_PLURAL": "%s элементов", + "Campaigns.ITEM_SUMMARY_SINGULAR": "%s элемент", + "Campaigns.PUBLISHCAMPAIGN": "Опубликовать кампанию", + "Campaigns.REVERTCAMPAIGN": "Отменить", "LeftAndMain.CONFIRMUNSAVED": "Вы действительно хотите покинуть эту страницу?\n\nВНИМАНИЕ: Ваши изменения не были сохранены.\n\nНажмите ОК, чтобы продолжить или Отмена, чтобы остаться на текущей странице.", "LeftAndMain.CONFIRMUNSAVEDSHORT": "ВНИМАНИЕ: Ваши изменения не были сохранены", "LeftAndMain.PAGEWASDELETED": "Эта страница была удалена. Чтобы изменить страницу, выберите её из списка слева.", diff --git a/admin/javascript/lang/src/hr.js b/admin/javascript/lang/src/hr.js new file mode 100644 index 000000000..7909423df --- /dev/null +++ b/admin/javascript/lang/src/hr.js @@ -0,0 +1,22 @@ +{ + "CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nAre you sure you want to archive these pages?\n\nThese pages and all of their children pages will be unpublished and sent to the archive.", + "CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", + "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", + "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", + "CMSMAIN.BATCH_RESTORE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to restore to stage?\n\nChildren of archived pages will be restored to the root level, unless those pages are also being restored.", + "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "Označili ste {num} stranicu(a).\n\nJeste li sigurni da želite odjaviti?", + "CMSMAIN.SELECTONEPAGE": "Molimo odaberite bar jednu stranicu", + "Campaigns.ADDCAMPAIGN": "Dodaj kampanju", + "Campaigns.ITEM_SUMMARY_PLURAL": "%s stavki", + "Campaigns.ITEM_SUMMARY_SINGULAR": "%s stavka", + "Campaigns.PUBLISHCAMPAIGN": "Objavi kampanju", + "Campaigns.REVERTCAMPAIGN": "Vrati", + "LeftAndMain.CONFIRMUNSAVED": "Jeste li sigurni da želite otići s ove stranice?\n\nUPOZORENJE: Vaše promjene nisu spremljene.\n\nPritisnike OK za nastavka, ili Odustani za ostati na trenutnoj stranici.", + "LeftAndMain.CONFIRMUNSAVEDSHORT": "UPOZORENJE: Vaše promjene nisu spremljene.", + "LeftAndMain.PAGEWASDELETED": "Ova stranica je obrisana. Za uređivanje stranice, odaberite je s lijeve stranice.", + "ModelAdmin.DELETED": "Obrisano", + "ModelAdmin.REALLYDELETE": "Jeste li sigurni da želite obrisati?", + "ModelAdmin.SAVED": "Spremljeno", + "ModelAdmin.VALIDATIONERROR": "Greška validacije", + "SecurityAdmin.BATCHACTIONSDELETECONFIRM": "Jeste li sigurni da želite obrisati %s grupe?" +} \ No newline at end of file diff --git a/admin/javascript/lang/src/ru.js b/admin/javascript/lang/src/ru.js index 48d176240..581f85b5d 100644 --- a/admin/javascript/lang/src/ru.js +++ b/admin/javascript/lang/src/ru.js @@ -1,16 +1,16 @@ { - "CMSMAIN.BATCH_ARCHIVE_PROMPT": "You have {num} page(s) selected.\n\nAre you sure you want to archive these pages?\n\nThese pages and all of their children pages will be unpublished and sent to the archive.", - "CMSMAIN.BATCH_DELETELIVE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete these pages from live?", - "CMSMAIN.BATCH_DELETE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to delete?", - "CMSMAIN.BATCH_PUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to publish?", - "CMSMAIN.BATCH_RESTORE_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to restore to stage?\n\nChildren of archived pages will be restored to the root level, unless those pages are also being restored.", - "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "You have {num} page(s) selected.\n\nDo you really want to unpublish", - "CMSMAIN.SELECTONEPAGE": "Please select at least one page", - "Campaigns.ADDCAMPAIGN": "Add campaign", - "Campaigns.ITEM_SUMMARY_PLURAL": "%s items", - "Campaigns.ITEM_SUMMARY_SINGULAR": "%s item", - "Campaigns.PUBLISHCAMPAIGN": "Publish campaign", - "Campaigns.REVERTCAMPAIGN": "Revert", + "CMSMAIN.BATCH_ARCHIVE_PROMPT": "Вы выбрали {num} страниц(у)\nВы уверены что хотите отправить их в архив?\n\nПубликации этих страниц и их под-страниц будут отменены и отправлены в архив. ", + "CMSMAIN.BATCH_DELETELIVE_PROMPT": "Вы выбрали {num} страниц(у)\n\nВы уверены что хотите отменить публикацию этих страниц?", + "CMSMAIN.BATCH_DELETE_PROMPT": "Вы выбрали {num} страниц(у)\n\nВы уверены что хотите их удалить?", + "CMSMAIN.BATCH_PUBLISH_PROMPT": "Вы выбрали {num} страниц(у)\n\nВы уверены что хотите их опубликовать?", + "CMSMAIN.BATCH_RESTORE_PROMPT": "Вы выбрали {num} страниц(у)\n\nВы уверены что хотите восстановить эти страницы в черновик?\n\nПод-страницы архивных страниц будут восстановлены в корень если эти страницы также не отмечены для восстановления.", + "CMSMAIN.BATCH_UNPUBLISH_PROMPT": "Вы выбрали {num} страниц(у)\n\nВы уверены что хотите отменить их публикацию?", + "CMSMAIN.SELECTONEPAGE": "Пожалуйста, выберите хотя бы одну страницу.", + "Campaigns.ADDCAMPAIGN": "Добавить кампанию", + "Campaigns.ITEM_SUMMARY_PLURAL": "%s элементов", + "Campaigns.ITEM_SUMMARY_SINGULAR": "%s элемент", + "Campaigns.PUBLISHCAMPAIGN": "Опубликовать кампанию", + "Campaigns.REVERTCAMPAIGN": "Отменить", "LeftAndMain.CONFIRMUNSAVED": "Вы действительно хотите покинуть эту страницу?\n\nВНИМАНИЕ: Ваши изменения не были сохранены.\n\nНажмите ОК, чтобы продолжить или Отмена, чтобы остаться на текущей странице.", "LeftAndMain.CONFIRMUNSAVEDSHORT": "ВНИМАНИЕ: Ваши изменения не были сохранены", "LeftAndMain.PAGEWASDELETED": "Эта страница была удалена. Чтобы изменить страницу, выберите её из списка слева.", diff --git a/javascript/lang/hr.js b/javascript/lang/hr.js new file mode 100644 index 000000000..5770bf232 --- /dev/null +++ b/javascript/lang/hr.js @@ -0,0 +1,49 @@ +// This file was generated by silverstripe/cow from javascript/lang/src/hr.js. +// See https://github.com/tractorcow/cow for details +if (typeof(ss) === 'undefined' || typeof(ss.i18n) === 'undefined') { + if (typeof(console) !== 'undefined') { // eslint-disable-line no-console + console.error('Class ss.i18n not defined'); // eslint-disable-line no-console + } +} else { + ss.i18n.addDictionary('hr', { + "FILEIFRAMEFIELD.CONFIRMDELETE": "Jeste li sigurni da želite obrisati ovu datoteku?", + "FILEIFRAMEFIELD.DELETEFILE": "Obriši datoteku", + "FILEIFRAMEFIELD.DELETEIMAGE": "Obriši sliku", + "FILEIFRAMEFIELD.UNATTACHFILE": "Un-Attach File", + "GRIDFIELD.ERRORINTRANSACTION": "An error occured while fetching data from the server\n Please try again later.", + "HASMANYFILEFIELD.UPLOADING": "Prebacujem... %s", + "HtmlEditorField.SelectAnchor": "Odaberite sidro", + "LOADING": "učitavam...", + "LeftAndMain.IncompatBrowserWarning": "Vaš browser nije kompatibilan s CMS sučeljem. Molimo koristite Internet Explorer 7+, Google Chrome 10+ ili Mozilla Firefox 3.5+.", + "RESTRICTEDTEXTFIELD.CHARCANTBEUSED": "The character '%s' cannot be used in this field", + "TABLEFIELD.DELETECONFIRMMESSAGE": "Are you sure you want to delete this record?", + "TreeDropdownField.ENTERTOSEARCH": "Press enter to search", + "TreeDropdownField.FieldTitle": "Odaberi", + "TreeDropdownField.OpenLink": "Otvori", + "TreeDropdownField.SearchFieldTitle": "Odaberi ili traži", + "UNIQUEFIELD.CANNOTLEAVEEMPTY": "Ovo polje ne može biti prazno", + "UNIQUEFIELD.ENTERNEWVALUE": "Morate unesti novu vrijednost za ovo polje", + "UNIQUEFIELD.SUGGESTED": "Promjenjene vrijednosti u '%s' : %s", + "UPDATEURL.CONFIRM": "Would you like me to change the URL to:\n\n%s/\n\nClick Ok to change the URL, click Cancel to leave it as:\n\n%s", + "UPDATEURL.CONFIRMURLCHANGED": "The URL has been changed to\n'%s'", + "UploadField.ConfirmDelete": "Are you sure you want to remove this file from the server filesystem?", + "UploadField.EMPTYRESULT": "Empty file upload result", + "UploadField.Editing": "Uređujem...", + "UploadField.HTML_MAXFILESIZE": "File exceeds MAX_FILE_SIZE (HTML form directive)", + "UploadField.INVALIDEXTENSION": "Extension is not allowed", + "UploadField.LOADING": "Učitavam ...", + "UploadField.MAXNUMBEROFFILESSIMPLE": "Maksimalan broj datoteka premašen", + "UploadField.NOFILEUPLOADED": "Datoteka nije uploadana", + "UploadField.NOTMPFOLDER": "Nedostaje privremeni direktorij", + "UploadField.ONLYPARTIALUPLOADED": "Datoteka je djelimično uploadana", + "UploadField.OVERWRITEWARNING": "File with the same name already exists", + "UploadField.PHP_MAXFILESIZE": "File exceeds upload_max_filesize (php.ini directive)", + "UploadField.STOPEDBYEXTENSION": "File upload stopped by extension", + "UploadField.TOOLARGE": "Veličina datoteke je prevelika", + "UploadField.TOOSMALL": "Veličina datoteke je premala", + "UploadField.UPLOADEDBYTES": "Uploaded bytes exceed file size", + "UploadField.Uploaded": "Prenešeno", + "UploadField.WRITEFAILED": "Failed to write file to disk", + "VALIDATOR.FIELDREQUIRED": "Please fill out \"%s\", it is required." +}); +} \ No newline at end of file diff --git a/javascript/lang/src/hr.js b/javascript/lang/src/hr.js new file mode 100644 index 000000000..797c90f51 --- /dev/null +++ b/javascript/lang/src/hr.js @@ -0,0 +1,41 @@ +{ + "FILEIFRAMEFIELD.CONFIRMDELETE": "Jeste li sigurni da želite obrisati ovu datoteku?", + "FILEIFRAMEFIELD.DELETEFILE": "Obriši datoteku", + "FILEIFRAMEFIELD.DELETEIMAGE": "Obriši sliku", + "FILEIFRAMEFIELD.UNATTACHFILE": "Un-Attach File", + "GRIDFIELD.ERRORINTRANSACTION": "An error occured while fetching data from the server\n Please try again later.", + "HASMANYFILEFIELD.UPLOADING": "Prebacujem... %s", + "HtmlEditorField.SelectAnchor": "Odaberite sidro", + "LOADING": "učitavam...", + "LeftAndMain.IncompatBrowserWarning": "Vaš browser nije kompatibilan s CMS sučeljem. Molimo koristite Internet Explorer 7+, Google Chrome 10+ ili Mozilla Firefox 3.5+.", + "RESTRICTEDTEXTFIELD.CHARCANTBEUSED": "The character '%s' cannot be used in this field", + "TABLEFIELD.DELETECONFIRMMESSAGE": "Are you sure you want to delete this record?", + "TreeDropdownField.ENTERTOSEARCH": "Press enter to search", + "TreeDropdownField.FieldTitle": "Odaberi", + "TreeDropdownField.OpenLink": "Otvori", + "TreeDropdownField.SearchFieldTitle": "Odaberi ili traži", + "UNIQUEFIELD.CANNOTLEAVEEMPTY": "Ovo polje ne može biti prazno", + "UNIQUEFIELD.ENTERNEWVALUE": "Morate unesti novu vrijednost za ovo polje", + "UNIQUEFIELD.SUGGESTED": "Promjenjene vrijednosti u '%s' : %s", + "UPDATEURL.CONFIRM": "Would you like me to change the URL to:\n\n%s/\n\nClick Ok to change the URL, click Cancel to leave it as:\n\n%s", + "UPDATEURL.CONFIRMURLCHANGED": "The URL has been changed to\n'%s'", + "UploadField.ConfirmDelete": "Are you sure you want to remove this file from the server filesystem?", + "UploadField.EMPTYRESULT": "Empty file upload result", + "UploadField.Editing": "Uređujem...", + "UploadField.HTML_MAXFILESIZE": "File exceeds MAX_FILE_SIZE (HTML form directive)", + "UploadField.INVALIDEXTENSION": "Extension is not allowed", + "UploadField.LOADING": "Učitavam ...", + "UploadField.MAXNUMBEROFFILESSIMPLE": "Maksimalan broj datoteka premašen", + "UploadField.NOFILEUPLOADED": "Datoteka nije uploadana", + "UploadField.NOTMPFOLDER": "Nedostaje privremeni direktorij", + "UploadField.ONLYPARTIALUPLOADED": "Datoteka je djelimično uploadana", + "UploadField.OVERWRITEWARNING": "File with the same name already exists", + "UploadField.PHP_MAXFILESIZE": "File exceeds upload_max_filesize (php.ini directive)", + "UploadField.STOPEDBYEXTENSION": "File upload stopped by extension", + "UploadField.TOOLARGE": "Veličina datoteke je prevelika", + "UploadField.TOOSMALL": "Veličina datoteke je premala", + "UploadField.UPLOADEDBYTES": "Uploaded bytes exceed file size", + "UploadField.Uploaded": "Prenešeno", + "UploadField.WRITEFAILED": "Failed to write file to disk", + "VALIDATOR.FIELDREQUIRED": "Please fill out \"%s\", it is required." +} \ No newline at end of file diff --git a/lang/cs.yml b/lang/cs.yml index 6b774c4cc..cc87bbb3b 100644 --- a/lang/cs.yml +++ b/lang/cs.yml @@ -210,12 +210,15 @@ cs: JsType: 'Javascript soubor' Mp3Type: 'MP3 audio soubor' MpgType: 'MPEG video soubor' + NOFILESIZE: 'Velikost souboru je 0 bajtů.' NOVALIDUPLOAD: 'Soubor není validní pro nahrání' Name: Jméno PLURALNAME: Soubory PdfType: 'Adobe Acrobat PDF soubor' PngType: 'PNG obrázek - vhodný jako univerzálmí formát' SINGULARNAME: Soubor + TOOLARGE: 'Velikost souboru je příliš velká, povolené maximum {size}' + TOOLARGESHORT: 'Velikost souboru překračuje {size}' TiffType: 'Tiff formát obrázku' Title: Titulek WavType: 'WAV audo soubor' @@ -378,6 +381,8 @@ cs: FROMWEB: 'Z webu' FindInFolder: 'Hledat ve složce' IMAGEALT: 'Alternativní text (alt)' + IMAGEALTTEXT: 'Alternativní text (alt) - ukáže se, když obrázek nemúže být zobrazen' + IMAGEALTTEXTDESC: 'Zobrazeno na obrazovce, anebo když obrázek nemůže být zobrazen' IMAGEDIMENSIONS: Rozměry IMAGEHEIGHTPX: Výška IMAGETITLE: 'Titul text (tooltip) - další informace o obrázku' @@ -412,10 +417,13 @@ cs: CANCEL: Storno CANT_REORGANISE: 'Nemáte oprávnění měnit stránky nejvyšší úrovně. Vaše změna nebyla uložena.' DELETED: Smazáno. + DropdownBatchActionsDefault: 'Vyberte akci...' HELP: Nápověda + PAGETYPE: 'Typ stránky' PERMAGAIN: 'Byli jste odhlášeni z CMS. Pokud se chcete znovu přihlásit, zadejte níže své uživatelské jméno a heslo.' PERMALREADY: 'Omlouvám se, ale nemůžete vstoupit do této části CMS. Pokud se chcete přihlásit jako někdo jiný, udělejte tak níže.' PERMDEFAULT: 'Musíte být přihlášen/a k přístup do oblasti administrace, níže zadejte vaše přihlašovací údaje, prosím.' + PLEASESAVE: 'Prosím uložte stránku: Tato stránka nemohla být aktualizována, protože ještě nebyla uložena.' PreviewButton: Náhled REORGANISATIONSUCCESSFUL: 'Strom webu reorganizován úspěšně.' SAVEDUP: Uloženo. @@ -471,6 +479,7 @@ cs: SUBJECTPASSWORDRESET: 'Nulovací odkaz pro Vaše heslo' SURNAME: Příjmení TIMEFORMAT: 'Formát času' + VALIDATIONMEMBEREXISTS: 'Již existuje člen se stejným {identifier}' ValidationIdentifierFailed: 'Nemůžete přepsat existujícího člena #{id} s identickým identifikátorem ({name} = {value}))' WELCOMEBACK: 'Vítejte zpět, {firstname}' YOUROLDPASSWORD: 'Vaše staré heslo' diff --git a/lang/eo.yml b/lang/eo.yml index bd4026829..c8054df45 100644 --- a/lang/eo.yml +++ b/lang/eo.yml @@ -210,12 +210,15 @@ eo: JsType: 'Ĝavaskripta dosiero' Mp3Type: 'MP3-sondosiero' MpgType: 'AVI-videa dosiero' + NOFILESIZE: 'Dosiero havas neniom da bajtoj.' NOVALIDUPLOAD: 'Dosiero ne estas valida alŝutaĵo.' Name: Nomo PLURALNAME: Dosieroj PdfType: 'Dosiero de Adobe Acrobat PDF' PngType: 'PNG-bildo - ĝeneralcela formato' SINGULARNAME: Dosiero + TOOLARGE: 'Dosiero estas tro granda, maksimumo permesita {size}' + TOOLARGESHORT: 'Dosiero estas pli ol {size}' TiffType: 'Markita bildoformato' Title: Titolo WavType: 'WAV-sondosiero' @@ -378,6 +381,8 @@ eo: FROMWEB: 'El la TTT' FindInFolder: 'Serĉi en dosierujo' IMAGEALT: 'Alternativa teksto (alt)' + IMAGEALTTEXT: 'Alternativa teksto (alt) - vidigota se bildo ne estas vidigebla' + IMAGEALTTEXTDESC: 'Vidigota al ekranlegantoj aŭ se bildo ne estas vidigebla' IMAGEDIMENSIONS: Dimensioj IMAGEHEIGHTPX: Alto IMAGETITLE: 'Titola teksto (ŝpruchelpilo) - por plua informo pri la bildo' @@ -412,10 +417,13 @@ eo: CANCEL: Rezigni CANT_REORGANISE: 'Vi ne rajtas ŝanĝi supronivelajn paĝojn. Via ŝanĝo ne konserviĝis.' DELETED: Forigita. + DropdownBatchActionsDefault: 'Elekti agon...' HELP: Helpo + PAGETYPE: 'Tipo de paĝo' PERMAGAIN: 'Vin adiaŭis la CMS. Se vi volas denove saluti, enigu salutnomon kaj pasvorton malsupre.' PERMALREADY: 'Bedaŭrinde vi ne povas aliri tiun parton de la CMS. Se vi volas ensaluti kiel aliulo, faru tion sube.' PERMDEFAULT: 'Necesas ensaluti por aliri la administran zonon; bonvolu enigi viajn akreditaĵoj sube.' + PLEASESAVE: 'Bonvolu konservi paĝon: Ne eblis ĝisdatigi ĉi tiun paĝon ĉar ĝi ankoraŭ ne estas konservita.' PreviewButton: Antaŭvido REORGANISATIONSUCCESSFUL: 'Sukcese reorganizis la retejan arbon.' SAVEDUP: Konservita. @@ -471,6 +479,7 @@ eo: SUBJECTPASSWORDRESET: 'Via pasvorto reagordis ligilon' SURNAME: Familia nomo TIMEFORMAT: 'Formato de horo' + VALIDATIONMEMBEREXISTS: 'Jam ekzistas membro kun la sama {identifier}' ValidationIdentifierFailed: 'Ne povas anstataŭigi ekzistantan membron #{id} per sama identigilo ({name} = {value}))' WELCOMEBACK: 'Bonvenon denove, {firstname}' YOUROLDPASSWORD: 'Vian malnovan pasvorton' diff --git a/lang/hr.yml b/lang/hr.yml index d213ec894..3d3d49b26 100644 --- a/lang/hr.yml +++ b/lang/hr.yml @@ -7,38 +7,96 @@ hr: DIM: Dimenzije FILENAME: Naziv datoteke FOLDER: Direktorij + HEIGHT: Visina LASTEDIT: 'Zadnja promjena' OWNER: Vlasnik SIZE: 'Veličina datoteke' TITLE: Naslov TYPE: 'Tip datoteke' URL: Link + WIDTH: Širina AssetUploadField: ChooseFiles: 'Odaberite datoteke' DRAGFILESHERE: 'Povucite datoteke ovdje' + DROPAREA: 'Područje ubacivanja' EDITALL: 'Uredi sve' EDITANDORGANIZE: 'Uredi i organiziraj' EDITINFO: 'Uredi datoteke' FILES: Datoteke FROMCOMPUTER: 'Odaberite datoteke sa svog računala' FROMCOMPUTERINFO: 'Uploadajte sa svog računala' + INSERTURL: 'Ubaci sa linka' + REMOVEINFO: 'Izbrišite ovu datoteku s ovog polja' TOTAL: Ukupno + TOUPLOAD: 'Odaberite datoteke za upload...' UPLOADINPROGRESS: 'Molim pričekajte... upload u tijeku' UPLOADOR: ILI BBCodeParser: ALIGNEMENT: Poravnanje + BOLD: 'Bold Text' + BOLDEXAMPLE: Bold + BackLink_Button_ss: + Back: Nazad BasicAuth: ENTERINFO: 'Unesite korisničko ime i lozinu' ERRORNOTADMIN: 'Korisnik nije administrator' ERRORNOTREC: 'Korisničko ime / lozinka nije prepoznata' + Boolean: + ANY: Bilo koji + NOANSWER: 'Ne' + YESANSWER: 'Da' + CAMPAIGNS: + ADDTOCAMPAIGN: 'Dodaj kampanji' + CMSLoadingScreen_ss: + LOADING: učitavam... CMSMain: SAVE: Snimi + CMSMemberLoginForm: + BUTTONFORGOTPASSWORD: 'Zaboravljena lozinka?' + CMSPagesController_Tools_ss: + FILTER: Filter + CMSProfileController: + MENUTITLE: 'Moj profil' + CMSSecurity: + SUCCESS: Uspjeh + TimedOutTitleAnonymous: 'Vaša sesija je istekla.' + TimedOutTitleMember: 'Bok {name}!
Vaša sesija je istekla.' + CampaignAdmin: + MENUTITLE: Kampanje + Campaigns: + AddToCampaign: 'Dodaj kampanji' ChangePasswordEmail_ss: CHANGEPASSWORDTEXT1: 'Promjenili ste lozinku za ' CHANGEPASSWORDTEXT2: 'Za prijavu koristite slijedeće podatke' + CHANGEPASSWORDTEXT3: 'Promjeni lozinku' + EMAIL: Email HELLO: Pozdrav + PASSWORD: Lozinka + ChangeSet: + DESCRIPTION_AND: '{first} i {second}' + DESCRIPTION_ITEM: stavka + DESCRIPTION_ITEMS: stavke + DESCRIPTION_LIST_FIRST: '{item}' + DESCRIPTION_LIST_LAST: '{list}, i {item}' + DESCRIPTION_LIST_MID: '{list}, {item}' + DESCRIPTION_OTHER_ITEM: 'ostala stavka' + DESCRIPTION_OTHER_ITEMS: 'ostale stavke' + NAME: Naziv + PLURALNAME: Kampanje + SINGULARNAME: Kampanja + STATE: Stanje + CheckboxField: + NOANSWER: 'Ne' + YESANSWER: 'Da' ConfirmedPasswordField: SHOWONCLICKTITLE: 'Promjenite lozinku' + CreditCardField: + FIRST: prvi + FOURTH: četvrti + SECOND: drugi + THIRD: treći + CurrencyField: + CURRENCYSYMBOL: $ DataObject: PLURALNAME: 'Podatkovni objekti' SINGULARNAME: 'Podatkovni objekt' @@ -70,9 +128,40 @@ hr: CHOOSE: (Odaberite) EmailField: VALIDATION: 'Molimo unesite email adresu' + Enum: + ANY: bilo koji File: + AviType: 'AVI video datoteka' + Content: Sadržaj + CssType: 'CSS datoteka' + DocType: 'Word dokument' + Filename: Naziv datoteke + GifType: 'GIF slika - dobra za dijagrame' + GzType: 'GZIP komprimirana datoteka' + HtlType: 'HTML datoteka' + HtmlType: 'HTML datoteka' + INVALIDEXTENSION: 'Ekstenzija nije dozvoljena (valjane: {extensions}) ' + INVALIDEXTENSIONSHORT: 'Ekstenzija nije dozvoljena' + IcoType: 'Slika ikone' + JpgType: 'JPEG slika - dobra za fotografije' + JsType: 'Javascript datoteka' + Mp3Type: 'MP3 zvuk datoteka' + MpgType: 'MPEG video datoteka' + NOFILESIZE: 'Veličina datoteke je nula bajtova.' + NOVALIDUPLOAD: 'Datoteka nije valjan upload' + Name: Naziv PLURALNAME: Datoteke + PngType: 'PNG slika - dobar generalan format' SINGULARNAME: Datoteka + TOOLARGE: 'Veličina datoteke je prevelika, maksimalna veličina je {size}' + TOOLARGESHORT: 'Veličina datoteke premašuje {size}' + Title: Naslov + WavType: 'WAV zvuk datoteka' + XlsType: 'Excel tablica' + ZipType: 'ZIP komprimirana datoteka' + Folder: + PLURALNAME: Direktoriji + SINGULARNAME: Direktorij ForgotPasswordEmail_ss: HELLO: Pozdrav TEXT1: 'Ovdje je Vaš' @@ -83,22 +172,72 @@ hr: VALIDATIONNOTUNIQUE: 'Unešena vrijednost nije unikatna' VALIDATIONPASSWORDSDONTMATCH: 'Lozinke se ne slažu' VALIDATIONPASSWORDSNOTEMPTY: 'Lozinke moraju imati najmanje jedan broj i jedan alfanumerički znak' + FormField: + NONE: nijedan + GridAction: + DELETE_DESCRIPTION: Obriši + Delete: Obriši + GridField: + Add: 'Dodaj {name}' + Filter: Filter + FilterBy: 'Filtriraj po' + Find: Pronađi + GridFieldDetailForm: + CancelBtn: Odustani + Create: Kreiraj + Delete: Obriši + DeletePermissionsFailure: 'Nema dozvole brisanja' + Deleted: 'Obrisano %s %s' + Save: Spremi + Saved: 'Spremljeno {name} {link}' + GridFieldEditButton_ss: + EDIT: Uredi + GridFieldItemEditView: + Go_back: 'Idi nazad' Group: Code: 'Krupni kod' + DefaultGroupTitleAdministrators: Administratori + DefaultGroupTitleContentAuthors: 'Autori sadržaja' + Description: Opis Locked: 'Zaključano?' + PLURALNAME: Grupe Parent: 'Roditeljska grupa' + SINGULARNAME: Grupa has_many_Permissions: Dozvole many_many_Members: Članovi + HTMLEditorField: + ANCHORVALUE: Sidro + FILE: Datoteka + FOLDER: Direktorij + IMAGEDIMENSIONS: Dimenzije + IMAGEHEIGHTPX: Visina + IMAGEWIDTHPX: Širina + LINK: 'Ubaci vezu' + LINKFILE: 'Preuzmi datoteku' + LINKINTERNAL: 'Stranica na ovom webu' + LINKOPENNEWWIN: 'Otvori link u novom prozoru?' + LINKTO: 'Poveži na' + PAGE: Stranica + URL: Link HtmlEditorField: + ANCHORVALUE: Sidro + BUTTONADDURL: 'Dodaj link' + BUTTONINSERT: Ubaci BUTTONINSERTLINK: 'Ubaci vezu' BUTTONREMOVELINK: 'Obriši vezu' + BUTTONUpdate: Ažuriraj CSSCLASS: 'Poravnanje / Stil' CSSCLASSCENTER: 'Centralno' CSSCLASSLEFT: 'Lijevo, sa okruženjem teksta.' CSSCLASSRIGHT: 'Desno, sa okruženjem teksta' + DETAILS: Detalji EMAIL: 'Email adresa' FILE: Datoteka FOLDER: Direktorij + FROMCOMPUTER: 'Sa računala' + FROMWEB: 'Sa weba' + FindInFolder: 'Pronađi u direktoriju' + IMAGEALT: 'Alternativni tekst (alt)' IMAGEDIMENSIONS: Dimenzije IMAGEHEIGHTPX: Visina IMAGEWIDTHPX: Širina @@ -111,18 +250,47 @@ hr: LINKOPENNEWWIN: 'Otvori vezu (link) u novom prozoru?' LINKTO: 'Poveži na' PAGE: Stranica + Image: + PLURALNAME: Datoteke + SINGULARNAME: Datoteka + Image_Cached: + PLURALNAME: Datoteke + SINGULARNAME: Datoteka Image_iframe_ss: TITLE: 'Iframe za upload slike' LeftAndMain: + CANCEL: Odustani + DELETED: Obrisano. + DropdownBatchActionsDefault: 'Odaberite akciju...' HELP: Pomoć + PAGETYPE: 'Tip stranice' PERMAGAIN: 'Odjavili ste se sa sustava. Želite li se ponovno prijaviti upišite korisničko ime i lozinku.' + PreviewButton: Pregled + SAVEDUP: Spremljeno + ValidationError: 'Greška validacije' + VersionUnknown: nepoznato + LeftAndMain_Menu_ss: + Hello: Pozdrav + LOGOUT: 'Odjava' + LoginAttempt: + Email: 'Email adresa' + IP: 'IP adresa' + Status: Status Member: + ADDGROUP: 'Dodaj grupu' BUTTONCHANGEPASSWORD: 'Promjeni lozinku' BUTTONLOGIN: 'Prijava' BUTTONLOGINOTHER: 'Prijavite se kao netko drugi' BUTTONLOSTPASSWORD: 'Zaboravljena lozinka?' + CANTEDIT: 'Nema prava za to' CONFIRMNEWPASSWORD: 'Potvrdite novu lozinku' CONFIRMPASSWORD: 'Potvrdi lozinku' + CURRENT_PASSWORD: 'Trenutna lozinka' + DATEFORMAT: 'Format datuma' + DefaultAdminFirstname: 'Zadani administrator' + DefaultDateTime: zadano + EDIT_PASSWORD: 'Nova lozinka' + EMAIL: Email ERRORNEWPASSWORD: 'Pogrešno ste upisali novu lozinku, pokušajte ponovno.' ERRORPASSWORDNOTMATCH: 'Vaša trenutna lozinka se ne podudara, probajte ponovno' FIRSTNAME: 'Ime' @@ -136,10 +304,43 @@ hr: SURNAME: Prezime YOUROLDPASSWORD: 'Stara lozinka' belongs_many_many_Groups: Grupe + db_LastVisited: 'Datum zadnje posjete' db_LockedOutUntil: 'Zaključano do' + db_Password: Lozinka db_PasswordExpiry: 'Lozinka ističe' MemberAuthenticator: TITLE: 'E-mail & Lozinka' + MemberDatetimeOptionsetField: + Preview: Pregled + ModelAdmin: + IMPORT: 'Uvezi iz CSV' + IMPORTEDRECORDS: 'Uveženo {count} zapisa.' + NOCSVFILE: 'Molimo pretražite CSV datoteku za uvoz' + NOIMPORT: 'Ništa za uvoz' + RESET: Resetiraj + Title: 'Klasa podataka' + UPDATEDRECORDS: 'Osvježeno {count} zapisa.' + ModelAdmin_Tools_ss: + FILTER: Filter + IMPORT: Uvoz + ModelSidebar_ss: + IMPORT_TAB_HEADER: Uvoz + SEARCHLISTINGS: Traži + MoneyField: + FIELDLABELCURRENCY: Valuta + Pagination: + Page: Stranica + View: Pregled + Permission: + AdminGroup: Administrator + CMS_ACCESS_CATEGORY: 'CMS pristup' + FULLADMINRIGHTS: 'Puna administrativna prava' + PLURALNAME: Dozvole + SINGULARNAME: Dozvola + PermissionRole: + PLURALNAME: Uloge + SINGULARNAME: Uloga + Title: Naslov PhoneNumberField: VALIDATION: 'Molim unesite ispravan telefonski broj' Security: @@ -154,11 +355,37 @@ hr: NOTEPAGESECURED: 'Ova stranica je zaštićena. Prijavite se na sustav sa svojim pristupnim podatcima i odmah ćemo vas preusmjeriti.' NOTERESETPASSWORD: 'Unesite svoju e-mail adresu, a mi ćemo Vam poslati link putem kojega možete resetirati Vašu lozinku.' SecurityAdmin: + MEMBERS: Članovi + MENUTITLE: Sigurnost NEWGROUP: 'Nova Grupa' + PERMISSIONS: Dozvole + ROLES: Uloge + TABROLES: Uloge + Users: Korisnici + SilverStripeNavigator: + Auto: Aut + Edit: Uredi + EditView: 'Mod uređivanja' + Width: širina SiteTree: TABMAIN: Osnovno + TableListField: + Print: Ispiši + TableListField_PageControls_ss: + OF: od ToggleField: LESS: manje MORE: više + UploadField: + ATTACHFILE: 'Dodaj datoteku' + ATTACHFILES: 'Dodaj datoteke' + AttachFile: 'Dodaj datoteku(e)' + CHOOSEANOTHERFILE: 'Odaberi drugu datoteku' + DELETE: 'Obriši iz datoteka' + DOEDIT: Snimi + EDIT: Uredi + EDITINFO: 'Uredi ovu datoteku' + FROMCOMPUTER: 'Sa računala' + REMOVE: Ukloni Versioned: has_many_Versions: Verzije diff --git a/lang/ru.yml b/lang/ru.yml index 8f2701d4c..f75400ee0 100644 --- a/lang/ru.yml +++ b/lang/ru.yml @@ -1,5 +1,13 @@ ru: + AddToCampaign: + ErrorCampaignPermissionDenied: 'У вас не достаточно прав доступа для добавления {ObjectTitle} в {CampaignTitle}' + ErrorGeneral: 'Произошла ошибка' + ErrorItemPermissionDenied: 'У вас не достаточно прав доступа для добавления {ObjectTitle} к кампании' + ErrorNotFound: '{Type} не обнаружен' + Success: '{ObjectTitle} добавлен в {CampaignTitle}' AssetAdmin: + ALLOWEDEXTS: 'Разрешённые расширения файлов для загрузки' + HIDEALLOWEDEXTS: 'Скрыть разрешенные расширения' NEWFOLDER: Новая папка SHOWALLOWEDEXTS: 'Показать допустимые расширения' AssetTableField: @@ -7,12 +15,14 @@ ru: DIM: Размеры FILENAME: Имя файла FOLDER: Папка + HEIGHT: Высота LASTEDIT: 'Последнее изменение' OWNER: Владелец SIZE: 'Размер' TITLE: Название TYPE: 'Тип' URL: URL + WIDTH: Ширина AssetUploadField: ChooseFiles: 'Выберите файлы' DRAGFILESHERE: 'Перетащите файлы сюда' @@ -23,7 +33,10 @@ ru: FILES: Файлы FROMCOMPUTER: 'Выберите файлы с диска вашего компьютера' FROMCOMPUTERINFO: 'Загрузить с диска вашего компьютера' + INSERTURL: 'Вставить ссылку' + REMOVEINFO: 'Удалить этот файл из поля' TOTAL: Всего + TOUPLOAD: 'Выберите файлы для загрузки ...' UPLOADINPROGRESS: 'Идет загрузка... Пожалуйста, подождите' UPLOADOR: ИЛИ BBCodeParser: @@ -59,6 +72,10 @@ ru: ERRORNOTREC: 'Такое имя пользователя или пароль не существует' Boolean: ANY: Все + NOANSWER: 'Нет' + YESANSWER: 'Да' + CAMPAIGNS: + ADDTOCAMPAIGN: 'Добавить в кампанию' CMSLoadingScreen_ss: LOADING: Идет загрузка... REQUIREJS: 'Для работы с CMS у вас должен быть включен JavaScript.' @@ -67,22 +84,69 @@ ru: ACCESSALLINTERFACES: 'Доступ ко всему интерфейсу CMS' ACCESSALLINTERFACESHELP: 'Отменяет индивидуальные настройки прав доступа.' SAVE: Сохранить + CMSMemberLoginForm: + BUTTONFORGOTPASSWORD: 'Забыли пароль?' + BUTTONLOGIN: 'Вход' + BUTTONLOGOUT: 'Выход' + PASSWORDEXPIRED: '

Время действия вашего пароля истекло. Установите новый пароль.

' CMSPageHistoryController_versions_ss: PREVIEW: 'Предварительный просмотр сайта' + CMSPagesController_Tools_ss: + FILTER: Фильтр CMSProfileController: MENUTITLE: 'Мой профиль' + CMSSecurity: + INVALIDUSER: '

Неправильный пользователь. Войдите заново в систему чтобы продолжить.

' + LoginMessage: '

Если у вас есть что-либо несохраненное вы можете вернуться к этому войдя в систему заново с помощью формы ниже.

' + SUCCESS: Готово + SUCCESSCONTENT: '

Вы вошли в систему. Если вы не были автоматически перенаправлены нажмите здесь

' + TimedOutTitleAnonymous: 'Время вашего сеанса истекло.' + TimedOutTitleMember: '{name}!
Время вашего сеанса истекло.' + CampaignAdmin: + MENUTITLE: Кампании + Campaigns: + AddToCampaign: 'Добавить в кампанию' ChangePasswordEmail_ss: + CHANGEPASSWORDFOREMAIL: 'Пароль для регистрации с Email адресом {email} был изменён. Если вы его не меняли установите новый перейдя по ссылке ниже' CHANGEPASSWORDTEXT1: 'Вы изменили свой пароль на' CHANGEPASSWORDTEXT2: 'Для того, чтобы войти, используйте сейчас следующие учетные данные:' + CHANGEPASSWORDTEXT3: 'Изменить пароль' EMAIL: Email HELLO: Здравствуйте PASSWORD: Пароль + ChangeSet: + DESCRIPTION_AND: '{first} и {second}' + DESCRIPTION_ITEM: элемент + DESCRIPTION_ITEMS: элементы + DESCRIPTION_LIST_FIRST: '{item}' + DESCRIPTION_LIST_LAST: '{list}, и {item}' + DESCRIPTION_LIST_MID: '{list}, {item}' + DESCRIPTION_OTHER_ITEM: 'другой элемент' + DESCRIPTION_OTHER_ITEMS: 'другие элементы' + NAME: Название + PLURALNAME: Кампании + SINGULARNAME: Кампания + STATE: Статус + ChangeSetItem: + PLURALNAME: 'Изменить набор элементов' + SINGULARNAME: 'Изменить элемент' + CheckboxField: + NOANSWER: 'Нет' + YESANSWER: 'Да' + CheckboxFieldSetField: + SOURCE_VALIDATION: 'Выберите значение из списка. Ошибочно указано значение: {value}' + CheckboxSetField: + SOURCE_VALIDATION: 'Выберите значение из списка. Ошибочно указано значение: ''{value}''' ConfirmedPasswordField: ATLEAST: 'Пароль должен быть не короче {min} символов.' BETWEEN: 'Пароль должен иметь длину от {min} до {max} символов.' + CURRENT_PASSWORD_ERROR: 'Неправильно введён текущий пароль.' + CURRENT_PASSWORD_MISSING: 'Вы должны указать Ваш текущий пароль.' + LOGGED_IN_ERROR: 'Вы должны войти в систему, чтобы изменить Ваш пароль.' MAXIMUM: 'Пароль должен быть не длиннее {max} символов.' SHOWONCLICKTITLE: 'Изменить пароль' ContentController: + DRAFT_SITE_ACCESS_RESTRICTION: 'Для просмотра чернового или архивного содержимого вам необходимо войти в систему со своим именем пользователя и паролем. Щелкните здесь, чтобы вернуться на опубликованный сайт.' NOTLOGGEDIN: 'Не выполнен вход в систему' CreditCardField: FIRST: первая @@ -122,6 +186,8 @@ ru: INVALID_REQUEST: 'Неверный запрос' DropdownField: CHOOSE: (Выберите) + CHOOSESEARCH: '(Выбрать или найти)' + SOURCE_VALIDATION: 'Выберите значение из списка. Ошибочно указано значение: {value}' EmailField: VALIDATION: 'Пожалуйста, задайте адрес email.' Enum: @@ -144,12 +210,15 @@ ru: JsType: 'Файл Javascript' Mp3Type: 'Аудиофайл MP3' MpgType: 'Видеофайл MPEG' + NOFILESIZE: 'Размер файла 0 байт.' NOVALIDUPLOAD: 'Недействительный файл для загрузки' Name: Название PLURALNAME: Файлы PdfType: 'Файл Adobe Acrobat PDF' PngType: 'Изображение PNG - универсальный графический формат' SINGULARNAME: Файл + TOOLARGE: 'Превышен допустимый размер файла, максимально разрешенный размер: {size}' + TOOLARGESHORT: 'Размер файла превышает {size}' TiffType: 'Изображение TIFF' Title: Заголовок WavType: 'Аудиофайл WAV' @@ -167,6 +236,7 @@ ru: TEXT3: для Form: CSRF_EXPIRED_MESSAGE: 'Срок действия сеанса истек. Пожалуйста, отправьте данные формы еще раз.' + CSRF_FAILED_MESSAGE: 'Произошла техническая ошибка. Нажмите кнопку "Назад", обновите страницу в браузере и повторите попытку.' FIELDISREQUIRED: 'Поле {$name} является обязательным' SubmitBtnLabel: Выбрать VALIDATIONCREDITNUMBER: 'Пожалуйста, убедитесь, что номер кредитной карты {number} задан правильно' @@ -220,6 +290,7 @@ ru: DefaultGroupTitleContentAuthors: 'Авторы содержимого' Description: Описание GroupReminder: 'При назначении группы верхнего уровня все роли будут переняты из нее' + HierarchyPermsError: 'У Вас недостаточно прав для назначения родительской группы "%s" (необходимы права администратора)' Locked: 'Блокировано?' NoRoles: 'Ролей не найдено' PLURALNAME: Группы @@ -231,14 +302,64 @@ ru: many_many_Members: Члены группы GroupImportForm: Help1: '

Импорт одной или нескольких групп в формате CSV (comma-separated values). Подробные сведения

' + Help2: "
\n

Расширенное использование

\n\n
" ResultCreated: 'Создано {count} групп' ResultDeleted: 'Удалено %d групп' ResultUpdated: 'Обновлено %d групп' + HTMLEditorField: + ANCHORSCANNOTACCESSPAGE: 'У Вас недостаточно прав для доступа к содержимому данной страницы.' + ANCHORSPAGENOTFOUND: 'Страница не найдена.' + ANCHORVALUE: Якорь + BUTTONADDURL: 'Добавить ссылку' + CAPTIONTEXT: 'Текст подписи' + CSSCLASS: 'Выравнивание/Стиль' + CSSCLASSCENTER: 'По центру без текста по бокам' + CSSCLASSLEFT: 'Слева с обтеканием текста' + CSSCLASSLEFTALONE: 'Независимо слева.' + CSSCLASSRIGHT: 'Справа с обтеканием текста' + DETAILS: Подробности + EMAIL: 'Email' + FILE: Файл + FOLDER: Папка + IMAGEALT: 'Альтернативный текст (alt)' + IMAGEALTTEXT: 'Альтернативный текст (alt) - показывается, если изображение недоступно' + IMAGEALTTEXTDESC: 'Отображается если в браузере отключены изображения или если изображение недоступно' + IMAGEDIMENSIONS: Размеры + IMAGEHEIGHTPX: Высота + IMAGETITLE: 'Текст (всплывающая подсказка) - для дополнительной информации об изображении' + IMAGETITLETEXT: 'Текст (всплывающая подсказка)' + IMAGETITLETEXTDESC: 'Для дополнительных сведений об изображении' + IMAGEWIDTHPX: Ширина + INSERTMEDIA: 'Вставить медиафайл' + LINK: 'Вставить ссылку' + LINKANCHOR: 'Якорь на этой странице' + LINKDESCR: 'Описание ссылки' + LINKEMAIL: 'Email' + LINKEXTERNAL: 'Другой сайт' + LINKFILE: 'Скачивание файла' + LINKINTERNAL: 'Страницу данного сайта' + LINKOPENNEWWIN: 'Открыть ссылку в новом окне?' + LINKTO: 'Ссылка на' + PAGE: Страница + SUBJECT: 'Тема Email письма' + URL: Ссылка + URLDESCRIPTION: 'Добавляйте видео и изображения из интернета просто введя нужный адрес. Убедитесь что у вас есть права на размещение данных файлов.

Внимание: файлы не будут загружены на ваш сервер и если файл будет не доступен по указанному адресу то он так же будет не доступен на вашей странице.' + URLNOTANOEMBEDRESOURCE: 'Данная ссылка ''{url}'' не может быть использована для добавления медиа.' + UpdateMEDIA: 'Обновить медиа' + HTMLEditorField_Toolbar: + ERROR_ABSOLUTE: 'Только абсолютные (http://,https://) ссылки могут быть использованы' + ERROR_HOSTNAME: 'Данный адрес недоступен' + ERROR_ID: 'Необходимо указать "ID" или "FileURL" - ссылку на файл для идентификации файла' + ERROR_NOTFOUND: 'Файл не обнаружен' + ERROR_OEMBED_REMOTE: 'Доступны только файлы по ссылке' + ERROR_SCHEME: 'Данный тип файла не поддерживается' Hierarchy: InfiniteLoopNotAllowed: 'Обнаружен бесконечный цикл в иерархической структуре "{type}". Для исправления ошибки измените страницу, находящуюся уровнем выше' HtmlEditorField: ADDURL: 'Добавить URL' ADJUSTDETAILSDIMENSIONS: 'Дополнительные сведения и размеры' + ANCHORSCANNOTACCESSPAGE: 'У Вас недостаточно прав для доступа к содержимому данной страницы.' + ANCHORSPAGENOTFOUND: 'Страница не найдена.' ANCHORVALUE: Якорь BUTTONADDURL: 'Добавить URL' BUTTONINSERT: Вставить @@ -260,12 +381,15 @@ ru: FROMWEB: 'Из интернета' FindInFolder: 'Найти в папке' IMAGEALT: 'Альтернативный текст (alt)' + IMAGEALTTEXT: 'Альтернативный текст (alt) - показывается, если изображение недоступно' + IMAGEALTTEXTDESC: 'Отображается если в браузере отключены изображения или если изображение недоступно' IMAGEDIMENSIONS: Размеры IMAGEHEIGHTPX: Высота IMAGETITLE: 'Текст (всплывающая подсказка) - для дополнительной информации об изображении' IMAGETITLETEXT: 'Текст (всплывающая подсказка)' IMAGETITLETEXTDESC: 'Для дополнительных сведений об изображении' IMAGEWIDTHPX: Ширина + INSERTMEDIA: 'Вставить медиафайл' LINK: 'Ссылка' LINKANCHOR: 'Якорь на этой странице' LINKDESCR: 'Описание ссылки' @@ -276,8 +400,11 @@ ru: LINKOPENNEWWIN: 'Открыть ссылку в новом окне?' LINKTO: 'Ссылка на' PAGE: Страница + SUBJECT: 'Тема Email письма' URL: URL + URLDESCRIPTION: 'Добавляйте видео и изображения из интернета просто введя нужный адрес. Убедитесь что у вас есть права на размещение данных файлов.

Внимание: файлы не будут загружены на ваш сервер и если файл будет не доступен по указанному адресу то он так же будет не доступен на вашей странице.' URLNOTANOEMBEDRESOURCE: 'Не удалось преобразовать ссылку ''{url}'' в медиа-ресурс.' + UpdateMEDIA: 'Обновить медиафайл' Image: PLURALNAME: Файлы SINGULARNAME: Файл @@ -287,19 +414,28 @@ ru: Image_iframe_ss: TITLE: 'Iframe загрузки изображений' LeftAndMain: + CANCEL: Отмена CANT_REORGANISE: 'У вас нет права редактировать страницы верхнего уровня. Изменения не были сохранены.' DELETED: Удалено. + DropdownBatchActionsDefault: 'Выберите действие ...' HELP: Помощь + PAGETYPE: 'Тип страницы' PERMAGAIN: 'Вы вышли из Системы Управления Сайтом. Если Вы хотите войти снова, введите внизу имя пользователя и пароль.' + PERMALREADY: 'Извините, у вас нет доступа к этому разделу Системы Управления. Если Вы хотите войти под другой учетной записью, сделайте это ниже.' + PERMDEFAULT: 'Вы должны войти в систему для доступа к панели управления сайтом. Введите ваши данные ниже.' + PLEASESAVE: 'Пожалуйста, сохраните страницу: ее нельзя обновить, т.к. она еще не была сохранена.' PreviewButton: Просмотр REORGANISATIONSUCCESSFUL: 'Древесная структура сайта успешно реорганизована.' SAVEDUP: Сохранено. ShowAsList: 'в виде списка' TooManyPages: 'Слишком много страниц' ValidationError: 'Ошибка проверки' + VersionUnknown: неизвестно LeftAndMain_Menu_ss: Hello: Здравствуйте LOGOUT: 'Выход' + ListboxField: + SOURCE_VALIDATION: 'Выберите значение из списка. Ошибочно указано значение: %s' LoginAttempt: Email: 'Email' IP: 'IP-адрес' @@ -315,9 +451,11 @@ ru: CANTEDIT: 'У вас недостаточно прав' CONFIRMNEWPASSWORD: 'Подтвердить новый пароль' CONFIRMPASSWORD: 'Подтвердить пароль' + CURRENT_PASSWORD: 'Текущий пароль' DATEFORMAT: 'Формат даты' DefaultAdminFirstname: 'Администратор по умолчанию ' DefaultDateTime: по умолч. + EDIT_PASSWORD: 'Новый пароль' EMAIL: Email EMPTYNEWPASSWORD: 'Поле нового пароля не может быть пустым; пожалуйста, повторите попытку' ENTEREMAIL: 'Введите email, чтобы получить ссылку на сброс пароля.' @@ -328,16 +466,20 @@ ru: FIRSTNAME: 'Имя' INTERFACELANG: 'Язык интерфейса' INVALIDNEWPASSWORD: 'Недопустимый пароль: {password}' + KEEPMESIGNEDIN: 'Запомните меня' LOGGEDINAS: 'Вы вошли в систему как {name}.' NEWPASSWORD: 'Новый пароль' NoPassword: 'Для этого пользователя не задан пароль.' PASSWORD: Пароль + PASSWORDEXPIRED: 'Срок действия Вашего пароля истек. Пожалуйста установите новый.' PLURALNAME: Члены группы + REMEMBERME: 'Запомнить меня?' SINGULARNAME: Член группы SUBJECTPASSWORDCHANGED: 'Ваш пароль изменен' SUBJECTPASSWORDRESET: 'Ссылка для переустановки пароля' SURNAME: Фамилия TIMEFORMAT: 'Формат времени' + VALIDATIONMEMBEREXISTS: 'Пользователь с {identifier} уже существует ' ValidationIdentifierFailed: 'Невозможно заменить существующего участника #{id} c таким же идентификатором ({name} = {value}))' WELCOMEBACK: 'Добро пожаловать, {firstname}' YOUROLDPASSWORD: 'Ваш прежний пароль' @@ -372,6 +514,7 @@ ru: Toggle: 'Отобразить справку по форматированию' MemberImportForm: Help1: '

Импорт пользователей в формате CSV (comma-separated values). Подробные сведения

' + Help2: "
\n

Расширенное использование

\n\n
" ResultCreated: 'Создано {count} участников' ResultDeleted: 'Удалено %d участников' ResultNone: 'Изменений нет' @@ -406,6 +549,8 @@ ru: MoneyField: FIELDLABELAMOUNT: Сумма FIELDLABELCURRENCY: Валюта + MultiSelectField: + SOURCE_VALIDATION: 'Выберите значение из списка. Ошибочно указано значение(я): {value}' NullableField: IsNullLabel: 'Недействительно' NumericField: @@ -435,12 +580,17 @@ ru: SINGULARNAME: Роль Title: Название PermissionRoleCode: + PLURALNAME: 'Код роли доступа' + PermsError: 'У Вас недостаточно прав для назначения родительской группы "%s" (необходимы права администратора)' SINGULARNAME: 'Код роли доступа' Permissions: PERMISSIONS_CATEGORY: 'Роли и права доступа' UserPermissionsIntro: 'При включении этого пользователя в определенную группу его права доступа будут изменены соответствующим образом. Более подробные сведения о правах доступа для отдельных групп содержатся в разделе "Группы".' PhoneNumberField: VALIDATION: 'Пожалуйста, введите верный номер телефона' + RememberLoginHash: + PLURALNAME: 'Сохраненные хэши входов' + SINGULARNAME: 'Сохраненный хэш входа' Security: ALREADYLOGGEDIN: 'У Вас нет доступа к этой странице. Если у вас имеется другая учетная запись, имеющая доступ к этой странице, введите ее данные ниже.' BUTTONSEND: 'Отправить мне ссылку переустановки пароля' @@ -499,6 +649,8 @@ ru: Print: Печать TableListField_PageControls_ss: OF: из + TextField: + VALIDATEMAXLENGTH: 'Значение для {name} не должно превышать {maxLength} символов' TimeField: VALIDATEFORMAT: 'Пожалуйста, задайте верный формат времени {format})' ToggleField: @@ -531,5 +683,17 @@ ru: REMOVEINFO: 'Удалить файл отсюда, но не удалять с сервера' STARTALL: 'Стартовать все' Saved: Сохранено + UPLOADSINTO: 'загрузка в /{path}' Versioned: has_many_Versions: Версии + VersionedGridFieldItemRequest: + ARCHIVE: Архив + Archived: 'Зархивировано %s %s' + BUTTONARCHIVEDESC: 'Отменить публикацию и отправить в архив' + BUTTONPUBLISH: Опубликовать + BUTTONUNPUBLISH: Отмена публикации + BUTTONUNPUBLISHDESC: 'Удалить эту страницу с опубликованного сайта' + Published: 'Опубликована {name} {link}' + Unpublished: 'Публикация отменена %s %s' + i18n: + PLURAL: '{number} {form}' diff --git a/lang/sk.yml b/lang/sk.yml index a3247633a..ba048ab6f 100644 --- a/lang/sk.yml +++ b/lang/sk.yml @@ -210,12 +210,15 @@ sk: JsType: 'Javascript súbor' Mp3Type: 'MP3 audio súbor' MpgType: 'MPEG video súbor' + NOFILESIZE: 'Veľkosť súboru je nula bajtov.' NOVALIDUPLOAD: 'Subor nie je povolený pre nahratie' Name: Meno PLURALNAME: Súbory PdfType: 'Adobe Acrobat PDF súbor' PngType: 'PNG obrázok - vhodný univerzálny formát' SINGULARNAME: Súbor + TOOLARGE: 'Veľkosť súboru je príliš veľká, maximum {size} je povolené' + TOOLARGESHORT: 'Veľkosť súboru prekračuje {size}' TiffType: 'Tiff formát obrázku' Title: Názov WavType: 'WAV audo súbor' @@ -378,6 +381,8 @@ sk: FROMWEB: 'Z webu' FindInFolder: 'Vyhľadať v priečinku' IMAGEALT: 'Atlernatívny text (alt)' + IMAGEALTTEXT: 'Atlernatívny text (alt) - zobrazí sa, ak nemože byť zobrazený obrázok' + IMAGEALTTEXTDESC: 'Zobrazí sa na obrazovke alebo ak obrázok nemôže byť zobrazený' IMAGEDIMENSIONS: Rozmery IMAGEHEIGHTPX: Výška IMAGETITLE: 'Text titulky (tooltip) - pre doplňujúce informácie o obrázku' @@ -412,10 +417,13 @@ sk: CANCEL: Zrušiť CANT_REORGANISE: 'Nemáte oprávnenie meniť stránky najvyššej úrovne. Vaša zmena nebola uložená.' DELETED: Zmazané. + DropdownBatchActionsDefault: 'Vyberte akciu...' HELP: Pomoc + PAGETYPE: 'Typ stránky' PERMAGAIN: 'Boli ste odhlásený' PERMALREADY: 'Je nám ľúto, ale k tejto časti CMS nemáte prístup . Ak sa chcete prihlásiť ako niekto iný, urobte tak nižšie.' PERMDEFAULT: 'Musíte byť prihlásený/á k prístupu do oblasti administrácie, zadajte vaše prihlasovacie údaje dole, prosím.' + PLEASESAVE: 'Prosím uložte stránku: Táto stránka nemôže byť aktualizovaná, lebo ešte nebola uložená.' PreviewButton: Náhľad REORGANISATIONSUCCESSFUL: 'Strom webu bol reorganizovaný úspešne.' SAVEDUP: Uložené. @@ -471,6 +479,7 @@ sk: SUBJECTPASSWORDRESET: 'Odkaz na resetovanie hesla' SURNAME: Priezvisko TIMEFORMAT: 'Formát času' + VALIDATIONMEMBEREXISTS: 'Člen už existuje s rovnakým {identifier}' ValidationIdentifierFailed: 'Nemôžte prepísať existujúceho člena #{id} s identickým identifikátorm ({name} = {value})' WELCOMEBACK: 'Vitajte späť, {firstname}' YOUROLDPASSWORD: 'Vaše staré heslo' From 298f61521c55b07e5c898a92264dbe111735a87a Mon Sep 17 00:00:00 2001 From: Daniel Hensby Date: Fri, 15 Jul 2016 11:49:02 +0100 Subject: [PATCH 2/9] [SS-2016-008] Reset `Member::Salt` on password change --- security/Member.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/security/Member.php b/security/Member.php index 23c771a3e..f8a2bf185 100644 --- a/security/Member.php +++ b/security/Member.php @@ -786,8 +786,8 @@ class Member extends DataObject implements TemplateGlobalProvider { * @return string Returns a random password. */ public static function create_new_password() { - if(file_exists(Security::get_word_list())) { - $words = file(Security::get_word_list()); + if(file_exists(Security::config()->word_list)) { + $words = file(Security::config()->word_list); list($usec, $sec) = explode(' ', microtime()); srand($sec + ((float) $usec * 100000)); @@ -799,7 +799,7 @@ class Member extends DataObject implements TemplateGlobalProvider { } else { $random = rand(); $string = md5($random); - $output = substr($string, 0, 6); + $output = substr($string, 0, 8); return $output; } } @@ -858,6 +858,9 @@ class Member extends DataObject implements TemplateGlobalProvider { // Note that this only works with cleartext passwords, as we can't rehash // existing passwords. if((!$this->ID && $this->Password) || $this->isChanged('Password')) { + //reset salt so that it gets regenerated - this will invalidate any persistant login cookies + // or other information encrypted with this Member's settings (see self::encryptWithUserSettings) + $this->Salt = ''; // Password was changed: encrypt the password according the settings $encryption_details = Security::encrypt_password( $this->Password, // this is assumed to be cleartext From 6606d986634f5b5dec16462acaa8d9a513c29fec Mon Sep 17 00:00:00 2001 From: Daniel Hensby Date: Thu, 14 Jul 2016 17:03:52 +0100 Subject: [PATCH 3/9] [SS-2016-011] ChangePasswordForm does not check $member->canLogin before login This could be used as a way to circumvent login restrictions by using the change password feature to log users in that are unable to login for reasons other than too many password attempts --- security/ChangePasswordForm.php | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/security/ChangePasswordForm.php b/security/ChangePasswordForm.php index 5a1f9d868..2459e9c91 100644 --- a/security/ChangePasswordForm.php +++ b/security/ChangePasswordForm.php @@ -98,16 +98,19 @@ class ChangePasswordForm extends Form { else if($data['NewPassword1'] == $data['NewPassword2']) { $isValid = $member->changePassword($data['NewPassword1']); if($isValid->valid()) { - $member->logIn(); - - // TODO Add confirmation message to login redirect - Session::clear('AutoLoginHash'); // Clear locked out status $member->LockedOutUntil = null; $member->FailedLoginCount = null; $member->write(); - + + if ($member->canLogIn()->valid()) { + $member->logIn(); + } + + // TODO Add confirmation message to login redirect + Session::clear('AutoLoginHash'); + if (!empty($_REQUEST['BackURL']) // absolute redirection URLs may cause spoofing && Director::is_site_url($_REQUEST['BackURL']) From 6817c57f64b9eb2b271b81662cd83b074a3daee4 Mon Sep 17 00:00:00 2001 From: Daniel Hensby Date: Fri, 22 Jul 2016 11:01:11 +0100 Subject: [PATCH 4/9] [SS-2016-013] FIX Uncasted member name --- security/Member.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/security/Member.php b/security/Member.php index f8a2bf185..1b6065250 100644 --- a/security/Member.php +++ b/security/Member.php @@ -98,12 +98,24 @@ class Member extends DataObject implements TemplateGlobalProvider { 'Email', ); + /** + * @config + * @var array + */ private static $summary_fields = array( 'FirstName', 'Surname', 'Email', ); + /** + * @config + * @var array + */ + private static $casting = array( + 'Name' => 'Varchar', + ); + /** * Internal-use only fields * From 1c7d5de51bcdf16ebb21c5a0ebe5fe9e31f9a822 Mon Sep 17 00:00:00 2001 From: Daniel Hensby Date: Mon, 25 Jul 2016 12:08:15 +0100 Subject: [PATCH 5/9] [SS-2016-014] FIX Autologin cookies are ignored if autologin is disabled --- security/Member.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/security/Member.php b/security/Member.php index 1b6065250..aedcbadb7 100644 --- a/security/Member.php +++ b/security/Member.php @@ -465,7 +465,8 @@ class Member extends DataObject implements TemplateGlobalProvider { $this->NumVisit++; - if($remember) { + // Only set the cookie if autologin is enabled + if($remember && Security::config()->autologin_enabled) { // Store the hash and give the client the cookie with the token. $generator = new RandomGenerator(); $token = $generator->randomToken('sha1'); @@ -536,7 +537,8 @@ class Member extends DataObject implements TemplateGlobalProvider { // Don't bother trying this multiple times self::$_already_tried_to_auto_log_in = true; - if(strpos(Cookie::get('alc_enc'), ':') === false + if(!Security::config()->autologin_enabled + || strpos(Cookie::get('alc_enc'), ':') === false || Session::get("loggedInAs") || !Security::database_is_ready() ) { From 62a242154ec3508fe9b174a40713c8520ac1684c Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Wed, 3 Aug 2016 11:23:17 +1200 Subject: [PATCH 6/9] [ss-2016-015] Fix value / title escaping in CheckboxSetField and OptionsetField --- forms/CheckboxSetField.php | 69 +++++++++++++++------------- forms/OptionsetField.php | 43 +++++++++-------- templates/forms/CheckboxSetField.ss | 4 +- templates/forms/OptionsetField.ss | 2 +- tests/forms/CheckboxSetFieldTest.php | 69 ++++++++++++++++++---------- tests/forms/OptionsetFieldTest.php | 20 ++++++-- 6 files changed, 125 insertions(+), 82 deletions(-) diff --git a/forms/CheckboxSetField.php b/forms/CheckboxSetField.php index d138da16d..868f4f662 100644 --- a/forms/CheckboxSetField.php +++ b/forms/CheckboxSetField.php @@ -4,7 +4,7 @@ * * ASSUMPTION -> IF you pass your source as an array, you pass values as an array too. Likewise objects are handled * the same. - * + * * Example: * * new CheckboxSetField( @@ -19,7 +19,7 @@ * $value = "1" * ); * - * + * * Saving * The checkbox set field will save its data in one of ways: * - If the field name matches a many-many join on the object being edited, that many-many join will be updated to @@ -27,17 +27,17 @@ * the database records. * - If the field name matches a database field, a comma-separated list of values will be saved to that field. The * keys can be text or numbers. - * + * * @todo Document the different source data that can be used * with this form field - e.g ComponentSet, ArrayList, * array. Is it also appropriate to accept so many different * types of data when just using an array would be appropriate? - * + * * @package forms * @subpackage fields-basic */ class CheckboxSetField extends OptionsetField { - + /** * @var array */ @@ -82,7 +82,7 @@ class CheckboxSetField extends OptionsetField { } } } - + // Source is not an array if(!is_array($source) && !is_a($source, 'SQLMap')) { if(is_array($values)) { @@ -126,19 +126,22 @@ class CheckboxSetField extends OptionsetField { if(is_array($source)) { unset($source['']); } - + $options = array(); - + if ($source == null) { $source = array(); } foreach($source as $value => $item) { - if($item instanceof DataObject) { + // Ensure $title is cast for template + if ($item instanceof DataObject) { $value = $item->ID; - $title = $item->Title; - } else { + $title = $item->obj('Title'); + } elseif ($item instanceof DBField) { $title = $item; + } else { + $title = DBField::create_field('Text', $item); } $itemID = $this->ID() . '_' . preg_replace('/[^a-zA-Z0-9]/', '', $value); @@ -168,21 +171,21 @@ class CheckboxSetField extends OptionsetField { * Default selections, regardless of the {@link setValue()} settings. * Note: Items marked as disabled through {@link setDisabledItems()} can still be * selected by default through this method. - * + * * @param Array $items Collection of array keys, as defined in the $source array */ public function setDefaultItems($items) { $this->defaultItems = $items; return $this; } - + /** * @return Array */ public function getDefaultItems() { return $this->defaultItems; } - + /** * Load a value into this CheckboxSetField */ @@ -198,7 +201,7 @@ class CheckboxSetField extends OptionsetField { return $this; } - + /** * Save the current value of this CheckboxSetField into a DataObject. * If the field it is saving to is a has_many or many_many relationship, @@ -228,11 +231,11 @@ class CheckboxSetField extends OptionsetField { } } } - + /** - * Return the CheckboxSetField value as a string + * Return the CheckboxSetField value as a string * selected item keys. - * + * * @return string */ public function dataValue() { @@ -243,30 +246,30 @@ class CheckboxSetField extends OptionsetField { $filtered[] = str_replace(",", "{comma}", $item); } } - + return implode(',', $filtered); } - + return ''; } - + public function performDisabledTransformation() { $clone = clone $this; $clone->setDisabled(true); - + return $clone; } - + /** * Transforms the source data for this CheckboxSetField * into a comma separated list of values. - * + * * @return ReadonlyField */ public function performReadonlyTransformation() { $values = ''; $data = array(); - + $items = $this->value; if($this->source) { foreach($this->source as $source) { @@ -275,7 +278,7 @@ class CheckboxSetField extends OptionsetField { } } } - + if($items) { // Items is a DO Set if($items instanceof SS_List) { @@ -283,13 +286,13 @@ class CheckboxSetField extends OptionsetField { $data[] = $item->Title; } if($data) $values = implode(', ', $data); - + // Items is an array or single piece of string (including comma seperated string) } else { if(!is_array($items)) { $items = preg_split('/ *, */', trim($items)); } - + foreach($items as $item) { if(is_array($item)) { $data[] = $item['Title']; @@ -301,23 +304,23 @@ class CheckboxSetField extends OptionsetField { $data[] = $item; } } - + $values = implode(', ', $data); } } - + $field = $this->castedCopy('ReadonlyField'); $field->setValue($values); - + return $field; } public function Type() { return 'optionset checkboxset'; } - + public function ExtraOptions() { return FormField::ExtraOptions(); } - + } diff --git a/forms/OptionsetField.php b/forms/OptionsetField.php index 010c9ff22..cc16bc5f2 100644 --- a/forms/OptionsetField.php +++ b/forms/OptionsetField.php @@ -1,13 +1,13 @@ Usage - * + * * * new OptionsetField( * $name = "Foobar", @@ -22,15 +22,15 @@ * $value = "1" * ); * - * - * You can use the helper functions on data object set to create the source array. eg: - * + * + * You can use the helper functions on data object set to create the source array. eg: + * * * //Database request for the object * $map = FooBar::get()->map(); * // returns an SS_Map object containing an array of ID => Title * - * // Instantiate the OptionsetField + * // Instantiate the OptionsetField * $FieldList = new FieldList( * new OptionsetField( * $name = "Foobar", @@ -42,16 +42,16 @@ * * // Pass the fields to the form constructor. etc * - * + * * @see CheckboxSetField for multiple selections through checkboxes instead. * @see DropdownField for a simple checked="checked"<% end_if %><% if $isDisabled %> disabled="disabled"<% end_if %> /> + checked="checked"<% end_if %><% if $isDisabled %> disabled="disabled"<% end_if %> /> - + <% end_loop %> <% else %>
  • No options available
  • diff --git a/templates/forms/OptionsetField.ss b/templates/forms/OptionsetField.ss index bb8818a6f..d9e38156d 100644 --- a/templates/forms/OptionsetField.ss +++ b/templates/forms/OptionsetField.ss @@ -1,7 +1,7 @@
      <% loop $Options %>
    • - checked<% end_if %><% if $isDisabled %> disabled<% end_if %> /> + checked<% end_if %><% if $isDisabled %> disabled<% end_if %> />
    • <% end_loop %> diff --git a/tests/forms/CheckboxSetFieldTest.php b/tests/forms/CheckboxSetFieldTest.php index ac4bc22d6..aba8a80d1 100644 --- a/tests/forms/CheckboxSetFieldTest.php +++ b/tests/forms/CheckboxSetFieldTest.php @@ -5,21 +5,21 @@ * @subpackage tests */ class CheckboxSetFieldTest extends SapphireTest { - + protected static $fixture_file = 'CheckboxSetFieldTest.yml'; protected $extraDataObjects = array( 'CheckboxSetFieldTest_Article', 'CheckboxSetFieldTest_Tag', ); - + public function testSetDefaultItems() { $f = new CheckboxSetField( - 'Test', - false, + 'Test', + false, array(0 => 'Zero', 1 => 'One', 2 => 'Two', 3 => 'Three') ); - + $f->setValue(array(0,1)); $f->setDefaultItems(array(2)); $p = new CSSContentParser($f->Field()); @@ -48,68 +48,68 @@ class CheckboxSetFieldTest extends SapphireTest { 'Not selected by either value or default items' ); } - + public function testSaveWithNothingSelected() { $article = $this->objFromFixture('CheckboxSetFieldTest_Article', 'articlewithouttags'); - + /* Create a CheckboxSetField with nothing selected */ $field = new CheckboxSetField("Tags", "Test field", DataObject::get("CheckboxSetFieldTest_Tag")->map()); - + /* Saving should work */ $field->saveInto($article); - + $this->assertNull( DB::query("SELECT * FROM \"CheckboxSetFieldTest_Article_Tags\" WHERE \"CheckboxSetFieldTest_Article_Tags\".\"CheckboxSetFieldTest_ArticleID\" = $article->ID ")->value(), 'Nothing should go into manymany join table for a saved field without any ticked boxes' - ); + ); } - + public function testSaveWithArrayValueSet() { $article = $this->objFromFixture('CheckboxSetFieldTest_Article', 'articlewithouttags'); $articleWithTags = $this->objFromFixture('CheckboxSetFieldTest_Article', 'articlewithtags'); $tag1 = $this->objFromFixture('CheckboxSetFieldTest_Tag', 'tag1'); $tag2 = $this->objFromFixture('CheckboxSetFieldTest_Tag', 'tag2'); - + /* Create a CheckboxSetField with 2 items selected. Note that the array is in the format (key) => (selected) */ $field = new CheckboxSetField("Tags", "Test field", DataObject::get("CheckboxSetFieldTest_Tag")->map()); $field->setValue(array( $tag1->ID => true, $tag2->ID => true )); - + /* Saving should work */ $field->saveInto($article); - + $this->assertEquals( - array($tag1->ID,$tag2->ID), + array($tag1->ID,$tag2->ID), DB::query("SELECT \"CheckboxSetFieldTest_TagID\" FROM \"CheckboxSetFieldTest_Article_Tags\" WHERE \"CheckboxSetFieldTest_Article_Tags\".\"CheckboxSetFieldTest_ArticleID\" = $article->ID ")->column(), 'Data shold be saved into CheckboxSetField manymany relation table on the "right end"' - ); + ); $this->assertEquals( - array($articleWithTags->ID,$article->ID), + array($articleWithTags->ID,$article->ID), DB::query("SELECT \"CheckboxSetFieldTest_ArticleID\" FROM \"CheckboxSetFieldTest_Article_Tags\" WHERE \"CheckboxSetFieldTest_Article_Tags\".\"CheckboxSetFieldTest_TagID\" = $tag1->ID ")->column(), 'Data shold be saved into CheckboxSetField manymany relation table on the "left end"' - ); + ); } - + public function testLoadDataFromObject() { $article = $this->objFromFixture('CheckboxSetFieldTest_Article', 'articlewithouttags'); $articleWithTags = $this->objFromFixture('CheckboxSetFieldTest_Article', 'articlewithtags'); $tag1 = $this->objFromFixture('CheckboxSetFieldTest_Tag', 'tag1'); $tag2 = $this->objFromFixture('CheckboxSetFieldTest_Tag', 'tag2'); - + $field = new CheckboxSetField("Tags", "Test field", DataObject::get("CheckboxSetFieldTest_Tag")->map()); $form = new Form( - new Controller(), + new Controller(), 'Form', new FieldList($field), new FieldList() @@ -144,6 +144,27 @@ class CheckboxSetFieldTest extends SapphireTest { $this->assertEquals('Test,Another', $dbValue); } + public function testSafelyCast() { + $member = new Member(); + $member->FirstName = ''; + $member->Surname = ''; + $member->write(); + $field1 = new CheckboxSetField('Options', 'Options', array( + 'one' => 'One', + 'two' => 'Two & Three', + 'three' => DBField::create_field('HTMLText', 'Four & Five & Six'), + $member + )); + $fieldHTML = (string)$field1->Field(); + $this->assertContains('One', $fieldHTML); + $this->assertContains('Two & Three', $fieldHTML); + $this->assertNotContains('Two & Three', $fieldHTML); + $this->assertContains('Four & Five & Six', $fieldHTML); + $this->assertNotContains('Four & Five & Six', $fieldHTML); + $this->assertContains('<firstname>', $fieldHTML); + $this->assertNotContains('', $fieldHTML); + } + } /** @@ -156,11 +177,11 @@ class CheckboxSetFieldTest_Article extends DataObject implements TestOnly { private static $db = array( "Content" => "Text", ); - + private static $many_many = array( "Tags" => "CheckboxSetFieldTest_Tag", ); - + } /** @@ -168,7 +189,7 @@ class CheckboxSetFieldTest_Article extends DataObject implements TestOnly { * @subpackage tests */ class CheckboxSetFieldTest_Tag extends DataObject implements TestOnly { - + private static $belongs_many_many = array( 'Articles' => 'CheckboxSetFieldTest_Article' ); diff --git a/tests/forms/OptionsetFieldTest.php b/tests/forms/OptionsetFieldTest.php index 81d66fe77..d7fb0018a 100644 --- a/tests/forms/OptionsetFieldTest.php +++ b/tests/forms/OptionsetFieldTest.php @@ -6,11 +6,11 @@ class OptionsetFieldTest extends SapphireTest { public function testSetDisabledItems() { $f = new OptionsetField( - 'Test', - false, + 'Test', + false, array(0 => 'Zero', 1 => 'One') ); - + $f->setDisabledItems(array(0)); $p = new CSSContentParser($f->Field()); $item0 = $p->getBySelector('#Test_0'); @@ -34,4 +34,18 @@ class OptionsetFieldTest extends SapphireTest { preg_match('/Yes/', $field->Field(), $matches); $this->assertEquals($matches[0], 'Yes'); } + + public function testSafelyCast() { + $field1 = new OptionsetField('Options', 'Options', array( + 1 => 'One', + 2 => 'Two & Three', + 3 => DBField::create_field('HTMLText', 'Four & Five & Six') + )); + $fieldHTML = (string)$field1->Field(); + $this->assertContains('One', $fieldHTML); + $this->assertContains('Two & Three', $fieldHTML); + $this->assertNotContains('Two & Three', $fieldHTML); + $this->assertContains('Four & Five & Six', $fieldHTML); + $this->assertNotContains('Four & Five & Six', $fieldHTML); + } } From b2a7170c64cbe86d7beb453da956454452c50cba Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Mon, 15 Aug 2016 13:41:31 +1200 Subject: [PATCH 7/9] Added 3.1.20-rc2 changelog --- docs/en/04_Changelogs/rc/3.1.20-rc2.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 docs/en/04_Changelogs/rc/3.1.20-rc2.md diff --git a/docs/en/04_Changelogs/rc/3.1.20-rc2.md b/docs/en/04_Changelogs/rc/3.1.20-rc2.md new file mode 100644 index 000000000..cdec06683 --- /dev/null +++ b/docs/en/04_Changelogs/rc/3.1.20-rc2.md @@ -0,0 +1,14 @@ +# 3.1.20-rc2 + + + +## Change Log + +### Security + + * 2016-08-02 [62a2421](https://github.com/silverstripe/silverstripe-framework/commit/62a242154ec3508fe9b174a40713c8520ac1684c) Fix value / title escaping in CheckboxSetField and OptionsetField (Damian Mooyman) - See [ss-2016-015](http://www.silverstripe.org/download/security-releases/ss-2016-015) + * 2016-07-25 [1c7d5de](https://github.com/silverstripe/silverstripe-framework/commit/1c7d5de51bcdf16ebb21c5a0ebe5fe9e31f9a822) Autologin cookies are ignored if autologin is disabled (Daniel Hensby) - See [ss-2016-014](http://www.silverstripe.org/download/security-releases/ss-2016-014) + * 2016-07-22 [6817c57](https://github.com/silverstripe/silverstripe-framework/commit/6817c57f64b9eb2b271b81662cd83b074a3daee4) Uncasted member name (Daniel Hensby) - See [ss-2016-013](http://www.silverstripe.org/download/security-releases/ss-2016-013) + * 2016-07-15 [298f615](https://github.com/silverstripe/silverstripe-framework/commit/298f61521c55b07e5c898a92264dbe111735a87a) Reset `Member::Salt` on password change (Daniel Hensby) - See [ss-2016-008](http://www.silverstripe.org/download/security-releases/ss-2016-008) + * 2016-07-14 [6606d98](https://github.com/silverstripe/silverstripe-framework/commit/6606d986634f5b5dec16462acaa8d9a513c29fec) ChangePasswordForm does not check $member->canLogin before login (Daniel Hensby) - See [ss-2016-011](http://www.silverstripe.org/download/security-releases/ss-2016-011) + * 2016-07-14 [5f73d34](https://github.com/silverstripe/silverstripe-cms/commit/5f73d3454ecbc4850e91a0a3007102f6d4d9b853) Missing ACL check on ReportAdmin (Daniel Hensby) - See [ss-2016-012](http://www.silverstripe.org/download/security-releases/ss-2016-012) From a3f8e522d8a829f830042b7e22d6e6bdbe26257a Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Mon, 15 Aug 2016 16:31:56 +1200 Subject: [PATCH 8/9] Update translations --- lang/cs.yml | 9 --------- lang/eo.yml | 9 --------- lang/hr.yml | 5 ----- lang/id_ID.yml | 11 +++++++++++ lang/ru.yml | 9 --------- lang/sk.yml | 9 --------- 6 files changed, 11 insertions(+), 41 deletions(-) diff --git a/lang/cs.yml b/lang/cs.yml index cc87bbb3b..6b774c4cc 100644 --- a/lang/cs.yml +++ b/lang/cs.yml @@ -210,15 +210,12 @@ cs: JsType: 'Javascript soubor' Mp3Type: 'MP3 audio soubor' MpgType: 'MPEG video soubor' - NOFILESIZE: 'Velikost souboru je 0 bajtů.' NOVALIDUPLOAD: 'Soubor není validní pro nahrání' Name: Jméno PLURALNAME: Soubory PdfType: 'Adobe Acrobat PDF soubor' PngType: 'PNG obrázek - vhodný jako univerzálmí formát' SINGULARNAME: Soubor - TOOLARGE: 'Velikost souboru je příliš velká, povolené maximum {size}' - TOOLARGESHORT: 'Velikost souboru překračuje {size}' TiffType: 'Tiff formát obrázku' Title: Titulek WavType: 'WAV audo soubor' @@ -381,8 +378,6 @@ cs: FROMWEB: 'Z webu' FindInFolder: 'Hledat ve složce' IMAGEALT: 'Alternativní text (alt)' - IMAGEALTTEXT: 'Alternativní text (alt) - ukáže se, když obrázek nemúže být zobrazen' - IMAGEALTTEXTDESC: 'Zobrazeno na obrazovce, anebo když obrázek nemůže být zobrazen' IMAGEDIMENSIONS: Rozměry IMAGEHEIGHTPX: Výška IMAGETITLE: 'Titul text (tooltip) - další informace o obrázku' @@ -417,13 +412,10 @@ cs: CANCEL: Storno CANT_REORGANISE: 'Nemáte oprávnění měnit stránky nejvyšší úrovně. Vaše změna nebyla uložena.' DELETED: Smazáno. - DropdownBatchActionsDefault: 'Vyberte akci...' HELP: Nápověda - PAGETYPE: 'Typ stránky' PERMAGAIN: 'Byli jste odhlášeni z CMS. Pokud se chcete znovu přihlásit, zadejte níže své uživatelské jméno a heslo.' PERMALREADY: 'Omlouvám se, ale nemůžete vstoupit do této části CMS. Pokud se chcete přihlásit jako někdo jiný, udělejte tak níže.' PERMDEFAULT: 'Musíte být přihlášen/a k přístup do oblasti administrace, níže zadejte vaše přihlašovací údaje, prosím.' - PLEASESAVE: 'Prosím uložte stránku: Tato stránka nemohla být aktualizována, protože ještě nebyla uložena.' PreviewButton: Náhled REORGANISATIONSUCCESSFUL: 'Strom webu reorganizován úspěšně.' SAVEDUP: Uloženo. @@ -479,7 +471,6 @@ cs: SUBJECTPASSWORDRESET: 'Nulovací odkaz pro Vaše heslo' SURNAME: Příjmení TIMEFORMAT: 'Formát času' - VALIDATIONMEMBEREXISTS: 'Již existuje člen se stejným {identifier}' ValidationIdentifierFailed: 'Nemůžete přepsat existujícího člena #{id} s identickým identifikátorem ({name} = {value}))' WELCOMEBACK: 'Vítejte zpět, {firstname}' YOUROLDPASSWORD: 'Vaše staré heslo' diff --git a/lang/eo.yml b/lang/eo.yml index c8054df45..bd4026829 100644 --- a/lang/eo.yml +++ b/lang/eo.yml @@ -210,15 +210,12 @@ eo: JsType: 'Ĝavaskripta dosiero' Mp3Type: 'MP3-sondosiero' MpgType: 'AVI-videa dosiero' - NOFILESIZE: 'Dosiero havas neniom da bajtoj.' NOVALIDUPLOAD: 'Dosiero ne estas valida alŝutaĵo.' Name: Nomo PLURALNAME: Dosieroj PdfType: 'Dosiero de Adobe Acrobat PDF' PngType: 'PNG-bildo - ĝeneralcela formato' SINGULARNAME: Dosiero - TOOLARGE: 'Dosiero estas tro granda, maksimumo permesita {size}' - TOOLARGESHORT: 'Dosiero estas pli ol {size}' TiffType: 'Markita bildoformato' Title: Titolo WavType: 'WAV-sondosiero' @@ -381,8 +378,6 @@ eo: FROMWEB: 'El la TTT' FindInFolder: 'Serĉi en dosierujo' IMAGEALT: 'Alternativa teksto (alt)' - IMAGEALTTEXT: 'Alternativa teksto (alt) - vidigota se bildo ne estas vidigebla' - IMAGEALTTEXTDESC: 'Vidigota al ekranlegantoj aŭ se bildo ne estas vidigebla' IMAGEDIMENSIONS: Dimensioj IMAGEHEIGHTPX: Alto IMAGETITLE: 'Titola teksto (ŝpruchelpilo) - por plua informo pri la bildo' @@ -417,13 +412,10 @@ eo: CANCEL: Rezigni CANT_REORGANISE: 'Vi ne rajtas ŝanĝi supronivelajn paĝojn. Via ŝanĝo ne konserviĝis.' DELETED: Forigita. - DropdownBatchActionsDefault: 'Elekti agon...' HELP: Helpo - PAGETYPE: 'Tipo de paĝo' PERMAGAIN: 'Vin adiaŭis la CMS. Se vi volas denove saluti, enigu salutnomon kaj pasvorton malsupre.' PERMALREADY: 'Bedaŭrinde vi ne povas aliri tiun parton de la CMS. Se vi volas ensaluti kiel aliulo, faru tion sube.' PERMDEFAULT: 'Necesas ensaluti por aliri la administran zonon; bonvolu enigi viajn akreditaĵoj sube.' - PLEASESAVE: 'Bonvolu konservi paĝon: Ne eblis ĝisdatigi ĉi tiun paĝon ĉar ĝi ankoraŭ ne estas konservita.' PreviewButton: Antaŭvido REORGANISATIONSUCCESSFUL: 'Sukcese reorganizis la retejan arbon.' SAVEDUP: Konservita. @@ -479,7 +471,6 @@ eo: SUBJECTPASSWORDRESET: 'Via pasvorto reagordis ligilon' SURNAME: Familia nomo TIMEFORMAT: 'Formato de horo' - VALIDATIONMEMBEREXISTS: 'Jam ekzistas membro kun la sama {identifier}' ValidationIdentifierFailed: 'Ne povas anstataŭigi ekzistantan membron #{id} per sama identigilo ({name} = {value}))' WELCOMEBACK: 'Bonvenon denove, {firstname}' YOUROLDPASSWORD: 'Vian malnovan pasvorton' diff --git a/lang/hr.yml b/lang/hr.yml index 3d3d49b26..f742ff260 100644 --- a/lang/hr.yml +++ b/lang/hr.yml @@ -147,14 +147,11 @@ hr: JsType: 'Javascript datoteka' Mp3Type: 'MP3 zvuk datoteka' MpgType: 'MPEG video datoteka' - NOFILESIZE: 'Veličina datoteke je nula bajtova.' NOVALIDUPLOAD: 'Datoteka nije valjan upload' Name: Naziv PLURALNAME: Datoteke PngType: 'PNG slika - dobar generalan format' SINGULARNAME: Datoteka - TOOLARGE: 'Veličina datoteke je prevelika, maksimalna veličina je {size}' - TOOLARGESHORT: 'Veličina datoteke premašuje {size}' Title: Naslov WavType: 'WAV zvuk datoteka' XlsType: 'Excel tablica' @@ -261,9 +258,7 @@ hr: LeftAndMain: CANCEL: Odustani DELETED: Obrisano. - DropdownBatchActionsDefault: 'Odaberite akciju...' HELP: Pomoć - PAGETYPE: 'Tip stranice' PERMAGAIN: 'Odjavili ste se sa sustava. Želite li se ponovno prijaviti upišite korisničko ime i lozinku.' PreviewButton: Pregled SAVEDUP: Spremljeno diff --git a/lang/id_ID.yml b/lang/id_ID.yml index 2dc7ea2d9..e533e99c1 100644 --- a/lang/id_ID.yml +++ b/lang/id_ID.yml @@ -1,5 +1,12 @@ id_ID: + AddToCampaign: + ErrorCampaignPermissionDenied: 'Sepertinya Anda tidak memiliki ijin yang diperlukan untuk menambahkan {ObjectTitle} ke {CampaignTitle}' + ErrorGeneral: 'Mohon maaf, ada kesalahan' + ErrorNotFound: '{Type} tidak ditemukan' + Success: 'Berhasil menambahkan {ObjectTitle} ke {CampaignTitle}' AssetAdmin: + ALLOWEDEXTS: 'Ekstensi berkas yang diperbolehkan' + HIDEALLOWEDEXTS: 'Sembunyikan ekstensi berkas yang diperbolehkan' NEWFOLDER: FolderBaru SHOWALLOWEDEXTS: 'Tampilkan ekstensi yang dibolehkan' AssetTableField: @@ -13,6 +20,7 @@ id_ID: TITLE: Judul TYPE: 'Jenis berkas' URL: URL + WIDTH: Lebar AssetUploadField: ChooseFiles: 'Pilih berkas' DRAGFILESHERE: 'Tarik berkas ke sini' @@ -564,3 +572,6 @@ id_ID: UPLOADSINTO: 'disimpan ke /{path}' Versioned: has_many_Versions: Versi + VersionedGridFieldItemRequest: + ARCHIVE: Arsip + Archived: '%s %s diarsipkan' diff --git a/lang/ru.yml b/lang/ru.yml index f75400ee0..6c63e87d4 100644 --- a/lang/ru.yml +++ b/lang/ru.yml @@ -210,15 +210,12 @@ ru: JsType: 'Файл Javascript' Mp3Type: 'Аудиофайл MP3' MpgType: 'Видеофайл MPEG' - NOFILESIZE: 'Размер файла 0 байт.' NOVALIDUPLOAD: 'Недействительный файл для загрузки' Name: Название PLURALNAME: Файлы PdfType: 'Файл Adobe Acrobat PDF' PngType: 'Изображение PNG - универсальный графический формат' SINGULARNAME: Файл - TOOLARGE: 'Превышен допустимый размер файла, максимально разрешенный размер: {size}' - TOOLARGESHORT: 'Размер файла превышает {size}' TiffType: 'Изображение TIFF' Title: Заголовок WavType: 'Аудиофайл WAV' @@ -381,8 +378,6 @@ ru: FROMWEB: 'Из интернета' FindInFolder: 'Найти в папке' IMAGEALT: 'Альтернативный текст (alt)' - IMAGEALTTEXT: 'Альтернативный текст (alt) - показывается, если изображение недоступно' - IMAGEALTTEXTDESC: 'Отображается если в браузере отключены изображения или если изображение недоступно' IMAGEDIMENSIONS: Размеры IMAGEHEIGHTPX: Высота IMAGETITLE: 'Текст (всплывающая подсказка) - для дополнительной информации об изображении' @@ -417,13 +412,10 @@ ru: CANCEL: Отмена CANT_REORGANISE: 'У вас нет права редактировать страницы верхнего уровня. Изменения не были сохранены.' DELETED: Удалено. - DropdownBatchActionsDefault: 'Выберите действие ...' HELP: Помощь - PAGETYPE: 'Тип страницы' PERMAGAIN: 'Вы вышли из Системы Управления Сайтом. Если Вы хотите войти снова, введите внизу имя пользователя и пароль.' PERMALREADY: 'Извините, у вас нет доступа к этому разделу Системы Управления. Если Вы хотите войти под другой учетной записью, сделайте это ниже.' PERMDEFAULT: 'Вы должны войти в систему для доступа к панели управления сайтом. Введите ваши данные ниже.' - PLEASESAVE: 'Пожалуйста, сохраните страницу: ее нельзя обновить, т.к. она еще не была сохранена.' PreviewButton: Просмотр REORGANISATIONSUCCESSFUL: 'Древесная структура сайта успешно реорганизована.' SAVEDUP: Сохранено. @@ -479,7 +471,6 @@ ru: SUBJECTPASSWORDRESET: 'Ссылка для переустановки пароля' SURNAME: Фамилия TIMEFORMAT: 'Формат времени' - VALIDATIONMEMBEREXISTS: 'Пользователь с {identifier} уже существует ' ValidationIdentifierFailed: 'Невозможно заменить существующего участника #{id} c таким же идентификатором ({name} = {value}))' WELCOMEBACK: 'Добро пожаловать, {firstname}' YOUROLDPASSWORD: 'Ваш прежний пароль' diff --git a/lang/sk.yml b/lang/sk.yml index ba048ab6f..a3247633a 100644 --- a/lang/sk.yml +++ b/lang/sk.yml @@ -210,15 +210,12 @@ sk: JsType: 'Javascript súbor' Mp3Type: 'MP3 audio súbor' MpgType: 'MPEG video súbor' - NOFILESIZE: 'Veľkosť súboru je nula bajtov.' NOVALIDUPLOAD: 'Subor nie je povolený pre nahratie' Name: Meno PLURALNAME: Súbory PdfType: 'Adobe Acrobat PDF súbor' PngType: 'PNG obrázok - vhodný univerzálny formát' SINGULARNAME: Súbor - TOOLARGE: 'Veľkosť súboru je príliš veľká, maximum {size} je povolené' - TOOLARGESHORT: 'Veľkosť súboru prekračuje {size}' TiffType: 'Tiff formát obrázku' Title: Názov WavType: 'WAV audo súbor' @@ -381,8 +378,6 @@ sk: FROMWEB: 'Z webu' FindInFolder: 'Vyhľadať v priečinku' IMAGEALT: 'Atlernatívny text (alt)' - IMAGEALTTEXT: 'Atlernatívny text (alt) - zobrazí sa, ak nemože byť zobrazený obrázok' - IMAGEALTTEXTDESC: 'Zobrazí sa na obrazovke alebo ak obrázok nemôže byť zobrazený' IMAGEDIMENSIONS: Rozmery IMAGEHEIGHTPX: Výška IMAGETITLE: 'Text titulky (tooltip) - pre doplňujúce informácie o obrázku' @@ -417,13 +412,10 @@ sk: CANCEL: Zrušiť CANT_REORGANISE: 'Nemáte oprávnenie meniť stránky najvyššej úrovne. Vaša zmena nebola uložená.' DELETED: Zmazané. - DropdownBatchActionsDefault: 'Vyberte akciu...' HELP: Pomoc - PAGETYPE: 'Typ stránky' PERMAGAIN: 'Boli ste odhlásený' PERMALREADY: 'Je nám ľúto, ale k tejto časti CMS nemáte prístup . Ak sa chcete prihlásiť ako niekto iný, urobte tak nižšie.' PERMDEFAULT: 'Musíte byť prihlásený/á k prístupu do oblasti administrácie, zadajte vaše prihlasovacie údaje dole, prosím.' - PLEASESAVE: 'Prosím uložte stránku: Táto stránka nemôže byť aktualizovaná, lebo ešte nebola uložená.' PreviewButton: Náhľad REORGANISATIONSUCCESSFUL: 'Strom webu bol reorganizovaný úspešne.' SAVEDUP: Uložené. @@ -479,7 +471,6 @@ sk: SUBJECTPASSWORDRESET: 'Odkaz na resetovanie hesla' SURNAME: Priezvisko TIMEFORMAT: 'Formát času' - VALIDATIONMEMBEREXISTS: 'Člen už existuje s rovnakým {identifier}' ValidationIdentifierFailed: 'Nemôžte prepísať existujúceho člena #{id} s identickým identifikátorm ({name} = {value})' WELCOMEBACK: 'Vitajte späť, {firstname}' YOUROLDPASSWORD: 'Vaše staré heslo' From 6f60d2518bf5265265c00935221a4b17d3c83e99 Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Mon, 15 Aug 2016 16:44:36 +1200 Subject: [PATCH 9/9] Added 3.1.20 changelog --- docs/en/04_Changelogs/3.1.20.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 docs/en/04_Changelogs/3.1.20.md diff --git a/docs/en/04_Changelogs/3.1.20.md b/docs/en/04_Changelogs/3.1.20.md new file mode 100644 index 000000000..d21710bc4 --- /dev/null +++ b/docs/en/04_Changelogs/3.1.20.md @@ -0,0 +1,23 @@ +# 3.1.20 + + + +## Change Log + +### Security + + * 2016-08-02 [62a2421](https://github.com/silverstripe/silverstripe-framework/commit/62a242154ec3508fe9b174a40713c8520ac1684c) Fix value / title escaping in CheckboxSetField and OptionsetField (Damian Mooyman) - See [ss-2016-015](http://www.silverstripe.org/download/security-releases/ss-2016-015) + * 2016-07-25 [1c7d5de](https://github.com/silverstripe/silverstripe-framework/commit/1c7d5de51bcdf16ebb21c5a0ebe5fe9e31f9a822) Autologin cookies are ignored if autologin is disabled (Daniel Hensby) - See [ss-2016-014](http://www.silverstripe.org/download/security-releases/ss-2016-014) + * 2016-07-22 [6817c57](https://github.com/silverstripe/silverstripe-framework/commit/6817c57f64b9eb2b271b81662cd83b074a3daee4) Uncasted member name (Daniel Hensby) - See [ss-2016-013](http://www.silverstripe.org/download/security-releases/ss-2016-013) + * 2016-07-15 [298f615](https://github.com/silverstripe/silverstripe-framework/commit/298f61521c55b07e5c898a92264dbe111735a87a) Reset `Member::Salt` on password change (Daniel Hensby) - See [ss-2016-008](http://www.silverstripe.org/download/security-releases/ss-2016-008) + * 2016-07-14 [6606d98](https://github.com/silverstripe/silverstripe-framework/commit/6606d986634f5b5dec16462acaa8d9a513c29fec) ChangePasswordForm does not check $member->canLogin before login (Daniel Hensby) - See [ss-2016-011](http://www.silverstripe.org/download/security-releases/ss-2016-011) + * 2016-07-14 [5f73d34](https://github.com/silverstripe/silverstripe-cms/commit/5f73d3454ecbc4850e91a0a3007102f6d4d9b853) Missing ACL check on ReportAdmin (Daniel Hensby) - See [ss-2016-012](http://www.silverstripe.org/download/security-releases/ss-2016-012) + +### Bugfixes + + * 2016-08-15 [95c640a](https://github.com/silverstripe/silverstripe-cms/commit/95c640ae6b5620be83d38e8060317554bc0820ed) Fix regression in FormField casting (Damian Mooyman) + * 2016-05-20 [8382685](https://github.com/silverstripe/silverstripe-framework/commit/83826850346bc486bc4599dca56067897961cbfa) #5557 Tests with no DB requirements wont create test DB (Daniel Hensby) + * 2016-05-18 [62bd26d](https://github.com/silverstripe/silverstripe-framework/commit/62bd26d11ab9c9bf5b91ba8abb776ab3a4813a18) Fix suppression of display_errors in ErrorControlChain (Damian Mooyman) + * 2016-05-10 [3738d88](https://github.com/silverstripe/silverstripe-framework/commit/3738d888e0fbce48e0d88735edd3455a116937b5) Empty FROM clause (Daniel Hensby) + * 2016-05-05 [cc7a2ae](https://github.com/silverstripe/silverstripe-installer/commit/cc7a2aeb1e03f3f8db67a1ca547280b05dd9372a) Add framework/admin tests (#118) (Daniel Hensby) + * 2015-04-21 [a7100e9](https://github.com/silverstripe/silverstripe-framework/commit/a7100e9006b27e7885eb2ce851d9bc0839ca4468) Object::parse_class_spec failed to parse associative arrays (Loz Calver)