Rodolfo Berrios 2021-10-19 11:02:27 -03:00
parent 535a08dbdf
commit 43de276ae4
No known key found for this signature in database
GPG Key ID: D3AAC2481DBDD9FE
83 changed files with 27 additions and 252655 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,27 +0,0 @@
<?php
$translation_header = array (
'Project-Id-Version' => 'Chevereto V3',
'POT-Creation-Date' => '2020-09-01 09:57-0400',
'PO-Revision-Date' => '2020-09-01 09:57-0400',
'Last-Translator' => 'Rodolfo Berríos <inbox@rodolfoberrios.com>',
'Language-Team' => '',
'Language' => 'en_US',
'MIME-Version' => '1.0',
'Content-Type' => 'text/plain; charset=UTF-8',
'Content-Transfer-Encoding' => '8bit',
'X-Generator' => 'Poedit 2.3',
'X-Poedit-Basepath' => '../../..',
'Plural-Forms' => 'nplurals=2; plural=(n != 1);',
'X-Poedit-KeywordsList' => '_s;_se;_n:1,2;_ne:1,2;PF.fn._s;PF.fn._n:1,2',
'X-Poedit-SourceCharset' => 'UTF-8',
'X-Poedit-SearchPath-0' => '.',
'X-Poedit-SearchPathExcluded-0' => 'app/vendor',
'X-Poedit-SearchPathExcluded-1' => 'app/content/languages/cache',
);
$translation_plural = array (
'nplurals' => 2,
'function' => '($n != 1)',
);
$translation_table = [
];
?>

File diff suppressed because it is too large Load Diff

View File

@ -1,489 +0,0 @@
<?php
$translation_header = array (
'Project-Id-Version' => 'VERSION',
'POT-Creation-Date' => '2020-03-31 21:05+0000',
'PO-Revision-Date' => '2020-03-31 21:05+0000',
'Last-Translator' => 'FULL NAME <EMAIL@ADDRESS>',
'Language-Team' => 'LANGUAGE TEAM <EMAIL@ADDRESS>',
'Language' => 'et_EE',
'MIME-Version' => '1.0',
'Content-Type' => 'text/plain; charset=UTF-8',
'Content-Transfer-Encoding' => '8bit',
'Plural-Forms' => 'nplurals=2; plural=(n != 1);',
);
$translation_plural = array (
'nplurals' => 2,
'function' => '($n != 1)',
);
$translation_table = [
"Invalid email" => [
0 => "Vigane email",
],
"Invalid username" => [
0 => "Vigane kasutaja",
],
"Invalid password" => [
0 => "Vigane parool",
],
"Invalid website mode" => [
0 => "Vigane veebilehe laad",
],
"From email address" => [
0 => "Saatja email",
],
"Sender email for emails sent to users." => [
0 => "Saatja email millega saadetakse kasutajatele.",
],
"Incoming email address" => [
0 => "Sissetulev emaili aadres",
],
"Website mode" => [
0 => "Veebilehe laad",
],
"You can switch the website mode anytime." => [
0 => "Saad vahetada veebilehe laadi igal ajal.",
],
"Community" => [
0 => "Kommuun",
],
"Personal" => [
0 => "Peronaalne",
],
"Update in progress" => [
0 => "Käimas on uuendamine",
],
"Missing %s file" => [
0 => "Puudu %s fail",
],
"Invalid license info" => [
0 => "Vigane litsentsi info",
],
"Invalid license key" => [
0 => "Vigane litsentsi kood",
],
"Can't save file" => [
0 => "Faili ei saa salvestada",
],
"Can't download %s" => [
0 => "Ei saa alla laadida %s",
],
"An error occurred. Please try again later." => [
0 => "Ilmnes viga. Palun proovi hiljem uuesti.",
],
"Passwords don't match" => [
0 => "Parool ei ühti",
],
"cancel" => [
0 => "katkesta",
],
"Edit" => [
0 => "Muuda",
],
"Album" => [
0 => "Album",
1 => "Albumid",
],
"Close" => [
0 => "Sulge",
],
"image" => [
0 => "pilt",
1 => "pildid",
],
"%s's Albums" => [
0 => "%s Albumid",
],
"Untitled" => [
0 => "Tiitlita",
],
"Note: This content is password protected. Remember to pass the content password to share." => [
0 => "Märkus: Sisu on märgitud parooliga kaitstuks. Pea meeles jagada parooli.",
],
"Note: This content is private. Change privacy to \"public\" to share." => [
0 => "Märkus: Sisu on märgitud privaatseks. Määra privaatsus seadetest \"avalik\" teistega jagamiseks.",
],
"Private" => [
0 => "Privaatne",
],
"Public" => [
0 => "Avalik",
],
"Link" => [
0 => "Link",
],
"Password" => [
0 => "Parool",
],
"view" => [
0 => "vaatamine",
1 => "vaatamist",
],
"minute" => [
0 => "minut",
1 => "minutit",
],
"hour" => [
0 => "tund",
1 => "tundi",
],
"day" => [
0 => "päev",
1 => "päeva",
],
"week" => [
0 => "nädal",
1 => "nädalat",
],
"month" => [
0 => "kuu",
1 => "kuud",
],
"year" => [
0 => "aasta",
1 => "aastat",
],
"Don't autodelete" => [
0 => "Ära kustuta automaatselt",
],
"Private upload" => [
0 => "Privaatne üleslaadimine",
],
"like" => [
0 => "meeldimine",
1 => "meeldimist",
],
"Recent" => [
0 => "Viimati lisatud",
],
"Trending" => [
0 => "Kuum",
],
"Top users" => [
0 => "Top kasutajad",
],
"Most recent" => [
0 => "Viimased",
],
"Oldest" => [
0 => "Vanimad",
],
"Most viewed" => [
0 => "Enim vaadatud",
],
"Popular" => [
0 => "Populaarsed",
],
"Explore" => [
0 => "Sirvi pilte",
],
"Animated" => [
0 => "Animeeritud",
],
"Search" => [
0 => "Otsi",
],
"Image" => [
0 => "pilt",
1 => "Pildid",
],
"User" => [
0 => "Kasutaja",
1 => "Kasutajad",
],
"Can't update storage details." => [
0 => "Ei saanud uuendada salvestamise detaile.",
],
"Unlimited" => [
0 => "Piiramatu",
],
"used" => [
0 => "kasutatud",
],
"Private profile" => [
0 => "Privaatne profiil",
],
"second" => [
0 => "sekund",
1 => "sekundit",
],
"%s ago" => [
0 => "%s tagasi",
],
"moments ago" => [
0 => "hetk tagasi",
],
"That page doesn't exist" => [
0 => "Seda lehte ei eksisteeri",
],
"Forgot password?" => [
0 => "Unustasid parooli ?",
],
"Reset password" => [
0 => "Taasta parool",
],
"Resend account activation" => [
0 => "Saada uuesti konto kinnitamise e-mail",
],
"Add your email address" => [
0 => "Lisa oma e-mail",
],
"Email changed" => [
0 => "E-mail muudetud",
],
"Invalid Username/Email" => [
0 => "Vale Kasutajanimi/Parool",
],
"Account needs to be activated to use this feature" => [
0 => "Konto peab olema aktiveeritud",
],
"Account already activated" => [
0 => "Konto on juba aktiveeritud",
],
"Allow up to 15 minutes for the email. You can try again later." => [
0 => "E-maili saabumine võib võtta aega kuni 15 minutit. Proovi hiljem uuesti.",
],
"Email already being used" => [
0 => "E-mail on juba kasutusel",
],
"Password required" => [
0 => "Parool nõutud",
],
"Share" => [
0 => "Jaga",
],
"Embed codes" => [
0 => "HTML ja BBKoodi tag'id",
],
"Stats" => [
0 => "Statistika",
],
"Images" => [
0 => "Pildid",
],
"Albums" => [
0 => "Albumid",
],
"Users" => [
0 => "Kasutajad",
],
"Settings" => [
0 => "Seaded",
],
"Chevereto version" => [
0 => "Chevereto versioon",
],
"install update" => [
0 => "installeeri uuendus",
],
"check for updates" => [
0 => "kontrolli uuendusi",
],
"Support" => [
0 => "Kasutajatugi",
],
"Enabled" => [
0 => "Lubatud",
],
"Disabled" => [
0 => "Keelatud",
],
"Max. upload file size" => [
0 => "Max faili suurus",
],
"Invalid timezone" => [
0 => "Vale ajatsoon",
],
"Sign in" => [
0 => "Logi sisse",
],
"Upload images" => [
0 => "Lae pilt ülesse",
],
"Account" => [
0 => "Konto",
],
"Profile" => [
0 => "Profiil",
],
"Wrong password" => [
0 => "Vale parool",
],
"Password has been changed" => [
0 => "Parool muudetud edukalt",
],
"Create account" => [
0 => "Loo konto",
],
"Upload" => [
0 => "Lae pilt...",
],
"Discovery" => [
0 => "Avasta",
],
"Advanced search" => [
0 => "Täpsem otsing",
],
"Random" => [
0 => "Suvaline pilt",
],
"My Profile" => [
0 => "Minu konto",
],
"Sign out" => [
0 => "Logi välja",
],
"Drag and drop or paste images here to upload" => [
0 => "Lohista fail siia või lae ülesse clipboardist",
],
"browse from your computer" => [
0 => "valida faili arvutist",
],
"add image URLs" => [
0 => "lisada läbi lingi",
],
"You can also %i or %u." => [
0 => "Sa saad %i või %u",
],
"Edit or resize any image by clicking the image preview" => [
0 => "Muuda pilti või pildi suurust vajutades pisipildile",
],
"your computer" => [
0 => "arvutist",
],
"You can add more images from %i or %u." => [
0 => "Saad lisada pilte juurde %i või %u",
],
"sign in" => [
0 => "logi sisse",
],
"close" => [
0 => "sulge",
],
"Remove" => [
0 => "Kustuta",
],
"Edit image" => [
0 => "Muuda pilti",
],
"Title" => [
0 => "Pealkiri",
],
"optional" => [
0 => "valikuline",
],
"Resize image" => [
0 => "Pildi mõõtmed",
],
"Note: Animated GIF images won't be resized." => [
0 => "Animeeritud (gif) failide pildi suurust ei saa muuta!",
],
"Auto delete image" => [
0 => "Kustuta pilt automaatselt",
],
"Description" => [
0 => "Kirjeldus",
],
"Brief description of this image" => [
0 => "....",
],
"Album name" => [
0 => "Albumi nimi",
],
"Private (just me)" => [
0 => "Privaatne(ainult minule)",
],
"Album password" => [
0 => "Albumi parool",
],
"Name" => [
0 => "Nimi",
],
"Select all" => [
0 => "Vali kõik",
],
"Clear selection" => [
0 => "Eemalda valik",
],
"Selection" => [
0 => "Valitud",
],
"Sign in with another account" => [
0 => "Logi sisse kasutades...",
],
"There's nothing to show here." => [
0 => "Tühjus... Pole midagi näidata!",
],
"Edit image details" => [
0 => "Muuda pilti",
],
"The requested page was not found." => [
0 => "Soovitud lehekülge ei leitud!",
],
"The user has been deleted" => [
0 => "Kasutaja kustutatud",
],
"Submit" => [
0 => "Edasi",
],
"Username or Email address" => [
0 => "Kasutajanimi või e-mail",
],
"Enter your new password" => [
0 => "Sisesta uus parool",
],
"Re-enter your new password" => [
0 => "Sisesta uuesti uus parool",
],
"Delete album" => [
0 => "Kustuta album",
],
"Album link" => [
0 => "Albumi link",
],
"Email address" => [
0 => "E-mail",
],
"Save changes" => [
0 => "Salvesta",
],
"Uploaded %s" => [
0 => "Üles laetud %s",
],
"More Exif data" => [
0 => "Vaata exif andmeid",
],
"Share image" => [
0 => "Jaga pilti",
],
"Upload and share your images." => [
0 => "Lae pilt ülesse ja jaga seda",
],
"Drag and drop anywhere you want and start uploading your images now. %s limit. Direct image links, BBCode and HTML thumbnails." => [
0 => "Lohista oma pilt siia ja alusta üleslaadimist. Kuni %s",
],
"Start uploading" => [
0 => "Lae pilt...",
],
"Logged out" => [
0 => "Välja logitud",
],
"Go to homepage" => [
0 => "Mine esilehele",
],
"Timezone" => [
0 => "Ajatsoon",
],
"Current password" => [
0 => "Praegune parool",
],
"Enter your current password" => [
0 => "Sisesta praegune parool",
],
"Upload new image" => [
0 => "Lae pilt",
],
"If you want to send a message fill the form below." => [
0 => "Kirjuta meile.",
],
];
?>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,936 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: VERSION\n"
"POT-Creation-Date: 2020-03-31 21:05+0000\n"
"PO-Revision-Date: 2020-03-31 21:05+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE TEAM <EMAIL@ADDRESS>\n"
"Language: et_EE\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../../../app/install/installer.php:1168
#: ../../../app/install/installer.php:1177
#: ../../../app/install/installer.php:1180
#: ../../../app/routes/route.account.php:414
#: ../../../app/routes/route.json.php:579
#: ../../../app/routes/route.json.php:1107
#: ../../../app/routes/route.page.php:80
#: ../../../app/routes/route.settings.php:185
#: ../../../app/routes/route.signup.php:97
#: ../../../content/pages/default/contact.php:28
msgid "Invalid email"
msgstr "Vigane email"
#: ../../../app/install/installer.php:1171
#: ../../../app/routes/route.json.php:574
#: ../../../app/routes/route.settings.php:181
#: ../../../app/routes/route.signup.php:100
msgid "Invalid username"
msgstr "Vigane kasutaja"
#: ../../../app/install/installer.php:1174
#: ../../../app/routes/route.account.php:357
#: ../../../app/routes/route.json.php:584
#: ../../../app/routes/route.settings.php:323
#: ../../../app/routes/route.signup.php:103
msgid "Invalid password"
msgstr "Vigane parool"
#: ../../../app/install/installer.php:1183
#: ../../../app/routes/route.dashboard.php:667
msgid "Invalid website mode"
msgstr "Vigane veebilehe laad"
#: ../../../app/install/template/ready.php:31
#: ../../../app/themes/Peafowl/views/dashboard.php:1760
msgid "From email address"
msgstr "Saatja email"
#: ../../../app/install/template/ready.php:32
#: ../../../app/themes/Peafowl/views/dashboard.php:1763
msgid "Sender email for emails sent to users."
msgstr "Saatja email millega saadetakse kasutajatele."
#: ../../../app/install/template/ready.php:36
#: ../../../app/themes/Peafowl/views/dashboard.php:1766
msgid "Incoming email address"
msgstr "Sissetulev emaili aadres"
#: ../../../app/install/template/ready.php:44
#: ../../../app/themes/Peafowl/views/dashboard.php:327
msgid "Website mode"
msgstr "Veebilehe laad"
#: ../../../app/install/template/ready.php:45
#: ../../../app/themes/Peafowl/views/dashboard.php:334
msgid "You can switch the website mode anytime."
msgstr "Saad vahetada veebilehe laadi igal ajal."
#: ../../../app/install/template/ready.php:47
#: ../../../app/themes/Peafowl/views/dashboard.php:330
msgid "Community"
msgstr "Kommuun"
#: ../../../app/install/template/ready.php:47
#: ../../../app/themes/Peafowl/views/dashboard.php:330
msgid "Personal"
msgstr "Peronaalne"
#: ../../../app/install/update/template/update.php:2
msgid "Update in progress"
msgstr "Käimas on uuendamine"
#: ../../../app/install/update/updater.php:72
#, php-format
msgid "Missing %s file"
msgstr "Puudu %s fail"
#: ../../../app/install/update/updater.php:78
msgid "Invalid license info"
msgstr "Vigane litsentsi info"
#: ../../../app/install/update/updater.php:84
msgid "Invalid license key"
msgstr "Vigane litsentsi kood"
#: ../../../app/install/update/updater.php:87
msgid "Can't save file"
msgstr "Faili ei saa salvestada"
#: ../../../app/install/update/updater.php:100
#, php-format
msgid "Can't download %s"
msgstr "Ei saa alla laadida %s"
#: ../../../app/install/update/updater.php:62
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:22
#: ../../../app/lib/chevereto.js:1237 ../../../app/lib/chevereto.js:1313
#: ../../../app/lib/chevereto.js:1391 ../../../app/lib/chevereto.js:1539
#: ../../../app/lib/chevereto.js:1623 ../../../app/lib/chevereto.js:1668
#: ../../../app/lib/chevereto.min.js:59 ../../../app/lib/chevereto.min.js:63
#: ../../../app/lib/chevereto.min.js:67 ../../../app/lib/chevereto.min.js:70
#: ../../../app/lib/chevereto.min.js:74 ../../../app/lib/chevereto.min.js:77
#: ../../../lib/Peafowl/peafowl.js:2560 ../../../lib/Peafowl/peafowl.js:3096
#: ../../../lib/Peafowl/peafowl.min.js:158
#: ../../../lib/Peafowl/peafowl.min.js:195
msgid "An error occurred. Please try again later."
msgstr "Ilmnes viga. Palun proovi hiljem uuesti."
#: ../../../app/routes/route.account.php:360
#: ../../../app/routes/route.settings.php:327
#: ../../../app/themes/Peafowl/views/account/password-reset.php:36
#: ../../../app/themes/Peafowl/views/settings.php:313
#: ../../../app/themes/Peafowl/views/settings.php:330
#: ../../../app/lib/chevereto.js:1516 ../../../app/lib/chevereto.min.js:69
msgid "Passwords don't match"
msgstr "Parool ei ühti"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:76
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:80
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:92
#: ../../../app/themes/Peafowl/views/dashboard.php:2044
#: ../../../app/themes/Peafowl/views/settings.php:463
#: ../../../content/pages/default/contact.php:123
#: ../../../app/lib/chevereto.js:1548 ../../../app/lib/chevereto.min.js:71
#: ../../../lib/Peafowl/peafowl.js:2326 ../../../lib/Peafowl/peafowl.min.js:140
msgid "cancel"
msgstr "katkesta"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:146
#: ../../../app/themes/Peafowl/tpl_list_item/item_album_edit_tools.php:6
#: ../../../app/themes/Peafowl/tpl_list_item/item_image_edit_tools.php:12
#: ../../../app/themes/Peafowl/tpl_list_item/item_image_edit_tools.php:13
msgid "Edit"
msgstr "Muuda"
#: ../../../app/themes/Peafowl/snippets/form_move_existing_album.php:3
#: ../../../app/themes/Peafowl/tpl_list_item/item_album_edit_tools.php:8
#: ../../../app/themes/Peafowl/tpl_list_item/item_album_edit_tools.php:9
#: ../../../app/themes/Peafowl/tpl_list_item/item_image_edit_tools.php:16
#: ../../../app/themes/Peafowl/tpl_list_item/item_image_edit_tools.php:17
#: ../../../app/themes/Peafowl/views/dashboard.php:28
msgid "Album"
msgid_plural "Albums"
msgstr[0] "Album"
msgstr[1] "Albumid"
#: ../../../app/themes/Peafowl/header.php:222
msgid "Close"
msgstr "Sulge"
#: ../../../app/lib/classes/class.listing.php:296
#: ../../../app/routes/route.album.php:177
#: ../../../app/themes/Peafowl/snippets/breadcrum_owner_card.php:25
#: ../../../app/themes/Peafowl/views/album.php:34
#: ../../../app/themes/Peafowl/views/user.php:98
#: ../../../app/lib/chevereto.js:2412 ../../../app/lib/chevereto.min.js:126
msgid "image"
msgid_plural "images"
msgstr[0] "pilt"
msgstr[1] "pildid"
#: ../../../app/routes/route.user.php:89
#: ../../../app/themes/Peafowl/header.php:56
#, php-format, javascript-format
msgid "%s's Albums"
msgstr "%s Albumid"
#: ../../../app/lib/classes/class.album.php:100
msgid "Untitled"
msgstr "Tiitlita"
msgid "Note: This content is password protected. Remember to pass the content password to share."
msgstr "Märkus: Sisu on märgitud parooliga kaitstuks. Pea meeles jagada parooli."
#: ../../../app/themes/Peafowl/snippets/modal_share.php:14
#: ../../../app/themes/Peafowl/views/album.php:74
#: ../../../app/themes/Peafowl/views/image.php:272
msgid "Note: This content is private. Change privacy to \"public\" to share."
msgstr "Märkus: Sisu on märgitud privaatseks. Määra privaatsus seadetest \"avalik\" teistega jagamiseks."
#: ../../../app/themes/Peafowl/views/dashboard.php:366
msgid "Private"
msgstr "Privaatne"
#: ../../../app/themes/Peafowl/snippets/form_album.php:20
#: ../../../app/themes/Peafowl/views/dashboard.php:366
msgid "Public"
msgstr "Avalik"
#: ../../../app/lib/classes/class.page.php:137
#: ../../../app/themes/Peafowl/snippets/modal_share.php:10
#: ../../../app/themes/Peafowl/views/dashboard.php:461
msgid "Link"
msgstr "Link"
#: ../../../app/routes/route.settings.php:64
#: ../../../app/themes/Peafowl/header.php:292
#: ../../../app/themes/Peafowl/header.php:340
#: ../../../app/themes/Peafowl/snippets/form_storage_edit.php:92
#: ../../../app/themes/Peafowl/snippets/form_storage_edit.php:93
#: ../../../app/themes/Peafowl/snippets/form_storage_edit.php:126
#: ../../../app/themes/Peafowl/snippets/modal_login.php:21
#: ../../../app/themes/Peafowl/views/dashboard.php:104
#: ../../../app/themes/Peafowl/views/dashboard.php:105
#: ../../../app/themes/Peafowl/views/login.php:39
#: ../../../app/themes/Peafowl/views/settings.php:322
#: ../../../app/themes/Peafowl/views/signup.php:49
#: ../../../app/themes/Peafowl/views/signup.php:50
msgid "Password"
msgstr "Parool"
#: ../../../app/lib/classes/class.image.php:1230
msgid "view"
msgid_plural "views"
msgstr[0] "vaatamine"
msgstr[1] "vaatamist"
#: ../../../app/lib/functions.php:42 ../../../app/lib/functions.php:54
msgid "minute"
msgid_plural "minutes"
msgstr[0] "minut"
msgstr[1] "minutit"
#: ../../../app/lib/functions.php:41 ../../../app/lib/functions.php:53
msgid "hour"
msgid_plural "hours"
msgstr[0] "tund"
msgstr[1] "tundi"
#: ../../../app/lib/functions.php:40 ../../../app/lib/functions.php:52
msgid "day"
msgid_plural "days"
msgstr[0] "päev"
msgstr[1] "päeva"
#: ../../../app/lib/functions.php:39 ../../../app/lib/functions.php:51
msgid "week"
msgid_plural "weeks"
msgstr[0] "nädal"
msgstr[1] "nädalat"
#: ../../../app/lib/functions.php:38 ../../../app/lib/functions.php:50
msgid "month"
msgid_plural "months"
msgstr[0] "kuu"
msgstr[1] "kuud"
#: ../../../app/lib/functions.php:37 ../../../app/lib/functions.php:49
msgid "year"
msgid_plural "years"
msgstr[0] "aasta"
msgstr[1] "aastat"
#: ../../../app/lib/classes/class.image.php:348
msgid "Don't autodelete"
msgstr "Ära kustuta automaatselt"
#: ../../../app/lib/classes/class.image.php:955
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:76
msgid "Private upload"
msgstr "Privaatne üleslaadimine"
#: ../../../app/lib/classes/class.image.php:1231
msgid "like"
msgid_plural "likes"
msgstr[0] "meeldimine"
msgstr[1] "meeldimist"
msgid "Recent"
msgstr "Viimati lisatud"
msgid "Trending"
msgstr "Kuum"
#: ../../../app/routes/route.dashboard.php:1163
msgid "Top users"
msgstr "Top kasutajad"
#: ../../../app/routes/route.album.php:80
#: ../../../app/routes/route.category.php:48
#: ../../../app/routes/route.dashboard.php:1105
#: ../../../app/routes/route.dashboard.php:1142
#: ../../../app/routes/route.dashboard.php:1171
#: ../../../app/routes/route.explore.php:34
#: ../../../app/routes/route.following.php:21
#: ../../../app/routes/route.user.php:187
#: ../../../app/routes/route.user.php:232
#: ../../../app/routes/route.user.php:255
#: ../../../app/themes/Peafowl/views/index.php:46
msgid "Most recent"
msgstr "Viimased"
#: ../../../app/routes/route.dashboard.php:1113
#: ../../../app/routes/route.dashboard.php:1150
#: ../../../app/routes/route.dashboard.php:1179
#: ../../../app/routes/route.user.php:238
#: ../../../app/routes/route.user.php:261
msgid "Oldest"
msgstr "Vanimad"
#: ../../../app/routes/route.album.php:96
#: ../../../app/routes/route.category.php:64
#: ../../../app/routes/route.dashboard.php:1121
#: ../../../app/routes/route.explore.php:50
#: ../../../app/routes/route.following.php:29
#: ../../../app/routes/route.user.php:201
msgid "Most viewed"
msgstr "Enim vaadatud"
msgid "Popular"
msgstr "Populaarsed"
#: ../../../app/routes/route.explore.php:89
#: ../../../app/themes/Peafowl/header.php:188
#: ../../../app/themes/Peafowl/header.php:206
#: ../../../app/themes/Peafowl/views/dashboard.php:305
#: ../../../app/themes/Peafowl/views/explore.php:9
msgid "Explore"
msgstr "Sirvi pilte"
msgid "Animated"
msgstr "Animeeritud"
#: ../../../app/routes/route.search.php:130
#: ../../../app/themes/Peafowl/header.php:215
#: ../../../app/themes/Peafowl/header.php:220
#: ../../../app/themes/Peafowl/views/dashboard.php:295
msgid "Search"
msgstr "Otsi"
#: ../../../app/themes/Peafowl/views/dashboard.php:22
msgid "Image"
msgid_plural "Images"
msgstr[0] "pilt"
msgstr[1] "Pildid"
#: ../../../app/themes/Peafowl/views/dashboard.php:34
#: ../../../app/themes/Peafowl/views/dashboard.php:90
#: ../../../app/themes/Peafowl/views/settings.php:126
msgid "User"
msgid_plural "Users"
msgstr[0] "Kasutaja"
msgstr[1] "Kasutajad"
msgid "Can't update storage details."
msgstr "Ei saanud uuendada salvestamise detaile."
#: ../../../app/lib/classes/class.storage.php:720
msgid "Unlimited"
msgstr "Piiramatu"
#: ../../../app/lib/classes/class.storage.php:720
msgid "used"
msgstr "kasutatud"
msgid "Private profile"
msgstr "Privaatne profiil"
#: ../../../app/lib/functions.php:43 ../../../app/lib/functions.php:55
msgid "second"
msgid_plural "seconds"
msgstr[0] "sekund"
msgstr[1] "sekundit"
#: ../../../app/lib/functions.php:67
#, php-format
msgid "%s ago"
msgstr "%s tagasi"
#: ../../../app/lib/functions.php:67
msgid "moments ago"
msgstr "hetk tagasi"
#: ../../../app/loader.php:396 ../../../app/themes/Peafowl/views/404.php:6
msgid "That page doesn't exist"
msgstr "Seda lehte ei eksisteeri"
#: ../../../app/routes/route.account.php:72
#: ../../../app/themes/Peafowl/header.php:295
#: ../../../app/themes/Peafowl/snippets/modal_login.php:24
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:8
#: ../../../app/themes/Peafowl/views/login.php:41
#: ../../../app/themes/Peafowl/views/settings.php:299
msgid "Forgot password?"
msgstr "Unustasid parooli ?"
#: ../../../app/routes/route.account.php:73
#: ../../../app/themes/Peafowl/views/account/password-reset.php:8
msgid "Reset password"
msgstr "Taasta parool"
#: ../../../app/routes/route.account.php:74
#: ../../../app/themes/Peafowl/views/account/resend-activation.php:8
msgid "Resend account activation"
msgstr "Saada uuesti konto kinnitamise e-mail"
#: ../../../app/routes/route.account.php:76
#: ../../../app/themes/Peafowl/views/account/email-needed.php:8
msgid "Add your email address"
msgstr "Lisa oma e-mail"
#: ../../../app/routes/route.account.php:77
#: ../../../app/themes/Peafowl/views/account/email-changed.php:7
msgid "Email changed"
msgstr "E-mail muudetud"
#: ../../../app/routes/route.account.php:119
#: ../../../app/routes/route.account.php:164
#: ../../../app/routes/route.account.php:271
msgid "Invalid Username/Email"
msgstr "Vale Kasutajanimi/Parool"
#: ../../../app/routes/route.account.php:145
msgid "Account needs to be activated to use this feature"
msgstr "Konto peab olema aktiveeritud"
#: ../../../app/routes/route.account.php:151
msgid "Account already activated"
msgstr "Konto on juba aktiveeritud"
#: ../../../app/routes/route.account.php:192
msgid "Allow up to 15 minutes for the email. You can try again later."
msgstr "E-maili saabumine võib võtta aega kuni 15 minutit. Proovi hiljem uuesti."
#: ../../../app/routes/route.account.php:422
#: ../../../app/routes/route.json.php:599
#: ../../../app/routes/route.settings.php:243
#: ../../../app/routes/route.signup.php:141
msgid "Email already being used"
msgstr "E-mail on juba kasutusel"
msgid "Password required"
msgstr "Parool nõutud"
#: ../../../app/routes/route.album.php:115
#: ../../../app/themes/Peafowl/snippets/modal_share.php:4
#: ../../../app/themes/Peafowl/views/album.php:36
#: ../../../app/themes/Peafowl/views/image.php:89
msgid "Share"
msgstr "Jaga"
#: ../../../app/routes/route.image.php:127
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:99
#: ../../../app/themes/Peafowl/snippets/embed_tpl.php:110
msgid "Embed codes"
msgstr "HTML ja BBKoodi tag'id"
#: ../../../app/routes/route.dashboard.php:38
msgid "Stats"
msgstr "Statistika"
#: ../../../app/routes/route.dashboard.php:39
#: ../../../app/routes/route.search.php:85
#: ../../../app/routes/route.user.php:85 ../../../app/routes/route.user.php:277
#: ../../../app/themes/Peafowl/views/settings.php:73
msgid "Images"
msgstr "Pildid"
#: ../../../app/routes/route.dashboard.php:40
#: ../../../app/routes/route.search.php:92
#: ../../../app/routes/route.user.php:90 ../../../app/routes/route.user.php:283
#: ../../../app/themes/Peafowl/header.php:403
#: ../../../app/themes/Peafowl/views/settings.php:77
msgid "Albums"
msgstr "Albumid"
#: ../../../app/routes/route.dashboard.php:41
#: ../../../app/routes/route.dashboard.php:233
#: ../../../app/routes/route.search.php:99
msgid "Users"
msgstr "Kasutajad"
#: ../../../app/routes/route.dashboard.php:42
#: ../../../app/routes/route.settings.php:498
#: ../../../app/themes/Peafowl/header.php:363
#: ../../../app/themes/Peafowl/header.php:405
msgid "Settings"
msgstr "Seaded"
#: ../../../app/routes/route.dashboard.php:161
msgid "Chevereto version"
msgstr "Chevereto versioon"
#: ../../../app/routes/route.dashboard.php:162
msgid "install update"
msgstr "installeeri uuendus"
#: ../../../app/routes/route.dashboard.php:162
msgid "check for updates"
msgstr "kontrolli uuendusi"
msgid "Support"
msgstr "Kasutajatugi"
#: ../../../app/routes/route.dashboard.php:190
#: ../../../app/themes/Peafowl/views/dashboard.php:298
#: ../../../app/themes/Peafowl/views/dashboard.php:308
#: ../../../app/themes/Peafowl/views/dashboard.php:318
#: ../../../app/themes/Peafowl/views/dashboard.php:633
#: ../../../app/themes/Peafowl/views/dashboard.php:642
#: ../../../app/themes/Peafowl/views/dashboard.php:652
#: ../../../app/themes/Peafowl/views/dashboard.php:678
#: ../../../app/themes/Peafowl/views/dashboard.php:750
#: ../../../app/themes/Peafowl/views/dashboard.php:962
#: ../../../app/themes/Peafowl/views/dashboard.php:975
#: ../../../app/themes/Peafowl/views/dashboard.php:986
#: ../../../app/themes/Peafowl/views/dashboard.php:995
#: ../../../app/themes/Peafowl/views/dashboard.php:1024
#: ../../../app/themes/Peafowl/views/dashboard.php:1034
#: ../../../app/themes/Peafowl/views/dashboard.php:1073
#: ../../../app/themes/Peafowl/views/dashboard.php:1082
#: ../../../app/themes/Peafowl/views/dashboard.php:1091
#: ../../../app/themes/Peafowl/views/dashboard.php:1101
#: ../../../app/themes/Peafowl/views/dashboard.php:1247
#: ../../../app/themes/Peafowl/views/dashboard.php:1302
#: ../../../app/themes/Peafowl/views/dashboard.php:1312
#: ../../../app/themes/Peafowl/views/dashboard.php:1324
#: ../../../app/themes/Peafowl/views/dashboard.php:1336
#: ../../../app/themes/Peafowl/views/dashboard.php:1346
#: ../../../app/themes/Peafowl/views/dashboard.php:1356
#: ../../../app/themes/Peafowl/views/dashboard.php:1368
#: ../../../app/themes/Peafowl/views/dashboard.php:1475
#: ../../../app/themes/Peafowl/views/dashboard.php:1573
#: ../../../app/themes/Peafowl/views/dashboard.php:1582
#: ../../../app/themes/Peafowl/views/dashboard.php:1592
#: ../../../app/themes/Peafowl/views/dashboard.php:1627
#: ../../../app/themes/Peafowl/views/dashboard.php:1637
#: ../../../app/themes/Peafowl/views/dashboard.php:1835
#: ../../../app/themes/Peafowl/views/dashboard.php:1861
#: ../../../app/themes/Peafowl/views/dashboard.php:1894
#: ../../../app/themes/Peafowl/views/dashboard.php:1920
#: ../../../app/themes/Peafowl/views/dashboard.php:1946
#: ../../../app/themes/Peafowl/views/dashboard.php:1965
#: ../../../app/themes/Peafowl/views/dashboard.php:2010
#: ../../../app/themes/Peafowl/views/dashboard.php:2031
msgid "Enabled"
msgstr "Lubatud"
#: ../../../app/routes/route.dashboard.php:190
#: ../../../app/themes/Peafowl/views/dashboard.php:298
#: ../../../app/themes/Peafowl/views/dashboard.php:308
#: ../../../app/themes/Peafowl/views/dashboard.php:318
#: ../../../app/themes/Peafowl/views/dashboard.php:633
#: ../../../app/themes/Peafowl/views/dashboard.php:642
#: ../../../app/themes/Peafowl/views/dashboard.php:652
#: ../../../app/themes/Peafowl/views/dashboard.php:679
#: ../../../app/themes/Peafowl/views/dashboard.php:750
#: ../../../app/themes/Peafowl/views/dashboard.php:962
#: ../../../app/themes/Peafowl/views/dashboard.php:975
#: ../../../app/themes/Peafowl/views/dashboard.php:986
#: ../../../app/themes/Peafowl/views/dashboard.php:995
#: ../../../app/themes/Peafowl/views/dashboard.php:1024
#: ../../../app/themes/Peafowl/views/dashboard.php:1034
#: ../../../app/themes/Peafowl/views/dashboard.php:1073
#: ../../../app/themes/Peafowl/views/dashboard.php:1082
#: ../../../app/themes/Peafowl/views/dashboard.php:1091
#: ../../../app/themes/Peafowl/views/dashboard.php:1101
#: ../../../app/themes/Peafowl/views/dashboard.php:1247
#: ../../../app/themes/Peafowl/views/dashboard.php:1302
#: ../../../app/themes/Peafowl/views/dashboard.php:1312
#: ../../../app/themes/Peafowl/views/dashboard.php:1324
#: ../../../app/themes/Peafowl/views/dashboard.php:1336
#: ../../../app/themes/Peafowl/views/dashboard.php:1346
#: ../../../app/themes/Peafowl/views/dashboard.php:1356
#: ../../../app/themes/Peafowl/views/dashboard.php:1368
#: ../../../app/themes/Peafowl/views/dashboard.php:1475
#: ../../../app/themes/Peafowl/views/dashboard.php:1573
#: ../../../app/themes/Peafowl/views/dashboard.php:1582
#: ../../../app/themes/Peafowl/views/dashboard.php:1592
#: ../../../app/themes/Peafowl/views/dashboard.php:1627
#: ../../../app/themes/Peafowl/views/dashboard.php:1637
#: ../../../app/themes/Peafowl/views/dashboard.php:1835
#: ../../../app/themes/Peafowl/views/dashboard.php:1861
#: ../../../app/themes/Peafowl/views/dashboard.php:1894
#: ../../../app/themes/Peafowl/views/dashboard.php:1920
#: ../../../app/themes/Peafowl/views/dashboard.php:1946
#: ../../../app/themes/Peafowl/views/dashboard.php:1965
#: ../../../app/themes/Peafowl/views/dashboard.php:2010
#: ../../../app/themes/Peafowl/views/dashboard.php:2031
msgid "Disabled"
msgstr "Keelatud"
msgid "Max. upload file size"
msgstr "Max faili suurus"
#: ../../../app/routes/route.dashboard.php:567
msgid "Invalid timezone"
msgstr "Vale ajatsoon"
#: ../../../app/routes/route.login.php:148
#: ../../../app/themes/Peafowl/header.php:269
#: ../../../app/themes/Peafowl/header.php:275
#: ../../../app/themes/Peafowl/views/login.php:8
#: ../../../app/themes/Peafowl/views/login.php:52
msgid "Sign in"
msgstr "Logi sisse"
msgid "Upload images"
msgstr "Lae pilt ülesse"
#: ../../../app/routes/route.settings.php:62
msgid "Account"
msgstr "Konto"
#: ../../../app/routes/route.settings.php:63
msgid "Profile"
msgstr "Profiil"
#: ../../../app/routes/route.settings.php:313
msgid "Wrong password"
msgstr "Vale parool"
#: ../../../app/routes/route.settings.php:435
msgid "Password has been changed"
msgstr "Parool muudetud edukalt"
#: ../../../app/routes/route.signup.php:251
#: ../../../app/themes/Peafowl/header.php:316
#: ../../../app/themes/Peafowl/header.php:322
#: ../../../app/themes/Peafowl/views/index.php:81
#: ../../../app/themes/Peafowl/views/signup.php:8
#: ../../../app/themes/Peafowl/views/signup.php:63
msgid "Create account"
msgstr "Loo konto"
#: ../../../app/themes/Peafowl/header.php:258
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:76
msgid "Upload"
msgstr "Lae pilt..."
msgid "Discovery"
msgstr "Avasta"
#: ../../../app/themes/Peafowl/header.php:222
#: ../../../app/themes/Peafowl/header.php:226
msgid "Advanced search"
msgstr "Täpsem otsing"
#: ../../../app/themes/Peafowl/header.php:233
#: ../../../app/themes/Peafowl/views/dashboard.php:315
#: ../../../app/themes/Peafowl/views/dashboard.php:713
msgid "Random"
msgstr "Suvaline pilt"
#: ../../../app/themes/Peafowl/header.php:402
msgid "My Profile"
msgstr "Minu konto"
#: ../../../app/themes/Peafowl/header.php:409
msgid "Sign out"
msgstr "Logi välja"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:13
msgid "Drag and drop or paste images here to upload"
msgstr "Lohista fail siia või lae ülesse clipboardist"
msgid "browse from your computer"
msgstr "valida faili arvutist"
msgid "add image URLs"
msgstr "lisada läbi lingi"
msgid "You can also %i or %u."
msgstr "Sa saad %i või %u"
msgid "Edit or resize any image by clicking the image preview"
msgstr "Muuda pilti või pildi suurust vajutades pisipildile"
msgid "your computer"
msgstr "arvutist"
msgid "You can add more images from %i or %u."
msgstr "Saad lisada pilte juurde %i või %u"
msgid "sign in"
msgstr "logi sisse"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:91
msgid "close"
msgstr "sulge"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:148
#: ../../../app/themes/Peafowl/views/dashboard.php:666
msgid "Remove"
msgstr "Kustuta"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:154
msgid "Edit image"
msgstr "Muuda pilti"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:158
#: ../../../app/themes/Peafowl/snippets/form_image.php:4
#: ../../../app/themes/Peafowl/views/dashboard.php:441
#: ../../../app/themes/Peafowl/views/dashboard.php:597
#: ../../../app/themes/Peafowl/views/dashboard.php:1440
#: ../../../app/themes/Peafowl/views/settings.php:434
msgid "Title"
msgstr "Pealkiri"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:158
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:200
#: ../../../app/themes/Peafowl/snippets/form_album.php:12
#: ../../../app/themes/Peafowl/snippets/form_category_edit.php:12
#: ../../../app/themes/Peafowl/snippets/form_image.php:4
#: ../../../app/themes/Peafowl/snippets/form_image.php:28
#: ../../../app/themes/Peafowl/snippets/form_ip_ban_edit.php:9
#: ../../../app/themes/Peafowl/snippets/form_ip_ban_edit.php:15
#: ../../../app/themes/Peafowl/snippets/form_storage_edit.php:104
#: ../../../app/themes/Peafowl/snippets/form_storage_edit.php:108
#: ../../../app/themes/Peafowl/views/dashboard.php:503
#: ../../../app/themes/Peafowl/views/dashboard.php:509
#: ../../../app/themes/Peafowl/views/dashboard.php:566
#: ../../../app/themes/Peafowl/views/dashboard.php:573
#: ../../../app/themes/Peafowl/views/dashboard.php:580
#: ../../../app/themes/Peafowl/views/dashboard.php:1418
#: ../../../app/themes/Peafowl/views/dashboard.php:1428
msgid "optional"
msgstr "valikuline"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:167
msgid "Resize image"
msgstr "Pildi mõõtmed"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:176
msgid "Note: Animated GIF images won't be resized."
msgstr "Animeeritud (gif) failide pildi suurust ei saa muuta!"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:180
msgid "Auto delete image"
msgstr "Kustuta pilt automaatselt"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:200
#: ../../../app/themes/Peafowl/snippets/form_category_edit.php:12
#: ../../../app/themes/Peafowl/snippets/form_image.php:28
#: ../../../app/themes/Peafowl/views/dashboard.php:877
msgid "Description"
msgstr "Kirjeldus"
#: ../../../app/themes/Peafowl/snippets/anywhere_upload.php:201
#: ../../../app/themes/Peafowl/snippets/form_image.php:29
msgid "Brief description of this image"
msgstr "...."
#: ../../../app/themes/Peafowl/snippets/form_album.php:7
#: ../../../app/themes/Peafowl/snippets/form_album.php:8
msgid "Album name"
msgstr "Albumi nimi"
#: ../../../app/themes/Peafowl/snippets/form_album.php:21
msgid "Private (just me)"
msgstr "Privaatne(ainult minule)"
msgid "Album password"
msgstr "Albumi parool"
#: ../../../app/themes/Peafowl/snippets/form_category_edit.php:4
#: ../../../app/themes/Peafowl/snippets/form_storage_edit.php:3
#: ../../../app/themes/Peafowl/views/dashboard.php:875
#: ../../../app/themes/Peafowl/views/dashboard.php:1693
#: ../../../app/themes/Peafowl/views/settings.php:364
#: ../../../content/pages/default/contact.php:87
msgid "Name"
msgstr "Nimi"
#: ../../../app/themes/Peafowl/snippets/listing_tools_editor.php:10
msgid "Select all"
msgstr "Vali kõik"
#: ../../../app/themes/Peafowl/snippets/listing_tools_editor.php:10
#: ../../../app/themes/Peafowl/snippets/listing_tools_editor.php:56
msgid "Clear selection"
msgstr "Eemalda valik"
#: ../../../app/themes/Peafowl/snippets/listing_tools_editor.php:13
msgid "Selection"
msgstr "Valitud"
#: ../../../app/themes/Peafowl/header.php:281
#: ../../../app/themes/Peafowl/snippets/modal_login.php:11
#: ../../../app/themes/Peafowl/snippets/modal_login.php:40
#: ../../../app/themes/Peafowl/views/login.php:18
#: ../../../app/themes/Peafowl/views/login.php:65
#: ../../../app/themes/Peafowl/views/signup.php:18
#: ../../../app/themes/Peafowl/views/signup.php:76
msgid "Sign in with another account"
msgstr "Logi sisse kasutades..."
#: ../../../app/themes/Peafowl/snippets/template_content_empty.php:5
#: ../../../app/themes/Peafowl/views/dashboard.php:618
#: ../../../app/themes/Peafowl/views/index.php:63
msgid "There's nothing to show here."
msgstr "Tühjus... Pole midagi näidata!"
#: ../../../app/themes/Peafowl/snippets/user_items_editor.php:16
#: ../../../app/themes/Peafowl/views/image.php:69
#: ../../../app/themes/Peafowl/views/image.php:457
msgid "Edit image details"
msgstr "Muuda pilti"
#: ../../../app/themes/Peafowl/views/404.php:7
msgid "The requested page was not found."
msgstr "Soovitud lehekülge ei leitud!"
#: ../../../app/themes/Peafowl/views/404.php:22
msgid "The user has been deleted"
msgstr "Kasutaja kustutatud"
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:52
#: ../../../app/themes/Peafowl/views/account/password-reset.php:47
#: ../../../app/themes/Peafowl/views/account/resend-activation.php:37
#: ../../../lib/Peafowl/peafowl.js:417 ../../../lib/Peafowl/peafowl.js:2324
#: ../../../lib/Peafowl/peafowl.min.js:25
#: ../../../lib/Peafowl/peafowl.min.js:140
msgid "Submit"
msgstr "Edasi"
#: ../../../app/themes/Peafowl/header.php:291
#: ../../../app/themes/Peafowl/snippets/modal_login.php:20
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:38
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:39
#: ../../../app/themes/Peafowl/views/account/resend-activation.php:23
#: ../../../app/themes/Peafowl/views/login.php:34
#: ../../../app/themes/Peafowl/views/login.php:35
msgid "Username or Email address"
msgstr "Kasutajanimi või e-mail"
#: ../../../app/themes/Peafowl/views/account/password-reset.php:29
#: ../../../app/themes/Peafowl/views/settings.php:306
msgid "Enter your new password"
msgstr "Sisesta uus parool"
#: ../../../app/themes/Peafowl/views/account/password-reset.php:35
#: ../../../app/themes/Peafowl/views/settings.php:312
msgid "Re-enter your new password"
msgstr "Sisesta uuesti uus parool"
#: ../../../app/themes/Peafowl/views/album.php:25
msgid "Delete album"
msgstr "Kustuta album"
#: ../../../app/themes/Peafowl/views/album.php:86
msgid "Album link"
msgstr "Albumi link"
#: ../../../app/themes/Peafowl/header.php:338
#: ../../../app/themes/Peafowl/views/account/email-needed.php:15
#: ../../../app/themes/Peafowl/views/dashboard.php:100
#: ../../../app/themes/Peafowl/views/settings.php:155
#: ../../../app/themes/Peafowl/views/signup.php:34
#: ../../../app/themes/Peafowl/views/signup.php:35
#: ../../../content/pages/default/contact.php:92
msgid "Email address"
msgstr "E-mail"
#: ../../../app/themes/Peafowl/views/dashboard.php:2044
#: ../../../app/themes/Peafowl/views/settings.php:463
#: ../../../lib/Peafowl/peafowl.js:417 ../../../lib/Peafowl/peafowl.min.js:25
msgid "Save changes"
msgstr "Salvesta"
#: ../../../app/themes/Peafowl/views/image.php:145
#, php-format
msgid "Uploaded %s"
msgstr "Üles laetud %s"
#: ../../../app/themes/Peafowl/views/image.php:157
msgid "More Exif data"
msgstr "Vaata exif andmeid"
#: ../../../app/themes/Peafowl/views/image.php:182
#: ../../../app/themes/Peafowl/views/image.php:241
msgid "Share image"
msgstr "Jaga pilti"
#: ../../../app/themes/Peafowl/views/index.php:15
msgid "Upload and share your images."
msgstr "Lae pilt ülesse ja jaga seda"
#: ../../../app/themes/Peafowl/views/index.php:17
#, php-format
msgid "Drag and drop anywhere you want and start uploading your images now. %s limit. Direct image links, BBCode and HTML thumbnails."
msgstr "Lohista oma pilt siia ja alusta üleslaadimist. Kuni %s"
#: ../../../app/themes/Peafowl/views/index.php:25
msgid "Start uploading"
msgstr "Lae pilt..."
#: ../../../app/routes/route.logout.php:29
#: ../../../app/themes/Peafowl/views/logout.php:8
msgid "Logged out"
msgstr "Välja logitud"
#: ../../../app/themes/Peafowl/views/account/awaiting-confirmation.php:10
#: ../../../app/themes/Peafowl/views/account/email-changed.php:11
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:16
#: ../../../app/themes/Peafowl/views/account/password-forgot.php:26
#: ../../../app/themes/Peafowl/views/account/password-reset.php:16
#: ../../../app/themes/Peafowl/views/account/resend-activation.php:13
#: ../../../app/themes/Peafowl/views/logout.php:13
#: ../../../app/themes/Peafowl/views/request-denied.php:13
msgid "Go to homepage"
msgstr "Mine esilehele"
#: ../../../app/themes/Peafowl/views/settings.php:245
msgid "Timezone"
msgstr "Ajatsoon"
#: ../../../app/themes/Peafowl/views/settings.php:296
msgid "Current password"
msgstr "Praegune parool"
#: ../../../app/themes/Peafowl/views/settings.php:297
msgid "Enter your current password"
msgstr "Sisesta praegune parool"
#: ../../../app/themes/Peafowl/views/settings.php:352
#: ../../../app/themes/Peafowl/views/user.php:21
msgid "Upload new image"
msgstr "Lae pilt"
msgid "If you want to send a message fill the form below."
msgstr "Kirjuta meile."

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,9 +0,0 @@
You can quick and easy override any language string by putting lang_code.po files here.
For example, en.po file whit this contents:
#: START EXAMPLE
msgid "Upload and share your images."
msgstr "Upload and share your photos."
#: END EXAMPLE
Will replace the original msgid with the new msgstr.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -288,15 +288,8 @@ class Settings
if ($settings['homepage_cta_fn'] == 'cta-link' and !G\is_url($settings['homepage_cta_fn_extra'])) {
$settings['homepage_cta_fn_extra'] = G\get_regex_match($settings['routing_regex_path'], '#', $settings['homepage_cta_fn_extra'], 1);
}
// Disabled languages handle
if (!is_null($settings['languages_disable'])) {
$languages_disable = (array) explode(',', $settings['languages_disable']);
$languages_disable = array_filter(array_unique($languages_disable));
} else {
$languages_disable = [];
}
$settings['languages_disable'] = $languages_disable;
$settings['languages_disable'] = [];
self::$settings = $settings;
self::$defaults = $defaults;

View File

@ -366,31 +366,35 @@ if (!function_exists('bcdiv')) {
*/
function get_translation_table()
{
return L10n::getTranslation();
return [];
}
function get_language_used()
{
return get_available_languages()[L10n::getStatic('locale')];
return 'en';
}
function get_available_languages()
{
return L10n::getAvailableLanguages();
return [];
}
function get_enabled_languages()
{
if (!getSetting('language_chooser_enable')) {
return [];
}
return L10n::getEnabledLanguages();
return [
'en' => [
'code' => 'en',
'dir' => 'ltr',
'name' => 'English',
'base' => 'en',
'short_name' => 'EN',
],
];
}
function get_disabled_languages()
{
return L10n::getDisabledLanguages();
return [];
}
/**
@ -813,24 +817,6 @@ function checkUpdates()
} // Silence
}
function getJsModLangL10n()
{
foreach (new DirectoryIterator(CHV_APP_PATH_CONTENT_LANGUAGES . 'cache/') as $fileInfo) {
if ($fileInfo->isDot() || $fileInfo->isDir()) {
continue;
}
$lang_code = str_replace('.po.cache.php', null, $fileInfo->getFilename());
include $fileInfo->getPathname();
if (!$translation_table['Upload images']) {
continue;
}
$l10n[$lang_code] = $translation_table['Upload images'][0];
}
unset($translation_table);
return json_encode($l10n);
}
function obfuscate($string)
{
$len = strlen($string);

View File

@ -21,7 +21,6 @@ if (!defined('access') or !access) {
// Gettext with parsed arguments
function _s($msg, $args=null)
{
$msg = CHV\L10n::gettext($msg);
if ($msg && !is_null($args)) {
$fn = is_array($args) ? 'strtr' : 'sprintf';
$msg = $fn($msg, $args);
@ -37,7 +36,10 @@ function _se($msg, $args=null)
// Plural version of _s
function _n($msg, $msg_plural, $count)
{
return CHV\L10n::ngettext($msg, $msg_plural, $count);
if($count == 1) {
return $msg;
}
return $msg_plural;
}
// Same as _n but with echo
function _ne($msg, $msg_plural, $count)

View File

@ -101,7 +101,6 @@ define('CHV_APP_PATH_LIB_VENDOR', G_APP_PATH . 'vendor/');
require_once CHV_APP_PATH_LIB_VENDOR . 'autoload.php';
define('CHV_APP_PATH_CONTENT_SYSTEM', CHV_APP_PATH_CONTENT . 'system/');
define('CHV_APP_PATH_CONTENT_LANGUAGES', CHV_APP_PATH_CONTENT . 'languages/');
define('CHV_APP_PATH_CONTENT_LOCKS', CHV_APP_PATH_CONTENT . 'locks/');
// CHV paths
@ -114,51 +113,10 @@ define('CHV_PATH_PEAFOWL', G_ROOT_LIB_PATH . 'Peafowl/');
// subdomain wildcards here
$hostnameSetting = G\get_app_setting('hostname') ?: Settings::get('hostname') ?: G\get_domain(G_HTTP_HOST);
$isIP = filter_var(G_HTTP_HOST, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) || filter_var(G_HTTP_HOST, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6);
$isWildcardEnabled = Settings::get('lang_subdomain_wildcard') || Settings::get('user_subdomain_wildcard');
if ($isIP == false && $isWildcardEnabled && ($hostnameSetting != G_HTTP_HOST)) {
$hostExplode = explode('.', $hostnameSetting);
if ($hostWildcard = $hostExplode[2] ? $hostExplode[0] : null) {
define('CHV_HOST_WILDCARD', $hostWildcard);
}
array_shift($hostExplode);
$app_g_http_host = implode('.', $hostExplode);
$cookieDomain = '.' . (defined('CHV_HOST_WILDCARD') ? $app_g_http_host : G_HTTP_HOST);
// Destroy non wilcard domain cookies
// No way to avoid this structure
if (ini_get('session.cookie_domain') != $cookieDomain) {
ini_set('session.cookie_domain', $cookieDomain);
if (ini_get('session.cookie_domain') == $cookieDomain) {
$cookieWilcard = true;
}
}
$cookie_params = session_get_cookie_params();
if (defined('CHV_HOST_WILDCARD') && $cookieWilcard) {
define('APP_G_HTTP_HOST', $app_g_http_host);
// APP_G_ROOT_URL, APP_G_ROOT_LIB_URL, APP_G_APP_LIB_URL
foreach (['G_ROOT_URL', 'G_ROOT_LIB_URL', 'G_APP_LIB_URL'] as $v) {
define('APP_' . $v, G\str_replace_first(G_HTTP_HOST, APP_G_HTTP_HOST, constant($v)));
}
if (getSetting('lang_subdomain_wildcard') && array_key_exists(CHV_HOST_WILDCARD, get_enabled_languages())) {
$hostWildcardType = 'lang';
L10n::setCookieLang(CHV_HOST_WILDCARD);
} elseif (getSetting('user_subdomain_wildcard')) {
if ($user = User::getSingle(CHV_HOST_WILDCARD, 'username', false)) {
define('CHV_HOST_WILDCARD_USER_ID', $user['user_id']);
$hostWildcardType = 'user';
}
}
}
if ($hostWildcardType) {
define('CHV_HOST_WILDCARD_TYPE', $hostWildcardType);
}
}
define('CHV_ROOT_URL', defined('APP_G_ROOT_URL') ? APP_G_ROOT_URL : G_ROOT_URL);
define('CHV_HTTP_HOST', defined('APP_G_HTTP_HOST') ? APP_G_HTTP_HOST : G_HTTP_HOST);
define('CHV_ROOT_URL_STATIC', defined('CHV_ROOT_CDN_URL') ? CHV_ROOT_CDN_URL : (defined('APP_G_ROOT_URL') ? APP_G_ROOT_URL : G_ROOT_URL));
define('CHV_ROOT_URL', G_ROOT_URL);
define('CHV_HTTP_HOST', G_HTTP_HOST);
define('CHV_ROOT_URL_STATIC', defined('CHV_ROOT_CDN_URL') ? CHV_ROOT_CDN_URL : G_ROOT_URL);
// Define the app theme
define('G_APP_PATH_THEMES', G_APP_PATH . 'themes/');

View File

@ -226,7 +226,6 @@ $route = function ($handler) {
'banners' => _s('Banners'),
'system' => _s('System'),
'routing' => _s('Routing'),
'languages' => _s('Languages'),
'external-storage' => _s('External storage'),
'email' => _s('Email'),
'social-networks' => _s('Social networks'),
@ -447,11 +446,6 @@ $route = function ($handler) {
'validate' => $_POST['website_name'] ? true : false,
'error_msg' => _s('Invalid website name')
],
'default_language' =>
[
'validate' => CHV\get_available_languages()[$_POST['default_language']] ? true : false,
'error_msg' => _s('Invalid language')
],
'default_timezone' =>
[
'validate' => in_array($_POST['default_timezone'], timezone_identifiers_list()),
@ -785,33 +779,6 @@ $route = function ($handler) {
$_POST['upload_enabled_image_formats'] = implode(',', $image_format_enable);
}
// Handle disabled languages
if ($_POST['languages_enable'] && is_array($_POST['languages_enable'])) {
// Push default language
if (!in_array($_POST['default_language'], $_POST['languages_enable'])) {
$_POST['languages_enable'][] = $_POST['default_language'];
}
$enabled_languages = [];
$disabled_languages = CHV\get_available_languages();
$_POST['languages_disable'] = [];
foreach ($_POST['languages_enable'] as $k) {
if (!array_key_exists($k, CHV\get_available_languages())) {
continue;
}
$enabled_languages[$k] = CHV\get_available_languages()[$k];
unset($disabled_languages[$k]);
}
CHV\l10n::setStatic('disabled_languages', $disabled_languages);
CHV\l10n::setStatic('enabled_languages', $enabled_languages);
unset($_POST['languages_enable']);
foreach ($disabled_languages as $k => $v) {
$_POST['languages_disable'][] = $k;
}
$_POST['languages_disable'] = implode(',', $_POST['languages_disable']);
}
// Handle personal mode change
if ($_POST['website_mode'] == 'personal' and $_POST['website_mode_personal_routing']) {
if ($logged_user['id'] == $_POST['website_mode_personal_uid']) {

View File

@ -38,7 +38,7 @@ $route = function ($handler) {
}
// Editable values
$allowed_to_edit = ['name', 'username', 'email', 'avatar_filename', 'website', 'background_filename', 'timezone', 'language', 'status', 'is_admin', 'is_manager', 'image_keep_exif', 'image_expiration', 'newsletter_subscribe', 'bio', 'show_nsfw_listings', 'is_private'];
$allowed_to_edit = ['name', 'username', 'email', 'avatar_filename', 'website', 'background_filename', 'timezone', 'status', 'is_admin', 'is_manager', 'image_keep_exif', 'image_expiration', 'newsletter_subscribe', 'bio', 'show_nsfw_listings', 'is_private'];
if (CHV\getSetting('enable_expirable_uploads')) {
unset($allowed_to_edit['image_expiration']);
@ -53,11 +53,6 @@ $route = function ($handler) {
$handler->issue404();
}
// Update the lang displayed on change
if (in_array('language', $allowed_to_edit) and isset($_POST['language']) and $logged_user['language'] !== $_POST['language'] and $logged_user['id'] == $user['id'] and array_key_exists($_POST['language'], CHV\L10n::getEnabledLanguages())) {
CHV\L10n::processTranslation($_POST['language']);
}
// Settings routes
$routes = [
'account' => _s('Account'),
@ -191,14 +186,9 @@ $route = function ($handler) {
$input_errors['image_expiration'] = _s('Invalid image expiration: %s', $_POST['image_expiration']);
}
}
if (!array_key_exists($_POST['language'], CHV\get_available_languages())) {
$_POST['language'] = CHV\getSetting('default_language');
}
if (!in_array($_POST['timezone'], timezone_identifiers_list())) {
$_POST['timezone'] = date_default_timezone_get();
}
if (is_array($input_errors) && count($input_errors) > 0) {
$is_error = true;
}

View File

@ -163,7 +163,7 @@ $route = function ($handler) {
'username' => $_POST['username'],
'email' => $_POST['email'],
'timezone' => CHV\getSetting('default_timezone'),
'language' => CHV\L10n::getLocale(),
'language' => 'en',
'status' => CHV\getSetting('require_user_email_confirmation') ? 'awaiting-confirmation' : 'valid'
];

View File

@ -176,14 +176,7 @@
<?php
}
?>
<link rel="alternate" hreflang="x-default" href="<?php echo CHV\get_current_url(true, ['lang']); ?>">
<?php
foreach (G\Handler::getVar('langLinks') as $k => $v) {
echo '<link rel="alternate" hreflang="' . $v['hreflang'] . '" href="' . $v['url'] . '">' . "\n";
}
G\Render\include_theme_file('custom_hooks/head'); ?>
<?php G\Render\include_theme_file('custom_hooks/head'); ?>
</head>
<?php G\Render\include_theme_file('custom_hooks/head_after'); ?>

View File

@ -321,33 +321,6 @@ if (is_maintenance() || is_show_consent_screen() || in_array($templateUsed, ['re
</li>
<?php
} ?>
<?php
if (!CHV\Login::isLoggedUser() and CHV\getSetting('language_chooser_enable')) {
?>
<li data-nav="language" class="phablet-hide phone-hide pop-btn">
<?php
// Language selector
$langLinks = G\Handler::getVar('langLinks');
$cols = min(5, ceil(count($langLinks) / 6)); ?>
<span class="top-btn-text"><span class="text"><?php echo CHV\get_language_used()['short_name']; ?></span><span class="arrow-down"></span></span>
<div class="pop-box <?php if ($cols > 1) {
echo sprintf('pbcols%d ', $cols);
} ?>arrow-box arrow-box-top anchor-center">
<div class="pop-box-inner pop-box-menu<?php if ($cols > 1) {
?> pop-box-menucols<?php
} ?>">
<ul>
<?php
foreach ($langLinks as $k => $v) {
echo '<li' . (CHV\get_language_used()['code'] == $k ? ' class="current"' : '') . '><a href="' . $v['url'] . '">' . $v['name'] . '</a></li>' . "\n";
++$count;
} ?>
</ul>
</div>
</div>
</li>
<?php
} ?>
<?php
} ?>

View File

@ -2415,67 +2415,6 @@ function free_version_warning($wrap=true)
<?php
} ?>
<?php if (get_settings()['key'] == 'languages') {
?>
<p><?php echo read_the_docs_settings('languages', _s('languages')); ?></p>
<div class="input-label">
<label><?php _se('Custom language strings'); ?></label>
</div>
<div class="input-label">
<label for="default_language"><?php _se('Default language'); ?></label>
<div class="c5 phablet-c1"><select type="text" name="default_language" id="default_language" class="text-input">
<?php
foreach (CHV\get_available_languages() as $k => $v) {
$selected_lang = $k == CHV\Settings::get('default_language') ? ' selected' : '';
echo '<option value="' . $k . '"' . $selected_lang . '>' . $v['name'] . '</option>' . "\n";
} ?>
</select></div>
<div class="input-below"><?php _se('Default base language to use.'); ?></div>
</div>
<div class="input-label">
<label for="auto_language"><?php _se('Auto language'); ?></label>
<div class="c5 phablet-c1"><select type="text" name="auto_language" id="auto_language" class="text-input">
<?php
echo CHV\Render\get_select_options_html([1 => _s('Enabled'), 0 => _s('Disabled')], CHV\Settings::get('auto_language')); ?>
</select></div>
<div class="input-below"><?php _se('Enable this if you want to automatically detect and set the right language for each user.'); ?></div>
</div>
<div class="input-label">
<label for="language_chooser_enable"><?php _se('Language chooser'); ?></label>
<div class="c5 phablet-c1"><select type="text" name="language_chooser_enable" id="language_chooser_enable" class="text-input" data-combo="language-enable-combo">
<?php
echo CHV\Render\get_select_options_html([1 => _s('Enabled'), 0 => _s('Disabled')], CHV\Settings::get('language_chooser_enable')); ?>
</select></div>
<div class="input-below"><?php _se('Enable this if you want to allow language selection.'); ?></div>
</div>
<?php if (count(CHV\get_available_languages()) > 0) {
?>
<div id="language-enable-combo">
<div data-combo-value="1" class="switch-combo<?php if ((get_safe_post() ? get_safe_post()['language_chooser_enable'] == 0 : !CHV\Settings::get('language_chooser_enable'))) {
echo ' soft-hidden';
} ?>">
<div class="checkbox-label">
<h4 class="input-label-label"><?php _se('Enabled languages'); ?></h4>
<ul class="c20 phablet-c1">
<?php
foreach (CHV\get_available_languages() as $k => $v) {
$lang_flag = array_key_exists($k, CHV\get_enabled_languages()) ? ' checked' : null;
echo '<li class="c5 phone-c1 display-inline-block"><label class="display-block" for="languages_enable[' . $k . ']"> <input type="checkbox" name="languages_enable[]" id="languages_enable[' . $k . ']" value="' . $k . '"' . $lang_flag . '>' . $v['name'] . '</label></li>';
} ?>
</ul>
<p class="margin-top-20"><?php _se("Unchecked languages won't be used in your website."); ?></p>
</div>
</div>
</div>
<?php
} ?>
<?php
} ?>
<?php if (get_settings()['key'] == 'external-storage') {
free_version_warning();
} ?>

View File

@ -240,25 +240,6 @@
<hr class="line-separator">
</hr>
<?php if (CHV\getSetting('language_chooser_enable')) {
?>
<div class="c5 phablet-c1">
<div class="input-label">
<label for="language"><?php _se('Language'); ?></label>
<select name="language" id="language" class="text-input">
<?php
$enabled_languages = CHV\get_enabled_languages();
foreach ($enabled_languages as $k => $v) {
$selected_lang = $k == get_user()['language'] ? " selected" : "";
echo '<option value="' . $k . '"' . $selected_lang . '>' . $v["name"] . '</option>' . "\n";
} ?>
</select>
</div>
</div>
<?php
} ?>
<?php
$zones = timezone_identifiers_list();

View File

@ -49,7 +49,6 @@ if (
|| G\datetime_add(Settings::get('update_check_datetimegmt'), 'P1D') < G\datetimegmt()
) {
try {
L10n::setLocale(Settings::get('default_language'));
$lock = new Lock('check-updates');
if ($lock->create()) {
checkUpdates();
@ -161,38 +160,6 @@ try {
G\exception_to_error($e);
}
}
if (Login::isLoggedUser()) {
new L10n;
}
// Global handle ?lang= to have hreflang all across ALL urls
if (isset($_GET['lang']) && array_key_exists($_GET['lang'], get_enabled_languages())) {
if (Login::isLoggedUser() and Login::getUser()['language'] !== $_GET['lang']) {
User::update(Login::getUser()['id'], ['language' => $_GET['lang']]);
}
// Store selected language in cookie
L10n::setCookieLang($_GET['lang']);
define('PUSH_LANG', $_GET['lang']);
}
// Lang subdomain wildcard applies only for homepage
if (defined('CHV_HOST_WILDCARD_TYPE') && CHV_HOST_WILDCARD_TYPE == 'lang' && $handler->handled_request != '/') {
$handler->issue404();
}
if (defined('CHV_HOST_WILDCARD') && defined('CHV_HOST_WILDCARD_TYPE') == false) {
G\redirect(G\get_base_url());
}
if (defined('CHV_HOST_WILDCARD_USER_ID') && $handler->request_array[0] !== 'json') {
if ($handler->request_array[0] == '/') {
$handler->request_array[0] = CHV_HOST_WILDCARD;
} else {
array_unshift($handler->request_array, CHV_HOST_WILDCARD);
}
$handler->mapRoute('user', [
'id' => CHV_HOST_WILDCARD_USER_ID,
]);
}
// Handle agree consent stuff
if (array_key_exists('agree-consent', $_GET)) {
@ -241,27 +208,6 @@ try {
G\redirect('login');
}
$langLinks = [];
$langToggleUrl = defined('CHV_HOST_WILDCARD_USER_ID') ? get_current_url_wildcard(CHV_HOST_WILDCARD, ['lang']) : G\get_current_url(true, ['lang']);
parse_str($_SERVER['QUERY_STRING'], $qs);
unset($qs['lang']);
$qs = http_build_query($qs);
$langToggleUrl = rtrim($langToggleUrl, '/') . ($qs ? '&' : '/?') . 'lang=';
foreach (get_enabled_languages() as $k => $v) {
$hreflang = strtolower($k);
if ($handler->request_array[0] == '/' && getSetting('lang_subdomain_wildcard')) {
$langUrl = get_base_url_wildcard(null, $hreflang);
} else {
$langUrl = $langToggleUrl . $k;
}
$langLinks[$k] = [
'hreflang' => $hreflang,
'name' => $v['name'],
'url' => $langUrl,
];
}
$handler::setVar('langLinks', $langLinks);
// Consent screen "accept" URL
if ($handler::getCond('show_consent_screen')) {
$handler::setVar('consent_accept_url', G\get_current_url() . (parse_url(G\get_current_url(), PHP_URL_QUERY) ? '&' : '/?') . 'agree-consent');
@ -283,8 +229,7 @@ try {
//Settings::setValue('website_search', FALSE);
}
// Keep ?random & ?lang when route is /
if ($handler->request_array[0] == '/' and getSetting('website_mode_personal_routing') == '/' and in_array(key($querystr), ['random', 'lang'])) {
if ($handler->request_array[0] == '/' and getSetting('website_mode_personal_routing') == '/' and in_array(key($querystr), ['random'])) {
$handler->mapRoute('index');
// Keep /search/something (global search) when route is /
} elseif ($handler->request_array[0] == 'search' and in_array($handler->request_array[1], ['images', 'albums', 'users'])) {
@ -297,7 +242,7 @@ try {
}
// Inject some stuff for the index page
if ($handler->request_array[0] == '/' and !in_array(key($querystr), ['random', 'lang']) and !$handler::getCond('mapped_route')) {
if ($handler->request_array[0] == '/' and !in_array(key($querystr), ['random']) and !$handler::getCond('mapped_route')) {
$personal_mode_user = User::getSingle(getSetting('website_mode_personal_uid'));
if (Settings::get('homepage_title_html') == null) {
Settings::setValue('homepage_title_html', $personal_mode_user['name']);
@ -548,10 +493,6 @@ try {
if (isset($list_params) && $list_params['page_show']) {
$handler::setVar('doctitle', $handler::getVar('doctitle') . ' | ' . _s('Page %s', $list_params['page_show']));
}
if (defined('PUSH_LANG')) {
$handler::setVar('doctitle', $handler::getVar('doctitle') . ' (' . get_enabled_languages()[PUSH_LANG]['name'] . ')');
}
$handler::setVar('safe_html_website_name', G\safe_html(getSetting('website_name')));
$handler::setVar('safe_html_doctitle', G\safe_html($handler::getVar('doctitle')));
if ($handler::getVar('pre_doctitle')) {

View File

@ -1,634 +0,0 @@
<?php
/* --------------------------------------------------------------------
G\ library
https://g.chevereto.com
@author Rodolfo Berrios A. <http://rodolfoberrios.com/>
Copyright (c) Rodolfo Berrios <inbox@rodolfoberrios.com> All rights reserved.
Licensed under the MIT license
http://opensource.org/licenses/MIT
--------------------------------------------------------------------- */
/**
* This class uses code that belongs or was taken from the following:
*
* David Soria Parra <sn_@gmx.net>
* https://github.com/dsp/PHP-Gettext
*
* Jyxo, s.r.o.
* https://github.com/jyxo/php/tree/master/Jyxo/Gettext
*
* WordPress
* https://wordpress.org/
*/
/**
* class.gettext.php
* This class is a stand-alone implementation of gettext.
* It works with .po and .mo files and saves the result in a cached static file (by default)
*/
namespace G;
use Exception;
class Gettext
{
// Magic words in the MO header
const MO_MAGIC_1 = -569244523; //0xde120495
const MO_MAGIC_2 = -1794895138; //0x950412de
// Cache stuff
const CACHE_FILE_SUFFIX = '.cache.php';
protected static $default_options = ['cache' => true, 'cache_type' => 'file', 'cache_filepath' => null, 'cache_header' => true];
protected $source_file;
protected $parsed = false;
public $translation_table = [];
public $translation_plural = null;
public $translation_header = null;
public function __construct($options=[])
{
$this->options = array_merge(static::$default_options, (array)$options);
$this->source_file = $this->options['file'];
if (!@is_readable($this->source_file)) {
throw new GettextException("Can't read source file", 100);
}
$file_extension = pathinfo($this->source_file, PATHINFO_EXTENSION);
// Only allow MO and PO
if (!in_array($file_extension, ['mo', 'po'])) {
throw new GettextException('Invalid file source. This only works with .mo and .po files', 101);
}
$this->parse_method = strtoupper($file_extension);
if ($this->options['cache']) {
if ($this->options['cache_filepath']) {
// Custom whatever filepath cache
$this->cache_file = $this->options['cache_filepath'];
} else {
// Default cache filepath.cache.php
$this->cache_file = $this->source_file . self::CACHE_FILE_SUFFIX;
}
if (!$this->getCache()) { // No cache was found
$this->parseFile();
}
} else {
$this->parseFile();
}
}
/**
* Return a translated string
*
* If the translation is not found, the original message will be returned.
*
* @param String $msg The message to search for
* @return translated string
*/
public function gettext($msg)
{
if (empty($msg)) {
return null;
}
if (!$this->parsed) {
$this->parseFile();
}
if ($this->mustFixQuotes()) {
$msg = $this->fixQuotes($msg, 'escape');
}
$translated = $msg;
if (array_key_exists($msg, $this->translation_table)) {
$translated = $this->translation_table[$msg][0];
$translated = !empty($translated) ? $translated : $msg;
}
if ($this->mustFixQuotes()) {
$translated = $this->fixQuotes($translated, 'unescape');
}
return $translated;
}
/**
* Return a translated string in it's plural form
*
* Returns the given $count (e.g second, third,...) plural form of the
* given string. If the id is not found and $num == 1 $msg is returned,
* otherwise $msg_plural
*
* @param String $msg The message to search for
* @param String $msg_plural A fallback plural form
* @param Integer $count Which plural form
*
* @return translated string
*/
public function ngettext($msg, $msg_plural, $count=0)
{
if (empty($msg) or empty($msg_plural) or !is_numeric($count)) {
return $msg;
}
if (!$this->parsed) {
$this->parseFile();
}
if ($this->mustFixQuotes()) {
$msg = $this->fixQuotes($msg, 'escape');
$msg_plural = $this->fixQuotes($msg_plural, 'escape');
}
$translated = $count == 1 ? $msg : $msg_plural; // Failover
if (array_key_exists($msg, $this->translation_table)) {
$plural_index = $this->getPluralIndex($count);
$index_id = $plural_index !== false ? $plural_index : ($count - 1);
$table = $this->translation_table[$msg];
if (array_key_exists($index_id, $table)) {
$translated = $table[$index_id];
}
}
if ($this->mustFixQuotes()) {
$translated = $this->fixQuotes($translated, 'unescape');
}
return $translated;
}
/**
* Parse the source file
* If cache is enabled it will try to cache the result
*/
private function parseFile()
{
$parseFn = 'parse' . $this->parse_method . 'File';
try {
$this->$parseFn();
$this->parsed = true;
if ($this->options['cache']) {
try {
$this->cache('file');
} catch (Exception $e) {
error_log($e); // Don't scream for cache issues
}
}
} catch (Exception $e) {
throw $e;
}
}
/**
* Parse the MO file header and returns the table
* offsets as described in the file header.
*
* If an exception occurred, null is returned. This is intentionally
* as we need to get close to ext/gettext behaviour.
*
* @param resource $fp The open file handler to the MO file
*
* @return array offset
*/
private function parseMOHeader($fp)
{
$data = fread($fp, 8);
if (!$data) {
throw new GettextException("Can't fread(8) file for reading", 202);
}
$header = unpack('lmagic/lrevision', $data);
if (self::MO_MAGIC_1 != $header['magic'] && self::MO_MAGIC_2 != $header['magic']) {
return null;
}
if (0 != $header['revision']) {
return null;
}
$data = fread($fp, 4 * 5);
if (!$data) {
throw new GettextException("Can't fread(4 * 5) file for reading", 203);
}
$offsets = unpack('lnum_strings/lorig_offset/' . 'ltrans_offset/lhash_size/lhash_offset', $data);
return $offsets;
}
/**
* Parse and returns the string offsets in a a table. Two table can be found in
* a mo file. The table with the translations and the table with the original
* strings. Both contain offsets to the strings in the file.
*
* If an exception occurred, null is returned. This is intentionally
* as we need to get close to ext/gettext behaviour.
*
* @param resource $fp The open file handler to the MO file
* @param int $offset The offset to the table that should be parsed
* @param int $num The number of strings to parse
*
* @return Array of offsets
*/
private function parseMOTableOffset($fp, $offset, $num)
{
if (fseek($fp, $offset, SEEK_SET) < 0) {
return null;
}
$table = [];
for ($i=0; $i<$num; $i++) {
$data = fread($fp, 8);
$table[] = unpack('lsize/loffset', $data);
}
return $table;
}
/**
* Parse a string as referenced by an table. Returns an
* array with the actual string.
*
* @param resource $fp The open file handler to the MO fie
* @param array $entry The entry as parsed by parseMOTableOffset()
*
* @return Parsed string
*/
private function parseMOEntry($fp, $entry)
{
if (fseek($fp, $entry['offset'], SEEK_SET) < 0) {
return null;
}
if ($entry['size'] > 0) {
return fread($fp, $entry['size']);
}
return null;
}
/**
* Parse the plural data found in the language
*
* @param string $header with nplurals and plural declaration
*/
private function parsePluralData($header)
{
// Base english-like plural languages
$nplurals = 2;
$formula = '(n != 1)';
// Detect plural data. If nothing found then use general plural handling
if (preg_match('/\s*nplurals\s*\=\s*(\d+)\s*\;\s*plural\s*\=\s*(\({0,1}.*\){0,1})\s*\;/', $header, $matches)) {
$nplurals = (int) $matches[1];
if (preg_match('/^([!n\=\<\>\&\|\?\:%\s\(\)\d]+)$/', $matches[2]) === true) {
$formula = $matches[2];
}
}
// Fix the plural formula
$formula = $this->parenthesizePluralFormula($formula);
// Generate the translation_plural array
$function = str_replace('n', '$n', $formula);
// Stock everything
$this->translation_plural = [
'nplurals' => $nplurals,
'function' => $function,
];
}
/**
* Adds parentheses to the inner parts of ternary operators in
* plural formulas, because PHP evaluates ternary operators from left to right
*
* @param string $formula the expression without parentheses
* @return string the formula with parentheses added
*/
private function parenthesizePluralFormula($formula)
{
$formula .= ';';
$return = '';
$depth = 0;
for ($i = 0; $i < strlen($formula); ++$i) {
$char = $formula[$i];
switch ($char) {
case '?':
$return .= ' ? (';
$depth++;
break;
case ':':
$return .= ') : (';
break;
case ';':
$return .= str_repeat(')', $depth) . ';';
$depth = 0;
break;
default:
$return .= $char;
}
}
$return = trim(rtrim($return, ';')); // Cleaning
$return = preg_replace('/\s+/S', ' ', $return); // Extra spaces
$return = str_replace('( ', '(', str_replace(' )', ')', $return)); // Remove extra space around ()
return $return;
}
/**
* Get plural index
*
* @param int msg count
* @return int plural index
*/
public function getPluralIndex($count)
{
if (!is_callable($this->translation_plural['callable'])) {
// So, this is how you interpeter this thing
$function = $this->translation_plural['function'];
$nplurals = $this->translation_plural['nplurals'];
$evil = "\$callable = function(\$n) {\$index = (int)$function; return \$index < $nplurals ? \$index : ($nplurals - 1);};";
eval($evil);
$this->translation_plural['callable'] = $callable;
}
return call_user_func($this->translation_plural['callable'], $count);
}
private function parseHeader($header)
{
$headerTable = [];
$lines = array_map('trim', explode("\n", $header));
foreach ($lines as $line) {
if (starts_with('msgid', $line) or starts_with('msgstr', $line)) {
continue;
}
$line = preg_replace('#\"(.*)\"#', '$1', $line);
$line = rtrim($line, '\n');
$parts = explode(':', $line, 2);
if (!isset($parts[1])) {
continue;
} // Skip empty keys
$headerTable[trim($parts[0])] = trim($parts[1]);
}
return $headerTable;
}
/**
* Parse a PO entry chunk
* @param Array $chunk
*
* @return Array of translation table
*/
private function parsePOEntry($chunk)
{
$chunks = explode("\n", $chunk);
foreach ($chunks as $chunk) {
// Skip #: and empty chunks
if (starts_with('#', $chunk) or is_null($chunk)) {
continue;
}
// Parse the plural forms
if (is_null($this->translation_plural) and starts_with('"Plural-Forms:', $chunk)) {
$this->parsePluralData($chunk);
}
// Nasty regexes
if (preg_match('/^msgid "(.*)"/', $chunk, $matches)) {
$msgid = $matches[1];
} elseif (preg_match('/^msgstr "(.*)"/', $chunk, $matches)) {
$msgstr = $matches[1];
} elseif (preg_match('/^#~ msgid "(.*)"/', $chunk, $matches)) {
//$obsolete = TRUE;
$msgid = $matches[1];
} elseif (preg_match('/^#~ msgstr "(.*)"/', $chunk, $matches)) {
//$obsolete = TRUE;
$msgstr = $matches[1];
} elseif (preg_match('/^(#\: .+)$/', $chunk, $matches)) {
$location .= $matches[1];
} elseif (preg_match('/^#\, fuzzy/', $chunk)) {
$fuzzy = true;
} elseif (preg_match('/^msgid_plural "(.*)"/', $chunk, $matches)) {
$plural = $matches[1];
//$msgstr = [];
} elseif (preg_match('/^msgstr\[([0-9])+\] "(.*)"/', $chunk, $matches)) {
if ($matches[2] == '') {
continue;
}
if (!is_array($msgstr)) {
$msgstr = [];
}
$msgstr[$matches[1]] = $matches[2];
}
}
if ($msgstr == '') {
$msgstr = null;
}
if (empty($msgid)) {
return null;
} else {
return [
'msgid' => $msgid,
'msgstr'=> is_null($msgstr) ? null : (array)$msgstr
];
}
}
/**
* Parse binary .mo file
*/
private function parseMOFile()
{
$filesize = filesize($this->source_file);
if ($filesize < 4 * 7) {
return;
}
$fp = @fopen($this->source_file, 'rb');
if (!$fp) {
throw new GettextException("Can't fopen file for reading", 200);
}
$offsets = $this->parseMOHeader($fp);
if (null == $offsets || $filesize < 4 * ($offsets['num_strings'] + 7)) {
fclose($fp);
return;
}
$transTable = array();
$table = $this->parseMOTableOffset($fp, $offsets['trans_offset'], $offsets['num_strings']);
if (null == $table) {
fclose($fp);
return;
}
foreach ($table as $idx => $entry) {
$transTable[$idx] = $this->parseMOEntry($fp, $entry);
}
$this->translation_header = $this->parseHeader(reset($transTable));
// Parse plural data
$this->parsePluralData($this->translation_header['Plural-Forms']);
$table = $this->parseMOTableOffset($fp, $offsets['orig_offset'], $offsets['num_strings']);
foreach ($table as $idx => $entry) {
$entry = $this->parseMOEntry($fp, $entry);
$formes = explode(chr(0), $entry);
$translation = explode(chr(0), $transTable[$idx]);
foreach ($formes as $form) {
if (empty($form)) {
continue;
}
$this->translation_table[$form] = $translation;
}
}
fclose($fp);
}
/**
* Parse text based .po file
*/
private function parsePOFile()
{
$linenumber = 0;
$chunks = [];
$file = file($this->source_file);
if (!$file) {
throw new GettextException("Can't read file into an array", 204);
}
foreach ($file as $line) {
if ($line == "\n" or $line == "\r\n") {
++$linenumber;
} else {
if (!array_key_exists($linenumber, $chunks)) {
$chunks[$linenumber] = '';
}
$chunks[$linenumber] .= $line;
}
}
$this->translation_header = $this->parseHeader(reset($chunks));
foreach ($chunks as $chunk) {
$entry = $this->parsePOEntry($chunk);
if (!$entry['msgid'] or is_null($entry['msgstr'])) {
continue;
}
$this->translation_table[$entry['msgid']] = $entry['msgstr'];
}
}
/**
* Get cached results (cached file)
*
* @return bool cache status
*/
private function getCache()
{
if (@is_readable($this->cache_file)) {
// Outdated cache?
$source_mtime = filemtime($this->source_file);
$cache_mtime = filemtime($this->cache_file);
if ($source_mtime and $cache_mtime and $source_mtime > $cache_mtime) {
return false;
}
if (!@include_once($this->cache_file)) {
return false;
}
if (is_array($translation_table)) {
$this->translation_table = $translation_table;
if (is_array($translation_plural)) {
$this->translation_plural = $translation_plural;
}
if (is_array($translation_header)) {
$this->translation_header = $translation_header;
}
$this->is_cached = true;
$this->parsed = true;
return true;
}
}
$this->is_cached = false;
return false;
}
/**
* Cache the translation results into a file
*/
private function cache()
{
if (!@is_dir(dirname($this->cache_file))) {
throw new GettextException("Target cache dir doesn't exists", 400);
}
if (($fh = @fopen($this->cache_file, 'w')) === false) {
throw new GettextException("Can't fopen cache file for writing", 401);
}
// Cache contents, closer as possible to the mo/po scheme
$contents = '<?php' . "\n";
if ($this->options['cache_header']) {
if (!is_null($this->translation_header)) {
$contents .= '$translation_header = ' . var_export($this->translation_header, true) . ';' . "\n";
}
if (!is_null($this->translation_plural)) {
$translation_plural = $this->translation_plural;
unset($translation_plural['callable']); // Don't cache the callable reference
$contents .= '$translation_plural = ' . var_export($translation_plural, true) . ';' . "\n";
}
}
// Note that we keep the same "quotes" used by the PO file scheme
$contents .= '$translation_table = [';
foreach ($this->translation_table as $k => $v) {
$k = $this->parse_method == 'PO' ? $k : $this->fixQuotes($k, 'escape');
$contents .= "\n" . ' "' . $k . '" => [';
foreach ($v as $kk => $vv) {
$kk = $this->parse_method == 'PO' ? $kk : $this->fixQuotes($kk, 'escape');
$vv = $this->parse_method == 'PO' ? $vv : $this->fixQuotes($vv, 'escape');
$contents .= "\n" . ' ' . $kk . ' => "' . $vv . '",';
}
$contents .= "\n". ' ],';
}
$contents .= "\n" . '];' . "\n" . '?>';
if (!fwrite($fh, $contents)) {
throw new GettextException("Can't save translation results to cache file", 402);
}
@touch($this->source_file); // Make sure to use the correct filemtime next time
fclose($fh);
}
private function fixQuotes($msg, $action=null)
{
if ($this->is_cached) {
return $msg;
}
switch ($action) {
case 'escape':
$msg = str_replace('"', '\"', $msg);
break;
case 'unescape':
$msg = str_replace('\"', '"', $msg);
break;
}
return $msg;
}
private function mustFixQuotes()
{
return $this->is_cached or $this->parse_method == 'PO';
}
}
class GettextException extends Exception
{
}