From d6e6dd6b280e1a9c68e922d14a77510404959b76 Mon Sep 17 00:00:00 2001 From: ASM Date: Wed, 4 Nov 2015 20:13:30 +0300 Subject: Translated 1/3 of --- app/i18n/ru/admin.php | 183 +++++++++++++++++++++++++++++++++++++++++++++++ app/i18n/ru/conf.php | 174 ++++++++++++++++++++++++++++++++++++++++++++ app/i18n/ru/feedback.php | 110 ++++++++++++++++++++++++++++ app/i18n/ru/gen.php | 181 ++++++++++++++++++++++++++++++++++++++++++++++ app/i18n/ru/index.php | 61 ++++++++++++++++ app/i18n/ru/install.php | 113 +++++++++++++++++++++++++++++ app/i18n/ru/sub.php | 62 ++++++++++++++++ 7 files changed, 884 insertions(+) create mode 100644 app/i18n/ru/admin.php create mode 100644 app/i18n/ru/conf.php create mode 100644 app/i18n/ru/feedback.php create mode 100644 app/i18n/ru/gen.php create mode 100644 app/i18n/ru/index.php create mode 100644 app/i18n/ru/install.php create mode 100644 app/i18n/ru/sub.php (limited to 'app') diff --git a/app/i18n/ru/admin.php b/app/i18n/ru/admin.php new file mode 100644 index 000000000..6c3e21031 --- /dev/null +++ b/app/i18n/ru/admin.php @@ -0,0 +1,183 @@ + array( + 'allow_anonymous' => 'Разрешить анонимное чтение статей для пользователя по умолчанию (%s)', + 'allow_anonymous_refresh' => 'Разрешить анонимное обновление статей', + 'api_enabled' => 'Включить доступ к API (необходимо для мобильных приложений)', + 'form' => 'На основе веб-формы (традиционный, необходим JavaScript)', + 'http' => 'HTTP (для продвинутых пользователей - по HTTPS)', + 'none' => 'Без аутентификации (небезопасный)', + 'persona' => 'Mozilla Persona (новый, необходим JavaScript)', + 'title' => 'Аутентификации', + 'title_reset' => 'Сброс аутентицикации', + 'token' => 'Токен аутентификации', + 'token_help' => 'Разрешает доступ к RSS ленте пользователя по умолчанию без аутентификации:', + 'type' => 'Метод аутентификации', + 'unsafe_autologin' => 'Разрешить небезопасный автоматический вход с использованием следующего формата: ', + ), + 'check_install' => array( + 'cache' => array( + 'nok' => 'Проверьте права доступа к папке ./data/cache. Сервер HTTP должен иметь права на запись в эту папку', + 'ok' => 'Права на ./data/cache в порядке.', + ), + 'categories' => array( + 'nok' => 'Таблица категорий настроена неправильно.', + 'ok' => 'Таблица категорий настроена правильно.', + ), + 'connection' => array( + 'nok' => 'Подключение к базе данных не может быть установлено.', + 'ok' => 'Подключение к базе данных в порядке.', + ), + 'ctype' => array( + 'nok' => 'У вас не установлена библиотека для проверки типов символов (php-ctype).', + 'ok' => 'У вас не установлена библиотека для проверки типов символов (ctype).', + ), + 'curl' => array( + 'nok' => 'У вас не установлено расширение cURL (пакет php5-curl).', + 'ok' => 'У вас установлено расширение cURL.', + ), + 'data' => array( + 'nok' => 'Проверьте права доступа к папке ./data . Сервер HTTP должен иметь права на запись в эту папку.', + 'ok' => 'Права на ./data/ в порядке.', + ), + 'database' => 'Установка базы данных', + 'dom' => array( + 'nok' => 'У вас не установлена библиотека для просмотра DOM (пакет php-xml).', + 'ok' => 'У вас не установлена библиотека для просмотра DOM.', + ), + 'entries' => array( + 'nok' => 'Entry table is bad configured.', + 'ok' => 'Entry table is ok.', + ), + 'favicons' => array( + 'nok' => 'Check permissions on ./data/favicons directory. HTTP server must have rights to write into', + 'ok' => 'Permissions on favicons directory are good.', + ), + 'feeds' => array( + 'nok' => 'Feed table is bad configured.', + 'ok' => 'Feed table is ok.', + ), + 'files' => 'File installation', + 'json' => array( + 'nok' => 'You lack JSON (php5-json package).', + 'ok' => 'You have JSON extension.', + ), + 'minz' => array( + 'nok' => 'You lack the Minz framework.', + 'ok' => 'You have the Minz framework.', + ), + 'pcre' => array( + 'nok' => 'You lack a required library for regular expressions (php-pcre).', + 'ok' => 'You have the required library for regular expressions (PCRE).', + ), + 'pdo' => array( + 'nok' => 'You lack PDO or one of the supported drivers (pdo_mysql, pdo_sqlite).', + 'ok' => 'You have PDO and at least one of the supported drivers (pdo_mysql, pdo_sqlite).', + ), + 'persona' => array( + 'nok' => 'Check permissions on ./data/persona directory. HTTP server must have rights to write into', + 'ok' => 'Permissions on Mozilla Persona directory are good.', + ), + 'php' => array( + '_' => 'PHP installation', + 'nok' => 'Your PHP version is %s but FreshRSS requires at least version %s.', + 'ok' => 'Your PHP version is %s, which is compatible with FreshRSS.', + ), + 'tables' => array( + 'nok' => 'There is one or more lacking tables in the database.', + 'ok' => 'Tables are existing in the database.', + ), + 'title' => 'Installation checking', + 'tokens' => array( + 'nok' => 'Check permissions on ./data/tokens directory. HTTP server must have rights to write into', + 'ok' => 'Permissions on tokens directory are good.', + ), + 'users' => array( + 'nok' => 'Check permissions on ./data/users directory. HTTP server must have rights to write into', + 'ok' => 'Permissions on users directory are good.', + ), + 'zip' => array( + 'nok' => 'You lack ZIP extension (php5-zip package).', + 'ok' => 'You have ZIP extension.', + ), + ), + 'extensions' => array( + 'disabled' => 'Disabled', + 'empty_list' => 'There is no installed extension', + 'enabled' => 'Enabled', + 'no_configure_view' => 'This extension cannot be configured.', + 'system' => array( + '_' => 'System extensions', + 'no_rights' => 'System extension (you have no rights on it)', + ), + 'title' => 'Extensions', + 'user' => 'User extensions', + ), + 'stats' => array( + '_' => 'Statistics', + 'all_feeds' => 'All feeds', + 'category' => 'Category', + 'entry_count' => 'Entry count', + 'entry_per_category' => 'Entries per category', + 'entry_per_day' => 'Entries per day (last 30 days)', + 'entry_per_day_of_week' => 'Per day of week (average: %.2f messages)', + 'entry_per_hour' => 'Per hour (average: %.2f messages)', + 'entry_per_month' => 'Per month (average: %.2f messages)', + 'entry_repartition' => 'Entries repartition', + 'feed' => 'Feed', + 'feed_per_category' => 'Feeds per category', + 'idle' => 'Idle feeds', + 'main' => 'Main statistics', + 'main_stream' => 'Main stream', + 'menu' => array( + 'idle' => 'Idle feeds', + 'main' => 'Main statistics', + 'repartition' => 'Articles repartition', + ), + 'no_idle' => 'There is no idle feed!', + 'number_entries' => '%d articles', + 'percent_of_total' => '%% of total', + 'repartition' => 'Articles repartition', + 'status_favorites' => 'Favourites', + 'status_read' => 'Read', + 'status_total' => 'Total', + 'status_unread' => 'Unread', + 'title' => 'Statistics', + 'top_feed' => 'Top ten feeds', + ), + 'system' => array( + '_' => 'System configuration', + 'auto-update-url' => 'Auto-update server URL', + 'instance-name' => 'Instance name', + 'max-categories' => 'Categories per user limit', + 'max-feeds' => 'Feeds per user limit', + 'registration' => array( + 'help' => '0 means that there is no account limit', + 'number' => 'Max number of accounts', + ), + ), + 'update' => array( + '_' => 'Update system', + 'apply' => 'Apply', + 'check' => 'Check for new updates', + 'current_version' => 'Your current version of FreshRSS is the %s.', + 'last' => 'Last verification: %s', + 'none' => 'No update to apply', + 'title' => 'Update system', + ), + 'user' => array( + 'articles_and_size' => '%s articles (%s)', + 'create' => 'Create new user', + 'email_persona' => 'Login mail address
(for Mozilla Persona)', + 'language' => 'Language', + 'number' => 'There is %d account created yet', + 'numbers' => 'There are %d accounts created yet', + 'password_form' => 'Password
(for the Web-form login method)', + 'password_format' => 'At least 7 characters', + 'title' => 'Manage users', + 'user_list' => 'List of users', + 'username' => 'Username', + 'users' => 'Users', + ), +); diff --git a/app/i18n/ru/conf.php b/app/i18n/ru/conf.php new file mode 100644 index 000000000..69162932f --- /dev/null +++ b/app/i18n/ru/conf.php @@ -0,0 +1,174 @@ + array( + '_' => 'Archiving', + 'advanced' => 'Advanced', + 'delete_after' => 'Remove articles after', + 'help' => 'More options are available in the individual feed settings', + 'keep_history_by_feed' => 'Minimum number of articles to keep by feed', + 'optimize' => 'Optimise database', + 'optimize_help' => 'To do occasionally to reduce the size of the database', + 'purge_now' => 'Purge now', + 'title' => 'Archiving', + 'ttl' => 'Do not automatically refresh more often than', + ), + 'display' => array( + '_' => 'Display', + 'icon' => array( + 'bottom_line' => 'Bottom line', + 'entry' => 'Article icons', + 'publication_date' => 'Date of publication', + 'related_tags' => 'Related tags', + 'sharing' => 'Sharing', + 'top_line' => 'Top line', + ), + 'language' => 'Language', + 'notif_html5' => array( + 'seconds' => 'seconds (0 means no timeout)', + 'timeout' => 'HTML5 notification timeout', + ), + 'theme' => 'Theme', + 'title' => 'Display', + 'width' => array( + 'content' => 'Content width', + 'large' => 'Large', + 'medium' => 'Medium', + 'no_limit' => 'No limit', + 'thin' => 'Thin', + ), + ), + 'query' => array( + '_' => 'User queries', + 'deprecated' => 'This query is no longer valid. The referenced category or feed has been deleted.', + 'filter' => 'Filter applied:', + 'get_all' => 'Display all articles', + 'get_category' => 'Display "%s" category', + 'get_favorite' => 'Display favorite articles', + 'get_feed' => 'Display "%s" feed', + 'no_filter' => 'No filter', + 'none' => 'You haven’t created any user query yet.', + 'number' => 'Query n°%d', + 'order_asc' => 'Display oldest articles first', + 'order_desc' => 'Display newest articles first', + 'search' => 'Search for "%s"', + 'state_0' => 'Display all articles', + 'state_1' => 'Display read articles', + 'state_2' => 'Display unread articles', + 'state_3' => 'Display all articles', + 'state_4' => 'Display favorite articles', + 'state_5' => 'Display read favorite articles', + 'state_6' => 'Display unread favorite articles', + 'state_7' => 'Display favorite articles', + 'state_8' => 'Display not favorite articles', + 'state_9' => 'Display read not favorite articles', + 'state_10' => 'Display unread not favorite articles', + 'state_11' => 'Display not favorite articles', + 'state_12' => 'Display all articles', + 'state_13' => 'Display read articles', + 'state_14' => 'Display unread articles', + 'state_15' => 'Display all articles', + 'title' => 'User queries', + ), + 'profile' => array( + '_' => 'Profile management', + 'delete' => array( + '_' => 'Account deletion', + 'warn' => 'Your account and all the related data will be deleted.', + ), + 'email_persona' => 'Login email address
(for Mozilla Persona)', + 'password_api' => 'Password API
(e.g., for mobile apps)', + 'password_form' => 'Password
(for the Web-form login method)', + 'password_format' => 'At least 7 characters', + 'title' => 'Profile', + ), + 'reading' => array( + '_' => 'Reading', + 'after_onread' => 'After “mark all as read”,', + 'articles_per_page' => 'Number of articles per page', + 'auto_load_more' => 'Load next articles at the page bottom', + 'auto_remove_article' => 'Hide articles after reading', + 'mark_updated_article_unread' => 'Mark updated articles as unread', + 'confirm_enabled' => 'Display a confirmation dialog on “mark all as read” actions', + 'display_articles_unfolded' => 'Show articles unfolded by default', + 'display_categories_unfolded' => 'Show categories folded by default', + 'hide_read_feeds' => 'Hide categories & feeds with no unread article (does not work with “Show all articles” configuration)', + 'img_with_lazyload' => 'Use "lazy load" mode to load pictures', + 'jump_next' => 'jump to next unread sibling (feed or category)', + 'number_divided_when_reader' => 'Divided by 2 in the reading view.', + 'read' => array( + 'article_open_on_website' => 'when article is opened on its original website', + 'article_viewed' => 'when article is viewed', + 'scroll' => 'while scrolling', + 'upon_reception' => 'upon reception of the article', + 'when' => 'Mark article as read…', + ), + 'show' => array( + '_' => 'Articles to display', + 'adaptive' => 'Adjust showing', + 'all_articles' => 'Show all articles', + 'unread' => 'Show only unread', + ), + 'sort' => array( + '_' => 'Sort order', + 'newer_first' => 'Newer first', + 'older_first' => 'Oldest first', + ), + 'sticky_post' => 'Stick the article to the top when opened', + 'title' => 'Reading', + 'view' => array( + 'default' => 'Default view', + 'global' => 'Global view', + 'normal' => 'Normal view', + 'reader' => 'Reading view', + ), + ), + 'sharing' => array( + '_' => 'Sharing', + 'blogotext' => 'Blogotext', + 'diaspora' => 'Diaspora*', + 'email' => 'Email', + 'facebook' => 'Facebook', + 'g+' => 'Google+', + 'more_information' => 'More information', + 'print' => 'Print', + 'shaarli' => 'Shaarli', + 'share_name' => 'Share name to display', + 'share_url' => 'Share URL to use', + 'title' => 'Sharing', + 'twitter' => 'Twitter', + 'wallabag' => 'wallabag', + ), + 'shortcut' => array( + '_' => 'Shortcuts', + 'article_action' => 'Article actions', + 'auto_share' => 'Share', + 'auto_share_help' => 'If there is only one sharing mode, it is used. Else modes are accessible by their number.', + 'close_dropdown' => 'Close menus', + 'collapse_article' => 'Collapse', + 'first_article' => 'Skip to the first article', + 'focus_search' => 'Access search box', + 'help' => 'Display documentation', + 'javascript' => 'JavaScript must be enabled in order to use shortcuts', + 'last_article' => 'Skip to the last article', + 'load_more' => 'Load more articles', + 'mark_read' => 'Mark as read', + 'mark_favorite' => 'Mark as favourite', + 'navigation' => 'Navigation', + 'navigation_help' => 'With the "Shift" modifier, navigation shortcuts apply on feeds.
With the "Alt" modifier, navigation shortcuts apply on categories.', + 'next_article' => 'Skip to the next article', + 'other_action' => 'Other actions', + 'previous_article' => 'Skip to the previous article', + 'see_on_website' => 'See on original website', + 'shift_for_all_read' => '+ shift to mark all articles as read', + 'title' => 'Shortcuts', + 'user_filter' => 'Access user filters', + 'user_filter_help' => 'If there is only one user filter, it is used. Else filters are accessible by their number.', + ), + 'user' => array( + 'articles_and_size' => '%s articles (%s)', + 'current' => 'Current user', + 'is_admin' => 'is administrator', + 'users' => 'Users', + ), +); diff --git a/app/i18n/ru/feedback.php b/app/i18n/ru/feedback.php new file mode 100644 index 000000000..c9189c0d0 --- /dev/null +++ b/app/i18n/ru/feedback.php @@ -0,0 +1,110 @@ + array( + 'optimization_complete' => 'Optimisation complete', + ), + 'access' => array( + 'denied' => 'You don’t have permission to access this page', + 'not_found' => 'You are looking for a page which doesn’t exist', + ), + 'auth' => array( + 'form' => array( + 'not_set' => 'A problem occured during authentication system configuration. Please retry later.', + 'set' => 'Form is now your default authentication system.', + ), + 'login' => array( + 'invalid' => 'Login is invalid', + 'success' => 'You are connected', + ), + 'logout' => array( + 'success' => 'You are disconnected', + ), + 'no_password_set' => 'Administrator password hasn’t been set. This feature isn’t available.', + 'not_persona' => 'Only Persona system can be reset.', + ), + 'conf' => array( + 'error' => 'An error occurred during configuration saving', + 'query_created' => 'Query "%s" has been created.', + 'shortcuts_updated' => 'Shortcuts have been updated', + 'updated' => 'Configuration has been updated', + ), + 'extensions' => array( + 'already_enabled' => '%s is already enabled', + 'disable' => array( + 'ko' => '%s cannot be disabled. Check FressRSS logs for details.', + 'ok' => '%s is now disabled', + ), + 'enable' => array( + 'ko' => '%s cannot be enabled. Check FressRSS logs for details.', + 'ok' => '%s is now enabled', + ), + 'no_access' => 'You have no access on %s', + 'not_enabled' => '%s is not enabled yet', + 'not_found' => '%s does not exist', + ), + 'import_export' => array( + 'export_no_zip_extension' => 'Zip extension is not present on your server. Please try to export files one by one.', + 'feeds_imported' => 'Your feeds have been imported and will now be updated', + 'feeds_imported_with_errors' => 'Your feeds have been imported but some errors occurred', + 'file_cannot_be_uploaded' => 'File cannot be uploaded!', + 'no_zip_extension' => 'Zip extension is not present on your server.', + 'zip_error' => 'An error occured during Zip import.', + ), + 'sub' => array( + 'actualize' => 'Actualise', + 'category' => array( + 'created' => 'Category %s has been created.', + 'deleted' => 'Category has been deleted.', + 'emptied' => 'Category has been emptied', + 'error' => 'Category cannot be updated', + 'name_exists' => 'Category name already exists.', + 'no_id' => 'You must precise the id of the category.', + 'no_name' => 'Category name cannot be empty.', + 'not_delete_default' => 'You cannot delete the default category!', + 'not_exist' => 'The category does not exist!', + 'over_max' => 'You have reached your limit of categories (%d)', + 'updated' => 'Category has been updated.', + ), + 'feed' => array( + 'actualized' => '%s has been updated', + 'actualizeds' => 'RSS feeds have been updated', + 'added' => 'RSS feed %s has been added', + 'already_subscribed' => 'You have already subscribed to %s', + 'deleted' => 'Feed has been deleted', + 'error' => 'Feed cannot be updated', + 'internal_problem' => 'The RSS feed could not be added. Check FressRSS logs for details.', + 'invalid_url' => 'URL %s is invalid', + 'marked_read' => 'Feeds have been marked as read', + 'n_actualized' => '%d feeds have been updated', + 'n_entries_deleted' => '%d articles have been deleted', + 'no_refresh' => 'There is no feed to refresh…', + 'not_added' => '%s could not be added', + 'over_max' => 'You have reached your limit of feeds (%d)', + 'updated' => 'Feed has been updated', + ), + 'purge_completed' => 'Purge completed (%d articles deleted)', + ), + 'update' => array( + 'can_apply' => 'FreshRSS will now be updated to the version %s.', + 'error' => 'The update process has encountered an error: %s', + 'file_is_nok' => 'Check permissions on %s directory. HTTP server must have rights to write into', + 'finished' => 'Update completed!', + 'none' => 'No update to apply', + 'server_not_found' => 'Update server cannot be found. [%s]', + ), + 'user' => array( + 'created' => array( + '_' => 'User %s has been created', + 'error' => 'User %s cannot be created', + ), + 'deleted' => array( + '_' => 'User %s has been deleted', + 'error' => 'User %s cannot be deleted', + ), + ), + 'profile' => array( + 'error' => 'Your profile cannot be modified', + 'updated' => 'Your profile has been modified', + ), +); diff --git a/app/i18n/ru/gen.php b/app/i18n/ru/gen.php new file mode 100644 index 000000000..d23b12f95 --- /dev/null +++ b/app/i18n/ru/gen.php @@ -0,0 +1,181 @@ + array( + 'actualize' => 'Actualize', + 'back_to_rss_feeds' => '← Go back to your RSS feeds', + 'cancel' => 'Cancel', + 'create' => 'Create', + 'disable' => 'Disable', + 'empty' => 'Empty', + 'enable' => 'Enable', + 'export' => 'Export', + 'filter' => 'Filter', + 'import' => 'Import', + 'manage' => 'Manage', + 'mark_read' => 'Mark as read', + 'mark_favorite' => 'Mark as favourite', + 'remove' => 'Remove', + 'see_website' => 'See website', + 'submit' => 'Submit', + 'truncate' => 'Delete all articles', + ), + 'auth' => array( + 'email' => 'Email address', + 'keep_logged_in' => 'Keep me logged in (1 month)', + 'login' => 'Login', + 'login_persona' => 'Login with Persona', + 'login_persona_problem' => 'Connection problem with Persona?', + 'logout' => 'Logout', + 'password' => array( + '_' => 'Password', + 'format' => 'At least 7 characters', + ), + 'registration' => array( + '_' => 'New account', + 'ask' => 'Create an account?', + 'title' => 'Account creation', + ), + 'reset' => 'Authentication reset', + 'username' => array( + '_' => 'Username', + 'admin' => 'Administrator username', + 'format' => 'maximum 16 alphanumeric characters', + ), + 'will_reset' => 'Authentication system will be reset: a form will be used instead of Persona.', + ), + 'date' => array( + 'Apr' => '\\A\\p\\r\\i\\l', + 'Aug' => '\\A\\u\\g\\u\\s\\t', + 'Dec' => '\\D\\e\\c\\e\\m\\b\\e\\r', + 'Feb' => '\\F\\e\\b\\r\\u\\a\\r\\y', + 'Jan' => '\\J\\a\\n\\u\\a\\r\\y', + 'Jul' => '\\J\\u\\l\\y', + 'Jun' => '\\J\\u\\n\\e', + 'Mar' => '\\M\\a\\r\\c\\h', + 'May' => '\\M\\a\\y', + 'Nov' => '\\N\\o\\v\\e\\m\\b\\e\\r', + 'Oct' => '\\O\\c\\t\\o\\b\\e\\r', + 'Sep' => '\\S\\e\\p\\t\\e\\m\\b\\e\\r', + 'apr' => 'apr', + 'april' => 'Apr', + 'aug' => 'aug', + 'august' => 'Aug', + 'before_yesterday' => 'Before yesterday', + 'dec' => 'dec', + 'december' => 'Dec', + 'feb' => 'feb', + 'february' => 'Feb', + 'format_date' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y', + 'format_date_hour' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y \\a\\t H\\:i', + 'fri' => 'Fri', + 'jan' => 'jan', + 'january' => 'Jan', + 'jul' => 'jul', + 'july' => 'Jul', + 'jun' => 'jun', + 'june' => 'Jun', + 'last_3_month' => 'Last three months', + 'last_6_month' => 'Last six months', + 'last_month' => 'Last month', + 'last_week' => 'Last week', + 'last_year' => 'Last year', + 'mar' => 'mar', + 'march' => 'Mar', + 'may' => 'May', + 'mon' => 'Mon', + 'month' => 'months', + 'nov' => 'nov', + 'november' => 'Nov', + 'oct' => 'oct', + 'october' => 'Oct', + 'sat' => 'Sat', + 'sep' => 'sep', + 'september' => 'Sep', + 'sun' => 'Sun', + 'thu' => 'Thu', + 'today' => 'Today', + 'tue' => 'Tue', + 'wed' => 'Wed', + 'yesterday' => 'Yesterday', + ), + 'freshrss' => array( + '_' => 'FreshRSS', + 'about' => 'About FreshRSS', + ), + 'js' => array( + 'category_empty' => 'Empty category', + 'confirm_action' => 'Are you sure you want to perform this action? It cannot be cancelled!', + 'confirm_action_feed_cat' => 'Are you sure you want to perform this action? You will lose related favorites and user queries. It cannot be cancelled!', + 'feedback' => array( + 'body_new_articles' => 'There are \\d new articles to read on FreshRSS.', + 'request_failed' => 'A request has failed, it may have been caused by Internet connection problems.', + 'title_new_articles' => 'FreshRSS: new articles!', + ), + 'new_article' => 'There are new available articles, click to refresh the page.', + 'should_be_activated' => 'JavaScript must be enabled', + ), + 'lang' => array( + 'cz' => 'Čeština', + 'de' => 'Deutsch', + 'en' => 'English', + 'fr' => 'Français', + 'it' => 'Italiano', + 'nl' => 'Nederlands', + ), + 'menu' => array( + 'about' => 'About', + 'admin' => 'Administration', + 'archiving' => 'Archiving', + 'authentication' => 'Authentication', + 'check_install' => 'Installation checking', + 'configuration' => 'Configuration', + 'display' => 'Display', + 'extensions' => 'Extensions', + 'logs' => 'Logs', + 'queries' => 'User queries', + 'reading' => 'Reading', + 'search' => 'Search words or #tags', + 'sharing' => 'Sharing', + 'shortcuts' => 'Shortcuts', + 'stats' => 'Statistics', + 'system' => 'System configuration', + 'update' => 'Update', + 'user_management' => 'Manage users', + 'user_profile' => 'Profile', + ), + 'pagination' => array( + 'first' => 'First', + 'last' => 'Last', + 'load_more' => 'Load more articles', + 'mark_all_read' => 'Mark all as read', + 'next' => 'Next', + 'nothing_to_load' => 'There are no more articles', + 'previous' => 'Previous', + ), + 'share' => array( + 'blogotext' => 'Blogotext', + 'diaspora' => 'Diaspora*', + 'email' => 'Email', + 'facebook' => 'Facebook', + 'g+' => 'Google+', + 'movim' => 'Movim', + 'print' => 'Print', + 'shaarli' => 'Shaarli', + 'twitter' => 'Twitter', + 'wallabag' => 'wallabag', + ), + 'short' => array( + 'attention' => 'Warning!', + 'blank_to_disable' => 'Leave blank to disable', + 'by_author' => 'By %s', + 'by_default' => 'By default', + 'damn' => 'Damn!', + 'default_category' => 'Uncategorized', + 'no' => 'No', + 'not_applicable' => 'Not available', + 'ok' => 'Ok!', + 'or' => 'or', + 'yes' => 'Yes', + ), +); diff --git a/app/i18n/ru/index.php b/app/i18n/ru/index.php new file mode 100644 index 000000000..80fa3d950 --- /dev/null +++ b/app/i18n/ru/index.php @@ -0,0 +1,61 @@ + array( + '_' => 'About', + 'agpl3' => 'AGPL 3', + 'bugs_reports' => 'Bugs reports', + 'credits' => 'Credits', + 'credits_content' => 'Some design elements come from Bootstrap although FreshRSS doesn’t use this framework. Icons come from GNOME project. Open Sans font police has been created by Steve Matteson. Favicons are collected with getFavicon API. FreshRSS is based on Minz, a PHP framework.', + 'freshrss_description' => 'FreshRSS is a RSS feeds aggregator to self-host like Kriss Feed or Leed. It is light and easy to take in hand while being powerful and configurable tool.', + 'github' => 'on Github', + 'license' => 'License', + 'project_website' => 'Project website', + 'title' => 'About', + 'version' => 'Version', + 'website' => 'Website', + ), + 'feed' => array( + 'add' => 'You may add some feeds.', + 'empty' => 'There is no article to show.', + 'rss_of' => 'RSS feed of %s', + 'title' => 'Your RSS feeds', + 'title_global' => 'Global view', + 'title_fav' => 'Your favourites', + ), + 'log' => array( + '_' => 'Logs', + 'clear' => 'Clear the logs', + 'empty' => 'Log file is empty', + 'title' => 'Logs', + ), + 'menu' => array( + 'about' => 'About FreshRSS', + 'add_query' => 'Add a query', + 'before_one_day' => 'Before one day', + 'before_one_week' => 'Before one week', + 'favorites' => 'Favourites (%s)', + 'global_view' => 'Global view', + 'main_stream' => 'Main stream', + 'mark_all_read' => 'Mark all as read', + 'mark_cat_read' => 'Mark category as read', + 'mark_feed_read' => 'Mark feed as read', + 'newer_first' => 'Newer first', + 'non-starred' => 'Show all but favorites', + 'normal_view' => 'Normal view', + 'older_first' => 'Oldest first', + 'queries' => 'User queries', + 'read' => 'Show only read', + 'reader_view' => 'Reading view', + 'rss_view' => 'RSS feed', + 'search_short' => 'Search', + 'starred' => 'Show only favorites', + 'stats' => 'Statistics', + 'subscription' => 'Subscriptions management', + 'unread' => 'Show only unread', + ), + 'share' => 'Share', + 'tag' => array( + 'related' => 'Related tags', + ), +); diff --git a/app/i18n/ru/install.php b/app/i18n/ru/install.php new file mode 100644 index 000000000..b94fbc299 --- /dev/null +++ b/app/i18n/ru/install.php @@ -0,0 +1,113 @@ + array( + 'finish' => 'Complete installation', + 'fix_errors_before' => 'Please fix errors before skipping to the next step.', + 'keep_install' => 'Keep previous installation', + 'next_step' => 'Go to the next step', + 'reinstall' => 'Reinstall FreshRSS', + ), + 'auth' => array( + 'email_persona' => 'Login email address
(for Mozilla Persona)', + 'form' => 'Web form (traditional, requires JavaScript)', + 'http' => 'HTTP (for advanced users with HTTPS)', + 'none' => 'None (dangerous)', + 'password_form' => 'Password
(for the Web-form login method)', + 'password_format' => 'At least 7 characters', + 'persona' => 'Mozilla Persona (modern, requires JavaScript)', + 'type' => 'Authentication method', + ), + 'bdd' => array( + '_' => 'Database', + 'conf' => array( + '_' => 'Database configuration', + 'ko' => 'Verify your database information.', + 'ok' => 'Database configuration has been saved.', + ), + 'host' => 'Host', + 'prefix' => 'Table prefix', + 'password' => 'HTTP password', + 'type' => 'Type of database', + 'username' => 'HTTP username', + ), + 'check' => array( + '_' => 'Checks', + 'already_installed' => 'We have detected that FreshRSS is already installed!', + 'cache' => array( + 'nok' => 'Check permissions on ./data/cache directory. HTTP server must have rights to write into', + 'ok' => 'Permissions on cache directory are good.', + ), + 'ctype' => array( + 'nok' => 'You lack a required library for character type checking (php-ctype).', + 'ok' => 'You have the required library for character type checking (ctype).', + ), + 'curl' => array( + 'nok' => 'You lack cURL (php5-curl package).', + 'ok' => 'You have cURL extension.', + ), + 'data' => array( + 'nok' => 'Check permissions on ./data directory. HTTP server must have rights to write into', + 'ok' => 'Permissions on data directory are good.', + ), + 'dom' => array( + 'nok' => 'You lack a required library to browse the DOM (php-xml package).', + 'ok' => 'You have the required library to browse the DOM.', + ), + 'favicons' => array( + 'nok' => 'Check permissions on ./data/favicons directory. HTTP server must have rights to write into', + 'ok' => 'Permissions on favicons directory are good.', + ), + 'http_referer' => array( + 'nok' => 'Please check that you are not altering your HTTP REFERER.', + 'ok' => 'Your HTTP REFERER is known and corresponds to your server.', + ), + 'minz' => array( + 'nok' => 'You lack the Minz framework.', + 'ok' => 'You have the Minz framework.', + ), + 'pcre' => array( + 'nok' => 'You lack a required library for regular expressions (php-pcre).', + 'ok' => 'You have the required library for regular expressions (PCRE).', + ), + 'pdo' => array( + 'nok' => 'You lack PDO or one of the supported drivers (pdo_mysql, pdo_sqlite).', + 'ok' => 'You have PDO and at least one of the supported drivers (pdo_mysql, pdo_sqlite).', + ), + 'persona' => array( + 'nok' => 'Check permissions on ./data/persona directory. HTTP server must have rights to write into', + 'ok' => 'Permissions on Mozilla Persona directory are good.', + ), + 'php' => array( + 'nok' => 'Your PHP version is %s but FreshRSS requires at least version %s.', + 'ok' => 'Your PHP version is %s, which is compatible with FreshRSS.', + ), + 'users' => array( + 'nok' => 'Check permissions on ./data/users directory. HTTP server must have rights to write into', + 'ok' => 'Permissions on users directory are good.', + ), + ), + 'conf' => array( + '_' => 'General configuration', + 'ok' => 'General configuration has been saved.', + ), + 'congratulations' => 'Congratulations!', + 'default_user' => 'Username of the default user (maximum 16 alphanumeric characters)', + 'delete_articles_after' => 'Remove articles after', + 'fix_errors_before' => 'Please fix errors before skipping to the next step.', + 'javascript_is_better' => 'FreshRSS is more pleasant with JavaScript enabled', + 'js' => array( + 'confirm_reinstall' => 'You will lose your previous configuration by reinstalling FreshRSS. Are you sure you want to continue?', + ), + 'language' => array( + '_' => 'Language', + 'choose' => 'Choose a language for FreshRSS', + 'defined' => 'Language has been defined.', + ), + 'not_deleted' => 'Something went wrong; you must delete the file %s manually.', + 'ok' => 'The installation process was successful.', + 'step' => 'step %d', + 'steps' => 'Steps', + 'title' => 'Installation · FreshRSS', + 'this_is_the_end' => 'This is the end', +); diff --git a/app/i18n/ru/sub.php b/app/i18n/ru/sub.php new file mode 100644 index 000000000..aaaa02827 --- /dev/null +++ b/app/i18n/ru/sub.php @@ -0,0 +1,62 @@ + array( + '_' => 'Category', + 'add' => 'Add a category', + 'empty' => 'Empty category', + 'new' => 'New category', + ), + 'feed' => array( + 'add' => 'Add a RSS feed', + 'advanced' => 'Advanced', + 'archiving' => 'Archivage', + 'auth' => array( + 'configuration' => 'Login', + 'help' => 'Connection allows to access HTTP protected RSS feeds', + 'http' => 'HTTP Authentication', + 'password' => 'HTTP password', + 'username' => 'HTTP username', + ), + 'css_help' => 'Retrieves truncated RSS feeds (caution, requires more time!)', + 'css_path' => 'Articles CSS path on original website', + 'description' => 'Description', + 'empty' => 'This feed is empty. Please verify that it is still maintained.', + 'error' => 'This feed has encountered a problem. Please verify that it is always reachable then actualize it.', + 'in_main_stream' => 'Show in main stream', + 'informations' => 'Information', + 'keep_history' => 'Minimum number of articles to keep', + 'moved_category_deleted' => 'When you delete a category, its feeds are automatically classified under %s.', + 'no_selected' => 'No feed selected.', + 'number_entries' => '%d articles', + 'stats' => 'Statistics', + 'think_to_add' => 'You may add some feeds.', + 'title' => 'Title', + 'title_add' => 'Add a RSS feed', + 'ttl' => 'Do not automatically refresh more often than', + 'url' => 'Feed URL', + 'validator' => 'Check the validity of the feed', + 'website' => 'Website URL', + 'pubsubhubbub' => 'Instant notification with PubSubHubbub', + ), + 'import_export' => array( + 'export' => 'Export', + 'export_opml' => 'Export list of feeds (OPML)', + 'export_starred' => 'Export your favourites', + 'feed_list' => 'List of %s articles', + 'file_to_import' => 'File to import
(OPML, Json or Zip)', + 'file_to_import_no_zip' => 'File to import
(OPML or Json)', + 'import' => 'Import', + 'starred_list' => 'List of favourite articles', + 'title' => 'Import / export', + ), + 'menu' => array( + 'bookmark' => 'Subscribe (FreshRSS bookmark)', + 'import_export' => 'Import / export', + 'subscription_management' => 'Subscriptions management', + ), + 'title' => array( + '_' => 'Subscriptions management', + 'feed_management' => 'RSS feeds management', + ), +); -- cgit v1.2.3 From e442b0dfbee5f764deff87dc147ed45f6f73d74f Mon Sep 17 00:00:00 2001 From: ASM Date: Sat, 21 Nov 2015 02:22:44 +0300 Subject: Fixing #1029. Admin page done in full --- app/i18n/ru/admin.php | 180 +++++++++++++++++++++++++------------------------- 1 file changed, 90 insertions(+), 90 deletions(-) (limited to 'app') diff --git a/app/i18n/ru/admin.php b/app/i18n/ru/admin.php index 6c3e21031..dfea5b3cb 100644 --- a/app/i18n/ru/admin.php +++ b/app/i18n/ru/admin.php @@ -44,58 +44,58 @@ return array( 'database' => 'Установка базы данных', 'dom' => array( 'nok' => 'У вас не установлена библиотека для просмотра DOM (пакет php-xml).', - 'ok' => 'У вас не установлена библиотека для просмотра DOM.', + 'ok' => 'У вас установлена библиотека для просмотра DOM.', ), 'entries' => array( - 'nok' => 'Entry table is bad configured.', - 'ok' => 'Entry table is ok.', + 'nok' => 'Таблица статей (entry) неправильно настроена.', + 'ok' => 'Таблица статей (entry) настроена правильно.', ), 'favicons' => array( - 'nok' => 'Check permissions on ./data/favicons directory. HTTP server must have rights to write into', - 'ok' => 'Permissions on favicons directory are good.', + 'nok' => 'Проверьте права доступа к папке ./data/favicons . Сервер HTTP должен иметь права на запись в эту папку.', + 'ok' => 'Права на папку значков в порядке.', ), 'feeds' => array( - 'nok' => 'Feed table is bad configured.', - 'ok' => 'Feed table is ok.', + 'nok' => 'Таблица подписок (feed) неправильно настроена.', + 'ok' => 'Таблица подписок (feed) настроена правильно.', ), - 'files' => 'File installation', + 'files' => 'Установка файлов', 'json' => array( - 'nok' => 'You lack JSON (php5-json package).', - 'ok' => 'You have JSON extension.', + 'nok' => 'У вас не установлена библиотека для работы с JSON (пакет php5-json).', + 'ok' => 'У вас установлена библиотека для работы с JSON.', ), 'minz' => array( - 'nok' => 'You lack the Minz framework.', - 'ok' => 'You have the Minz framework.', + 'nok' => 'У вас не установлен фрейворк Minz.', + 'ok' => 'У вас установлен фрейворк Minz.', ), 'pcre' => array( - 'nok' => 'You lack a required library for regular expressions (php-pcre).', - 'ok' => 'You have the required library for regular expressions (PCRE).', + 'nok' => 'У вас не установлена необходимая библиотека для работы с регулярными выражениями (php-pcre).', + 'ok' => 'У вас установлена необходимая библиотека для работы с регулярными выражениями (PCRE).', ), 'pdo' => array( - 'nok' => 'You lack PDO or one of the supported drivers (pdo_mysql, pdo_sqlite).', - 'ok' => 'You have PDO and at least one of the supported drivers (pdo_mysql, pdo_sqlite).', + 'nok' => 'У вас не установлен PDO или один из необходимых драйверов (pdo_mysql, pdo_sqlite).', + 'ok' => 'У вас установлен PDO и как минимум один из поддерживаемых драйверов (pdo_mysql, pdo_sqlite).', ), 'persona' => array( - 'nok' => 'Check permissions on ./data/persona directory. HTTP server must have rights to write into', - 'ok' => 'Permissions on Mozilla Persona directory are good.', + 'nok' => 'Проверьте права доступа к папке ./data/persona . Сервер HTTP должен иметь права на запись в эту папку.', + 'ok' => 'Права на папку Mozilla Persona в порядке.', ), 'php' => array( '_' => 'PHP installation', - 'nok' => 'Your PHP version is %s but FreshRSS requires at least version %s.', - 'ok' => 'Your PHP version is %s, which is compatible with FreshRSS.', + 'nok' => 'У вас установлен PHP версии %s, но FreshRSS необходима версия не ниже %s.', + 'ok' => 'У вас установлен PHP версии %s, который совместим с FreshRSS.', ), 'tables' => array( - 'nok' => 'There is one or more lacking tables in the database.', - 'ok' => 'Tables are existing in the database.', + 'nok' => 'В базе данных отсуствует одна или больше таблица.', + 'ok' => 'Все таблицы есть в базе данных.', ), - 'title' => 'Installation checking', + 'title' => 'Проверка установки и настройки', 'tokens' => array( - 'nok' => 'Check permissions on ./data/tokens directory. HTTP server must have rights to write into', - 'ok' => 'Permissions on tokens directory are good.', + 'nok' => 'Проверьте права доступа к папке ./data/tokens . Сервер HTTP должен иметь права на запись в эту папку.', + 'ok' => 'Права на папку tokens в порядке.', ), 'users' => array( - 'nok' => 'Check permissions on ./data/users directory. HTTP server must have rights to write into', - 'ok' => 'Permissions on users directory are good.', + 'nok' => 'Проверьте права доступа к папке ./data/users . Сервер HTTP должен иметь права на запись в эту папку.', + 'ok' => 'Права на папку users в порядке.', ), 'zip' => array( 'nok' => 'You lack ZIP extension (php5-zip package).', @@ -103,81 +103,81 @@ return array( ), ), 'extensions' => array( - 'disabled' => 'Disabled', - 'empty_list' => 'There is no installed extension', - 'enabled' => 'Enabled', - 'no_configure_view' => 'This extension cannot be configured.', + 'disabled' => 'Отключены', + 'empty_list' => 'Расширения не установлены', + 'enabled' => 'Включены', + 'no_configure_view' => 'Это расширение нельзя настроить.', 'system' => array( - '_' => 'System extensions', - 'no_rights' => 'System extension (you have no rights on it)', + '_' => 'Системные расширения', + 'no_rights' => 'Системные расширения (у вас нет к ним доступа)', ), - 'title' => 'Extensions', - 'user' => 'User extensions', + 'title' => 'Расширения', + 'user' => 'Расширения пользователя', ), 'stats' => array( - '_' => 'Statistics', - 'all_feeds' => 'All feeds', - 'category' => 'Category', - 'entry_count' => 'Entry count', - 'entry_per_category' => 'Entries per category', - 'entry_per_day' => 'Entries per day (last 30 days)', - 'entry_per_day_of_week' => 'Per day of week (average: %.2f messages)', - 'entry_per_hour' => 'Per hour (average: %.2f messages)', - 'entry_per_month' => 'Per month (average: %.2f messages)', - 'entry_repartition' => 'Entries repartition', - 'feed' => 'Feed', - 'feed_per_category' => 'Feeds per category', - 'idle' => 'Idle feeds', - 'main' => 'Main statistics', - 'main_stream' => 'Main stream', + '_' => 'Статистика', + 'all_feeds' => 'Все подписки', + 'category' => 'Категория', + 'entry_count' => 'Количество статей', + 'entry_per_category' => 'Статей в категории', + 'entry_per_day' => 'Статей за день (за последние 30 дней)', + 'entry_per_day_of_week' => 'За неделю (в среднем - %.2f сообщений)', + 'entry_per_hour' => 'За час (в среднем - %.2f сообщений)', + 'entry_per_month' => 'За месяц (в среднем - %.2f сообщений)', + 'entry_repartition' => 'Перерасределение статей', + 'feed' => 'Подписка', + 'feed_per_category' => 'Подписок в категории', + 'idle' => 'Неактивные подписки', + 'main' => 'Основная статистика', + 'main_stream' => 'Основной поток', 'menu' => array( - 'idle' => 'Idle feeds', - 'main' => 'Main statistics', - 'repartition' => 'Articles repartition', - ), - 'no_idle' => 'There is no idle feed!', - 'number_entries' => '%d articles', - 'percent_of_total' => '%% of total', - 'repartition' => 'Articles repartition', - 'status_favorites' => 'Favourites', - 'status_read' => 'Read', - 'status_total' => 'Total', - 'status_unread' => 'Unread', - 'title' => 'Statistics', - 'top_feed' => 'Top ten feeds', + 'idle' => 'Неактивные подписки', + 'main' => 'Основная статистика', + 'repartition' => 'Перерасределение статей', + ), + 'no_idle' => 'Нет неактивных подписок!', + 'number_entries' => 'статей: %d', + 'percent_of_total' => '%% от всего', + 'repartition' => 'Перераспределение статей', + 'status_favorites' => 'Избранное', + 'status_read' => 'Читать', + 'status_total' => 'Всего', + 'status_unread' => 'Не прочитано', + 'title' => 'Статистика', + 'top_feed' => '10 лучших подписок', ), 'system' => array( - '_' => 'System configuration', - 'auto-update-url' => 'Auto-update server URL', - 'instance-name' => 'Instance name', - 'max-categories' => 'Categories per user limit', - 'max-feeds' => 'Feeds per user limit', + '_' => 'Системные настройки', + 'auto-update-url' => 'Адрес сервера для автоматического обновления', + 'instance-name' => 'Название этого сервера', + 'max-categories' => 'Количество категорий на пользователя', + 'max-feeds' => 'Количество статей на пользователя', 'registration' => array( - 'help' => '0 means that there is no account limit', - 'number' => 'Max number of accounts', + 'help' => '0 означает неограниченное количество пользователей', + 'number' => 'Максимальное количество пользователей', ), ), 'update' => array( - '_' => 'Update system', - 'apply' => 'Apply', - 'check' => 'Check for new updates', - 'current_version' => 'Your current version of FreshRSS is the %s.', - 'last' => 'Last verification: %s', - 'none' => 'No update to apply', - 'title' => 'Update system', + '_' => 'Обновление системы', + 'apply' => 'Применить', + 'check' => 'Проверить обновления', + 'current_version' => 'Ваша текущая версия FreshRSS: %s.', + 'last' => 'Последняя проверка: %s', + 'none' => 'Нечего обновлять', + 'title' => 'Обновить систему', ), 'user' => array( - 'articles_and_size' => '%s articles (%s)', - 'create' => 'Create new user', - 'email_persona' => 'Login mail address
(for Mozilla Persona)', - 'language' => 'Language', - 'number' => 'There is %d account created yet', - 'numbers' => 'There are %d accounts created yet', - 'password_form' => 'Password
(for the Web-form login method)', - 'password_format' => 'At least 7 characters', - 'title' => 'Manage users', - 'user_list' => 'List of users', - 'username' => 'Username', - 'users' => 'Users', + 'articles_and_size' => '%s статей (%s)', + 'create' => 'Создать нового пользователя', + 'email_persona' => 'Адрес электронной почты для входа
(for Mozilla Persona)', + 'language' => 'Язык', + 'number' => 'На данный момент создан %d аккаунт', + 'numbers' => 'На данный момент аккаунтов создано: %d', + 'password_form' => 'Пароль
(для входа через Веб-форму)', + 'password_format' => 'Минимум 7 символов', + 'title' => 'Управление пользователями', + 'user_list' => 'Список пользователей', + 'username' => 'Имя пользователя', + 'users' => 'Пользователи', ), ); -- cgit v1.2.3 From 9637e018bf0bdd17ecfabe825cb12ea9a67d7553 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Wed, 23 Dec 2015 10:41:14 +0100 Subject: i18n English https://github.com/FreshRSS/FreshRSS/issues/1043#issuecomment-165984276 --- app/i18n/en/conf.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/i18n/en/conf.php b/app/i18n/en/conf.php index 69162932f..38e9197e9 100644 --- a/app/i18n/en/conf.php +++ b/app/i18n/en/conf.php @@ -77,7 +77,7 @@ return array( 'warn' => 'Your account and all the related data will be deleted.', ), 'email_persona' => 'Login email address
(for Mozilla Persona)', - 'password_api' => 'Password API
(e.g., for mobile apps)', + 'password_api' => 'API password
(e.g., for mobile apps)', 'password_form' => 'Password
(for the Web-form login method)', 'password_format' => 'At least 7 characters', 'title' => 'Profile', -- cgit v1.2.3 From 0915772fe6735f6051c6b56a3b3e59dd3c44833b Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 24 Jan 2016 11:06:20 +0100 Subject: PubSubHubbub unsubscribe request https://github.com/FreshRSS/FreshRSS/issues/1058 --- app/Models/Feed.php | 9 ++++----- p/api/pshb.php | 9 +++++++++ 2 files changed, 13 insertions(+), 5 deletions(-) (limited to 'app') diff --git a/app/Models/Feed.php b/app/Models/Feed.php index 23491ee8d..986cc5015 100644 --- a/app/Models/Feed.php +++ b/app/Models/Feed.php @@ -451,6 +451,10 @@ class FreshRSS_Feed extends Minz_Model { Minz_Log::warning('Invalid callback for PubSubHubbub: ' . $this->url); return false; } + if (!$state) { //unsubscribe + $hubJson['lease_end'] = time() - 60; + file_put_contents($hubFilename, json_encode($hubJson)); + } $ch = curl_init(); curl_setopt_array($ch, array( CURLOPT_URL => $this->hubUrl, @@ -470,11 +474,6 @@ class FreshRSS_Feed extends Minz_Model { 'PubSubHubbub ' . ($state ? 'subscribe' : 'unsubscribe') . ' to ' . $this->selfUrl . ' with callback ' . $callbackUrl . ': ' . $info['http_code'] . ' ' . $response . "\n", FILE_APPEND); - if (!$state) { //unsubscribe - $hubJson['lease_end'] = time() - 60; - file_put_contents($hubFilename, json_encode($hubJson)); - } - if (substr($info['http_code'], 0, 1) == '2') { return true; } else { diff --git a/p/api/pshb.php b/p/api/pshb.php index 4bb4694b3..7de4cc1a2 100644 --- a/p/api/pshb.php +++ b/p/api/pshb.php @@ -68,6 +68,15 @@ if (!empty($_REQUEST['hub_mode']) && $_REQUEST['hub_mode'] === 'subscribe') { exit(isset($_REQUEST['hub_challenge']) ? $_REQUEST['hub_challenge'] : ''); } +if (!empty($_REQUEST['hub_mode']) && $_REQUEST['hub_mode'] === 'unsubscribe') { + if (empty($hubJson['lease_end']) || $hubJson['lease_end'] < time()) { + exit(isset($_REQUEST['hub_challenge']) ? $_REQUEST['hub_challenge'] : ''); + } else { + header('HTTP/1.1 422 Unprocessable Entity'); + die('We did not ask to unsubscribe!'); + } +} + if ($ORIGINAL_INPUT == '') { header('HTTP/1.1 422 Unprocessable Entity'); die('Missing XML payload!'); -- cgit v1.2.3 From 362dbad0b8ff0a29241f4e29556910dfaf7d66e5 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 24 Jan 2016 13:18:48 +0100 Subject: Several position problems, in particular in the global view Multiple small bugs in global and reader views. Related to these old issues: https://github.com/FreshRSS/FreshRSS/issues/634 https://github.com/FreshRSS/FreshRSS/issues/275 --- app/layout/layout.phtml | 4 ++-- app/views/helpers/javascript_vars.phtml | 7 +++---- p/scripts/main.js | 30 +++++++++++------------------- 3 files changed, 16 insertions(+), 25 deletions(-) (limited to 'app') diff --git a/app/layout/layout.phtml b/app/layout/layout.phtml index 000a6c0d2..1d3afbf71 100644 --- a/app/layout/layout.phtml +++ b/app/layout/layout.phtml @@ -5,10 +5,10 @@ - + - + partial('header'); ?>
diff --git a/app/views/helpers/javascript_vars.phtml b/app/views/helpers/javascript_vars.phtml index adf0783f3..36d6e693d 100644 --- a/app/views/helpers/javascript_vars.phtml +++ b/app/views/helpers/javascript_vars.phtml @@ -4,8 +4,7 @@ $mark = FreshRSS_Context::$user_conf->mark_when; $mail = Minz_Session::param('mail', false); $auto_actualize = Minz_Session::param('actualize_feeds', false); -$hide_posts = (FreshRSS_Context::$user_conf->display_posts || - Minz_Request::param('output') === 'reader'); +$hide_posts = !(FreshRSS_Context::$user_conf->display_posts || Minz_Request::actionName() === 'reader'); $s = FreshRSS_Context::$user_conf->shortcuts; $url_login = Minz_Url::display(array( @@ -19,7 +18,7 @@ $url_logout = Minz_Url::display(array( echo 'var context={', 'auto_remove_article:', FreshRSS_Context::isAutoRemoveAvailable() ? 'true' : 'false', ',', - 'hide_posts:', $hide_posts ? 'false' : 'true', ',', + 'hide_posts:', $hide_posts ? 'true' : 'false', ',', 'display_order:"', Minz_Request::param('order', FreshRSS_Context::$user_conf->sort_order), '",', 'auto_mark_article:', $mark['article'] ? 'true' : 'false', ',', 'auto_mark_site:', $mark['site'] ? 'true' : 'false', ',', @@ -31,7 +30,7 @@ echo 'var context={', 'html5_notif_timeout:', FreshRSS_Context::$user_conf->html5_notif_timeout, ',', 'auth_type:"', FreshRSS_Context::$system_conf->auth_type, '",', 'current_user_mail:', $mail ? ('"' . $mail . '"') : 'null', ',', - 'current_view:"', Minz_Request::param('output', 'normal'), '"', + 'current_view:"', Minz_Request::actionName(), '"', "},\n"; echo 'shortcuts={', diff --git a/p/scripts/main.js b/p/scripts/main.js index f64927c14..45a028a7d 100644 --- a/p/scripts/main.js +++ b/p/scripts/main.js @@ -246,18 +246,18 @@ function toggleContent(new_active, old_active) { var box_to_move = "html,body", relative_move = false; - if (context['current_view'] == 'global') { + if (context['current_view'] === 'global') { box_to_move = "#panel"; relative_move = true; } if (context['sticky_post']) { var prev_article = new_active.prevAll('.flux'), - new_pos = new_active.position().top, + new_pos = new_active.offset().top, old_scroll = $(box_to_move).scrollTop(); - if (prev_article.length > 0 && new_pos - prev_article.position().top <= 150) { - new_pos = prev_article.position().top; + if (prev_article.length > 0 && new_pos - prev_article.offset().top <= 150) { + new_pos = prev_article.offset().top; } if (context['hide_posts']) { @@ -451,11 +451,8 @@ function auto_share(key) { } } -function inMarkViewport(flux, box_to_follow, relative_follow) { - var top = flux.position().top; - if (relative_follow) { - top += box_to_follow.scrollTop(); - } +function inMarkViewport(flux, box_to_follow) { + var top = flux.offset().top; var height = flux.height(), begin = top + 3 * height / 4, bot = Math.min(begin + 75, top + height), @@ -466,17 +463,15 @@ function inMarkViewport(flux, box_to_follow, relative_follow) { } function init_posts() { - var box_to_follow = $(window), - relative_follow = false; - if (context['current_view'] == 'global') { + var box_to_follow = $(window); + if (context['current_view'] === 'global') { box_to_follow = $("#panel"); - relative_follow = true; } if (context['auto_mark_scroll']) { box_to_follow.scroll(function () { $('.not_read:visible').each(function () { - if ($(this).children(".flux_content").is(':visible') && inMarkViewport($(this), box_to_follow, relative_follow)) { + if ($(this).children(".flux_content").is(':visible') && inMarkViewport($(this), box_to_follow)) { mark_read($(this), true); } }); @@ -490,10 +485,7 @@ function init_posts() { return; } var boxBot = box_to_follow.scrollTop() + box_to_follow.height(), - load_more_top = load_more.position().top; - if (relative_follow) { - load_more_top += box_to_follow.scrollTop(); - } + load_more_top = load_more.offset().top; if (boxBot >= load_more_top) { load_more_posts(); } @@ -765,7 +757,7 @@ function init_nav_entries() { $nav_entries.find('.up').click(function () { var active_item = $(".flux.current"), windowTop = $(window).scrollTop(), - item_top = active_item.position().top; + item_top = active_item.offset().top; if (windowTop > item_top) { $("html,body").scrollTop(item_top); -- cgit v1.2.3 From b596d569f3048d3539d1a372eea269462a7a5f82 Mon Sep 17 00:00:00 2001 From: danc Date: Sun, 24 Jan 2016 20:20:52 +0100 Subject: Translation for Journal du hacker --- app/i18n/fr/gen.php | 1 + 1 file changed, 1 insertion(+) (limited to 'app') diff --git a/app/i18n/fr/gen.php b/app/i18n/fr/gen.php index 2f16f09b9..1e738e949 100644 --- a/app/i18n/fr/gen.php +++ b/app/i18n/fr/gen.php @@ -164,6 +164,7 @@ return array( 'shaarli' => 'Shaarli', 'twitter' => 'Twitter', 'wallabag' => 'wallabag', + 'jdh' => 'Journal du hacker', ), 'short' => array( 'attention' => 'Attention !', -- cgit v1.2.3 From a51604bcbce5f2703915ab51e0d7c1d4440f132e Mon Sep 17 00:00:00 2001 From: danc Date: Sun, 24 Jan 2016 20:22:18 +0100 Subject: Translation for Journal du hacker --- app/i18n/en/gen.php | 1 + 1 file changed, 1 insertion(+) (limited to 'app') diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php index d23b12f95..3d66938d1 100644 --- a/app/i18n/en/gen.php +++ b/app/i18n/en/gen.php @@ -164,6 +164,7 @@ return array( 'shaarli' => 'Shaarli', 'twitter' => 'Twitter', 'wallabag' => 'wallabag', + 'jdh' => 'Journal du hacker', ), 'short' => array( 'attention' => 'Warning!', -- cgit v1.2.3 From 8890f6ca7738666c5745837f4dad73f5e2877ce7 Mon Sep 17 00:00:00 2001 From: danc Date: Sun, 24 Jan 2016 20:23:58 +0100 Subject: Translation for Journal du hacker --- app/i18n/de/gen.php | 1 + 1 file changed, 1 insertion(+) (limited to 'app') diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php index 842383498..4953610ba 100644 --- a/app/i18n/de/gen.php +++ b/app/i18n/de/gen.php @@ -164,6 +164,7 @@ return array( 'shaarli' => 'Shaarli', 'twitter' => 'Twitter', 'wallabag' => 'wallabag', + 'jdh' => 'Journal du hacker', ), 'short' => array( 'attention' => 'Achtung!', -- cgit v1.2.3 From ea7891898684e3deabe084d6cfa3f74438cdd975 Mon Sep 17 00:00:00 2001 From: danc Date: Sun, 24 Jan 2016 20:25:55 +0100 Subject: Translation for Journal du hacker --- app/i18n/it/gen.php | 1 + 1 file changed, 1 insertion(+) (limited to 'app') diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php index eb545b8cf..1ac6b04a1 100644 --- a/app/i18n/it/gen.php +++ b/app/i18n/it/gen.php @@ -163,6 +163,7 @@ return array( 'shaarli' => 'Shaarli', 'twitter' => 'Twitter', 'wallabag' => 'wallabag', + 'jdh' => 'Journal du hacker', ), 'short' => array( 'attention' => 'Attenzione!', -- cgit v1.2.3 From 3185498bad149b33e67f863ef406eee6e8b0114f Mon Sep 17 00:00:00 2001 From: danc Date: Sun, 24 Jan 2016 20:26:47 +0100 Subject: Translation for Journal du hacker --- app/i18n/nl/gen.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'app') diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php index 574f0386b..21d1fba22 100644 --- a/app/i18n/nl/gen.php +++ b/app/i18n/nl/gen.php @@ -163,7 +163,8 @@ return array( 'print' => 'Print', 'shaarli' => 'Shaarli', 'twitter' => 'Twitter', - 'wallabag' => 'wallabag', + 'wallabag' => 'wallabag', + 'jdh' => 'Journal du hacker', ), 'short' => array( 'attention' => 'Attentie!', -- cgit v1.2.3 From 21630599b59830fa88f0e3988e88347cdfa3b5ea Mon Sep 17 00:00:00 2001 From: danc Date: Sun, 24 Jan 2016 20:35:33 +0100 Subject: Translation for Journal du hacker --- app/i18n/cz/gen.php | 1 + 1 file changed, 1 insertion(+) (limited to 'app') diff --git a/app/i18n/cz/gen.php b/app/i18n/cz/gen.php index ffc138abb..4d34a8173 100644 --- a/app/i18n/cz/gen.php +++ b/app/i18n/cz/gen.php @@ -164,6 +164,7 @@ return array( 'shaarli' => 'Shaarli', 'twitter' => 'Twitter', 'wallabag' => 'wallabag', + 'jdh' => 'Journal du hacker', ), 'short' => array( 'attention' => 'Upozornění!', -- cgit v1.2.3 From af942739137cd1c95c052157c1f44ea6d605f4c3 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Mon, 25 Jan 2016 21:05:35 +0100 Subject: More PHP 5.2 install compatibility https://github.com/FreshRSS/FreshRSS/issues/1055 --- app/install.php | 6 +++--- lib/lib_rss.php | 24 ++++++++++++------------ 2 files changed, 15 insertions(+), 15 deletions(-) (limited to 'app') diff --git a/app/install.php b/app/install.php index 83526b60c..7ac1c4cec 100644 --- a/app/install.php +++ b/app/install.php @@ -130,7 +130,7 @@ function saveStep2() { $_SESSION['mail_login'] = filter_var(param('mail_login', ''), FILTER_VALIDATE_EMAIL); $password_plain = param('passwordPlain', false); - if ($password_plain !== false) { + if ($password_plain !== false && cryptAvailable()) { if (!function_exists('password_hash')) { include_once(LIB_PATH . '/password_compat.php'); } @@ -681,10 +681,10 @@ function printStep2() { } $auth_type = isset($_SESSION['auth_type']) ? $_SESSION['auth_type'] : ''; ?> - + - +
diff --git a/lib/lib_rss.php b/lib/lib_rss.php index 4852f7217..457fada3d 100644 --- a/lib/lib_rss.php +++ b/lib/lib_rss.php @@ -16,19 +16,19 @@ if (!function_exists('json_encode')) { } if (!function_exists('array_replace_recursive')) { - function array_replace_recursive($array, $array1) { //http://php.net/manual/function.array-replace-recursive.php#92574 - function recurse($array, $array1) { - foreach ($array1 as $key => $value) { - if (!isset($array[$key]) || (isset($array[$key]) && !is_array($array[$key]))) { - $array[$key] = array(); //create new key in $array, if it is empty or not an array - } - if (is_array($value)) { - $value = recurse($array[$key], $value); // overwrite the value in the base array - } - $array[$key] = $value; + function arr_recurse($array, $array1) { + foreach ($array1 as $key => $value) { + if (!isset($array[$key]) || (isset($array[$key]) && !is_array($array[$key]))) { + $array[$key] = array(); //create new key in $array, if it is empty or not an array } - return $array; + if (is_array($value)) { + $value = arr_recurse($array[$key], $value); // overwrite the value in the base array + } + $array[$key] = $value; } + return $array; + } + function array_replace_recursive($array, $array1) { //http://php.net/manual/function.array-replace-recursive.php#92574 // handle the arguments, merge one by one $args = func_get_args(); $array = $args[0]; @@ -37,7 +37,7 @@ if (!function_exists('array_replace_recursive')) { } for ($i = 1; $i < count($args); $i++) { if (is_array($args[$i])) { - $array = recurse($array, $args[$i]); + $array = arr_recurse($array, $args[$i]); } } return $array; -- cgit v1.2.3 From 62b1a484e83ec0ead9a7d33b01c2349ffa9657cb Mon Sep 17 00:00:00 2001 From: hckweb Date: Tue, 9 Feb 2016 20:24:09 +0200 Subject: Create admin.php --- app/i18n/tr/admin.php | 183 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 183 insertions(+) create mode 100644 app/i18n/tr/admin.php (limited to 'app') diff --git a/app/i18n/tr/admin.php b/app/i18n/tr/admin.php new file mode 100644 index 000000000..3a6f8118e --- /dev/null +++ b/app/i18n/tr/admin.php @@ -0,0 +1,183 @@ + array( + 'allow_anonymous' => 'Öntanımlı kullanıcının makalelerinin anonim okunmasına izin ver (%s)', + 'allow_anonymous_refresh' => 'Anonim makale yenilemesine izin ver', + 'api_enabled' => 'API erişimine izin ver (mobil uygulamalar için gerekli)', + 'form' => 'Web formu (geleneksel, JavaScript gerektirir)', + 'http' => 'HTTP (ileri kullanıcılar için, HTTPS)', + 'none' => 'Hiçbiri (tehlikeli)', + 'persona' => 'Mozilla Persona (modern, JavaScript gerektirir)', + 'title' => 'Kimlik doğrulama', + 'title_reset' => 'Kimlik doğrulama sıfırla', + 'token' => 'Kimlik doğrulama işareti', + 'token_help' => 'Kimlik doğrulama olmaksızın öntanımlı kullanıcının RSS çıktısına erişime izin ver:', + 'type' => 'Kimlik doğrulama yöntemi', + 'unsafe_autologin' => 'Güvensiz otomatik girişe izin ver: ', + ), + 'check_install' => array( + 'cache' => array( + 'nok' => './data/cache klasör yetkisini kontrol edin. HTTP yazma yetkisi olmalı', + 'ok' => 'Önbellek klasörü yetkileri sorunsuz.', + ), + 'categories' => array( + 'nok' => 'Kategori tablosu kötü yapılandırılmış.', + 'ok' => 'Kategori tablosu sorunsuz.', + ), + 'connection' => array( + 'nok' => 'Veritabanı ile bağlantı kurulamıyor.', + 'ok' => 'Veritabanı ile bağlantı sorunsuz.', + ), + 'ctype' => array( + 'nok' => 'Karakter yazım kontrolü için kütüphane eksik (php-ctype).', + 'ok' => 'Karakter yazım kontrolü için kütüphane sorunsuz (ctype).', + ), + 'curl' => array( + 'nok' => 'cURL eksik (php5-curl package).', + 'ok' => 'cURL eklentisi sorunsuz.', + ), + 'data' => array( + 'nok' => './data klasör yetkisini kontrol edin. HTTP yazma yetkisi olmalı', + 'ok' => 'Veri klasörü yetkileri sorunsuz.', + ), + 'database' => 'Veritabanı kurulumu', + 'dom' => array( + 'nok' => 'DOM kütüpbanesi eksik (php-xml package).', + 'ok' => 'DOM kütüphanesi sorunsuz.', + ), + 'entries' => array( + 'nok' => 'Giriş tablosu kötü yapılandırılmış.', + 'ok' => 'Giriş tablosu sorunsuz.', + ), + 'favicons' => array( + 'nok' => './data/favicons klasör yetkisini kontrol edin. HTTP yazma yetkisi olmalı', + 'ok' => 'Site ikonu klasörü yetkileri sorunsuz.', + ), + 'feeds' => array( + 'nok' => 'Akış tablosu kötü yapılandırılmış.', + 'ok' => 'Akış tablosu sorunsuz.', + ), + 'files' => 'Dosya kurulumu', + 'json' => array( + 'nok' => 'JSON eklentisi eksik (php5-json package).', + 'ok' => 'JSON eklentisi sorunsuz.', + ), + 'minz' => array( + 'nok' => 'Minz framework eksik.', + 'ok' => 'Minz framework sorunsuz.', + ), + 'pcre' => array( + 'nok' => 'Düzenli ifadeler kütüphanesi eksik (php-pcre).', + 'ok' => 'Düzenli ifadeler kütüphanesi sorunsuz (PCRE).', + ), + 'pdo' => array( + 'nok' => 'PDO veya PDO destekli bir sürücü eksik (pdo_mysql, pdo_sqlite).', + 'ok' => 'PDO sorunsuz (pdo_mysql, pdo_sqlite).', + ), + 'persona' => array( + 'nok' => './data/persona klasör yetkisini kontrol edin. HTTP yazma yetkisi olmalı', + 'ok' => 'Mozilla Persona klasörü yetkileri sorunsuz.', + ), + 'php' => array( + '_' => 'PHP kurulumu', + 'nok' => 'PHP versiyonunuz %s fakat FreshRSS için gerekli olan en düşük sürüm %s.', + 'ok' => 'PHP versiyonunuz %s, FreshRSS ile tam uyumlu.', + ), + 'tables' => array( + 'nok' => 'Veritabanında bir veya daha fazla tablo eksik.', + 'ok' => 'Veritabanı tabloları sorunsuz.', + ), + 'title' => 'Kurulum kontrolü', + 'tokens' => array( + 'nok' => './data/tokens klasör yetkisini kontrol edin. HTTP yazma yetkisi olmalı', + 'ok' => 'İşaretler klasörü yetkileri sorunsuz..', + ), + 'users' => array( + 'nok' => './data/users klasör yetkisini kontrol edin. HTTP yazma yetkisi olmalı', + 'ok' => 'Kullanıcılar klasörü yetkileri sorunsuz.', + ), + 'zip' => array( + 'nok' => 'ZIP eklentisi eksik (php5-zip package).', + 'ok' => 'ZIP eklentisi sorunsuz.', + ), + ), + 'extensions' => array( + 'disabled' => 'Pasif', + 'empty_list' => 'Yüklenmiş eklenti bulunmamaktadır', + 'enabled' => 'Aktif', + 'no_configure_view' => 'Bu eklenti yapılandırılamaz.', + 'system' => array( + '_' => 'Sistem eklentileri', + 'no_rights' => 'Sistem eklentileri (düzenleme hakkınız yok)', + ), + 'title' => 'Eklentiler', + 'user' => 'Kullanıcı eklentileri', + ), + 'stats' => array( + '_' => 'İstatistikler', + 'all_feeds' => 'Tüm akış', + 'category' => 'Kategori', + 'entry_count' => 'Makale sayısı', + 'entry_per_category' => 'Kategori başı makale sayısı', + 'entry_per_day' => 'Günlük makale sayısı (last 30 days)', + 'entry_per_day_of_week' => 'Haftanın günü (ortalama: %.2f makale)', + 'entry_per_hour' => 'Saatlik (ortalama: %.2f makale)', + 'entry_per_month' => 'Aylık (average: %.2f makale)', + 'entry_repartition' => 'Giriş dağılımı', + 'feed' => 'Akış', + 'feed_per_category' => 'Kategoriye göre akışlar', + 'idle' => 'Boştaki akışlar', + 'main' => 'Ana istatistikler', + 'main_stream' => 'Ana akış', + 'menu' => array( + 'idle' => 'Boştaki akışlar', + 'main' => 'Ana istatistikler', + 'repartition' => 'Makale dağılımı', + ), + 'no_idle' => 'Boşta akış yok!', + 'number_entries' => '%d makale', + 'percent_of_total' => '%% toplamın yüzdesi', + 'repartition' => 'Makale dağılımı', + 'status_favorites' => 'Favoriler', + 'status_read' => 'Okunmuş', + 'status_total' => 'Toplam', + 'status_unread' => 'Okunmamış', + 'title' => 'İstatistikler', + 'top_feed' => 'İlk 10 akış', + ), + 'system' => array( + '_' => 'Sistem yapılandırması', + 'auto-update-url' => 'Otomatik güncelleme sunucu URL', + 'instance-name' => 'Örnek isim', + 'max-categories' => 'Kullanıcı başına kategori limiti', + 'max-feeds' => 'Kullanıcı başına akış limiti', + 'registration' => array( + 'help' => '0 sınır yok anlamındadır', + 'number' => 'En fazla hesap sayısı', + ), + ), + 'update' => array( + '_' => 'Sistem güncelleme', + 'apply' => 'Uygula', + 'check' => 'Güncelleme kontrolü', + 'current_version' => 'Mevcut FreshRSS sürümünüz %s.', + 'last' => 'Son kontrol: %s', + 'none' => 'Yeni güncelleme yok', + 'title' => 'Sistem güncelleme', + ), + 'user' => array( + 'articles_and_size' => '%s makale (%s)', + 'create' => 'Yeni kullanıcı oluştur', + 'email_persona' => 'Giriş email adresi
(Mozilla Persona için)', + 'language' => 'Dil', + 'number' => 'Oluşturulmuş %d hesap var', + 'numbers' => 'Oluşturulmuş %d hesap var', + 'password_form' => 'Şifre
(Tarayıcı girişi için)', + 'password_format' => 'En az 7 karakter', + 'title' => 'Kullanıcıları yönet', + 'user_list' => 'Kullanıcı listesi', + 'username' => 'Kullanıcı adı', + 'users' => 'Kullanıcılar', + ), +); -- cgit v1.2.3 From e9363910a0c3ee276c07c3d08c665e2de9aab1d7 Mon Sep 17 00:00:00 2001 From: hckweb Date: Tue, 9 Feb 2016 20:28:07 +0200 Subject: Create conf.php --- app/i18n/tr/conf.php | 174 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 174 insertions(+) create mode 100644 app/i18n/tr/conf.php (limited to 'app') diff --git a/app/i18n/tr/conf.php b/app/i18n/tr/conf.php new file mode 100644 index 000000000..d9e275b21 --- /dev/null +++ b/app/i18n/tr/conf.php @@ -0,0 +1,174 @@ + array( + '_' => 'Arşiv', + 'advanced' => 'Gelişmiş', + 'delete_after' => 'Makelelerin tutulacağı süre', + 'help' => 'Akış ayarlarında daha çok ayar bulabilirsiniz', + 'keep_history_by_feed' => 'Akışta en az tutulacak makale sayısı', + 'optimize' => 'Veritabanı optimize et', + 'optimize_help' => 'Bu işlem bazen veritabanı boyutunu düşürmeye yardımcı olur', + 'purge_now' => 'Şimdi temizle', + 'title' => 'Arşiv', + 'ttl' => 'Şu süreden sık otomatik yenileme yapma', + ), + 'display' => array( + '_' => 'Görünüm', + 'icon' => array( + 'bottom_line' => 'Alt çizgi', + 'entry' => 'Makale ikonları', + 'publication_date' => 'Yayınlama Tarihi', + 'related_tags' => 'İlgili etiketler', + 'sharing' => 'Paylaşım', + 'top_line' => 'Üst çizgi', + ), + 'language' => 'Dil', + 'notif_html5' => array( + 'seconds' => 'saniye (0 zaman aşımı yok demektir)', + 'timeout' => 'HTML5 bildirim zaman aşımı', + ), + 'theme' => 'Tema', + 'title' => 'Görünüm', + 'width' => array( + 'content' => 'İçerik genişliği', + 'large' => 'Geniş', + 'medium' => 'Orta', + 'no_limit' => 'Sınırsız', + 'thin' => 'Zayıf', + ), + ), + 'query' => array( + '_' => 'Kullanıcı sorguları', + 'deprecated' => 'Bu sorgu artık geçerli değil. İlgili akış veya kategori silinmiş.', + 'filter' => 'Filtre uygulandı:', + 'get_all' => 'Tüm makaleleri göster', + 'get_category' => '"%s" kategorisini göster', + 'get_favorite' => 'Favori makaleleri göster', + 'get_feed' => '"%s" akışını göster', + 'no_filter' => 'Filtre yok', + 'none' => 'Henüz hiç kullanıcı sorgusu oluşturmadınız.', + 'number' => 'Sorgu n°%d', + 'order_asc' => 'Önce eski makaleleri göster', + 'order_desc' => 'Önce yeni makaleleri göster', + 'search' => '"%s" için arama', + 'state_0' => 'Tüm makaleleri göster', + 'state_1' => 'Okunmuş makaleleri göster', + 'state_2' => 'Okunmamış makaleleri göster', + 'state_3' => 'Tüm makaleleri göster', + 'state_4' => 'Favori makaleleri göster', + 'state_5' => 'Okunmuş favori makaleleri göster', + 'state_6' => 'Okunmamış favori makaleleri göster', + 'state_7' => 'Favori makaleleri göster', + 'state_8' => 'Favori olmayan makaleleri göster', + 'state_9' => 'Favori olmayan okunmuş makaleleri göster', + 'state_10' => 'Favori olmayan okunmamış makaleleri göster', + 'state_11' => 'Favori olmayan makaleleri göster', + 'state_12' => 'Tüm makaleleri göster', + 'state_13' => 'Okunmuş makaleleri göster', + 'state_14' => 'Okunmamış makaleleri göster', + 'state_15' => 'Tüm makaleleri göster', + 'title' => 'Kullanıcı sorguları', + ), + 'profile' => array( + '_' => 'Profil yönetimi', + 'delete' => array( + '_' => 'Hesap silme', + 'warn' => 'Hesabınız ve tüm verileriniz silinecek.', + ), + 'email_persona' => 'Giriş email adresi
(Mozilla Persona için)', + 'password_api' => 'API Şifresi
(ör. mobil uygulamalar için)', + 'password_form' => 'Şifre
(Tarayıcı girişi için)', + 'password_format' => 'En az 7 karakter', + 'title' => 'Profil', + ), + 'reading' => array( + '_' => 'Okuma', + 'after_onread' => '"Hepsini okundu say" dedinten sonra,', + 'articles_per_page' => 'Sayfa başına makale sayısı', + 'auto_load_more' => 'Sayfa sonunda yeni makaleleri yükle', + 'auto_remove_article' => 'Okuduktan sonra makaleleri gizle', + 'mark_updated_article_unread' => 'Güncellenen makaleleri okundu olarak işaretle', + 'confirm_enabled' => '"Hepsini okundu say" eylemi için onay iste', + 'display_articles_unfolded' => 'Show articles unfolded by default', + 'display_categories_unfolded' => 'Show categories folded by default', + 'hide_read_feeds' => 'Okunmamış makalesi olmayan kategori veya akışı gizle ("Tüm makaleleri göster" komutunda çalışmaz)', + 'img_with_lazyload' => 'Resimleri yüklemek için "tembel modu" kullan', + 'jump_next' => 'Bir sonraki benzer okunmamışa geç (akış veya kategori)', + 'number_divided_when_reader' => 'Okuma modunda ikiye bölünecek.', + 'read' => array( + 'article_open_on_website' => 'orijinal makale sitesi açıldığında', + 'article_viewed' => 'makale görüntülendiğinde', + 'scroll' => 'kaydırma yapılırken', + 'upon_reception' => 'makale üzerinde gelince', + 'when' => 'Makaleyi okundu olarak işaretle…', + ), + 'show' => array( + '_' => 'Gösterilecek makaleler', + 'adaptive' => 'Ayarlanmış gösterim', + 'all_articles' => 'Tüm makaleleri göster', + 'unread' => 'Sadece okunmamış makaleleri göster', + ), + 'sort' => array( + '_' => 'Sıralama', + 'newer_first' => 'Önce yeniler', + 'older_first' => 'Önce eskiler', + ), + 'sticky_post' => 'Makale açıldığında yukarı getir', + 'title' => 'Okuma', + 'view' => array( + 'default' => 'Öntanımlı görünüm', + 'global' => 'Global görünüm', + 'normal' => 'Normal görünüm', + 'reader' => 'Okuma görünümü', + ), + ), + 'sharing' => array( + '_' => 'Paylaşım', + 'blogotext' => 'Blogotext', + 'diaspora' => 'Diaspora*', + 'email' => 'Email', + 'facebook' => 'Facebook', + 'g+' => 'Google+', + 'more_information' => 'Daha fazla bilgi', + 'print' => 'Yazdır', + 'shaarli' => 'Shaarli', + 'share_name' => 'Paylaşım ismi', + 'share_url' => 'Paylaşım URL si', + 'title' => 'Paylaşım', + 'twitter' => 'Twitter', + 'wallabag' => 'wallabag', + ), + 'shortcut' => array( + '_' => 'Kısayollar', + 'article_action' => 'Makale eylemleri', + 'auto_share' => 'Paylaş', + 'auto_share_help' => 'Sadece 1 paylaşım modu varsa bu kullanılır. Yoksa kendi paylaşım numaraları ile kullanılır.', + 'close_dropdown' => 'Menüleri kapat', + 'collapse_article' => 'Kapat', + 'first_article' => 'İlk makaleyi atla', + 'focus_search' => 'Arama kutusuna eriş', + 'help' => 'Dokümantasyonu göster', + 'javascript' => 'Kısayolları kullanabilmek için JavaScript aktif olmalıdır', + 'last_article' => 'Son makaleyi atla', + 'load_more' => 'Daha fazla makale yükle', + 'mark_read' => 'Okundu olarak işaretle', + 'mark_favorite' => 'Favori olarak işaretle', + 'navigation' => 'Genel eylemler', + 'navigation_help' => '"Shift" tuşu ile kısayollar akışlar için geçerli olur.
"Alt" tuşu ile kısayollar kategoriler için geçerli olur.', + 'next_article' => 'Sonraki makaleye geç', + 'other_action' => 'Diğer eylemler', + 'previous_article' => 'Önceki makaleye geç', + 'see_on_website' => 'Orijinal sitede göster', + 'shift_for_all_read' => '+ shift tuşu ile tüm makaleler okundu olarak işaretlenir', + 'title' => 'Kısayollar', + 'user_filter' => 'Kullanıcı filtrelerine eriş', + 'user_filter_help' => 'Eğer tek filtre varsa o kullanılır. Yoksa filtrelerin kendi numaralarıyla kullanılır.', + ), + 'user' => array( + 'articles_and_size' => '%s makale (%s)', + 'current' => 'Mevcut kullanıcı', + 'is_admin' => 'yöneticidir', + 'users' => 'Kullanıcılar', + ), +); -- cgit v1.2.3 From 2d3c4970f2edb170891c36dab78fec6f9341313c Mon Sep 17 00:00:00 2001 From: hckweb Date: Tue, 9 Feb 2016 20:28:36 +0200 Subject: Create feedback.php --- app/i18n/tr/feedback.php | 110 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 app/i18n/tr/feedback.php (limited to 'app') diff --git a/app/i18n/tr/feedback.php b/app/i18n/tr/feedback.php new file mode 100644 index 000000000..0572c6da1 --- /dev/null +++ b/app/i18n/tr/feedback.php @@ -0,0 +1,110 @@ + array( + 'optimization_complete' => 'Optimizasyon tamamlandı', + ), + 'access' => array( + 'denied' => 'Bu sayfaya erişim yetkiniz yok', + 'not_found' => 'Varolmayan bir sayfa arıyorsunuz', + ), + 'auth' => array( + 'form' => array( + 'not_set' => 'Sistem yapılandırma kimlik doğrulaması sırasında hata oldu. Lütfen daha sonra tekrar deneyin.', + 'set' => 'Kimlik doğrulama sistemi tamamnaldı.', + ), + 'login' => array( + 'invalid' => 'Giriş geçersiz', + 'success' => 'Bağlantı kuruldu', + ), + 'logout' => array( + 'success' => 'Bağlantı koptu', + ), + 'no_password_set' => 'Yönetici şifresi ayarlanmadı. Bu özellik kullanıma uygun değil.', + 'not_persona' => 'Sadece Persona sistem sıfırlanabilir.', + ), + 'conf' => array( + 'error' => 'Yapılandırma ayarları kaydedilirken hata oluştu', + 'query_created' => 'Sorgu "%s" oluşturuldu.', + 'shortcuts_updated' => 'Kısayollar yenilendi', + 'updated' => 'Yapılandırm ayarları yenilendi', + ), + 'extensions' => array( + 'already_enabled' => '%s zaten aktif', + 'disable' => array( + 'ko' => '%s gösterilemiyor. Detaylar için FressRSS log kayıtlarını kontrol edin.', + 'ok' => '%s pasif', + ), + 'enable' => array( + 'ko' => '%s aktifleştirilemiyor. Detaylar için FressRSS log kayıtlarını kontrol edin.', + 'ok' => '%s aktif', + ), + 'no_access' => '%s de yetkiniz yok', + 'not_enabled' => '%s henüz aktif değil', + 'not_found' => '%s bulunmamaktadır', + ), + 'import_export' => array( + 'export_no_zip_extension' => 'Zip eklentisi mevcut sunucunuzda yer almıyor. Lütfen başka dosya formatında dışarı aktarmayı deneyin.', + 'feeds_imported' => 'Akışlarınız içe aktarıldı ve şimdi güncellenecek', + 'feeds_imported_with_errors' => 'Akışlarınız içeri aktarıldı ama bazı hatalar meydana geldi', + 'file_cannot_be_uploaded' => 'Dosya yüklenemedi!', + 'no_zip_extension' => 'Zip eklentisi mevcut sunucunuzda yer almıyor.', + 'zip_error' => 'Zip içe aktarımı sırasında hata meydana geldi.', + ), + 'sub' => array( + 'actualize' => 'Güncelleme', + 'category' => array( + 'created' => 'Kategori %s oluşturuldu.', + 'deleted' => 'Kategori silindi.', + 'emptied' => 'Kategori boşaltıldı', + 'error' => 'Kategori güncellenemedi', + 'name_exists' => 'Kategori ismi zaten bulunmakta.', + 'no_id' => 'Kategori id sinden emin olmalısınız.', + 'no_name' => 'Kategori ismi boş olamaz.', + 'not_delete_default' => 'Öntanımlı kategoriyi silemezsiniz!', + 'not_exist' => 'Kategori bulunmamakta!', + 'over_max' => 'Kategori limitini aştınız (%d)', + 'updated' => 'Karegori güncellendi.', + ), + 'feed' => array( + 'actualized' => '%s güncellendi', + 'actualizeds' => 'RSS akışları güncellendi', + 'added' => '%s RSS akışı eklendi', + 'already_subscribed' => '%s için zaten aboneliğiniz bulunmakta', + 'deleted' => 'Akış silindi', + 'error' => 'Akış güncellenemiyor', + 'internal_problem' => 'RSS akışı eklenemiyor. Detaylar için FressRSS log kayıtlarını kontrol edin.', + 'invalid_url' => 'URL %s geçersiz', + 'marked_read' => 'Akışlar okundu olarak işaretlendi', + 'n_actualized' => '%d akışları güncellendi', + 'n_entries_deleted' => '%d makaleleri silindi', + 'no_refresh' => 'Yenilenecek akış yok…', + 'not_added' => '%s eklenemedi', + 'over_max' => 'Akış limitini aştınız (%d)', + 'updated' => 'Akış güncellendi', + ), + 'purge_completed' => 'Temizleme tamamlandı (%d makale silindi)', + ), + 'update' => array( + 'can_apply' => 'FreshRSS %s versiyonuna güncellenecek.', + 'error' => 'Güncelleme işlemi sırasında hata: %s', + 'file_is_nok' => '%s klasör yetkisini kontrol edin. HTTP yazma yetkisi olmalı', + 'finished' => 'Güncelleme tamamlandı!', + 'none' => 'Güncelleme yok', + 'server_not_found' => 'Güncelleme sunucusu bulunamadı. [%s]', + ), + 'user' => array( + 'created' => array( + '_' => '%s kullanıcısı oluşturuldu', + 'error' => '%s kullanıcısı oluşturulamadı', + ), + 'deleted' => array( + '_' => '%s kullanıcısı silindi', + 'error' => '%s kullanıcısı silinemedi', + ), + ), + 'profile' => array( + 'error' => 'Profiliniz düzenlenemedi', + 'updated' => 'Profiliniz düzenlendi', + ), +); -- cgit v1.2.3 From 0e84a859e6ee66a42ba7aab811ef46e4044d5544 Mon Sep 17 00:00:00 2001 From: hckweb Date: Tue, 9 Feb 2016 20:28:59 +0200 Subject: Create gen.php --- app/i18n/tr/gen.php | 183 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 183 insertions(+) create mode 100644 app/i18n/tr/gen.php (limited to 'app') diff --git a/app/i18n/tr/gen.php b/app/i18n/tr/gen.php new file mode 100644 index 000000000..7284f132b --- /dev/null +++ b/app/i18n/tr/gen.php @@ -0,0 +1,183 @@ + array( + 'actualize' => 'Yenile', + 'back_to_rss_feeds' => '← RSS akışlarınız için geri gidin', + 'cancel' => 'İptal', + 'create' => 'Oluştur', + 'disable' => 'Pasif', + 'empty' => 'Boş', + 'enable' => 'Aktif', + 'export' => 'Dışa Aktar', + 'filter' => 'Filtrele', + 'import' => 'İçe Aktar', + 'manage' => 'Yönet', + 'mark_read' => 'Okundu olarak işaretle', + 'mark_favorite' => 'Favoriye ekle', + 'remove' => 'Sil', + 'see_website' => 'Siteyi gör', + 'submit' => 'Onayla', + 'truncate' => 'Tüm makaleleri sil', + ), + 'auth' => array( + 'email' => 'Email adresleri', + 'keep_logged_in' => '(1 ay) oturumu açık tut', + 'login' => 'Giriş', + 'login_persona' => 'Persona ile giriş yap', + 'login_persona_problem' => 'Persona ile bağlantı sorununuz mu var ?', + 'logout' => 'Çıkış', + 'password' => array( + '_' => 'Şifre', + 'format' => 'En az 7 karakter', + ), + 'registration' => array( + '_' => 'Yeni hesap', + 'ask' => 'Yeni bir hesap oluştur', + 'title' => 'Hesap oluşturma', + ), + 'reset' => 'Kimlik doğrulama sıfırla', + 'username' => array( + '_' => 'Kullancı adı', + 'admin' => 'Yönetici kullanıcı adı', + 'format' => 'en fazla 16 alfanümerik karakter', + ), + 'will_reset' => 'Kimlik doğrulama sistemi sıfırlanacak: Persone yerine bir form kullanılacak.', + ), + 'date' => array( + 'Apr' => '\\N\\i\\s\\a\\n', + 'Aug' => '\\A\\ğ\\u\\s\\t\\o\\s', + 'Dec' => '\\A\\r\\a\\l\\ı\\k', + 'Feb' => '\\Ş\\u\\b\\a\\t', + 'Jan' => '\\O\\c\\a\\k', + 'Jul' => '\\T\\e\\m\\m\\u\\z', + 'Jun' => '\\H\\a\\z\\i\\r\\a\\n', + 'Mar' => '\\M\\a\\r\\t', + 'May' => '\\M\\a\\y\\ı\\s', + 'Nov' => '\\K\\a\\s\\ı\\m', + 'Oct' => '\\E\\k\\i\\m', + 'Sep' => '\\E\\y\\l\\ü\\l', + 'apr' => 'nis', + 'april' => 'Nis', + 'aug' => 'ağu', + 'august' => 'Ağu', + 'before_yesterday' => 'Dünden önceki gün', + 'dec' => 'ara', + 'december' => 'Ara', + 'feb' => 'şub', + 'february' => 'Şub', + 'format_date' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y', + 'format_date_hour' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y \\a\\t H\\:i', + 'fri' => 'Cum', + 'jan' => 'oca', + 'january' => 'Oca', + 'jul' => 'tem', + 'july' => 'Tem', + 'jun' => 'haz', + 'june' => 'Haz', + 'last_3_month' => 'Son 3 ay', + 'last_6_month' => 'Son 6 ay', + 'last_month' => 'Geçen ay', + 'last_week' => 'Geçen hafta', + 'last_year' => 'Geçen yıl', + 'mar' => 'mar', + 'march' => 'Mar', + 'may' => 'May', + 'mon' => 'Pzt', + 'month' => 'ay', + 'nov' => 'kas', + 'november' => 'Kas', + 'oct' => 'ekm', + 'october' => 'Ekm', + 'sat' => 'Cts', + 'sep' => 'eyl', + 'september' => 'Eyl', + 'sun' => 'Pzr', + 'thu' => 'Per', + 'today' => 'Bugün', + 'tue' => 'Sal', + 'wed' => 'Çar', + 'yesterday' => 'Dün', + ), + 'freshrss' => array( + '_' => 'FreshRSS', + 'about' => 'FreshRSS hakkında', + ), + 'js' => array( + 'category_empty' => 'Boş kategori', + 'confirm_action' => 'Bunu yapmak istediğinize emin misiniz ? Daha sonra iptal edilemez!', + 'confirm_action_feed_cat' => 'Bunu yapmak istediğinize emin misiniz ? Favorileriniz ve sorgularınız silinecek. Daha sonra iptal edilemez!', + 'feedback' => array( + 'body_new_articles' => 'FreshRSS de okunmaz üzere \\d yeni makale var.', + 'request_failed' => 'Hata. İnternet bağlantınızı kontrol edin.', + 'title_new_articles' => 'FreshRSS: yeni makaleler!', + ), + 'new_article' => 'Yeni makaleler mevcut. Sayfayı yenilemek için tıklayın.', + 'should_be_activated' => 'JavaScript aktif olmalıdır.', + ), + 'lang' => array( + 'cz' => 'Čeština', + 'de' => 'Deutsch', + 'en' => 'English', + 'fr' => 'Français', + 'it' => 'Italiano', + 'nl' => 'Nederlands', + 'tr' => 'Türkçe', + ), + 'menu' => array( + 'about' => 'Hakkında', + 'admin' => 'Yönetim', + 'archiving' => 'Arşiv', + 'authentication' => 'Kimlik doğrulama', + 'check_install' => 'Kurulum kontrolü', + 'configuration' => 'Yapılandırma', + 'display' => 'Görünüm', + 'extensions' => 'Eklentiler', + 'logs' => 'Log kayıtları', + 'queries' => 'Kullanıcı sorguları', + 'reading' => 'Okuma', + 'search' => 'Kelime veya #etiket ara', + 'sharing' => 'Paylaşım', + 'shortcuts' => 'Kısayollar', + 'stats' => 'İstatistikler', + 'system' => 'Sistem yapılandırması', + 'update' => 'Güncelleme', + 'user_management' => 'Kullanıcıları yönet', + 'user_profile' => 'Profil', + ), + 'pagination' => array( + 'first' => 'İlk', + 'last' => 'Son', + 'load_more' => 'Daha fazla makale yükle', + 'mark_all_read' => 'Tümünü okundu say', + 'next' => 'Sonraki', + 'nothing_to_load' => 'Başka makale yok', + 'previous' => 'Önceki', + ), + 'share' => array( + 'blogotext' => 'Blogotext', + 'diaspora' => 'Diaspora*', + 'email' => 'Email', + 'facebook' => 'Facebook', + 'g+' => 'Google+', + 'movim' => 'Movim', + 'print' => 'Print', + 'shaarli' => 'Shaarli', + 'twitter' => 'Twitter', + 'wallabag' => 'wallabag', + 'jdh' => 'Journal du hacker', + ), + 'short' => array( + 'attention' => 'Tehlike!', + 'blank_to_disable' => 'Devredışı bırakmak için boş bırakın', + 'by_author' => '%s tarafından', + 'by_default' => 'Öntanımlı', + 'damn' => 'Hay aksi!', + 'default_category' => 'Kategorisiz', + 'no' => 'Hayır', + 'not_applicable' => 'Uygun değil', + 'ok' => 'Tamam!', + 'or' => 'ya da', + 'yes' => 'Evet', + ), +); -- cgit v1.2.3 From 59a69d521da4f01f62f802cbfda7df8e01a4b2c0 Mon Sep 17 00:00:00 2001 From: hckweb Date: Tue, 9 Feb 2016 20:29:26 +0200 Subject: Create index.php --- app/i18n/tr/index.php | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 app/i18n/tr/index.php (limited to 'app') diff --git a/app/i18n/tr/index.php b/app/i18n/tr/index.php new file mode 100644 index 000000000..9912203c8 --- /dev/null +++ b/app/i18n/tr/index.php @@ -0,0 +1,61 @@ + array( + '_' => 'Hakkında', + 'agpl3' => 'AGPL 3', + 'bugs_reports' => 'Hata raporu', + 'credits' => 'Tanıtım', + 'credits_content' => 'Bu frameworkü kullanmamasına rağmen FreshRSS bazı tasarım ögelerini Bootstrap dan almıştır. İkonlar GNOME projesinden alınmıştır. Open Sans yazı tipi Steve Matteson tarafından oluşturulmuştur. Site ikonları getFavicon API ile oluşturuldu. FreshRSS bir PHP framework olan Minz i temel alır.', + 'freshrss_description' => 'FreshRSS Kriss Feed veya Leed gibi kendi hostunuzda çalışan bir RSS akış toplayıcısıdır. Güçlü ve yapılandırılabilir araçlarıyla basit ve kullanımı kolay bir uygulamadır.', + 'github' => 'Github sayfası', + 'license' => 'Lisans', + 'project_website' => 'Proje sayfası', + 'title' => 'Hakkında', + 'version' => 'Versiyon', + 'website' => 'Website', + ), + 'feed' => array( + 'add' => 'Akış ekleyebilirsin.', + 'empty' => 'Gösterilecek makale yok.', + 'rss_of' => 'RSS feed of %s', + 'title' => 'RSS akışlarınız', + 'title_global' => 'Global görünüm', + 'title_fav' => 'Favorilerin', + ), + 'log' => array( + '_' => 'Log Kayıtları', + 'clear' => 'Log kayıt dosyasını temizle', + 'empty' => 'Log kayır dosyası boş', + 'title' => 'Log Kayıtları', + ), + 'menu' => array( + 'about' => 'FreshRSS hakkında', + 'add_query' => 'Sorgu ekle', + 'before_one_day' => 'Bir gün önce', + 'before_one_week' => 'Bir hafta önce', + 'favorites' => 'Favoriler (%s)', + 'global_view' => 'Global görünüm', + 'main_stream' => 'Ana akış', + 'mark_all_read' => 'Hepsini okundu olarak işaretle', + 'mark_cat_read' => 'Kategoriyi okundu olarak işaretle', + 'mark_feed_read' => 'Akışı okundu olarak işaretle', + 'newer_first' => 'Önce yeniler', + 'non-starred' => 'Favori dışındakileri göster', + 'normal_view' => 'Normal görünüm', + 'older_first' => 'Önce eskiler', + 'queries' => 'Kullanıcı sorguları', + 'read' => 'Okunmuşları göster', + 'reader_view' => 'Okuma görünümü', + 'rss_view' => 'RSS akışı', + 'search_short' => 'Ara', + 'starred' => 'Favorileri göster', + 'stats' => 'İstatistikler', + 'subscription' => 'Abonelik yönetimi', + 'unread' => 'Okunmamışları göster', + ), + 'share' => 'Share', + 'tag' => array( + 'related' => 'İlgili etiketler', + ), +); -- cgit v1.2.3 From c03ceb107eea4ca90e931bf1018e7315ab2049c3 Mon Sep 17 00:00:00 2001 From: hckweb Date: Tue, 9 Feb 2016 20:29:48 +0200 Subject: Create install.php --- app/i18n/tr/install.php | 113 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 app/i18n/tr/install.php (limited to 'app') diff --git a/app/i18n/tr/install.php b/app/i18n/tr/install.php new file mode 100644 index 000000000..96c16931a --- /dev/null +++ b/app/i18n/tr/install.php @@ -0,0 +1,113 @@ + array( + 'finish' => 'Kurulumu tamamla', + 'fix_errors_before' => 'Lütfen sonraki adıma geçmek için hataları düzeltin.', + 'keep_install' => 'Önceki kuruluma devam et', + 'next_step' => 'Sonraki adım', + 'reinstall' => 'FreshRSS i yeniden yükle', + ), + 'auth' => array( + 'email_persona' => 'Giriş email adresi
(Mozilla Persona için)', + 'form' => 'Web formu (geleneksel, JavaScript gerektirir)', + 'http' => 'HTTP (ileri kullanıcılar için, HTTPS)', + 'none' => 'Hiçbiri (tehlikeli)', + 'password_form' => 'Şifre
(Tarayıcı girişi için)', + 'password_format' => 'En az 7 karakter', + 'persona' => 'Mozilla Persona (modern, JavaScript gerektirir)', + 'type' => 'Kimlik doğrulama yöntemi', + ), + 'bdd' => array( + '_' => 'Veritabanı', + 'conf' => array( + '_' => 'Veritabanı yapılandırılması', + 'ko' => 'Veritabanı bilginizi doğrulayın.', + 'ok' => 'Veritabanı yapılandırılması kayıt edildi.', + ), + 'host' => 'Sunucu', + 'prefix' => 'Tablo ön eki', + 'password' => 'HTTP şifre', + 'type' => 'Veritabanı türü', + 'username' => 'HTTP kullanıcı adı', + ), + 'check' => array( + '_' => 'Kontroller', + 'already_installed' => 'FreshRSS zaten yüklü!', + 'cache' => array( + 'nok' => './data/cache klasör yetkisini kontrol edin. HTTP yazma yetkisi olmalı', + 'ok' => 'Önbellek klasörü yetkileri sorunsuz.', + ), + 'ctype' => array( + 'nok' => 'Karakter yazım kontrolü için kütüphane eksik (php-ctype).', + 'ok' => 'Karakter yazım kontrolü için kütüphane sorunsuz (ctype).', + ), + 'curl' => array( + 'nok' => 'cURL eksik (php5-curl package).', + 'ok' => 'cURL eklentisi sorunsuz.', + ), + 'data' => array( + 'nok' => './data klasör yetkisini kontrol edin. HTTP yazma yetkisi olmalı', + 'ok' => 'Veri klasörü yetkileri sorunsuz.', + ), + 'dom' => array( + 'nok' => 'DOM kütüpbanesi eksik (php-xml package).', + 'ok' => 'DOM kütüphanesi sorunsuz.', + ), + 'favicons' => array( + 'nok' => './data/favicons klasör yetkisini kontrol edin. HTTP yazma yetkisi olmalı', + 'ok' => 'Site ikonu klasörü yetkileri sorunsuz.', + ), + 'http_referer' => array( + 'nok' => 'Lütfen HTTP REFERER değiştirmediğinize emin olun.', + 'ok' => 'HTTP REFERER ve sunucunuz arası iletişim sorunsuz.', + ), + 'minz' => array( + 'nok' => 'Minz framework eksik.', + 'ok' => 'Minz framework sorunsuz.', + ), + 'pcre' => array( + 'nok' => 'Düzenli ifadeler kütüphanesi eksik (php-pcre).', + 'ok' => 'Düzenli ifadeler kütüphanesi sorunsuz (PCRE).', + ), + 'pdo' => array( + 'nok' => 'PDO veya PDO destekli bir sürücü eksik (pdo_mysql, pdo_sqlite).', + 'ok' => 'PDO sorunsuz (pdo_mysql, pdo_sqlite).', + ), + 'persona' => array( + 'nok' => './data/persona klasör yetkisini kontrol edin. HTTP yazma yetkisi olmalı', + 'ok' => 'Mozilla Persona klasörü yetkileri sorunsuz.', + ), + 'php' => array( + 'nok' => 'PHP versiyonunuz %s fakat FreshRSS için gerekli olan en düşük sürüm %s.', + 'ok' => 'PHP versiyonunuz %s, FreshRSS ile tam uyumlu.', + ), + 'users' => array( + 'nok' => './data/users klasör yetkisini kontrol edin. HTTP yazma yetkisi olmalı', + 'ok' => 'Kullanıcılar klasörü yetkileri sorunsuz.', + ), + ), + 'conf' => array( + '_' => 'Genel yapılandırma', + 'ok' => 'Genel yapılandırma ayarları kayıt edildi.', + ), + 'congratulations' => 'Tebrikler!', + 'default_user' => 'Öntanımlı kullanıcı adı (en fazla 16 alfanümerik karakter)', + 'delete_articles_after' => 'Makaleleri şu süre sonunda sil', + 'fix_errors_before' => 'Lütfen sonraki adıma geçmek için hataları düzeltin.', + 'javascript_is_better' => 'FreshRSS JavaScript ile daha işlevseldir', + 'js' => array( + 'confirm_reinstall' => 'FressRSS i yeniden kurarak önceki yapılandırma ayarlarınızı kaybedeceksiniz. Devam etmek istiyor musunuz ?', + ), + 'language' => array( + '_' => 'Dil', + 'choose' => 'FreshRSS için bir dil seçin', + 'defined' => 'Dil belirlendi.', + ), + 'not_deleted' => 'Hata meydana geldi; %s dosyasını elle silmelisiniz.', + 'ok' => 'Kurulum başarıyla tamamlandı.', + 'step' => 'adım %d', + 'steps' => 'Adımlar', + 'title' => 'Kurulum · FreshRSS', + 'this_is_the_end' => 'Son Adım', +); -- cgit v1.2.3 From d1fae5145b122f0871f434e5007584fa6cb48dca Mon Sep 17 00:00:00 2001 From: hckweb Date: Tue, 9 Feb 2016 20:30:05 +0200 Subject: Create sub.php --- app/i18n/tr/sub.php | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 app/i18n/tr/sub.php (limited to 'app') diff --git a/app/i18n/tr/sub.php b/app/i18n/tr/sub.php new file mode 100644 index 000000000..5ab367ebb --- /dev/null +++ b/app/i18n/tr/sub.php @@ -0,0 +1,62 @@ + array( + '_' => 'Kategori', + 'add' => 'Kategori ekle', + 'empty' => 'Boş kategori', + 'new' => 'Yeni kategori', + ), + 'feed' => array( + 'add' => 'RSS akışı ekle', + 'advanced' => 'Gelişmiş', + 'archiving' => 'Arşiv', + 'auth' => array( + 'configuration' => 'Giriş', + 'help' => 'HTTP korumalı RSS akışlarına bağlantı izni sağlar', + 'http' => 'HTTP Kimlik Doğrulama', + 'password' => 'HTTP şifre', + 'username' => 'HTTP kullanıcı adı', + ), + 'css_help' => 'Dikkat, daha çok zaman gerekir!', + 'css_path' => 'Makaleleri kendi CSS görünümü ile göster', + 'description' => 'Tanım', + 'empty' => 'Bu akış boş. Lütfen akışın aktif olduğuna emin olun.', + 'error' => 'Bu akışda bir hatayla karşılaşıldı. Lütfen akışın sürekli ulaşılabilir olduğuna emin olun.', + 'in_main_stream' => 'Ana akışda göster', + 'informations' => 'Bilgi', + 'keep_history' => 'En az tutulacak makale sayısı', + 'moved_category_deleted' => 'Bir kategoriyi silerseniz, içerisindeki akışlar %s içerisine yerleşir.', + 'no_selected' => 'Hiçbir akış seçilmedi.', + 'number_entries' => '%d makale', + 'stats' => 'İstatistikler', + 'think_to_add' => 'Akış ekleyebilirsiniz.', + 'title' => 'Başlık', + 'title_add' => 'RSS akışı ekle', + 'ttl' => 'Şu kadar süreden fazla otomatik yenileme yapma', + 'url' => 'Akış URL', + 'validator' => 'Akış geçerliliğini kontrol edin', + 'website' => 'Site URL', + 'pubsubhubbub' => 'PubSubHubbub ile anlık bildirim', + ), + 'import_export' => array( + 'export' => 'Dışa aktar', + 'export_opml' => 'Akış listesini dışarı aktar (OPML)', + 'export_starred' => 'Favorileri dışarı aktar', + 'feed_list' => '%s makalenin listesi', + 'file_to_import' => 'Dosyadan içe aktar
(OPML, Json or Zip)', + 'file_to_import_no_zip' => 'Dosyadan içe aktar
(OPML or Json)', + 'import' => 'İçe aktar', + 'starred_list' => 'Favori makaleleirn listesi', + 'title' => 'İçe / dışa aktar', + ), + 'menu' => array( + 'bookmark' => 'Abonelik (FreshRSS yer imleri)', + 'import_export' => 'İçe / dışa aktar', + 'subscription_management' => 'Abonelik yönetimi', + ), + 'title' => array( + '_' => 'Abonelik yönetimi', + 'feed_management' => 'RSS akış yönetimi', + ), +); -- cgit v1.2.3 From b4238fa165460e8683cc9b251690247dda57b026 Mon Sep 17 00:00:00 2001 From: hckweb Date: Tue, 9 Feb 2016 20:34:17 +0200 Subject: Update gen.php --- app/i18n/nl/gen.php | 1 + 1 file changed, 1 insertion(+) (limited to 'app') diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php index 21d1fba22..bc4fd9201 100644 --- a/app/i18n/nl/gen.php +++ b/app/i18n/nl/gen.php @@ -122,6 +122,7 @@ return array( 'fr' => 'Français', 'it' => 'Italiano', 'nl' => 'Nederlands', + 'tr' => 'Türkçe', ), 'menu' => array( 'about' => 'Over', -- cgit v1.2.3 From 837d77b52547c987092905f99511bcce0dcf0d5f Mon Sep 17 00:00:00 2001 From: hckweb Date: Tue, 9 Feb 2016 20:35:31 +0200 Subject: Adding Turkish language --- app/i18n/nl/gen.php | 1 - 1 file changed, 1 deletion(-) (limited to 'app') diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php index bc4fd9201..21d1fba22 100644 --- a/app/i18n/nl/gen.php +++ b/app/i18n/nl/gen.php @@ -122,7 +122,6 @@ return array( 'fr' => 'Français', 'it' => 'Italiano', 'nl' => 'Nederlands', - 'tr' => 'Türkçe', ), 'menu' => array( 'about' => 'Over', -- cgit v1.2.3 From 27f54f44fe0f84964702925b7b1612dcdf8a6997 Mon Sep 17 00:00:00 2001 From: hckweb Date: Tue, 9 Feb 2016 20:36:33 +0200 Subject: Adding Turkish language --- app/i18n/nl/gen.php | 1 + 1 file changed, 1 insertion(+) (limited to 'app') diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php index 21d1fba22..bc4fd9201 100644 --- a/app/i18n/nl/gen.php +++ b/app/i18n/nl/gen.php @@ -122,6 +122,7 @@ return array( 'fr' => 'Français', 'it' => 'Italiano', 'nl' => 'Nederlands', + 'tr' => 'Türkçe', ), 'menu' => array( 'about' => 'Over', -- cgit v1.2.3 From 89037e5fec5029826b73e5413e0f1cb6856f3808 Mon Sep 17 00:00:00 2001 From: hckweb Date: Tue, 9 Feb 2016 20:36:38 +0200 Subject: Adding Turkish language --- app/i18n/it/gen.php | 1 + 1 file changed, 1 insertion(+) (limited to 'app') diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php index 1ac6b04a1..bd311aa12 100644 --- a/app/i18n/it/gen.php +++ b/app/i18n/it/gen.php @@ -122,6 +122,7 @@ return array( 'fr' => 'Français', 'it' => 'Italiano', 'nl' => 'Nederlands', + 'tr' => 'Türkçe', ), 'menu' => array( 'about' => 'Informazioni', -- cgit v1.2.3 From eeb7fd99090d530f3fe0af39436c714c7a3914b3 Mon Sep 17 00:00:00 2001 From: hckweb Date: Tue, 9 Feb 2016 20:36:42 +0200 Subject: Adding Turkish language --- app/i18n/fr/gen.php | 1 + 1 file changed, 1 insertion(+) (limited to 'app') diff --git a/app/i18n/fr/gen.php b/app/i18n/fr/gen.php index 1e738e949..f8e4ac7ee 100644 --- a/app/i18n/fr/gen.php +++ b/app/i18n/fr/gen.php @@ -122,6 +122,7 @@ return array( 'fr' => 'Français', 'it' => 'Italiano', 'nl' => 'Nederlands', + 'tr' => 'Türkçe', ), 'menu' => array( 'about' => 'À propos', -- cgit v1.2.3 From ff510a1282cd014f846c09fa7f84e62112dbc432 Mon Sep 17 00:00:00 2001 From: hckweb Date: Tue, 9 Feb 2016 20:36:47 +0200 Subject: Adding Turkish language --- app/i18n/en/gen.php | 1 + 1 file changed, 1 insertion(+) (limited to 'app') diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php index 3d66938d1..f71684688 100644 --- a/app/i18n/en/gen.php +++ b/app/i18n/en/gen.php @@ -122,6 +122,7 @@ return array( 'fr' => 'Français', 'it' => 'Italiano', 'nl' => 'Nederlands', + 'tr' => 'Türkçe', ), 'menu' => array( 'about' => 'About', -- cgit v1.2.3 From 2a7b2ef39a442162329c32578e76d6905c1c91da Mon Sep 17 00:00:00 2001 From: hckweb Date: Tue, 9 Feb 2016 20:36:51 +0200 Subject: Adding Turkish language --- app/i18n/de/gen.php | 1 + 1 file changed, 1 insertion(+) (limited to 'app') diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php index 4953610ba..fb09e8598 100644 --- a/app/i18n/de/gen.php +++ b/app/i18n/de/gen.php @@ -122,6 +122,7 @@ return array( 'fr' => 'Français', 'it' => 'Italiano', 'nl' => 'Nederlands', + 'tr' => 'Türkçe', ), 'menu' => array( 'about' => 'Über', -- cgit v1.2.3 From 1cdfaed8020cfa5413b606f71ee178da7a74953d Mon Sep 17 00:00:00 2001 From: hckweb Date: Tue, 9 Feb 2016 20:36:55 +0200 Subject: Adding Turkish language --- app/i18n/cz/gen.php | 1 + 1 file changed, 1 insertion(+) (limited to 'app') diff --git a/app/i18n/cz/gen.php b/app/i18n/cz/gen.php index 4d34a8173..ca90cff0c 100644 --- a/app/i18n/cz/gen.php +++ b/app/i18n/cz/gen.php @@ -122,6 +122,7 @@ return array( 'fr' => 'Français', 'it' => 'Italiano', 'nl' => 'Nederlands', + 'tr' => 'Türkçe', ), 'menu' => array( 'about' => 'O aplikaci', -- cgit v1.2.3 From e4a459a6edc40b64cba7845b52f3e90666b2818a Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Tue, 16 Feb 2016 23:53:39 +0100 Subject: CSP no inline javascript draft https://github.com/FreshRSS/FreshRSS/issues/1075 --- app/FreshRSS.php | 62 +++++++++++++++++++++++++++++ app/layout/layout.phtml | 6 +-- app/views/helpers/javascript_vars.phtml | 70 --------------------------------- lib/Minz/Session.php | 15 ++++--- p/scripts/main.js | 13 +++++- p/scripts/persona.js | 2 +- 6 files changed, 87 insertions(+), 81 deletions(-) delete mode 100644 app/views/helpers/javascript_vars.phtml (limited to 'app') diff --git a/app/FreshRSS.php b/app/FreshRSS.php index 044de9cd4..e0e82457c 100644 --- a/app/FreshRSS.php +++ b/app/FreshRSS.php @@ -110,6 +110,68 @@ class FreshRSS extends Minz_FrontController { } } + private static function setJavascriptCookie() { + $mark = FreshRSS_Context::$user_conf->mark_when; + $mail = Minz_Session::param('mail', false); + $s = FreshRSS_Context::$user_conf->shortcuts; + $json = json_encode(array( + 'context' => array( + 'auto_remove_article' => !!FreshRSS_Context::isAutoRemoveAvailable(), + 'hide_posts' => !(FreshRSS_Context::$user_conf->display_posts || Minz_Request::actionName() === 'reader'), + 'display_order' => Minz_Request::param('order', FreshRSS_Context::$user_conf->sort_order), + 'auto_mark_article' => !!$mark['article'], + 'auto_mark_site' => !!$mark['site'], + 'auto_mark_scroll' => !!$mark['scroll'], + 'auto_load_more' => !!FreshRSS_Context::$user_conf->auto_load_more, + 'auto_actualize_feeds' => !!Minz_Session::param('actualize_feeds', false), + 'does_lazyload' => !!FreshRSS_Context::$user_conf->lazyload , + 'sticky_post' => !!FreshRSS_Context::isStickyPostEnabled(), + 'html5_notif_timeout' => FreshRSS_Context::$user_conf->html5_notif_timeout, + 'auth_type' => FreshRSS_Context::$system_conf->auth_type, + 'current_user_mail' => $mail ? ('"' . $mail . '"') : null, + 'current_view' => Minz_Request::actionName(), + ), + 'shortcuts' => array( + 'mark_read' => @$s['mark_read'], + 'mark_favorite' => @$s['mark_favorite'], + 'go_website' => @$s['go_website'], + 'prev_entry' => @$s['prev_entry'], + 'next_entry' => @$s['next_entry'], + 'first_entry' => @$s['first_entry'], + 'last_entry' => @$s['last_entry'], + 'collapse_entry' => @$s['collapse_entry'], + 'load_more' => @$s['load_more'], + 'auto_share' => @$s['auto_share'], + 'focus_search' => @$s['focus_search'], + 'user_filter' => @$s['user_filter'], + 'help' => @$s['help'], + 'close_dropdown' => @$s['close_dropdown'], + ), + 'url' => array( + 'index' => _url('index', 'index'), + 'login' => Minz_Url::display(array('c' => 'auth', 'a' => 'login'), 'php'), + 'logout' => Minz_Url::display(array('c' => 'auth', 'a' => 'logout'), 'php'), + 'help' => FRESHRSS_WIKI, + ), + 'i18n' => array( + 'confirmation_default' => _t('gen.js.confirm_action'), + 'notif_title_articles' => _t('gen.js.feedback.title_new_articles'), + 'notif_body_articles' => _t('gen.js.feedback.body_new_articles'), + 'notif_request_failed' => _t('gen.js.feedback.request_failed'), + 'category_empty' => _t('gen.js.category_empty'), + ), + 'icons' => array( + 'close' => _i('close'), + ), + ), JSON_UNESCAPED_UNICODE); + setrawcookie('FreshRSS-vars', rawurlencode($json), 0, Minz_Session::getCookieDir()); + } + + public static function preLayout() { + header("Content-Security-Policy: default-src 'self'; img-src * data:; media-src *; style-src 'self' 'unsafe-inline'"); + self::setJavascriptCookie(); + } + private function loadNotifications() { $notif = Minz_Session::param('notification'); if ($notif) { diff --git a/app/layout/layout.phtml b/app/layout/layout.phtml index 1d3afbf71..7d718efbd 100644 --- a/app/layout/layout.phtml +++ b/app/layout/layout.phtml @@ -1,3 +1,6 @@ + @@ -5,9 +8,6 @@ - mark_when; -$mail = Minz_Session::param('mail', false); -$auto_actualize = Minz_Session::param('actualize_feeds', false); -$hide_posts = !(FreshRSS_Context::$user_conf->display_posts || Minz_Request::actionName() === 'reader'); -$s = FreshRSS_Context::$user_conf->shortcuts; - -$url_login = Minz_Url::display(array( - 'c' => 'auth', - 'a' => 'login' -), 'php'); -$url_logout = Minz_Url::display(array( - 'c' => 'auth', - 'a' => 'logout' -), 'php'); - -echo 'var context={', - 'auto_remove_article:', FreshRSS_Context::isAutoRemoveAvailable() ? 'true' : 'false', ',', - 'hide_posts:', $hide_posts ? 'true' : 'false', ',', - 'display_order:"', Minz_Request::param('order', FreshRSS_Context::$user_conf->sort_order), '",', - 'auto_mark_article:', $mark['article'] ? 'true' : 'false', ',', - 'auto_mark_site:', $mark['site'] ? 'true' : 'false', ',', - 'auto_mark_scroll:', $mark['scroll'] ? 'true' : 'false', ',', - 'auto_load_more:', FreshRSS_Context::$user_conf->auto_load_more ? 'true' : 'false', ',', - 'auto_actualize_feeds:', $auto_actualize ? 'true' : 'false', ',', - 'does_lazyload:', FreshRSS_Context::$user_conf->lazyload ? 'true' : 'false', ',', - 'sticky_post:', FreshRSS_Context::isStickyPostEnabled() ? 'true' : 'false', ',', - 'html5_notif_timeout:', FreshRSS_Context::$user_conf->html5_notif_timeout, ',', - 'auth_type:"', FreshRSS_Context::$system_conf->auth_type, '",', - 'current_user_mail:', $mail ? ('"' . $mail . '"') : 'null', ',', - 'current_view:"', Minz_Request::actionName(), '"', -"},\n"; - -echo 'shortcuts={', - 'mark_read:"', @$s['mark_read'], '",', - 'mark_favorite:"', @$s['mark_favorite'], '",', - 'go_website:"', @$s['go_website'], '",', - 'prev_entry:"', @$s['prev_entry'], '",', - 'next_entry:"', @$s['next_entry'], '",', - 'first_entry:"', @$s['first_entry'], '",', - 'last_entry:"', @$s['last_entry'], '",', - 'collapse_entry:"', @$s['collapse_entry'], '",', - 'load_more:"', @$s['load_more'], '",', - 'auto_share:"', @$s['auto_share'], '",', - 'focus_search:"', @$s['focus_search'], '",', - 'user_filter:"', @$s['user_filter'], '",', - 'help:"', @$s['help'], '",', - 'close_dropdown:"', @$s['close_dropdown'], '"', -"},\n"; - -echo 'url={', - 'index:"', _url('index', 'index'), '",', - 'login:"', $url_login, '",', - 'logout:"', $url_logout, '",', - 'help:"', FRESHRSS_WIKI, '"', -"},\n"; - -echo 'i18n={', - 'confirmation_default:"', _t('gen.js.confirm_action'), '",', - 'notif_title_articles:"', _t('gen.js.feedback.title_new_articles'), '",', - 'notif_body_articles:"', _t('gen.js.feedback.body_new_articles'), '",', - 'notif_request_failed:"', _t('gen.js.feedback.request_failed'), '",', - 'category_empty:"', _t('gen.js.category_empty'), '"', -"},\n"; - -echo 'icons={', - 'close:\'', _i('close'), '\'', -"}\n"; \ No newline at end of file diff --git a/lib/Minz/Session.php b/lib/Minz/Session.php index 057e7746a..940cd27d9 100644 --- a/lib/Minz/Session.php +++ b/lib/Minz/Session.php @@ -59,18 +59,21 @@ class Minz_Session { } } + public static function getCookieDir() { + // Get the script_name (e.g. /p/i/index.php) and keep only the path. + $cookie_dir = empty($_SERVER['REQUEST_URI']) ? '/' : $_SERVER['REQUEST_URI']; + if (substr($cookie_dir, -1) !== '/') { + $cookie_dir = dirname($cookie_dir) . '/'; + } + return $cookie_dir; + } /** * Spécifie la durée de vie des cookies * @param $l la durée de vie */ public static function keepCookie($l) { - // Get the script_name (e.g. /p/i/index.php) and keep only the path. - $cookie_dir = empty($_SERVER['REQUEST_URI']) ? '/' : $_SERVER['REQUEST_URI']; - if (substr($cookie_dir, -1) !== '/') { - $cookie_dir = dirname($cookie_dir) . '/'; - } - session_set_cookie_params($l, $cookie_dir, '', false, true); + session_set_cookie_params($l, self::getCookieDir(), '', false, true); } diff --git a/p/scripts/main.js b/p/scripts/main.js index 968c945c8..32a2ca913 100644 --- a/p/scripts/main.js +++ b/p/scripts/main.js @@ -1245,8 +1245,19 @@ function init_configuration_alert() { }); } +function parseJavaScriptCookie() { + var json = JSON.parse(decodeURIComponent(document.cookie.replace(/(?:(?:^|.*;\s*)FreshRSS-vars\s*\=\s*([^;]*).*$)|^.*$/, "$1"))) || {}; + document.cookie = 'FreshRSS-vars=; expires=Thu, 01 Jan 1970 00:00:00 GMT'; + window.context = json.context; + window.shortcuts = json.shortcuts; + window.url = json.url; + window.i18n = json.i18n; + window.icons = json.icons; +} + function init_all() { - if (!(window.$ && window.context)) { + parseJavaScriptCookie(); + if (!window.$) { if (window.console) { console.log('FreshRSS waiting for JS…'); } diff --git a/p/scripts/persona.js b/p/scripts/persona.js index 36aeeaf56..63ab43795 100644 --- a/p/scripts/persona.js +++ b/p/scripts/persona.js @@ -1,7 +1,7 @@ "use strict"; function init_persona() { - if (!(navigator.id && window.$)) { + if (!(navigator.id && window.$ && window.url)) { if (window.console) { console.log('FreshRSS (Persona) waiting for JS…'); } -- cgit v1.2.3 From 8cdf44c87b7490ebc4cbdf4f2c50dd2a3bdd520d Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Wed, 17 Feb 2016 01:17:56 +0100 Subject: CSP allow iframes E.g. for YouTube videos, etc. https://github.com/FreshRSS/FreshRSS/issues/1075 --- app/FreshRSS.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/FreshRSS.php b/app/FreshRSS.php index e0e82457c..8eb862aeb 100644 --- a/app/FreshRSS.php +++ b/app/FreshRSS.php @@ -168,7 +168,7 @@ class FreshRSS extends Minz_FrontController { } public static function preLayout() { - header("Content-Security-Policy: default-src 'self'; img-src * data:; media-src *; style-src 'self' 'unsafe-inline'"); + header("Content-Security-Policy: default-src 'self'; child-src *; img-src * data:; media-src *; style-src 'self' 'unsafe-inline'"); self::setJavascriptCookie(); } -- cgit v1.2.3 From 41622ec698049d618685bd3dc9a9122463ed0705 Mon Sep 17 00:00:00 2001 From: ASM Date: Wed, 17 Feb 2016 22:14:36 +0300 Subject: Bumping #1029, translated install.php --- app/i18n/ru/admin.php | 183 --------------------------------------- app/i18n/ru/conf.php | 174 ------------------------------------- app/i18n/ru/feedback.php | 110 ----------------------- app/i18n/ru/gen.php | 181 -------------------------------------- app/i18n/ru/index.php | 61 ------------- app/i18n/ru/install.php | 113 ------------------------ app/i18n/ru/sub.php | 62 ------------- app/i18n/ru_RU.utf8/admin.php | 183 +++++++++++++++++++++++++++++++++++++++ app/i18n/ru_RU.utf8/conf.php | 174 +++++++++++++++++++++++++++++++++++++ app/i18n/ru_RU.utf8/feedback.php | 110 +++++++++++++++++++++++ app/i18n/ru_RU.utf8/gen.php | 181 ++++++++++++++++++++++++++++++++++++++ app/i18n/ru_RU.utf8/index.php | 61 +++++++++++++ app/i18n/ru_RU.utf8/install.php | 113 ++++++++++++++++++++++++ app/i18n/ru_RU.utf8/sub.php | 62 +++++++++++++ 14 files changed, 884 insertions(+), 884 deletions(-) delete mode 100644 app/i18n/ru/admin.php delete mode 100644 app/i18n/ru/conf.php delete mode 100644 app/i18n/ru/feedback.php delete mode 100644 app/i18n/ru/gen.php delete mode 100644 app/i18n/ru/index.php delete mode 100644 app/i18n/ru/install.php delete mode 100644 app/i18n/ru/sub.php create mode 100644 app/i18n/ru_RU.utf8/admin.php create mode 100644 app/i18n/ru_RU.utf8/conf.php create mode 100644 app/i18n/ru_RU.utf8/feedback.php create mode 100644 app/i18n/ru_RU.utf8/gen.php create mode 100644 app/i18n/ru_RU.utf8/index.php create mode 100644 app/i18n/ru_RU.utf8/install.php create mode 100644 app/i18n/ru_RU.utf8/sub.php (limited to 'app') diff --git a/app/i18n/ru/admin.php b/app/i18n/ru/admin.php deleted file mode 100644 index dfea5b3cb..000000000 --- a/app/i18n/ru/admin.php +++ /dev/null @@ -1,183 +0,0 @@ - array( - 'allow_anonymous' => 'Разрешить анонимное чтение статей для пользователя по умолчанию (%s)', - 'allow_anonymous_refresh' => 'Разрешить анонимное обновление статей', - 'api_enabled' => 'Включить доступ к API (необходимо для мобильных приложений)', - 'form' => 'На основе веб-формы (традиционный, необходим JavaScript)', - 'http' => 'HTTP (для продвинутых пользователей - по HTTPS)', - 'none' => 'Без аутентификации (небезопасный)', - 'persona' => 'Mozilla Persona (новый, необходим JavaScript)', - 'title' => 'Аутентификации', - 'title_reset' => 'Сброс аутентицикации', - 'token' => 'Токен аутентификации', - 'token_help' => 'Разрешает доступ к RSS ленте пользователя по умолчанию без аутентификации:', - 'type' => 'Метод аутентификации', - 'unsafe_autologin' => 'Разрешить небезопасный автоматический вход с использованием следующего формата: ', - ), - 'check_install' => array( - 'cache' => array( - 'nok' => 'Проверьте права доступа к папке ./data/cache. Сервер HTTP должен иметь права на запись в эту папку', - 'ok' => 'Права на ./data/cache в порядке.', - ), - 'categories' => array( - 'nok' => 'Таблица категорий настроена неправильно.', - 'ok' => 'Таблица категорий настроена правильно.', - ), - 'connection' => array( - 'nok' => 'Подключение к базе данных не может быть установлено.', - 'ok' => 'Подключение к базе данных в порядке.', - ), - 'ctype' => array( - 'nok' => 'У вас не установлена библиотека для проверки типов символов (php-ctype).', - 'ok' => 'У вас не установлена библиотека для проверки типов символов (ctype).', - ), - 'curl' => array( - 'nok' => 'У вас не установлено расширение cURL (пакет php5-curl).', - 'ok' => 'У вас установлено расширение cURL.', - ), - 'data' => array( - 'nok' => 'Проверьте права доступа к папке ./data . Сервер HTTP должен иметь права на запись в эту папку.', - 'ok' => 'Права на ./data/ в порядке.', - ), - 'database' => 'Установка базы данных', - 'dom' => array( - 'nok' => 'У вас не установлена библиотека для просмотра DOM (пакет php-xml).', - 'ok' => 'У вас установлена библиотека для просмотра DOM.', - ), - 'entries' => array( - 'nok' => 'Таблица статей (entry) неправильно настроена.', - 'ok' => 'Таблица статей (entry) настроена правильно.', - ), - 'favicons' => array( - 'nok' => 'Проверьте права доступа к папке ./data/favicons . Сервер HTTP должен иметь права на запись в эту папку.', - 'ok' => 'Права на папку значков в порядке.', - ), - 'feeds' => array( - 'nok' => 'Таблица подписок (feed) неправильно настроена.', - 'ok' => 'Таблица подписок (feed) настроена правильно.', - ), - 'files' => 'Установка файлов', - 'json' => array( - 'nok' => 'У вас не установлена библиотека для работы с JSON (пакет php5-json).', - 'ok' => 'У вас установлена библиотека для работы с JSON.', - ), - 'minz' => array( - 'nok' => 'У вас не установлен фрейворк Minz.', - 'ok' => 'У вас установлен фрейворк Minz.', - ), - 'pcre' => array( - 'nok' => 'У вас не установлена необходимая библиотека для работы с регулярными выражениями (php-pcre).', - 'ok' => 'У вас установлена необходимая библиотека для работы с регулярными выражениями (PCRE).', - ), - 'pdo' => array( - 'nok' => 'У вас не установлен PDO или один из необходимых драйверов (pdo_mysql, pdo_sqlite).', - 'ok' => 'У вас установлен PDO и как минимум один из поддерживаемых драйверов (pdo_mysql, pdo_sqlite).', - ), - 'persona' => array( - 'nok' => 'Проверьте права доступа к папке ./data/persona . Сервер HTTP должен иметь права на запись в эту папку.', - 'ok' => 'Права на папку Mozilla Persona в порядке.', - ), - 'php' => array( - '_' => 'PHP installation', - 'nok' => 'У вас установлен PHP версии %s, но FreshRSS необходима версия не ниже %s.', - 'ok' => 'У вас установлен PHP версии %s, который совместим с FreshRSS.', - ), - 'tables' => array( - 'nok' => 'В базе данных отсуствует одна или больше таблица.', - 'ok' => 'Все таблицы есть в базе данных.', - ), - 'title' => 'Проверка установки и настройки', - 'tokens' => array( - 'nok' => 'Проверьте права доступа к папке ./data/tokens . Сервер HTTP должен иметь права на запись в эту папку.', - 'ok' => 'Права на папку tokens в порядке.', - ), - 'users' => array( - 'nok' => 'Проверьте права доступа к папке ./data/users . Сервер HTTP должен иметь права на запись в эту папку.', - 'ok' => 'Права на папку users в порядке.', - ), - 'zip' => array( - 'nok' => 'You lack ZIP extension (php5-zip package).', - 'ok' => 'You have ZIP extension.', - ), - ), - 'extensions' => array( - 'disabled' => 'Отключены', - 'empty_list' => 'Расширения не установлены', - 'enabled' => 'Включены', - 'no_configure_view' => 'Это расширение нельзя настроить.', - 'system' => array( - '_' => 'Системные расширения', - 'no_rights' => 'Системные расширения (у вас нет к ним доступа)', - ), - 'title' => 'Расширения', - 'user' => 'Расширения пользователя', - ), - 'stats' => array( - '_' => 'Статистика', - 'all_feeds' => 'Все подписки', - 'category' => 'Категория', - 'entry_count' => 'Количество статей', - 'entry_per_category' => 'Статей в категории', - 'entry_per_day' => 'Статей за день (за последние 30 дней)', - 'entry_per_day_of_week' => 'За неделю (в среднем - %.2f сообщений)', - 'entry_per_hour' => 'За час (в среднем - %.2f сообщений)', - 'entry_per_month' => 'За месяц (в среднем - %.2f сообщений)', - 'entry_repartition' => 'Перерасределение статей', - 'feed' => 'Подписка', - 'feed_per_category' => 'Подписок в категории', - 'idle' => 'Неактивные подписки', - 'main' => 'Основная статистика', - 'main_stream' => 'Основной поток', - 'menu' => array( - 'idle' => 'Неактивные подписки', - 'main' => 'Основная статистика', - 'repartition' => 'Перерасределение статей', - ), - 'no_idle' => 'Нет неактивных подписок!', - 'number_entries' => 'статей: %d', - 'percent_of_total' => '%% от всего', - 'repartition' => 'Перераспределение статей', - 'status_favorites' => 'Избранное', - 'status_read' => 'Читать', - 'status_total' => 'Всего', - 'status_unread' => 'Не прочитано', - 'title' => 'Статистика', - 'top_feed' => '10 лучших подписок', - ), - 'system' => array( - '_' => 'Системные настройки', - 'auto-update-url' => 'Адрес сервера для автоматического обновления', - 'instance-name' => 'Название этого сервера', - 'max-categories' => 'Количество категорий на пользователя', - 'max-feeds' => 'Количество статей на пользователя', - 'registration' => array( - 'help' => '0 означает неограниченное количество пользователей', - 'number' => 'Максимальное количество пользователей', - ), - ), - 'update' => array( - '_' => 'Обновление системы', - 'apply' => 'Применить', - 'check' => 'Проверить обновления', - 'current_version' => 'Ваша текущая версия FreshRSS: %s.', - 'last' => 'Последняя проверка: %s', - 'none' => 'Нечего обновлять', - 'title' => 'Обновить систему', - ), - 'user' => array( - 'articles_and_size' => '%s статей (%s)', - 'create' => 'Создать нового пользователя', - 'email_persona' => 'Адрес электронной почты для входа
(for Mozilla Persona)', - 'language' => 'Язык', - 'number' => 'На данный момент создан %d аккаунт', - 'numbers' => 'На данный момент аккаунтов создано: %d', - 'password_form' => 'Пароль
(для входа через Веб-форму)', - 'password_format' => 'Минимум 7 символов', - 'title' => 'Управление пользователями', - 'user_list' => 'Список пользователей', - 'username' => 'Имя пользователя', - 'users' => 'Пользователи', - ), -); diff --git a/app/i18n/ru/conf.php b/app/i18n/ru/conf.php deleted file mode 100644 index 69162932f..000000000 --- a/app/i18n/ru/conf.php +++ /dev/null @@ -1,174 +0,0 @@ - array( - '_' => 'Archiving', - 'advanced' => 'Advanced', - 'delete_after' => 'Remove articles after', - 'help' => 'More options are available in the individual feed settings', - 'keep_history_by_feed' => 'Minimum number of articles to keep by feed', - 'optimize' => 'Optimise database', - 'optimize_help' => 'To do occasionally to reduce the size of the database', - 'purge_now' => 'Purge now', - 'title' => 'Archiving', - 'ttl' => 'Do not automatically refresh more often than', - ), - 'display' => array( - '_' => 'Display', - 'icon' => array( - 'bottom_line' => 'Bottom line', - 'entry' => 'Article icons', - 'publication_date' => 'Date of publication', - 'related_tags' => 'Related tags', - 'sharing' => 'Sharing', - 'top_line' => 'Top line', - ), - 'language' => 'Language', - 'notif_html5' => array( - 'seconds' => 'seconds (0 means no timeout)', - 'timeout' => 'HTML5 notification timeout', - ), - 'theme' => 'Theme', - 'title' => 'Display', - 'width' => array( - 'content' => 'Content width', - 'large' => 'Large', - 'medium' => 'Medium', - 'no_limit' => 'No limit', - 'thin' => 'Thin', - ), - ), - 'query' => array( - '_' => 'User queries', - 'deprecated' => 'This query is no longer valid. The referenced category or feed has been deleted.', - 'filter' => 'Filter applied:', - 'get_all' => 'Display all articles', - 'get_category' => 'Display "%s" category', - 'get_favorite' => 'Display favorite articles', - 'get_feed' => 'Display "%s" feed', - 'no_filter' => 'No filter', - 'none' => 'You haven’t created any user query yet.', - 'number' => 'Query n°%d', - 'order_asc' => 'Display oldest articles first', - 'order_desc' => 'Display newest articles first', - 'search' => 'Search for "%s"', - 'state_0' => 'Display all articles', - 'state_1' => 'Display read articles', - 'state_2' => 'Display unread articles', - 'state_3' => 'Display all articles', - 'state_4' => 'Display favorite articles', - 'state_5' => 'Display read favorite articles', - 'state_6' => 'Display unread favorite articles', - 'state_7' => 'Display favorite articles', - 'state_8' => 'Display not favorite articles', - 'state_9' => 'Display read not favorite articles', - 'state_10' => 'Display unread not favorite articles', - 'state_11' => 'Display not favorite articles', - 'state_12' => 'Display all articles', - 'state_13' => 'Display read articles', - 'state_14' => 'Display unread articles', - 'state_15' => 'Display all articles', - 'title' => 'User queries', - ), - 'profile' => array( - '_' => 'Profile management', - 'delete' => array( - '_' => 'Account deletion', - 'warn' => 'Your account and all the related data will be deleted.', - ), - 'email_persona' => 'Login email address
(for Mozilla Persona)', - 'password_api' => 'Password API
(e.g., for mobile apps)', - 'password_form' => 'Password
(for the Web-form login method)', - 'password_format' => 'At least 7 characters', - 'title' => 'Profile', - ), - 'reading' => array( - '_' => 'Reading', - 'after_onread' => 'After “mark all as read”,', - 'articles_per_page' => 'Number of articles per page', - 'auto_load_more' => 'Load next articles at the page bottom', - 'auto_remove_article' => 'Hide articles after reading', - 'mark_updated_article_unread' => 'Mark updated articles as unread', - 'confirm_enabled' => 'Display a confirmation dialog on “mark all as read” actions', - 'display_articles_unfolded' => 'Show articles unfolded by default', - 'display_categories_unfolded' => 'Show categories folded by default', - 'hide_read_feeds' => 'Hide categories & feeds with no unread article (does not work with “Show all articles” configuration)', - 'img_with_lazyload' => 'Use "lazy load" mode to load pictures', - 'jump_next' => 'jump to next unread sibling (feed or category)', - 'number_divided_when_reader' => 'Divided by 2 in the reading view.', - 'read' => array( - 'article_open_on_website' => 'when article is opened on its original website', - 'article_viewed' => 'when article is viewed', - 'scroll' => 'while scrolling', - 'upon_reception' => 'upon reception of the article', - 'when' => 'Mark article as read…', - ), - 'show' => array( - '_' => 'Articles to display', - 'adaptive' => 'Adjust showing', - 'all_articles' => 'Show all articles', - 'unread' => 'Show only unread', - ), - 'sort' => array( - '_' => 'Sort order', - 'newer_first' => 'Newer first', - 'older_first' => 'Oldest first', - ), - 'sticky_post' => 'Stick the article to the top when opened', - 'title' => 'Reading', - 'view' => array( - 'default' => 'Default view', - 'global' => 'Global view', - 'normal' => 'Normal view', - 'reader' => 'Reading view', - ), - ), - 'sharing' => array( - '_' => 'Sharing', - 'blogotext' => 'Blogotext', - 'diaspora' => 'Diaspora*', - 'email' => 'Email', - 'facebook' => 'Facebook', - 'g+' => 'Google+', - 'more_information' => 'More information', - 'print' => 'Print', - 'shaarli' => 'Shaarli', - 'share_name' => 'Share name to display', - 'share_url' => 'Share URL to use', - 'title' => 'Sharing', - 'twitter' => 'Twitter', - 'wallabag' => 'wallabag', - ), - 'shortcut' => array( - '_' => 'Shortcuts', - 'article_action' => 'Article actions', - 'auto_share' => 'Share', - 'auto_share_help' => 'If there is only one sharing mode, it is used. Else modes are accessible by their number.', - 'close_dropdown' => 'Close menus', - 'collapse_article' => 'Collapse', - 'first_article' => 'Skip to the first article', - 'focus_search' => 'Access search box', - 'help' => 'Display documentation', - 'javascript' => 'JavaScript must be enabled in order to use shortcuts', - 'last_article' => 'Skip to the last article', - 'load_more' => 'Load more articles', - 'mark_read' => 'Mark as read', - 'mark_favorite' => 'Mark as favourite', - 'navigation' => 'Navigation', - 'navigation_help' => 'With the "Shift" modifier, navigation shortcuts apply on feeds.
With the "Alt" modifier, navigation shortcuts apply on categories.', - 'next_article' => 'Skip to the next article', - 'other_action' => 'Other actions', - 'previous_article' => 'Skip to the previous article', - 'see_on_website' => 'See on original website', - 'shift_for_all_read' => '+ shift to mark all articles as read', - 'title' => 'Shortcuts', - 'user_filter' => 'Access user filters', - 'user_filter_help' => 'If there is only one user filter, it is used. Else filters are accessible by their number.', - ), - 'user' => array( - 'articles_and_size' => '%s articles (%s)', - 'current' => 'Current user', - 'is_admin' => 'is administrator', - 'users' => 'Users', - ), -); diff --git a/app/i18n/ru/feedback.php b/app/i18n/ru/feedback.php deleted file mode 100644 index c9189c0d0..000000000 --- a/app/i18n/ru/feedback.php +++ /dev/null @@ -1,110 +0,0 @@ - array( - 'optimization_complete' => 'Optimisation complete', - ), - 'access' => array( - 'denied' => 'You don’t have permission to access this page', - 'not_found' => 'You are looking for a page which doesn’t exist', - ), - 'auth' => array( - 'form' => array( - 'not_set' => 'A problem occured during authentication system configuration. Please retry later.', - 'set' => 'Form is now your default authentication system.', - ), - 'login' => array( - 'invalid' => 'Login is invalid', - 'success' => 'You are connected', - ), - 'logout' => array( - 'success' => 'You are disconnected', - ), - 'no_password_set' => 'Administrator password hasn’t been set. This feature isn’t available.', - 'not_persona' => 'Only Persona system can be reset.', - ), - 'conf' => array( - 'error' => 'An error occurred during configuration saving', - 'query_created' => 'Query "%s" has been created.', - 'shortcuts_updated' => 'Shortcuts have been updated', - 'updated' => 'Configuration has been updated', - ), - 'extensions' => array( - 'already_enabled' => '%s is already enabled', - 'disable' => array( - 'ko' => '%s cannot be disabled. Check FressRSS logs for details.', - 'ok' => '%s is now disabled', - ), - 'enable' => array( - 'ko' => '%s cannot be enabled. Check FressRSS logs for details.', - 'ok' => '%s is now enabled', - ), - 'no_access' => 'You have no access on %s', - 'not_enabled' => '%s is not enabled yet', - 'not_found' => '%s does not exist', - ), - 'import_export' => array( - 'export_no_zip_extension' => 'Zip extension is not present on your server. Please try to export files one by one.', - 'feeds_imported' => 'Your feeds have been imported and will now be updated', - 'feeds_imported_with_errors' => 'Your feeds have been imported but some errors occurred', - 'file_cannot_be_uploaded' => 'File cannot be uploaded!', - 'no_zip_extension' => 'Zip extension is not present on your server.', - 'zip_error' => 'An error occured during Zip import.', - ), - 'sub' => array( - 'actualize' => 'Actualise', - 'category' => array( - 'created' => 'Category %s has been created.', - 'deleted' => 'Category has been deleted.', - 'emptied' => 'Category has been emptied', - 'error' => 'Category cannot be updated', - 'name_exists' => 'Category name already exists.', - 'no_id' => 'You must precise the id of the category.', - 'no_name' => 'Category name cannot be empty.', - 'not_delete_default' => 'You cannot delete the default category!', - 'not_exist' => 'The category does not exist!', - 'over_max' => 'You have reached your limit of categories (%d)', - 'updated' => 'Category has been updated.', - ), - 'feed' => array( - 'actualized' => '%s has been updated', - 'actualizeds' => 'RSS feeds have been updated', - 'added' => 'RSS feed %s has been added', - 'already_subscribed' => 'You have already subscribed to %s', - 'deleted' => 'Feed has been deleted', - 'error' => 'Feed cannot be updated', - 'internal_problem' => 'The RSS feed could not be added. Check FressRSS logs for details.', - 'invalid_url' => 'URL %s is invalid', - 'marked_read' => 'Feeds have been marked as read', - 'n_actualized' => '%d feeds have been updated', - 'n_entries_deleted' => '%d articles have been deleted', - 'no_refresh' => 'There is no feed to refresh…', - 'not_added' => '%s could not be added', - 'over_max' => 'You have reached your limit of feeds (%d)', - 'updated' => 'Feed has been updated', - ), - 'purge_completed' => 'Purge completed (%d articles deleted)', - ), - 'update' => array( - 'can_apply' => 'FreshRSS will now be updated to the version %s.', - 'error' => 'The update process has encountered an error: %s', - 'file_is_nok' => 'Check permissions on %s directory. HTTP server must have rights to write into', - 'finished' => 'Update completed!', - 'none' => 'No update to apply', - 'server_not_found' => 'Update server cannot be found. [%s]', - ), - 'user' => array( - 'created' => array( - '_' => 'User %s has been created', - 'error' => 'User %s cannot be created', - ), - 'deleted' => array( - '_' => 'User %s has been deleted', - 'error' => 'User %s cannot be deleted', - ), - ), - 'profile' => array( - 'error' => 'Your profile cannot be modified', - 'updated' => 'Your profile has been modified', - ), -); diff --git a/app/i18n/ru/gen.php b/app/i18n/ru/gen.php deleted file mode 100644 index d23b12f95..000000000 --- a/app/i18n/ru/gen.php +++ /dev/null @@ -1,181 +0,0 @@ - array( - 'actualize' => 'Actualize', - 'back_to_rss_feeds' => '← Go back to your RSS feeds', - 'cancel' => 'Cancel', - 'create' => 'Create', - 'disable' => 'Disable', - 'empty' => 'Empty', - 'enable' => 'Enable', - 'export' => 'Export', - 'filter' => 'Filter', - 'import' => 'Import', - 'manage' => 'Manage', - 'mark_read' => 'Mark as read', - 'mark_favorite' => 'Mark as favourite', - 'remove' => 'Remove', - 'see_website' => 'See website', - 'submit' => 'Submit', - 'truncate' => 'Delete all articles', - ), - 'auth' => array( - 'email' => 'Email address', - 'keep_logged_in' => 'Keep me logged in (1 month)', - 'login' => 'Login', - 'login_persona' => 'Login with Persona', - 'login_persona_problem' => 'Connection problem with Persona?', - 'logout' => 'Logout', - 'password' => array( - '_' => 'Password', - 'format' => 'At least 7 characters', - ), - 'registration' => array( - '_' => 'New account', - 'ask' => 'Create an account?', - 'title' => 'Account creation', - ), - 'reset' => 'Authentication reset', - 'username' => array( - '_' => 'Username', - 'admin' => 'Administrator username', - 'format' => 'maximum 16 alphanumeric characters', - ), - 'will_reset' => 'Authentication system will be reset: a form will be used instead of Persona.', - ), - 'date' => array( - 'Apr' => '\\A\\p\\r\\i\\l', - 'Aug' => '\\A\\u\\g\\u\\s\\t', - 'Dec' => '\\D\\e\\c\\e\\m\\b\\e\\r', - 'Feb' => '\\F\\e\\b\\r\\u\\a\\r\\y', - 'Jan' => '\\J\\a\\n\\u\\a\\r\\y', - 'Jul' => '\\J\\u\\l\\y', - 'Jun' => '\\J\\u\\n\\e', - 'Mar' => '\\M\\a\\r\\c\\h', - 'May' => '\\M\\a\\y', - 'Nov' => '\\N\\o\\v\\e\\m\\b\\e\\r', - 'Oct' => '\\O\\c\\t\\o\\b\\e\\r', - 'Sep' => '\\S\\e\\p\\t\\e\\m\\b\\e\\r', - 'apr' => 'apr', - 'april' => 'Apr', - 'aug' => 'aug', - 'august' => 'Aug', - 'before_yesterday' => 'Before yesterday', - 'dec' => 'dec', - 'december' => 'Dec', - 'feb' => 'feb', - 'february' => 'Feb', - 'format_date' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y', - 'format_date_hour' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y \\a\\t H\\:i', - 'fri' => 'Fri', - 'jan' => 'jan', - 'january' => 'Jan', - 'jul' => 'jul', - 'july' => 'Jul', - 'jun' => 'jun', - 'june' => 'Jun', - 'last_3_month' => 'Last three months', - 'last_6_month' => 'Last six months', - 'last_month' => 'Last month', - 'last_week' => 'Last week', - 'last_year' => 'Last year', - 'mar' => 'mar', - 'march' => 'Mar', - 'may' => 'May', - 'mon' => 'Mon', - 'month' => 'months', - 'nov' => 'nov', - 'november' => 'Nov', - 'oct' => 'oct', - 'october' => 'Oct', - 'sat' => 'Sat', - 'sep' => 'sep', - 'september' => 'Sep', - 'sun' => 'Sun', - 'thu' => 'Thu', - 'today' => 'Today', - 'tue' => 'Tue', - 'wed' => 'Wed', - 'yesterday' => 'Yesterday', - ), - 'freshrss' => array( - '_' => 'FreshRSS', - 'about' => 'About FreshRSS', - ), - 'js' => array( - 'category_empty' => 'Empty category', - 'confirm_action' => 'Are you sure you want to perform this action? It cannot be cancelled!', - 'confirm_action_feed_cat' => 'Are you sure you want to perform this action? You will lose related favorites and user queries. It cannot be cancelled!', - 'feedback' => array( - 'body_new_articles' => 'There are \\d new articles to read on FreshRSS.', - 'request_failed' => 'A request has failed, it may have been caused by Internet connection problems.', - 'title_new_articles' => 'FreshRSS: new articles!', - ), - 'new_article' => 'There are new available articles, click to refresh the page.', - 'should_be_activated' => 'JavaScript must be enabled', - ), - 'lang' => array( - 'cz' => 'Čeština', - 'de' => 'Deutsch', - 'en' => 'English', - 'fr' => 'Français', - 'it' => 'Italiano', - 'nl' => 'Nederlands', - ), - 'menu' => array( - 'about' => 'About', - 'admin' => 'Administration', - 'archiving' => 'Archiving', - 'authentication' => 'Authentication', - 'check_install' => 'Installation checking', - 'configuration' => 'Configuration', - 'display' => 'Display', - 'extensions' => 'Extensions', - 'logs' => 'Logs', - 'queries' => 'User queries', - 'reading' => 'Reading', - 'search' => 'Search words or #tags', - 'sharing' => 'Sharing', - 'shortcuts' => 'Shortcuts', - 'stats' => 'Statistics', - 'system' => 'System configuration', - 'update' => 'Update', - 'user_management' => 'Manage users', - 'user_profile' => 'Profile', - ), - 'pagination' => array( - 'first' => 'First', - 'last' => 'Last', - 'load_more' => 'Load more articles', - 'mark_all_read' => 'Mark all as read', - 'next' => 'Next', - 'nothing_to_load' => 'There are no more articles', - 'previous' => 'Previous', - ), - 'share' => array( - 'blogotext' => 'Blogotext', - 'diaspora' => 'Diaspora*', - 'email' => 'Email', - 'facebook' => 'Facebook', - 'g+' => 'Google+', - 'movim' => 'Movim', - 'print' => 'Print', - 'shaarli' => 'Shaarli', - 'twitter' => 'Twitter', - 'wallabag' => 'wallabag', - ), - 'short' => array( - 'attention' => 'Warning!', - 'blank_to_disable' => 'Leave blank to disable', - 'by_author' => 'By %s', - 'by_default' => 'By default', - 'damn' => 'Damn!', - 'default_category' => 'Uncategorized', - 'no' => 'No', - 'not_applicable' => 'Not available', - 'ok' => 'Ok!', - 'or' => 'or', - 'yes' => 'Yes', - ), -); diff --git a/app/i18n/ru/index.php b/app/i18n/ru/index.php deleted file mode 100644 index 80fa3d950..000000000 --- a/app/i18n/ru/index.php +++ /dev/null @@ -1,61 +0,0 @@ - array( - '_' => 'About', - 'agpl3' => 'AGPL 3', - 'bugs_reports' => 'Bugs reports', - 'credits' => 'Credits', - 'credits_content' => 'Some design elements come from Bootstrap although FreshRSS doesn’t use this framework. Icons come from GNOME project. Open Sans font police has been created by Steve Matteson. Favicons are collected with getFavicon API. FreshRSS is based on Minz, a PHP framework.', - 'freshrss_description' => 'FreshRSS is a RSS feeds aggregator to self-host like Kriss Feed or Leed. It is light and easy to take in hand while being powerful and configurable tool.', - 'github' => 'on Github', - 'license' => 'License', - 'project_website' => 'Project website', - 'title' => 'About', - 'version' => 'Version', - 'website' => 'Website', - ), - 'feed' => array( - 'add' => 'You may add some feeds.', - 'empty' => 'There is no article to show.', - 'rss_of' => 'RSS feed of %s', - 'title' => 'Your RSS feeds', - 'title_global' => 'Global view', - 'title_fav' => 'Your favourites', - ), - 'log' => array( - '_' => 'Logs', - 'clear' => 'Clear the logs', - 'empty' => 'Log file is empty', - 'title' => 'Logs', - ), - 'menu' => array( - 'about' => 'About FreshRSS', - 'add_query' => 'Add a query', - 'before_one_day' => 'Before one day', - 'before_one_week' => 'Before one week', - 'favorites' => 'Favourites (%s)', - 'global_view' => 'Global view', - 'main_stream' => 'Main stream', - 'mark_all_read' => 'Mark all as read', - 'mark_cat_read' => 'Mark category as read', - 'mark_feed_read' => 'Mark feed as read', - 'newer_first' => 'Newer first', - 'non-starred' => 'Show all but favorites', - 'normal_view' => 'Normal view', - 'older_first' => 'Oldest first', - 'queries' => 'User queries', - 'read' => 'Show only read', - 'reader_view' => 'Reading view', - 'rss_view' => 'RSS feed', - 'search_short' => 'Search', - 'starred' => 'Show only favorites', - 'stats' => 'Statistics', - 'subscription' => 'Subscriptions management', - 'unread' => 'Show only unread', - ), - 'share' => 'Share', - 'tag' => array( - 'related' => 'Related tags', - ), -); diff --git a/app/i18n/ru/install.php b/app/i18n/ru/install.php deleted file mode 100644 index b94fbc299..000000000 --- a/app/i18n/ru/install.php +++ /dev/null @@ -1,113 +0,0 @@ - array( - 'finish' => 'Complete installation', - 'fix_errors_before' => 'Please fix errors before skipping to the next step.', - 'keep_install' => 'Keep previous installation', - 'next_step' => 'Go to the next step', - 'reinstall' => 'Reinstall FreshRSS', - ), - 'auth' => array( - 'email_persona' => 'Login email address
(for Mozilla Persona)', - 'form' => 'Web form (traditional, requires JavaScript)', - 'http' => 'HTTP (for advanced users with HTTPS)', - 'none' => 'None (dangerous)', - 'password_form' => 'Password
(for the Web-form login method)', - 'password_format' => 'At least 7 characters', - 'persona' => 'Mozilla Persona (modern, requires JavaScript)', - 'type' => 'Authentication method', - ), - 'bdd' => array( - '_' => 'Database', - 'conf' => array( - '_' => 'Database configuration', - 'ko' => 'Verify your database information.', - 'ok' => 'Database configuration has been saved.', - ), - 'host' => 'Host', - 'prefix' => 'Table prefix', - 'password' => 'HTTP password', - 'type' => 'Type of database', - 'username' => 'HTTP username', - ), - 'check' => array( - '_' => 'Checks', - 'already_installed' => 'We have detected that FreshRSS is already installed!', - 'cache' => array( - 'nok' => 'Check permissions on ./data/cache directory. HTTP server must have rights to write into', - 'ok' => 'Permissions on cache directory are good.', - ), - 'ctype' => array( - 'nok' => 'You lack a required library for character type checking (php-ctype).', - 'ok' => 'You have the required library for character type checking (ctype).', - ), - 'curl' => array( - 'nok' => 'You lack cURL (php5-curl package).', - 'ok' => 'You have cURL extension.', - ), - 'data' => array( - 'nok' => 'Check permissions on ./data directory. HTTP server must have rights to write into', - 'ok' => 'Permissions on data directory are good.', - ), - 'dom' => array( - 'nok' => 'You lack a required library to browse the DOM (php-xml package).', - 'ok' => 'You have the required library to browse the DOM.', - ), - 'favicons' => array( - 'nok' => 'Check permissions on ./data/favicons directory. HTTP server must have rights to write into', - 'ok' => 'Permissions on favicons directory are good.', - ), - 'http_referer' => array( - 'nok' => 'Please check that you are not altering your HTTP REFERER.', - 'ok' => 'Your HTTP REFERER is known and corresponds to your server.', - ), - 'minz' => array( - 'nok' => 'You lack the Minz framework.', - 'ok' => 'You have the Minz framework.', - ), - 'pcre' => array( - 'nok' => 'You lack a required library for regular expressions (php-pcre).', - 'ok' => 'You have the required library for regular expressions (PCRE).', - ), - 'pdo' => array( - 'nok' => 'You lack PDO or one of the supported drivers (pdo_mysql, pdo_sqlite).', - 'ok' => 'You have PDO and at least one of the supported drivers (pdo_mysql, pdo_sqlite).', - ), - 'persona' => array( - 'nok' => 'Check permissions on ./data/persona directory. HTTP server must have rights to write into', - 'ok' => 'Permissions on Mozilla Persona directory are good.', - ), - 'php' => array( - 'nok' => 'Your PHP version is %s but FreshRSS requires at least version %s.', - 'ok' => 'Your PHP version is %s, which is compatible with FreshRSS.', - ), - 'users' => array( - 'nok' => 'Check permissions on ./data/users directory. HTTP server must have rights to write into', - 'ok' => 'Permissions on users directory are good.', - ), - ), - 'conf' => array( - '_' => 'General configuration', - 'ok' => 'General configuration has been saved.', - ), - 'congratulations' => 'Congratulations!', - 'default_user' => 'Username of the default user (maximum 16 alphanumeric characters)', - 'delete_articles_after' => 'Remove articles after', - 'fix_errors_before' => 'Please fix errors before skipping to the next step.', - 'javascript_is_better' => 'FreshRSS is more pleasant with JavaScript enabled', - 'js' => array( - 'confirm_reinstall' => 'You will lose your previous configuration by reinstalling FreshRSS. Are you sure you want to continue?', - ), - 'language' => array( - '_' => 'Language', - 'choose' => 'Choose a language for FreshRSS', - 'defined' => 'Language has been defined.', - ), - 'not_deleted' => 'Something went wrong; you must delete the file %s manually.', - 'ok' => 'The installation process was successful.', - 'step' => 'step %d', - 'steps' => 'Steps', - 'title' => 'Installation · FreshRSS', - 'this_is_the_end' => 'This is the end', -); diff --git a/app/i18n/ru/sub.php b/app/i18n/ru/sub.php deleted file mode 100644 index aaaa02827..000000000 --- a/app/i18n/ru/sub.php +++ /dev/null @@ -1,62 +0,0 @@ - array( - '_' => 'Category', - 'add' => 'Add a category', - 'empty' => 'Empty category', - 'new' => 'New category', - ), - 'feed' => array( - 'add' => 'Add a RSS feed', - 'advanced' => 'Advanced', - 'archiving' => 'Archivage', - 'auth' => array( - 'configuration' => 'Login', - 'help' => 'Connection allows to access HTTP protected RSS feeds', - 'http' => 'HTTP Authentication', - 'password' => 'HTTP password', - 'username' => 'HTTP username', - ), - 'css_help' => 'Retrieves truncated RSS feeds (caution, requires more time!)', - 'css_path' => 'Articles CSS path on original website', - 'description' => 'Description', - 'empty' => 'This feed is empty. Please verify that it is still maintained.', - 'error' => 'This feed has encountered a problem. Please verify that it is always reachable then actualize it.', - 'in_main_stream' => 'Show in main stream', - 'informations' => 'Information', - 'keep_history' => 'Minimum number of articles to keep', - 'moved_category_deleted' => 'When you delete a category, its feeds are automatically classified under %s.', - 'no_selected' => 'No feed selected.', - 'number_entries' => '%d articles', - 'stats' => 'Statistics', - 'think_to_add' => 'You may add some feeds.', - 'title' => 'Title', - 'title_add' => 'Add a RSS feed', - 'ttl' => 'Do not automatically refresh more often than', - 'url' => 'Feed URL', - 'validator' => 'Check the validity of the feed', - 'website' => 'Website URL', - 'pubsubhubbub' => 'Instant notification with PubSubHubbub', - ), - 'import_export' => array( - 'export' => 'Export', - 'export_opml' => 'Export list of feeds (OPML)', - 'export_starred' => 'Export your favourites', - 'feed_list' => 'List of %s articles', - 'file_to_import' => 'File to import
(OPML, Json or Zip)', - 'file_to_import_no_zip' => 'File to import
(OPML or Json)', - 'import' => 'Import', - 'starred_list' => 'List of favourite articles', - 'title' => 'Import / export', - ), - 'menu' => array( - 'bookmark' => 'Subscribe (FreshRSS bookmark)', - 'import_export' => 'Import / export', - 'subscription_management' => 'Subscriptions management', - ), - 'title' => array( - '_' => 'Subscriptions management', - 'feed_management' => 'RSS feeds management', - ), -); diff --git a/app/i18n/ru_RU.utf8/admin.php b/app/i18n/ru_RU.utf8/admin.php new file mode 100644 index 000000000..dfea5b3cb --- /dev/null +++ b/app/i18n/ru_RU.utf8/admin.php @@ -0,0 +1,183 @@ + array( + 'allow_anonymous' => 'Разрешить анонимное чтение статей для пользователя по умолчанию (%s)', + 'allow_anonymous_refresh' => 'Разрешить анонимное обновление статей', + 'api_enabled' => 'Включить доступ к API (необходимо для мобильных приложений)', + 'form' => 'На основе веб-формы (традиционный, необходим JavaScript)', + 'http' => 'HTTP (для продвинутых пользователей - по HTTPS)', + 'none' => 'Без аутентификации (небезопасный)', + 'persona' => 'Mozilla Persona (новый, необходим JavaScript)', + 'title' => 'Аутентификации', + 'title_reset' => 'Сброс аутентицикации', + 'token' => 'Токен аутентификации', + 'token_help' => 'Разрешает доступ к RSS ленте пользователя по умолчанию без аутентификации:', + 'type' => 'Метод аутентификации', + 'unsafe_autologin' => 'Разрешить небезопасный автоматический вход с использованием следующего формата: ', + ), + 'check_install' => array( + 'cache' => array( + 'nok' => 'Проверьте права доступа к папке ./data/cache. Сервер HTTP должен иметь права на запись в эту папку', + 'ok' => 'Права на ./data/cache в порядке.', + ), + 'categories' => array( + 'nok' => 'Таблица категорий настроена неправильно.', + 'ok' => 'Таблица категорий настроена правильно.', + ), + 'connection' => array( + 'nok' => 'Подключение к базе данных не может быть установлено.', + 'ok' => 'Подключение к базе данных в порядке.', + ), + 'ctype' => array( + 'nok' => 'У вас не установлена библиотека для проверки типов символов (php-ctype).', + 'ok' => 'У вас не установлена библиотека для проверки типов символов (ctype).', + ), + 'curl' => array( + 'nok' => 'У вас не установлено расширение cURL (пакет php5-curl).', + 'ok' => 'У вас установлено расширение cURL.', + ), + 'data' => array( + 'nok' => 'Проверьте права доступа к папке ./data . Сервер HTTP должен иметь права на запись в эту папку.', + 'ok' => 'Права на ./data/ в порядке.', + ), + 'database' => 'Установка базы данных', + 'dom' => array( + 'nok' => 'У вас не установлена библиотека для просмотра DOM (пакет php-xml).', + 'ok' => 'У вас установлена библиотека для просмотра DOM.', + ), + 'entries' => array( + 'nok' => 'Таблица статей (entry) неправильно настроена.', + 'ok' => 'Таблица статей (entry) настроена правильно.', + ), + 'favicons' => array( + 'nok' => 'Проверьте права доступа к папке ./data/favicons . Сервер HTTP должен иметь права на запись в эту папку.', + 'ok' => 'Права на папку значков в порядке.', + ), + 'feeds' => array( + 'nok' => 'Таблица подписок (feed) неправильно настроена.', + 'ok' => 'Таблица подписок (feed) настроена правильно.', + ), + 'files' => 'Установка файлов', + 'json' => array( + 'nok' => 'У вас не установлена библиотека для работы с JSON (пакет php5-json).', + 'ok' => 'У вас установлена библиотека для работы с JSON.', + ), + 'minz' => array( + 'nok' => 'У вас не установлен фрейворк Minz.', + 'ok' => 'У вас установлен фрейворк Minz.', + ), + 'pcre' => array( + 'nok' => 'У вас не установлена необходимая библиотека для работы с регулярными выражениями (php-pcre).', + 'ok' => 'У вас установлена необходимая библиотека для работы с регулярными выражениями (PCRE).', + ), + 'pdo' => array( + 'nok' => 'У вас не установлен PDO или один из необходимых драйверов (pdo_mysql, pdo_sqlite).', + 'ok' => 'У вас установлен PDO и как минимум один из поддерживаемых драйверов (pdo_mysql, pdo_sqlite).', + ), + 'persona' => array( + 'nok' => 'Проверьте права доступа к папке ./data/persona . Сервер HTTP должен иметь права на запись в эту папку.', + 'ok' => 'Права на папку Mozilla Persona в порядке.', + ), + 'php' => array( + '_' => 'PHP installation', + 'nok' => 'У вас установлен PHP версии %s, но FreshRSS необходима версия не ниже %s.', + 'ok' => 'У вас установлен PHP версии %s, который совместим с FreshRSS.', + ), + 'tables' => array( + 'nok' => 'В базе данных отсуствует одна или больше таблица.', + 'ok' => 'Все таблицы есть в базе данных.', + ), + 'title' => 'Проверка установки и настройки', + 'tokens' => array( + 'nok' => 'Проверьте права доступа к папке ./data/tokens . Сервер HTTP должен иметь права на запись в эту папку.', + 'ok' => 'Права на папку tokens в порядке.', + ), + 'users' => array( + 'nok' => 'Проверьте права доступа к папке ./data/users . Сервер HTTP должен иметь права на запись в эту папку.', + 'ok' => 'Права на папку users в порядке.', + ), + 'zip' => array( + 'nok' => 'You lack ZIP extension (php5-zip package).', + 'ok' => 'You have ZIP extension.', + ), + ), + 'extensions' => array( + 'disabled' => 'Отключены', + 'empty_list' => 'Расширения не установлены', + 'enabled' => 'Включены', + 'no_configure_view' => 'Это расширение нельзя настроить.', + 'system' => array( + '_' => 'Системные расширения', + 'no_rights' => 'Системные расширения (у вас нет к ним доступа)', + ), + 'title' => 'Расширения', + 'user' => 'Расширения пользователя', + ), + 'stats' => array( + '_' => 'Статистика', + 'all_feeds' => 'Все подписки', + 'category' => 'Категория', + 'entry_count' => 'Количество статей', + 'entry_per_category' => 'Статей в категории', + 'entry_per_day' => 'Статей за день (за последние 30 дней)', + 'entry_per_day_of_week' => 'За неделю (в среднем - %.2f сообщений)', + 'entry_per_hour' => 'За час (в среднем - %.2f сообщений)', + 'entry_per_month' => 'За месяц (в среднем - %.2f сообщений)', + 'entry_repartition' => 'Перерасределение статей', + 'feed' => 'Подписка', + 'feed_per_category' => 'Подписок в категории', + 'idle' => 'Неактивные подписки', + 'main' => 'Основная статистика', + 'main_stream' => 'Основной поток', + 'menu' => array( + 'idle' => 'Неактивные подписки', + 'main' => 'Основная статистика', + 'repartition' => 'Перерасределение статей', + ), + 'no_idle' => 'Нет неактивных подписок!', + 'number_entries' => 'статей: %d', + 'percent_of_total' => '%% от всего', + 'repartition' => 'Перераспределение статей', + 'status_favorites' => 'Избранное', + 'status_read' => 'Читать', + 'status_total' => 'Всего', + 'status_unread' => 'Не прочитано', + 'title' => 'Статистика', + 'top_feed' => '10 лучших подписок', + ), + 'system' => array( + '_' => 'Системные настройки', + 'auto-update-url' => 'Адрес сервера для автоматического обновления', + 'instance-name' => 'Название этого сервера', + 'max-categories' => 'Количество категорий на пользователя', + 'max-feeds' => 'Количество статей на пользователя', + 'registration' => array( + 'help' => '0 означает неограниченное количество пользователей', + 'number' => 'Максимальное количество пользователей', + ), + ), + 'update' => array( + '_' => 'Обновление системы', + 'apply' => 'Применить', + 'check' => 'Проверить обновления', + 'current_version' => 'Ваша текущая версия FreshRSS: %s.', + 'last' => 'Последняя проверка: %s', + 'none' => 'Нечего обновлять', + 'title' => 'Обновить систему', + ), + 'user' => array( + 'articles_and_size' => '%s статей (%s)', + 'create' => 'Создать нового пользователя', + 'email_persona' => 'Адрес электронной почты для входа
(for Mozilla Persona)', + 'language' => 'Язык', + 'number' => 'На данный момент создан %d аккаунт', + 'numbers' => 'На данный момент аккаунтов создано: %d', + 'password_form' => 'Пароль
(для входа через Веб-форму)', + 'password_format' => 'Минимум 7 символов', + 'title' => 'Управление пользователями', + 'user_list' => 'Список пользователей', + 'username' => 'Имя пользователя', + 'users' => 'Пользователи', + ), +); diff --git a/app/i18n/ru_RU.utf8/conf.php b/app/i18n/ru_RU.utf8/conf.php new file mode 100644 index 000000000..e502e9a43 --- /dev/null +++ b/app/i18n/ru_RU.utf8/conf.php @@ -0,0 +1,174 @@ + array( + '_' => 'Архивация', + 'advanced' => 'Продвинутые настройки', + 'delete_after' => 'Удалять статьи после', + 'help' => 'Каждую подписку можно настроить более гибко', + 'keep_history_by_feed' => 'Minimum number of articles to keep by feed', + 'optimize' => 'Оптимизировать базу данных', + 'optimize_help' => 'To do occasionally to reduce the size of the database', + 'purge_now' => 'Очистить сейчас', + 'title' => 'Архивация', + 'ttl' => 'Не обновлять чаще чем', + ), + 'display' => array( + '_' => 'Display', + 'icon' => array( + 'bottom_line' => 'Bottom line', + 'entry' => 'Article icons', + 'publication_date' => 'Date of publication', + 'related_tags' => 'Related tags', + 'sharing' => 'Sharing', + 'top_line' => 'Top line', + ), + 'language' => 'Язык', + 'notif_html5' => array( + 'seconds' => 'seconds (0 means no timeout)', + 'timeout' => 'HTML5 notification timeout', + ), + 'theme' => 'Тема', + 'title' => 'Display', + 'width' => array( + 'content' => 'Content width', + 'large' => 'Large', + 'medium' => 'Medium', + 'no_limit' => 'No limit', + 'thin' => 'Thin', + ), + ), + 'query' => array( + '_' => 'User queries', + 'deprecated' => 'This query is no longer valid. The referenced category or feed has been deleted.', + 'filter' => 'Filter applied:', + 'get_all' => 'Display all articles', + 'get_category' => 'Display "%s" category', + 'get_favorite' => 'Display favorite articles', + 'get_feed' => 'Display "%s" feed', + 'no_filter' => 'No filter', + 'none' => 'You haven’t created any user query yet.', + 'number' => 'Query n°%d', + 'order_asc' => 'Display oldest articles first', + 'order_desc' => 'Display newest articles first', + 'search' => 'Search for "%s"', + 'state_0' => 'Display all articles', + 'state_1' => 'Display read articles', + 'state_2' => 'Display unread articles', + 'state_3' => 'Display all articles', + 'state_4' => 'Display favorite articles', + 'state_5' => 'Display read favorite articles', + 'state_6' => 'Display unread favorite articles', + 'state_7' => 'Display favorite articles', + 'state_8' => 'Display not favorite articles', + 'state_9' => 'Display read not favorite articles', + 'state_10' => 'Display unread not favorite articles', + 'state_11' => 'Display not favorite articles', + 'state_12' => 'Display all articles', + 'state_13' => 'Display read articles', + 'state_14' => 'Display unread articles', + 'state_15' => 'Display all articles', + 'title' => 'User queries', + ), + 'profile' => array( + '_' => 'Profile management', + 'delete' => array( + '_' => 'Account deletion', + 'warn' => 'Your account and all the related data will be deleted.', + ), + 'email_persona' => 'Login email address
(for Mozilla Persona)', + 'password_api' => 'Password API
(e.g., for mobile apps)', + 'password_form' => 'Password
(for the Web-form login method)', + 'password_format' => 'At least 7 characters', + 'title' => 'Profile', + ), + 'reading' => array( + '_' => 'Reading', + 'after_onread' => 'After “mark all as read”,', + 'articles_per_page' => 'Number of articles per page', + 'auto_load_more' => 'Load next articles at the page bottom', + 'auto_remove_article' => 'Hide articles after reading', + 'mark_updated_article_unread' => 'Mark updated articles as unread', + 'confirm_enabled' => 'Display a confirmation dialog on “mark all as read” actions', + 'display_articles_unfolded' => 'Show articles unfolded by default', + 'display_categories_unfolded' => 'Show categories folded by default', + 'hide_read_feeds' => 'Hide categories & feeds with no unread article (does not work with “Show all articles” configuration)', + 'img_with_lazyload' => 'Use "lazy load" mode to load pictures', + 'jump_next' => 'jump to next unread sibling (feed or category)', + 'number_divided_when_reader' => 'Divided by 2 in the reading view.', + 'read' => array( + 'article_open_on_website' => 'when article is opened on its original website', + 'article_viewed' => 'when article is viewed', + 'scroll' => 'while scrolling', + 'upon_reception' => 'upon reception of the article', + 'when' => 'Mark article as read…', + ), + 'show' => array( + '_' => 'Articles to display', + 'adaptive' => 'Adjust showing', + 'all_articles' => 'Show all articles', + 'unread' => 'Show only unread', + ), + 'sort' => array( + '_' => 'Sort order', + 'newer_first' => 'Newer first', + 'older_first' => 'Oldest first', + ), + 'sticky_post' => 'Stick the article to the top when opened', + 'title' => 'Reading', + 'view' => array( + 'default' => 'Default view', + 'global' => 'Global view', + 'normal' => 'Normal view', + 'reader' => 'Reading view', + ), + ), + 'sharing' => array( + '_' => 'Sharing', + 'blogotext' => 'Blogotext', + 'diaspora' => 'Diaspora*', + 'email' => 'Email', + 'facebook' => 'Facebook', + 'g+' => 'Google+', + 'more_information' => 'More information', + 'print' => 'Print', + 'shaarli' => 'Shaarli', + 'share_name' => 'Share name to display', + 'share_url' => 'Share URL to use', + 'title' => 'Sharing', + 'twitter' => 'Twitter', + 'wallabag' => 'wallabag', + ), + 'shortcut' => array( + '_' => 'Shortcuts', + 'article_action' => 'Article actions', + 'auto_share' => 'Share', + 'auto_share_help' => 'If there is only one sharing mode, it is used. Else modes are accessible by their number.', + 'close_dropdown' => 'Close menus', + 'collapse_article' => 'Collapse', + 'first_article' => 'Skip to the first article', + 'focus_search' => 'Access search box', + 'help' => 'Display documentation', + 'javascript' => 'JavaScript must be enabled in order to use shortcuts', + 'last_article' => 'Skip to the last article', + 'load_more' => 'Load more articles', + 'mark_read' => 'Mark as read', + 'mark_favorite' => 'Mark as favourite', + 'navigation' => 'Navigation', + 'navigation_help' => 'With the "Shift" modifier, navigation shortcuts apply on feeds.
With the "Alt" modifier, navigation shortcuts apply on categories.', + 'next_article' => 'Skip to the next article', + 'other_action' => 'Other actions', + 'previous_article' => 'Skip to the previous article', + 'see_on_website' => 'See on original website', + 'shift_for_all_read' => '+ shift to mark all articles as read', + 'title' => 'Shortcuts', + 'user_filter' => 'Access user filters', + 'user_filter_help' => 'If there is only one user filter, it is used. Else filters are accessible by their number.', + ), + 'user' => array( + 'articles_and_size' => '%s articles (%s)', + 'current' => 'Current user', + 'is_admin' => 'is administrator', + 'users' => 'Users', + ), +); diff --git a/app/i18n/ru_RU.utf8/feedback.php b/app/i18n/ru_RU.utf8/feedback.php new file mode 100644 index 000000000..c9189c0d0 --- /dev/null +++ b/app/i18n/ru_RU.utf8/feedback.php @@ -0,0 +1,110 @@ + array( + 'optimization_complete' => 'Optimisation complete', + ), + 'access' => array( + 'denied' => 'You don’t have permission to access this page', + 'not_found' => 'You are looking for a page which doesn’t exist', + ), + 'auth' => array( + 'form' => array( + 'not_set' => 'A problem occured during authentication system configuration. Please retry later.', + 'set' => 'Form is now your default authentication system.', + ), + 'login' => array( + 'invalid' => 'Login is invalid', + 'success' => 'You are connected', + ), + 'logout' => array( + 'success' => 'You are disconnected', + ), + 'no_password_set' => 'Administrator password hasn’t been set. This feature isn’t available.', + 'not_persona' => 'Only Persona system can be reset.', + ), + 'conf' => array( + 'error' => 'An error occurred during configuration saving', + 'query_created' => 'Query "%s" has been created.', + 'shortcuts_updated' => 'Shortcuts have been updated', + 'updated' => 'Configuration has been updated', + ), + 'extensions' => array( + 'already_enabled' => '%s is already enabled', + 'disable' => array( + 'ko' => '%s cannot be disabled. Check FressRSS logs for details.', + 'ok' => '%s is now disabled', + ), + 'enable' => array( + 'ko' => '%s cannot be enabled. Check FressRSS logs for details.', + 'ok' => '%s is now enabled', + ), + 'no_access' => 'You have no access on %s', + 'not_enabled' => '%s is not enabled yet', + 'not_found' => '%s does not exist', + ), + 'import_export' => array( + 'export_no_zip_extension' => 'Zip extension is not present on your server. Please try to export files one by one.', + 'feeds_imported' => 'Your feeds have been imported and will now be updated', + 'feeds_imported_with_errors' => 'Your feeds have been imported but some errors occurred', + 'file_cannot_be_uploaded' => 'File cannot be uploaded!', + 'no_zip_extension' => 'Zip extension is not present on your server.', + 'zip_error' => 'An error occured during Zip import.', + ), + 'sub' => array( + 'actualize' => 'Actualise', + 'category' => array( + 'created' => 'Category %s has been created.', + 'deleted' => 'Category has been deleted.', + 'emptied' => 'Category has been emptied', + 'error' => 'Category cannot be updated', + 'name_exists' => 'Category name already exists.', + 'no_id' => 'You must precise the id of the category.', + 'no_name' => 'Category name cannot be empty.', + 'not_delete_default' => 'You cannot delete the default category!', + 'not_exist' => 'The category does not exist!', + 'over_max' => 'You have reached your limit of categories (%d)', + 'updated' => 'Category has been updated.', + ), + 'feed' => array( + 'actualized' => '%s has been updated', + 'actualizeds' => 'RSS feeds have been updated', + 'added' => 'RSS feed %s has been added', + 'already_subscribed' => 'You have already subscribed to %s', + 'deleted' => 'Feed has been deleted', + 'error' => 'Feed cannot be updated', + 'internal_problem' => 'The RSS feed could not be added. Check FressRSS logs for details.', + 'invalid_url' => 'URL %s is invalid', + 'marked_read' => 'Feeds have been marked as read', + 'n_actualized' => '%d feeds have been updated', + 'n_entries_deleted' => '%d articles have been deleted', + 'no_refresh' => 'There is no feed to refresh…', + 'not_added' => '%s could not be added', + 'over_max' => 'You have reached your limit of feeds (%d)', + 'updated' => 'Feed has been updated', + ), + 'purge_completed' => 'Purge completed (%d articles deleted)', + ), + 'update' => array( + 'can_apply' => 'FreshRSS will now be updated to the version %s.', + 'error' => 'The update process has encountered an error: %s', + 'file_is_nok' => 'Check permissions on %s directory. HTTP server must have rights to write into', + 'finished' => 'Update completed!', + 'none' => 'No update to apply', + 'server_not_found' => 'Update server cannot be found. [%s]', + ), + 'user' => array( + 'created' => array( + '_' => 'User %s has been created', + 'error' => 'User %s cannot be created', + ), + 'deleted' => array( + '_' => 'User %s has been deleted', + 'error' => 'User %s cannot be deleted', + ), + ), + 'profile' => array( + 'error' => 'Your profile cannot be modified', + 'updated' => 'Your profile has been modified', + ), +); diff --git a/app/i18n/ru_RU.utf8/gen.php b/app/i18n/ru_RU.utf8/gen.php new file mode 100644 index 000000000..d23b12f95 --- /dev/null +++ b/app/i18n/ru_RU.utf8/gen.php @@ -0,0 +1,181 @@ + array( + 'actualize' => 'Actualize', + 'back_to_rss_feeds' => '← Go back to your RSS feeds', + 'cancel' => 'Cancel', + 'create' => 'Create', + 'disable' => 'Disable', + 'empty' => 'Empty', + 'enable' => 'Enable', + 'export' => 'Export', + 'filter' => 'Filter', + 'import' => 'Import', + 'manage' => 'Manage', + 'mark_read' => 'Mark as read', + 'mark_favorite' => 'Mark as favourite', + 'remove' => 'Remove', + 'see_website' => 'See website', + 'submit' => 'Submit', + 'truncate' => 'Delete all articles', + ), + 'auth' => array( + 'email' => 'Email address', + 'keep_logged_in' => 'Keep me logged in (1 month)', + 'login' => 'Login', + 'login_persona' => 'Login with Persona', + 'login_persona_problem' => 'Connection problem with Persona?', + 'logout' => 'Logout', + 'password' => array( + '_' => 'Password', + 'format' => 'At least 7 characters', + ), + 'registration' => array( + '_' => 'New account', + 'ask' => 'Create an account?', + 'title' => 'Account creation', + ), + 'reset' => 'Authentication reset', + 'username' => array( + '_' => 'Username', + 'admin' => 'Administrator username', + 'format' => 'maximum 16 alphanumeric characters', + ), + 'will_reset' => 'Authentication system will be reset: a form will be used instead of Persona.', + ), + 'date' => array( + 'Apr' => '\\A\\p\\r\\i\\l', + 'Aug' => '\\A\\u\\g\\u\\s\\t', + 'Dec' => '\\D\\e\\c\\e\\m\\b\\e\\r', + 'Feb' => '\\F\\e\\b\\r\\u\\a\\r\\y', + 'Jan' => '\\J\\a\\n\\u\\a\\r\\y', + 'Jul' => '\\J\\u\\l\\y', + 'Jun' => '\\J\\u\\n\\e', + 'Mar' => '\\M\\a\\r\\c\\h', + 'May' => '\\M\\a\\y', + 'Nov' => '\\N\\o\\v\\e\\m\\b\\e\\r', + 'Oct' => '\\O\\c\\t\\o\\b\\e\\r', + 'Sep' => '\\S\\e\\p\\t\\e\\m\\b\\e\\r', + 'apr' => 'apr', + 'april' => 'Apr', + 'aug' => 'aug', + 'august' => 'Aug', + 'before_yesterday' => 'Before yesterday', + 'dec' => 'dec', + 'december' => 'Dec', + 'feb' => 'feb', + 'february' => 'Feb', + 'format_date' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y', + 'format_date_hour' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y \\a\\t H\\:i', + 'fri' => 'Fri', + 'jan' => 'jan', + 'january' => 'Jan', + 'jul' => 'jul', + 'july' => 'Jul', + 'jun' => 'jun', + 'june' => 'Jun', + 'last_3_month' => 'Last three months', + 'last_6_month' => 'Last six months', + 'last_month' => 'Last month', + 'last_week' => 'Last week', + 'last_year' => 'Last year', + 'mar' => 'mar', + 'march' => 'Mar', + 'may' => 'May', + 'mon' => 'Mon', + 'month' => 'months', + 'nov' => 'nov', + 'november' => 'Nov', + 'oct' => 'oct', + 'october' => 'Oct', + 'sat' => 'Sat', + 'sep' => 'sep', + 'september' => 'Sep', + 'sun' => 'Sun', + 'thu' => 'Thu', + 'today' => 'Today', + 'tue' => 'Tue', + 'wed' => 'Wed', + 'yesterday' => 'Yesterday', + ), + 'freshrss' => array( + '_' => 'FreshRSS', + 'about' => 'About FreshRSS', + ), + 'js' => array( + 'category_empty' => 'Empty category', + 'confirm_action' => 'Are you sure you want to perform this action? It cannot be cancelled!', + 'confirm_action_feed_cat' => 'Are you sure you want to perform this action? You will lose related favorites and user queries. It cannot be cancelled!', + 'feedback' => array( + 'body_new_articles' => 'There are \\d new articles to read on FreshRSS.', + 'request_failed' => 'A request has failed, it may have been caused by Internet connection problems.', + 'title_new_articles' => 'FreshRSS: new articles!', + ), + 'new_article' => 'There are new available articles, click to refresh the page.', + 'should_be_activated' => 'JavaScript must be enabled', + ), + 'lang' => array( + 'cz' => 'Čeština', + 'de' => 'Deutsch', + 'en' => 'English', + 'fr' => 'Français', + 'it' => 'Italiano', + 'nl' => 'Nederlands', + ), + 'menu' => array( + 'about' => 'About', + 'admin' => 'Administration', + 'archiving' => 'Archiving', + 'authentication' => 'Authentication', + 'check_install' => 'Installation checking', + 'configuration' => 'Configuration', + 'display' => 'Display', + 'extensions' => 'Extensions', + 'logs' => 'Logs', + 'queries' => 'User queries', + 'reading' => 'Reading', + 'search' => 'Search words or #tags', + 'sharing' => 'Sharing', + 'shortcuts' => 'Shortcuts', + 'stats' => 'Statistics', + 'system' => 'System configuration', + 'update' => 'Update', + 'user_management' => 'Manage users', + 'user_profile' => 'Profile', + ), + 'pagination' => array( + 'first' => 'First', + 'last' => 'Last', + 'load_more' => 'Load more articles', + 'mark_all_read' => 'Mark all as read', + 'next' => 'Next', + 'nothing_to_load' => 'There are no more articles', + 'previous' => 'Previous', + ), + 'share' => array( + 'blogotext' => 'Blogotext', + 'diaspora' => 'Diaspora*', + 'email' => 'Email', + 'facebook' => 'Facebook', + 'g+' => 'Google+', + 'movim' => 'Movim', + 'print' => 'Print', + 'shaarli' => 'Shaarli', + 'twitter' => 'Twitter', + 'wallabag' => 'wallabag', + ), + 'short' => array( + 'attention' => 'Warning!', + 'blank_to_disable' => 'Leave blank to disable', + 'by_author' => 'By %s', + 'by_default' => 'By default', + 'damn' => 'Damn!', + 'default_category' => 'Uncategorized', + 'no' => 'No', + 'not_applicable' => 'Not available', + 'ok' => 'Ok!', + 'or' => 'or', + 'yes' => 'Yes', + ), +); diff --git a/app/i18n/ru_RU.utf8/index.php b/app/i18n/ru_RU.utf8/index.php new file mode 100644 index 000000000..80fa3d950 --- /dev/null +++ b/app/i18n/ru_RU.utf8/index.php @@ -0,0 +1,61 @@ + array( + '_' => 'About', + 'agpl3' => 'AGPL 3', + 'bugs_reports' => 'Bugs reports', + 'credits' => 'Credits', + 'credits_content' => 'Some design elements come from Bootstrap although FreshRSS doesn’t use this framework. Icons come from GNOME project. Open Sans font police has been created by Steve Matteson. Favicons are collected with getFavicon API. FreshRSS is based on Minz, a PHP framework.', + 'freshrss_description' => 'FreshRSS is a RSS feeds aggregator to self-host like Kriss Feed or Leed. It is light and easy to take in hand while being powerful and configurable tool.', + 'github' => 'on Github', + 'license' => 'License', + 'project_website' => 'Project website', + 'title' => 'About', + 'version' => 'Version', + 'website' => 'Website', + ), + 'feed' => array( + 'add' => 'You may add some feeds.', + 'empty' => 'There is no article to show.', + 'rss_of' => 'RSS feed of %s', + 'title' => 'Your RSS feeds', + 'title_global' => 'Global view', + 'title_fav' => 'Your favourites', + ), + 'log' => array( + '_' => 'Logs', + 'clear' => 'Clear the logs', + 'empty' => 'Log file is empty', + 'title' => 'Logs', + ), + 'menu' => array( + 'about' => 'About FreshRSS', + 'add_query' => 'Add a query', + 'before_one_day' => 'Before one day', + 'before_one_week' => 'Before one week', + 'favorites' => 'Favourites (%s)', + 'global_view' => 'Global view', + 'main_stream' => 'Main stream', + 'mark_all_read' => 'Mark all as read', + 'mark_cat_read' => 'Mark category as read', + 'mark_feed_read' => 'Mark feed as read', + 'newer_first' => 'Newer first', + 'non-starred' => 'Show all but favorites', + 'normal_view' => 'Normal view', + 'older_first' => 'Oldest first', + 'queries' => 'User queries', + 'read' => 'Show only read', + 'reader_view' => 'Reading view', + 'rss_view' => 'RSS feed', + 'search_short' => 'Search', + 'starred' => 'Show only favorites', + 'stats' => 'Statistics', + 'subscription' => 'Subscriptions management', + 'unread' => 'Show only unread', + ), + 'share' => 'Share', + 'tag' => array( + 'related' => 'Related tags', + ), +); diff --git a/app/i18n/ru_RU.utf8/install.php b/app/i18n/ru_RU.utf8/install.php new file mode 100644 index 000000000..c838b2eba --- /dev/null +++ b/app/i18n/ru_RU.utf8/install.php @@ -0,0 +1,113 @@ + array( + 'finish' => 'Завершить установку', + 'fix_errors_before' => 'Пожалуйста, исправьте ошибки прежде чем переходить к следующему этапу.', + 'keep_install' => 'Сохранить предыдущую установку', + 'next_step' => 'Перейти к следующему этапу', + 'reinstall' => 'Переустановить FreshRSS', + ), + 'auth' => array( + 'email_persona' => 'Почта (логин) для
(for Mozilla Persona)', + 'form' => 'Вэб-форма (традиционный, необходим JavaScript)', + 'http' => 'HTTP (для продвинутых пользователей с HTTPS)', + 'none' => 'Никакого (опасно)', + 'password_form' => 'Пароль
(для метода аутентификации на Вэб-формах)', + 'password_format' => 'Как минимум 7 букв', + 'persona' => 'Mozilla Persona (современный, необходим JavaScript)', + 'type' => 'Метод аутентификации', + ), + 'bdd' => array( + '_' => 'База данных', + 'conf' => array( + '_' => 'Конфигурация базы данныхDatabase configuration', + 'ko' => 'Проверьте конфигурацию базы данных.', + 'ok' => 'Конфигурация базы данных сохранена.', + ), + 'host' => 'Хост', + 'prefix' => 'Префикс таблицы', + 'password' => 'Пароль HTTP', + 'type' => 'Тип базы данных', + 'username' => 'Имя пользователя HTTP', + ), + 'check' => array( + '_' => 'Проверки', + 'already_installed' => 'Обнаружена предыдущая установка FreshRSS!', + 'cache' => array( + 'nok' => 'Проверьте права доступа к папке ./data/cache . Сервер HTTP должен иметь права на запись в эту папку.', + 'ok' => 'Права на папку кэша в порядке.', + ), + 'ctype' => array( + 'nok' => 'У вас не установлена необходимая библиотека для проверки типов символов (php-ctype).', + 'ok' => 'У вас установлена необходимая библиотека для проверки типов символов (ctype).', + ), + 'curl' => array( + 'nok' => 'У вас нет расширения cURL (пакет php5-curl).', + 'ok' => 'У вас установлено расширение cURL.', + ), + 'data' => array( + 'nok' => 'Проверьте права доступа к папке ./data . Сервер HTTP должен иметь права на запись в эту папку.', + 'ok' => 'Права на ./data/ в порядке.', + ), + 'dom' => array( + 'nok' => 'У вас не установлена необходимая библиотека для просмотра DOM (пакет php-xml).', + 'ok' => 'У вас установлена необходимая библиотека для просмотра DOM.', + ), + 'favicons' => array( + 'nok' => 'Проверьте права доступа к папке ./data/favicons . Сервер HTTP должен иметь права на запись в эту папку.', + 'ok' => 'Права на папку значков в порядке.', + ), + 'http_referer' => array( + 'nok' => 'Убедитесь, что вы не изменяете ваш HTTP REFERER.', + 'ok' => 'Ваш HTTP REFERER известен и соотвествует вашему серверу.', + ), + 'minz' => array( + 'nok' => 'У вас не установлен фрейворк Minz.', + 'ok' => 'У вас установлен фрейворк Minz.', + ), + 'pcre' => array( + 'nok' => 'У вас не установлена необходимая библиотека для работы с регулярными выражениями (php-pcre).', + 'ok' => 'У вас установлена необходимая библиотека для работы с регулярными выражениями (PCRE).', + ), + 'pdo' => array( + 'nok' => 'У вас не установлен PDO или один из необходимых драйверов (pdo_mysql, pdo_sqlite).', + 'ok' => 'У вас установлен PDO и как минимум один из поддерживаемых драйверов (pdo_mysql, pdo_sqlite).', + ), + 'persona' => array( + 'nok' => 'Проверьте права доступа к папке ./data/persona . Сервер HTTP должен иметь права на запись в эту папку.', + 'ok' => 'Права на папку Mozilla Persona в порядке.', + ), + 'php' => array( + 'nok' => 'У вас установлен PHP версии %s, но FreshRSS необходима версия не ниже %s.', + 'ok' => 'У вас установлен PHP версии %s, который совместим с FreshRSS.', + ), + 'users' => array( + 'nok' => 'Проверьте права доступа к папке ./data/users . Сервер HTTP должен иметь права на запись в эту папку.', + 'ok' => 'Права на папку users в порядке.', + ), + ), + 'conf' => array( + '_' => 'Общие настройки', + 'ok' => 'Общие настройки были сохранены.', + ), + 'congratulations' => 'Поздравляем!', + 'default_user' => 'Имя пользователя по умолчанию (максимум 16 латинских букв и/или цифр)', + 'delete_articles_after' => 'Удалять статьи после', + 'fix_errors_before' => 'Пожалуйста, исправьте ошибки прежде чем переходить к следующему этапу..', + 'javascript_is_better' => 'FreshRSS принесёт больше удовольствия, если включить JavaScript', + 'js' => array( + 'confirm_reinstall' => 'Переустанавливая FreshRSS, вы потеряете предыдущую конфигурацию. Вы хотите продолжить?', + ), + 'language' => array( + '_' => 'Язык', + 'choose' => 'Выберите язык для FreshRSS', + 'defined' => 'Язык выбран.', + ), + 'not_deleted' => 'Что-то пошло не так; удалите файл %s вручную.', + 'ok' => 'Установка успешна.', + 'step' => '%d этап', + 'steps' => 'Этапы', + 'title' => 'Установка · FreshRSS', + 'this_is_the_end' => 'Это конец', +); diff --git a/app/i18n/ru_RU.utf8/sub.php b/app/i18n/ru_RU.utf8/sub.php new file mode 100644 index 000000000..aaaa02827 --- /dev/null +++ b/app/i18n/ru_RU.utf8/sub.php @@ -0,0 +1,62 @@ + array( + '_' => 'Category', + 'add' => 'Add a category', + 'empty' => 'Empty category', + 'new' => 'New category', + ), + 'feed' => array( + 'add' => 'Add a RSS feed', + 'advanced' => 'Advanced', + 'archiving' => 'Archivage', + 'auth' => array( + 'configuration' => 'Login', + 'help' => 'Connection allows to access HTTP protected RSS feeds', + 'http' => 'HTTP Authentication', + 'password' => 'HTTP password', + 'username' => 'HTTP username', + ), + 'css_help' => 'Retrieves truncated RSS feeds (caution, requires more time!)', + 'css_path' => 'Articles CSS path on original website', + 'description' => 'Description', + 'empty' => 'This feed is empty. Please verify that it is still maintained.', + 'error' => 'This feed has encountered a problem. Please verify that it is always reachable then actualize it.', + 'in_main_stream' => 'Show in main stream', + 'informations' => 'Information', + 'keep_history' => 'Minimum number of articles to keep', + 'moved_category_deleted' => 'When you delete a category, its feeds are automatically classified under %s.', + 'no_selected' => 'No feed selected.', + 'number_entries' => '%d articles', + 'stats' => 'Statistics', + 'think_to_add' => 'You may add some feeds.', + 'title' => 'Title', + 'title_add' => 'Add a RSS feed', + 'ttl' => 'Do not automatically refresh more often than', + 'url' => 'Feed URL', + 'validator' => 'Check the validity of the feed', + 'website' => 'Website URL', + 'pubsubhubbub' => 'Instant notification with PubSubHubbub', + ), + 'import_export' => array( + 'export' => 'Export', + 'export_opml' => 'Export list of feeds (OPML)', + 'export_starred' => 'Export your favourites', + 'feed_list' => 'List of %s articles', + 'file_to_import' => 'File to import
(OPML, Json or Zip)', + 'file_to_import_no_zip' => 'File to import
(OPML or Json)', + 'import' => 'Import', + 'starred_list' => 'List of favourite articles', + 'title' => 'Import / export', + ), + 'menu' => array( + 'bookmark' => 'Subscribe (FreshRSS bookmark)', + 'import_export' => 'Import / export', + 'subscription_management' => 'Subscriptions management', + ), + 'title' => array( + '_' => 'Subscriptions management', + 'feed_management' => 'RSS feeds management', + ), +); -- cgit v1.2.3 From cc1390fe9454166ee5d638aa01948f791ad7c4fe Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 21 Feb 2016 00:58:51 +0100 Subject: JavaScript popup number bug A backslash caused problem. https://github.com/FreshRSS/FreshRSS/issues/1075 https://github.com/FreshRSS/FreshRSS/pull/1078 --- app/i18n/cz/gen.php | 2 +- app/i18n/de/gen.php | 2 +- app/i18n/en/gen.php | 2 +- app/i18n/fr/gen.php | 2 +- app/i18n/it/gen.php | 2 +- app/i18n/nl/gen.php | 2 +- app/i18n/tr/gen.php | 2 +- p/scripts/main.js | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) (limited to 'app') diff --git a/app/i18n/cz/gen.php b/app/i18n/cz/gen.php index ca90cff0c..c30310bf3 100644 --- a/app/i18n/cz/gen.php +++ b/app/i18n/cz/gen.php @@ -108,7 +108,7 @@ return array( 'confirm_action' => 'Jste si jist, že chcete provést tuto akci? Změny nelze vrátit zpět!', 'confirm_action_feed_cat' => 'Jste si jist, že chcete provést tuto akci? Přijdete o související oblíbené položky a uživatelské dotazy. Změny nelze vrátit zpět!', 'feedback' => array( - 'body_new_articles' => 'Je \\d nových článků k přečtení v FreshRSS.', + 'body_new_articles' => 'Je %d nových článků k přečtení v FreshRSS.', 'request_failed' => 'Požadavek selhal, což může být způsobeno problémy s připojení k internetu.', 'title_new_articles' => 'FreshRSS: nové články!', ), diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php index fb09e8598..47bdee4ee 100644 --- a/app/i18n/de/gen.php +++ b/app/i18n/de/gen.php @@ -108,7 +108,7 @@ return array( 'confirm_action' => 'Sind Sie sicher, dass Sie diese Aktion durchführen wollen? Diese Aktion kann nicht abgebrochen werden!', 'confirm_action_feed_cat' => 'Sind Sie sicher, dass Sie diese Aktion durchführen wollen? Sie werden zugehörige Favoriten und Benutzerabfragen verlieren. Dies kann nicht abgebrochen werden!', 'feedback' => array( - 'body_new_articles' => 'Es gibt \\d neue Artikel zum Lesen auf FreshRSS.', + 'body_new_articles' => 'Es gibt %d neue Artikel zum Lesen auf FreshRSS.', 'request_failed' => 'Eine Anfrage ist fehlgeschlagen, dies könnte durch Probleme mit der Internetverbindung verursacht worden sein.', 'title_new_articles' => 'FreshRSS: neue Artikel!', ), diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php index f71684688..3af7850b8 100644 --- a/app/i18n/en/gen.php +++ b/app/i18n/en/gen.php @@ -108,7 +108,7 @@ return array( 'confirm_action' => 'Are you sure you want to perform this action? It cannot be cancelled!', 'confirm_action_feed_cat' => 'Are you sure you want to perform this action? You will lose related favorites and user queries. It cannot be cancelled!', 'feedback' => array( - 'body_new_articles' => 'There are \\d new articles to read on FreshRSS.', + 'body_new_articles' => 'There are %d new articles to read on FreshRSS.', 'request_failed' => 'A request has failed, it may have been caused by Internet connection problems.', 'title_new_articles' => 'FreshRSS: new articles!', ), diff --git a/app/i18n/fr/gen.php b/app/i18n/fr/gen.php index f8e4ac7ee..4cda84c8d 100644 --- a/app/i18n/fr/gen.php +++ b/app/i18n/fr/gen.php @@ -108,7 +108,7 @@ return array( 'confirm_action' => 'Êtes-vous sûr(e) de vouloir continuer ? Cette action ne peut être annulée !', 'confirm_action_feed_cat' => 'Êtes-vous sûr(e) de vouloir continuer ? Vous perdrez les favoris et les filtres associés. Cette action ne peut être annulée !', 'feedback' => array( - 'body_new_articles' => 'Il y a \\d nouveaux articles à lire sur FreshRSS.', + 'body_new_articles' => 'Il y a %d nouveaux articles à lire sur FreshRSS.', 'request_failed' => 'Une requête a échoué, cela peut être dû à des problèmes de connexion à Internet.', 'title_new_articles' => 'FreshRSS : nouveaux articles !', ), diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php index bd311aa12..8598ec8a7 100644 --- a/app/i18n/it/gen.php +++ b/app/i18n/it/gen.php @@ -108,7 +108,7 @@ return array( 'confirm_action' => 'Sei sicuro di voler continuare?', 'confirm_action_feed_cat' => 'Sei sicuro di voler continuare? Verranno persi i preferiti e le ricerche utente correlate!', 'feedback' => array( - 'body_new_articles' => 'Ci sono \\d nuovi articoli da leggere.', + 'body_new_articles' => 'Ci sono %d nuovi articoli da leggere.', 'request_failed' => 'Richiesta fallita, probabilmente a causa di problemi di connessione', 'title_new_articles' => 'Feed RSS Reader: nuovi articoli!', ), diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php index bc4fd9201..56f8424d1 100644 --- a/app/i18n/nl/gen.php +++ b/app/i18n/nl/gen.php @@ -108,7 +108,7 @@ return array( 'confirm_action' => 'Weet u zeker dat u dit wilt doen? Het kan niet ongedaan worden gemaakt!', 'confirm_action_feed_cat' => 'Weet u zeker dat u dit wilt doen? U verliest alle gereleteerde favorieten en gebruikers informatie. Het kan niet ongedaan worden gemaakt!', 'feedback' => array( - 'body_new_articles' => 'Er zijn \\d nieuwe artikelen om te lezen op FreshRSS.', + 'body_new_articles' => 'Er zijn %d nieuwe artikelen om te lezen op FreshRSS.', 'request_failed' => 'Een opdracht is mislukt, mogelijk door Internet verbindings problemen.', 'title_new_articles' => 'FreshRSS: nieuwe artikelen!', ), diff --git a/app/i18n/tr/gen.php b/app/i18n/tr/gen.php index 7284f132b..65a20ed7a 100644 --- a/app/i18n/tr/gen.php +++ b/app/i18n/tr/gen.php @@ -108,7 +108,7 @@ return array( 'confirm_action' => 'Bunu yapmak istediğinize emin misiniz ? Daha sonra iptal edilemez!', 'confirm_action_feed_cat' => 'Bunu yapmak istediğinize emin misiniz ? Favorileriniz ve sorgularınız silinecek. Daha sonra iptal edilemez!', 'feedback' => array( - 'body_new_articles' => 'FreshRSS de okunmaz üzere \\d yeni makale var.', + 'body_new_articles' => 'FreshRSS de okunmaz üzere %d yeni makale var.', 'request_failed' => 'Hata. İnternet bağlantınızı kontrol edin.', 'title_new_articles' => 'FreshRSS: yeni makaleler!', ), diff --git a/p/scripts/main.js b/p/scripts/main.js index 32a2ca913..b7522df6a 100644 --- a/p/scripts/main.js +++ b/p/scripts/main.js @@ -863,7 +863,7 @@ function notifs_html5_show(nb) { var notification = new window.Notification(i18n['notif_title_articles'], { icon: "../themes/icons/favicon-256.png", - body: i18n['notif_body_articles'].replace("\d", nb), + body: i18n['notif_body_articles'].replace('%d', nb), tag: "freshRssNewArticles" }); -- cgit v1.2.3 From e3105f2135552701a4986873491a964b4e44c82e Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 21 Feb 2016 01:46:27 +0100 Subject: JavaScript popup number bug (percent escaping) https://github.com/FreshRSS/FreshRSS/pull/1078 https://github.com/Alkarex/FreshRSS/commit/cc1390fe9454166ee5d638aa01948f791ad7c4fe --- app/i18n/cz/gen.php | 2 +- app/i18n/de/gen.php | 2 +- app/i18n/en/gen.php | 2 +- app/i18n/fr/gen.php | 2 +- app/i18n/it/gen.php | 2 +- app/i18n/nl/gen.php | 2 +- app/i18n/tr/gen.php | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) (limited to 'app') diff --git a/app/i18n/cz/gen.php b/app/i18n/cz/gen.php index c30310bf3..78ec80f68 100644 --- a/app/i18n/cz/gen.php +++ b/app/i18n/cz/gen.php @@ -108,7 +108,7 @@ return array( 'confirm_action' => 'Jste si jist, že chcete provést tuto akci? Změny nelze vrátit zpět!', 'confirm_action_feed_cat' => 'Jste si jist, že chcete provést tuto akci? Přijdete o související oblíbené položky a uživatelské dotazy. Změny nelze vrátit zpět!', 'feedback' => array( - 'body_new_articles' => 'Je %d nových článků k přečtení v FreshRSS.', + 'body_new_articles' => 'Je %%d nových článků k přečtení v FreshRSS.', 'request_failed' => 'Požadavek selhal, což může být způsobeno problémy s připojení k internetu.', 'title_new_articles' => 'FreshRSS: nové články!', ), diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php index 47bdee4ee..bd0ba08cc 100644 --- a/app/i18n/de/gen.php +++ b/app/i18n/de/gen.php @@ -108,7 +108,7 @@ return array( 'confirm_action' => 'Sind Sie sicher, dass Sie diese Aktion durchführen wollen? Diese Aktion kann nicht abgebrochen werden!', 'confirm_action_feed_cat' => 'Sind Sie sicher, dass Sie diese Aktion durchführen wollen? Sie werden zugehörige Favoriten und Benutzerabfragen verlieren. Dies kann nicht abgebrochen werden!', 'feedback' => array( - 'body_new_articles' => 'Es gibt %d neue Artikel zum Lesen auf FreshRSS.', + 'body_new_articles' => 'Es gibt %%d neue Artikel zum Lesen auf FreshRSS.', 'request_failed' => 'Eine Anfrage ist fehlgeschlagen, dies könnte durch Probleme mit der Internetverbindung verursacht worden sein.', 'title_new_articles' => 'FreshRSS: neue Artikel!', ), diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php index 3af7850b8..6fb33a4db 100644 --- a/app/i18n/en/gen.php +++ b/app/i18n/en/gen.php @@ -108,7 +108,7 @@ return array( 'confirm_action' => 'Are you sure you want to perform this action? It cannot be cancelled!', 'confirm_action_feed_cat' => 'Are you sure you want to perform this action? You will lose related favorites and user queries. It cannot be cancelled!', 'feedback' => array( - 'body_new_articles' => 'There are %d new articles to read on FreshRSS.', + 'body_new_articles' => 'There are %%d new articles to read on FreshRSS.', 'request_failed' => 'A request has failed, it may have been caused by Internet connection problems.', 'title_new_articles' => 'FreshRSS: new articles!', ), diff --git a/app/i18n/fr/gen.php b/app/i18n/fr/gen.php index 4cda84c8d..6b7056f92 100644 --- a/app/i18n/fr/gen.php +++ b/app/i18n/fr/gen.php @@ -108,7 +108,7 @@ return array( 'confirm_action' => 'Êtes-vous sûr(e) de vouloir continuer ? Cette action ne peut être annulée !', 'confirm_action_feed_cat' => 'Êtes-vous sûr(e) de vouloir continuer ? Vous perdrez les favoris et les filtres associés. Cette action ne peut être annulée !', 'feedback' => array( - 'body_new_articles' => 'Il y a %d nouveaux articles à lire sur FreshRSS.', + 'body_new_articles' => 'Il y a %%d nouveaux articles à lire sur FreshRSS.', 'request_failed' => 'Une requête a échoué, cela peut être dû à des problèmes de connexion à Internet.', 'title_new_articles' => 'FreshRSS : nouveaux articles !', ), diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php index 8598ec8a7..2efbef167 100644 --- a/app/i18n/it/gen.php +++ b/app/i18n/it/gen.php @@ -108,7 +108,7 @@ return array( 'confirm_action' => 'Sei sicuro di voler continuare?', 'confirm_action_feed_cat' => 'Sei sicuro di voler continuare? Verranno persi i preferiti e le ricerche utente correlate!', 'feedback' => array( - 'body_new_articles' => 'Ci sono %d nuovi articoli da leggere.', + 'body_new_articles' => 'Ci sono %%d nuovi articoli da leggere.', 'request_failed' => 'Richiesta fallita, probabilmente a causa di problemi di connessione', 'title_new_articles' => 'Feed RSS Reader: nuovi articoli!', ), diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php index 56f8424d1..bc2137c22 100644 --- a/app/i18n/nl/gen.php +++ b/app/i18n/nl/gen.php @@ -108,7 +108,7 @@ return array( 'confirm_action' => 'Weet u zeker dat u dit wilt doen? Het kan niet ongedaan worden gemaakt!', 'confirm_action_feed_cat' => 'Weet u zeker dat u dit wilt doen? U verliest alle gereleteerde favorieten en gebruikers informatie. Het kan niet ongedaan worden gemaakt!', 'feedback' => array( - 'body_new_articles' => 'Er zijn %d nieuwe artikelen om te lezen op FreshRSS.', + 'body_new_articles' => 'Er zijn %%d nieuwe artikelen om te lezen op FreshRSS.', 'request_failed' => 'Een opdracht is mislukt, mogelijk door Internet verbindings problemen.', 'title_new_articles' => 'FreshRSS: nieuwe artikelen!', ), diff --git a/app/i18n/tr/gen.php b/app/i18n/tr/gen.php index 65a20ed7a..f987a8e6c 100644 --- a/app/i18n/tr/gen.php +++ b/app/i18n/tr/gen.php @@ -108,7 +108,7 @@ return array( 'confirm_action' => 'Bunu yapmak istediğinize emin misiniz ? Daha sonra iptal edilemez!', 'confirm_action_feed_cat' => 'Bunu yapmak istediğinize emin misiniz ? Favorileriniz ve sorgularınız silinecek. Daha sonra iptal edilemez!', 'feedback' => array( - 'body_new_articles' => 'FreshRSS de okunmaz üzere %d yeni makale var.', + 'body_new_articles' => 'FreshRSS de okunmaz üzere %%d yeni makale var.', 'request_failed' => 'Hata. İnternet bağlantınızı kontrol edin.', 'title_new_articles' => 'FreshRSS: yeni makaleler!', ), -- cgit v1.2.3 From 64ec0708a1404e1f39a5fdc0131c89b2e4038bee Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 21 Feb 2016 02:51:27 +0100 Subject: More work for CSP, in particular install Install needs testing. https://github.com/FreshRSS/FreshRSS/issues/1075 --- app/install.php | 92 +++++----------------------------------------------- p/scripts/install.js | 76 +++++++++++++++++++++++++++++++++++++++++++ p/scripts/main.js | 7 ++-- 3 files changed, 89 insertions(+), 86 deletions(-) create mode 100644 p/scripts/install.js (limited to 'app') diff --git a/app/install.php b/app/install.php index 7ac1c4cec..03f6e2199 100644 --- a/app/install.php +++ b/app/install.php @@ -616,27 +616,6 @@ function printStep1() { - @@ -674,7 +653,7 @@ function printStep2() {
-
- -
@@ -778,7 +715,7 @@ function printStep3() {
-
-
@@ -897,13 +821,15 @@ case 5: } ?> - + - - + + <?php echo _t('install.title'); ?> - - + + + + diff --git a/p/scripts/install.js b/p/scripts/install.js new file mode 100644 index 000000000..52d8bf8e0 --- /dev/null +++ b/p/scripts/install.js @@ -0,0 +1,76 @@ +"use strict"; + +function show_password() { + var button = this; + var passwordField = document.getElementById(button.getAttribute('data-toggle')); + passwordField.setAttribute('type', 'text'); + button.className += ' active'; + return false; +} +function hide_password() { + var button = this; + var passwordField = document.getElementById(button.getAttribute('data-toggle')); + passwordField.setAttribute('type', 'password'); + button.className = button.className.replace(/(?:^|\s)active(?!\S)/g , ''); + return false; +} +var toggles = document.getElementsByClassName('toggle-password'); +for (var i = 0 ; i < toggles.length ; i++) { + toggles[i].addEventListener('mousedown', show_password); + toggles[i].addEventListener('mouseup', hide_password); +} + +function auth_type_change() { + var auth_type = document.getElementById('auth_type'); + if (auth_type) { + var auth_value = auth_type.value, + password_input = document.getElementById('passwordPlain'), + mail_input = document.getElementById('mail_login'); + + if (auth_value === 'form') { + password_input.required = true; + mail_input.required = false; + } else if (auth_value === 'persona') { + password_input.required = false; + mail_input.required = true; + } else { + password_input.required = false; + mail_input.required = false; + } + } +} +var auth_type = document.getElementById('auth_type'); +if (auth_type) { + auth_type_change(); + auth_type_change.addEventListener('change', auth_type_change); +} + +function mySqlShowHide() { + var mysql = document.getElementById('mysql'); + if (mysql) { + mysql.style.display = document.getElementById('type').value === 'mysql' ? 'block' : 'none'; + if (document.getElementById('type').value !== 'mysql') { + document.getElementById('host').value = ''; + document.getElementById('user').value = ''; + document.getElementById('pass').value = ''; + document.getElementById('base').value = ''; + document.getElementById('prefix').value = ''; + } + } +} +var bd_type = document.getElementById('type'); +if (bd_type) { + mySqlShowHide(); + bd_type.addEventListener('change', mySqlShowHide); +} + +function ask_confirmation(e) { + var str_confirmation = this.getAttribute('data-str-confirm'); + if (!confirm(str_confirmation)) { + e.preventDefault(); + } +} +var confirms = document.getElementsByClassName('confirm'); +for (var i = 0 ; i < confirms.length ; i++) { + confirms[i].addEventListener('click', ask_confirmation); +} diff --git a/p/scripts/main.js b/p/scripts/main.js index b7522df6a..31b07721a 100644 --- a/p/scripts/main.js +++ b/p/scripts/main.js @@ -871,7 +871,7 @@ function notifs_html5_show(nb) { window.location.reload(); } - if (context['html5_notif_timeout'] !== 0){ + if (context['html5_notif_timeout'] !== 0) { setTimeout(function() { notification.close(); }, context['html5_notif_timeout'] * 1000); @@ -1246,8 +1246,9 @@ function init_configuration_alert() { } function parseJavaScriptCookie() { - var json = JSON.parse(decodeURIComponent(document.cookie.replace(/(?:(?:^|.*;\s*)FreshRSS-vars\s*\=\s*([^;]*).*$)|^.*$/, "$1"))) || {}; + var vars = decodeURIComponent(document.cookie.replace(/(?:(?:^|.*;\s*)FreshRSS-vars\s*\=\s*([^;]*).*$)|^.*$/, "$1")); document.cookie = 'FreshRSS-vars=; expires=Thu, 01 Jan 1970 00:00:00 GMT'; + var json = JSON.parse(vars); window.context = json.context; window.shortcuts = json.shortcuts; window.url = json.url; @@ -1256,7 +1257,6 @@ function parseJavaScriptCookie() { } function init_all() { - parseJavaScriptCookie(); if (!window.$) { if (window.console) { console.log('FreshRSS waiting for JS…'); @@ -1264,6 +1264,7 @@ function init_all() { window.setTimeout(init_all, 50); return; } + parseJavaScriptCookie(); init_notifications(); init_confirm_action(); $stream = $('#stream'); -- cgit v1.2.3 From e3dc7d46e15d97f8bd008acf3489d5e6c22b8daa Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 21 Feb 2016 14:23:24 +0100 Subject: CSP: Use inline JSON instead of one-time cookie Simpler, lighter https://github.com/FreshRSS/FreshRSS/issues/1075 --- app/FreshRSS.php | 58 --------------------------------- app/layout/layout.phtml | 3 ++ app/views/helpers/javascript_vars.phtml | 54 ++++++++++++++++++++++++++++++ p/scripts/main.js | 10 +++--- 4 files changed, 62 insertions(+), 63 deletions(-) create mode 100644 app/views/helpers/javascript_vars.phtml (limited to 'app') diff --git a/app/FreshRSS.php b/app/FreshRSS.php index 8eb862aeb..a6ed2a306 100644 --- a/app/FreshRSS.php +++ b/app/FreshRSS.php @@ -110,66 +110,8 @@ class FreshRSS extends Minz_FrontController { } } - private static function setJavascriptCookie() { - $mark = FreshRSS_Context::$user_conf->mark_when; - $mail = Minz_Session::param('mail', false); - $s = FreshRSS_Context::$user_conf->shortcuts; - $json = json_encode(array( - 'context' => array( - 'auto_remove_article' => !!FreshRSS_Context::isAutoRemoveAvailable(), - 'hide_posts' => !(FreshRSS_Context::$user_conf->display_posts || Minz_Request::actionName() === 'reader'), - 'display_order' => Minz_Request::param('order', FreshRSS_Context::$user_conf->sort_order), - 'auto_mark_article' => !!$mark['article'], - 'auto_mark_site' => !!$mark['site'], - 'auto_mark_scroll' => !!$mark['scroll'], - 'auto_load_more' => !!FreshRSS_Context::$user_conf->auto_load_more, - 'auto_actualize_feeds' => !!Minz_Session::param('actualize_feeds', false), - 'does_lazyload' => !!FreshRSS_Context::$user_conf->lazyload , - 'sticky_post' => !!FreshRSS_Context::isStickyPostEnabled(), - 'html5_notif_timeout' => FreshRSS_Context::$user_conf->html5_notif_timeout, - 'auth_type' => FreshRSS_Context::$system_conf->auth_type, - 'current_user_mail' => $mail ? ('"' . $mail . '"') : null, - 'current_view' => Minz_Request::actionName(), - ), - 'shortcuts' => array( - 'mark_read' => @$s['mark_read'], - 'mark_favorite' => @$s['mark_favorite'], - 'go_website' => @$s['go_website'], - 'prev_entry' => @$s['prev_entry'], - 'next_entry' => @$s['next_entry'], - 'first_entry' => @$s['first_entry'], - 'last_entry' => @$s['last_entry'], - 'collapse_entry' => @$s['collapse_entry'], - 'load_more' => @$s['load_more'], - 'auto_share' => @$s['auto_share'], - 'focus_search' => @$s['focus_search'], - 'user_filter' => @$s['user_filter'], - 'help' => @$s['help'], - 'close_dropdown' => @$s['close_dropdown'], - ), - 'url' => array( - 'index' => _url('index', 'index'), - 'login' => Minz_Url::display(array('c' => 'auth', 'a' => 'login'), 'php'), - 'logout' => Minz_Url::display(array('c' => 'auth', 'a' => 'logout'), 'php'), - 'help' => FRESHRSS_WIKI, - ), - 'i18n' => array( - 'confirmation_default' => _t('gen.js.confirm_action'), - 'notif_title_articles' => _t('gen.js.feedback.title_new_articles'), - 'notif_body_articles' => _t('gen.js.feedback.body_new_articles'), - 'notif_request_failed' => _t('gen.js.feedback.request_failed'), - 'category_empty' => _t('gen.js.category_empty'), - ), - 'icons' => array( - 'close' => _i('close'), - ), - ), JSON_UNESCAPED_UNICODE); - setrawcookie('FreshRSS-vars', rawurlencode($json), 0, Minz_Session::getCookieDir()); - } - public static function preLayout() { header("Content-Security-Policy: default-src 'self'; child-src *; img-src * data:; media-src *; style-src 'self' 'unsafe-inline'"); - self::setJavascriptCookie(); } private function loadNotifications() { diff --git a/app/layout/layout.phtml b/app/layout/layout.phtml index 7d718efbd..99a3717bc 100644 --- a/app/layout/layout.phtml +++ b/app/layout/layout.phtml @@ -8,6 +8,9 @@ + mark_when; +$mail = Minz_Session::param('mail', false); +$s = FreshRSS_Context::$user_conf->shortcuts; +echo htmlspecialchars(json_encode(array( + 'context' => array( + 'auto_remove_article' => !!FreshRSS_Context::isAutoRemoveAvailable(), + 'hide_posts' => !(FreshRSS_Context::$user_conf->display_posts || Minz_Request::actionName() === 'reader'), + 'display_order' => Minz_Request::param('order', FreshRSS_Context::$user_conf->sort_order), + 'auto_mark_article' => !!$mark['article'], + 'auto_mark_site' => !!$mark['site'], + 'auto_mark_scroll' => !!$mark['scroll'], + 'auto_load_more' => !!FreshRSS_Context::$user_conf->auto_load_more, + 'auto_actualize_feeds' => !!Minz_Session::param('actualize_feeds', false), + 'does_lazyload' => !!FreshRSS_Context::$user_conf->lazyload , + 'sticky_post' => !!FreshRSS_Context::isStickyPostEnabled(), + 'html5_notif_timeout' => FreshRSS_Context::$user_conf->html5_notif_timeout, + 'auth_type' => FreshRSS_Context::$system_conf->auth_type, + 'current_user_mail' => $mail ? ('"' . $mail . '"') : null, + 'current_view' => Minz_Request::actionName(), + ), + 'shortcuts' => array( + 'mark_read' => @$s['mark_read'], + 'mark_favorite' => @$s['mark_favorite'], + 'go_website' => @$s['go_website'], + 'prev_entry' => @$s['prev_entry'], + 'next_entry' => @$s['next_entry'], + 'first_entry' => @$s['first_entry'], + 'last_entry' => @$s['last_entry'], + 'collapse_entry' => @$s['collapse_entry'], + 'load_more' => @$s['load_more'], + 'auto_share' => @$s['auto_share'], + 'focus_search' => @$s['focus_search'], + 'user_filter' => @$s['user_filter'], + 'help' => @$s['help'], + 'close_dropdown' => @$s['close_dropdown'], + ), + 'url' => array( + 'index' => _url('index', 'index'), + 'login' => Minz_Url::display(array('c' => 'auth', 'a' => 'login'), 'php'), + 'logout' => Minz_Url::display(array('c' => 'auth', 'a' => 'logout'), 'php'), + 'help' => FRESHRSS_WIKI, + ), + 'i18n' => array( + 'confirmation_default' => _t('gen.js.confirm_action'), + 'notif_title_articles' => _t('gen.js.feedback.title_new_articles'), + 'notif_body_articles' => _t('gen.js.feedback.body_new_articles'), + 'notif_request_failed' => _t('gen.js.feedback.request_failed'), + 'category_empty' => _t('gen.js.category_empty'), + ), + 'icons' => array( + 'close' => _i('close'), + ), +), JSON_UNESCAPED_UNICODE), ENT_NOQUOTES); diff --git a/p/scripts/main.js b/p/scripts/main.js index 31b07721a..f07cdafd7 100644 --- a/p/scripts/main.js +++ b/p/scripts/main.js @@ -1245,10 +1245,10 @@ function init_configuration_alert() { }); } -function parseJavaScriptCookie() { - var vars = decodeURIComponent(document.cookie.replace(/(?:(?:^|.*;\s*)FreshRSS-vars\s*\=\s*([^;]*).*$)|^.*$/, "$1")); - document.cookie = 'FreshRSS-vars=; expires=Thu, 01 Jan 1970 00:00:00 GMT'; - var json = JSON.parse(vars); +function parseJsonVars() { + var jsonVars = document.getElementById('jsonVars'), + json = JSON.parse(jsonVars.innerHTML); + jsonVars.outerHTML = ''; window.context = json.context; window.shortcuts = json.shortcuts; window.url = json.url; @@ -1264,7 +1264,7 @@ function init_all() { window.setTimeout(init_all, 50); return; } - parseJavaScriptCookie(); + parseJsonVars(); init_notifications(); init_confirm_action(); $stream = $('#stream'); -- cgit v1.2.3 From 264d05297c72e87b114a8e930db7eae7affe5690 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 21 Feb 2016 17:26:37 +0100 Subject: CSP for statistics https://github.com/FreshRSS/FreshRSS/issues/1075 --- app/Models/StatsDAO.php | 20 ++++---- app/Models/StatsDAOSQLite.php | 4 +- app/views/stats/index.phtml | 64 ++++------------------- app/views/stats/repartition.phtml | 103 ++++++++------------------------------ p/scripts/repartition.js | 72 ++++++++++++++++++++++++++ p/scripts/stats.js | 56 +++++++++++++++++++++ 6 files changed, 169 insertions(+), 150 deletions(-) create mode 100644 p/scripts/repartition.js create mode 100644 p/scripts/stats.js (limited to 'app') diff --git a/app/Models/StatsDAO.php b/app/Models/StatsDAO.php index 80caccc49..5ca333396 100644 --- a/app/Models/StatsDAO.php +++ b/app/Models/StatsDAO.php @@ -55,9 +55,9 @@ SQL; /** * Calculates entry count per day on a 30 days period. - * Returns the result as a JSON string. + * Returns the result as a JSON object. * - * @return string + * @return JSON object */ public function calculateEntryCount() { $count = $this->initEntryCountArray(); @@ -257,9 +257,9 @@ SQL; /** * Calculates feed count per category. - * Returns the result as a JSON string. + * Returns the result as a JSON object. * - * @return string + * @return JSON object */ public function calculateFeedByCategory() { $sql = <<initEntryCountArray(); diff --git a/app/views/stats/index.phtml b/app/views/stats/index.phtml index 18bcd4d99..c11b88999 100644 --- a/app/views/stats/index.phtml +++ b/app/views/stats/index.phtml @@ -82,58 +82,12 @@
- + + diff --git a/app/views/stats/repartition.phtml b/app/views/stats/repartition.phtml index b20d9bbd0..980b26a3d 100644 --- a/app/views/stats/repartition.phtml +++ b/app/views/stats/repartition.phtml @@ -30,20 +30,20 @@
- +
- - - - + + + + - - - - + + + + -
repartition['total']; ?>repartition['read']; ?>repartition['unread']; ?>repartition['favorite']; ?>repartition['total']; ?>repartition['read']; ?>repartition['unread']; ?>repartition['favorite']; ?>
+
@@ -62,76 +62,13 @@
- + + diff --git a/p/scripts/repartition.js b/p/scripts/repartition.js new file mode 100644 index 000000000..a391de2f2 --- /dev/null +++ b/p/scripts/repartition.js @@ -0,0 +1,72 @@ +"use strict"; +function initStats() { + if (!window.Flotr) { + if (window.console) { + console.log('FreshRSS waiting for Flotr…'); + } + window.setTimeout(initStats, 50); + return; + } + var jsonRepartition = document.getElementById('jsonRepartition'), + stats = JSON.parse(jsonRepartition.innerHTML); + jsonRepartition.outerHTML = ''; + // Entry per hour + Flotr.draw(document.getElementById('statsEntryPerHour'), + [{ + data: stats.repartitionHour, + bars: {horizontal: false, show: true} + }], + { + grid: {verticalLines: false}, + xaxis: {noTicks: 23, + tickFormatter: function(x) { + var x = parseInt(x); + return x + 1; + }, + min: -0.9, + max: 23.9, + tickDecimals: 0}, + yaxis: {min: 0}, + mouse: {relative: true, track: true, trackDecimals: 0, trackFormatter: function(obj) {return numberFormat(obj.y);}} + }); + // Entry per day of week + Flotr.draw(document.getElementById('statsEntryPerDayOfWeek'), + [{ + data: stats.repartitionDayOfWeek, + bars: {horizontal: false, show: true} + }], + { + grid: {verticalLines: false}, + xaxis: {noTicks: 6, + tickFormatter: function(x) { + var x = parseInt(x); + return stats.days[x]; + }, + min: -0.9, + max: 6.9, + tickDecimals: 0}, + yaxis: {min: 0}, + mouse: {relative: true, track: true, trackDecimals: 0, trackFormatter: function(obj) {return numberFormat(obj.y);}} + }); + // Entry per month + Flotr.draw(document.getElementById('statsEntryPerMonth'), + [{ + data: stats.repartitionMonth, + bars: {horizontal: false, show: true} + }], + { + grid: {verticalLines: false}, + xaxis: {noTicks: 12, + tickFormatter: function(x) { + var x = parseInt(x); + return stats.months[(x - 1)]; + }, + min: 0.1, + max: 12.9, + tickDecimals: 0}, + yaxis: {min: 0}, + mouse: {relative: true, track: true, trackDecimals: 0, trackFormatter: function(obj) {return numberFormat(obj.y);}} + }); + +} +initStats(); diff --git a/p/scripts/stats.js b/p/scripts/stats.js new file mode 100644 index 000000000..2e8ab6e27 --- /dev/null +++ b/p/scripts/stats.js @@ -0,0 +1,56 @@ +"use strict"; +function initStats() { + if (!window.Flotr) { + if (window.console) { + console.log('FreshRSS waiting for Flotr…'); + } + window.setTimeout(initStats, 50); + return; + } + var jsonStats = document.getElementById('jsonStats'), + stats = JSON.parse(jsonStats.innerHTML); + jsonStats.outerHTML = ''; + // Entry per day + var avg = []; + for (var i = -31; i <= 0; i++) { + avg.push([i, stats.average]); + } + Flotr.draw(document.getElementById('statsEntryPerDay'), + [{ + data: stats.dataCount, + bars: {horizontal: false, show: true} + },{ + data: avg, + lines: {show: true}, + label: stats.average, + }], + { + grid: {verticalLines: false}, + xaxis: {noTicks: 6, showLabels: false, tickDecimals: 0, min: -30.75, max: -0.25}, + yaxis: {min: 0}, + mouse: {relative: true, track: true, trackDecimals: 0, trackFormatter: function(obj) {return numberFormat(obj.y);}} + }); + // Feed per category + Flotr.draw(document.getElementById('statsFeedPerCategory'), + stats.feedByCategory, + { + grid: {verticalLines: false, horizontalLines: false}, + pie: {explode: 10, show: true, labelFormatter: function(){return '';}}, + xaxis: {showLabels: false}, + yaxis: {showLabels: false}, + mouse: {relative: true, track: true, trackDecimals: 0, trackFormatter: function(obj) {return obj.series.label + ' - '+ numberFormat(obj.y) + ' ('+ (obj.fraction * 100).toFixed(1) + '%)';}}, + legend: {container: document.getElementById('statsFeedPerCategoryLegend'), noColumns: 3} + }); + // Entry per category + Flotr.draw(document.getElementById('statsEntryPerCategory'), + stats.entryByCategory, + { + grid: {verticalLines: false, horizontalLines: false}, + pie: {explode: 10, show: true, labelFormatter: function(){return '';}}, + xaxis: {showLabels: false}, + yaxis: {showLabels: false}, + mouse: {relative: true, track: true, trackDecimals: 0, trackFormatter: function(obj) {return obj.series.label + ' - '+ numberFormat(obj.y) + ' ('+ (obj.fraction * 100).toFixed(1) + '%)';}}, + legend: {container: document.getElementById('statsEntryPerCategoryLegend'), noColumns: 3} + }); +} +initStats(); -- cgit v1.2.3 From b4864149889a749042d344625d4ffbdbd3f8a3cc Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 21 Feb 2016 18:06:32 +0100 Subject: CSP for bookmarklet (subscription) https://github.com/FreshRSS/FreshRSS/issues/1075 --- app/layout/aside_subscription.phtml | 2 +- p/scripts/main.js | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) (limited to 'app') diff --git a/app/layout/aside_subscription.phtml b/app/layout/aside_subscription.phtml index 8a54e2dc2..fa10d63e8 100644 --- a/app/layout/aside_subscription.phtml +++ b/app/layout/aside_subscription.phtml @@ -10,7 +10,7 @@
  • - +
  • diff --git a/p/scripts/main.js b/p/scripts/main.js index f07cdafd7..cfde5fd4e 100644 --- a/p/scripts/main.js +++ b/p/scripts/main.js @@ -1245,6 +1245,12 @@ function init_configuration_alert() { }); } +function init_subscription() { + $('body').on('click', '.bookmarkClick', function (e) { + return false; + }); +} + function parseJsonVars() { var jsonVars = document.getElementById('jsonVars'), json = JSON.parse(jsonVars.innerHTML); @@ -1281,6 +1287,7 @@ function init_all() { init_notifs_html5(); window.setInterval(refreshUnreads, 120000); } else { + init_subscription(); init_crypto_form(); init_share_observers(); init_remove_observers(); -- cgit v1.2.3 From cb913a3a76daf357ad36ca39c26b4aaf800211d2 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 21 Feb 2016 19:15:23 +0100 Subject: CSP for statistics and forms https://github.com/FreshRSS/FreshRSS/issues/1075 --- CHANGELOG.md | 2 ++ app/FreshRSS.php | 6 +++++- app/layout/aside_feed.phtml | 2 +- app/layout/nav_menu.phtml | 2 +- app/views/extension/index.phtml | 2 +- app/views/feed/add.phtml | 2 +- app/views/helpers/pagination.phtml | 2 +- app/views/stats/idle.phtml | 2 +- app/views/stats/index.phtml | 10 +++++----- app/views/stats/repartition.phtml | 10 +++++----- app/views/subscription/index.phtml | 4 ++-- p/scripts/main.js | 6 +++--- p/themes/base-theme/template.css | 8 ++++++++ 13 files changed, 36 insertions(+), 22 deletions(-) (limited to 'app') diff --git a/CHANGELOG.md b/CHANGELOG.md index 7f96839eb..7fc872040 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## 2016-xx-xx FreshRSS 1.3.1-beta +* Security + * Added CSP `Content-Security-Policy: default-src 'self'; child-src *; img-src * data:; media-src *` [#1075](https://github.com/FreshRSS/FreshRSS/pull/1075) * UI * Fixed several small bugs in global and reader view [#1050](https://github.com/FreshRSS/FreshRSS/pull/1050) * Updated to jQuery 2.2 and changed code for auto-load on scroll [#1050](https://github.com/FreshRSS/FreshRSS/pull/1050) diff --git a/app/FreshRSS.php b/app/FreshRSS.php index a6ed2a306..62ea18d96 100644 --- a/app/FreshRSS.php +++ b/app/FreshRSS.php @@ -111,7 +111,11 @@ class FreshRSS extends Minz_FrontController { } public static function preLayout() { - header("Content-Security-Policy: default-src 'self'; child-src *; img-src * data:; media-src *; style-src 'self' 'unsafe-inline'"); + if (Minz_Request::controllerName() === 'stats') { + header("Content-Security-Policy: default-src 'self'; style-src 'self' 'unsafe-inline'"); + } else { + header("Content-Security-Policy: default-src 'self'; child-src *; img-src * data:; media-src *"); + } } private function loadNotifications() { diff --git a/app/layout/aside_feed.phtml b/app/layout/aside_feed.phtml index 307db6af8..4e1903a7a 100644 --- a/app/layout/aside_feed.phtml +++ b/app/layout/aside_feed.phtml @@ -19,7 +19,7 @@ - +
    • diff --git a/app/layout/nav_menu.phtml b/app/layout/nav_menu.phtml index 3a755b560..0f303beb8 100644 --- a/app/layout/nav_menu.phtml +++ b/app/layout/nav_menu.phtml @@ -79,7 +79,7 @@ ); ?> - + diff --git a/app/views/helpers/pagination.phtml b/app/views/helpers/pagination.phtml index b20201c4b..7eca8c525 100755 --- a/app/views/helpers/pagination.phtml +++ b/app/views/helpers/pagination.phtml @@ -14,7 +14,7 @@ ); ?> - +
      • diff --git a/app/views/stats/idle.phtml b/app/views/stats/idle.phtml index 22117792d..11b7df8c4 100644 --- a/app/views/stats/idle.phtml +++ b/app/views/stats/idle.phtml @@ -18,7 +18,7 @@

        - +
          diff --git a/app/views/stats/index.phtml b/app/views/stats/index.phtml index c11b88999..0a2fbdb10 100644 --- a/app/views/stats/index.phtml +++ b/app/views/stats/index.phtml @@ -66,18 +66,18 @@

          -
          +

          -
          +
          -
          +

          -
          +
          diff --git a/app/views/stats/repartition.phtml b/app/views/stats/repartition.phtml index 980b26a3d..ffb2c361e 100644 --- a/app/views/stats/repartition.phtml +++ b/app/views/stats/repartition.phtml @@ -48,17 +48,17 @@

          averageHour); ?>

          -
          +

          averageDayOfWeek); ?>

          -
          -
          +

          averageMonth); ?>

          -
          +
          diff --git a/app/views/subscription/index.phtml b/app/views/subscription/index.phtml index 2cfe3f33c..07cebf817 100644 --- a/app/views/subscription/index.phtml +++ b/app/views/subscription/index.phtml @@ -28,7 +28,7 @@ - @@ -62,7 +62,7 @@
        - + categories as $cat) { diff --git a/p/scripts/main.js b/p/scripts/main.js index cfde5fd4e..d62a6aff8 100644 --- a/p/scripts/main.js +++ b/p/scripts/main.js @@ -899,7 +899,7 @@ function refreshUnreads() { if ((incUnreadsFeed(null, feed_id, nbUnreads - feed_unreads) || isAll) && //Update of current view? (nbUnreads - feed_unreads > 0)) { - $('#new-article').show(); + $('#new-article').attr('aria-hidden', 'false').show(); new_articles = true; }; }); @@ -1122,10 +1122,10 @@ function init_feed_observers() { $('select[id="category"]').on('change', function() { var detail = $('#new_category_name').parent(); if ($(this).val() === 'nc') { - detail.show(); + detail.attr('aria-hidden', 'false').show(); detail.find('input').focus(); } else { - detail.hide(); + detail.attr('aria-hidden', 'true').hide(); } }); } diff --git a/p/themes/base-theme/template.css b/p/themes/base-theme/template.css index 17a43d3ed..8a12423be 100644 --- a/p/themes/base-theme/template.css +++ b/p/themes/base-theme/template.css @@ -110,6 +110,11 @@ td.numeric { /*=== COMPONENTS */ /*===============*/ + +[aria-hidden="true"] { + display: none; +} + /*=== Forms */ .form-group::after { content: ""; @@ -620,6 +625,9 @@ br + br + br { .stat > table { width: 100%; } +.statGraph { + height: 300px; +} /*=== GLOBAL VIEW */ /*================*/ -- cgit v1.2.3 From 38c2d671e3480b8e9fb38491797e44fdea317006 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 21 Feb 2016 21:25:23 +0100 Subject: CSP different policies per controller https://github.com/FreshRSS/FreshRSS/issues/1075 --- app/FreshRSS.php | 14 ++++++++++---- app/install.php | 1 + 2 files changed, 11 insertions(+), 4 deletions(-) (limited to 'app') diff --git a/app/FreshRSS.php b/app/FreshRSS.php index 62ea18d96..bfbd7a6eb 100644 --- a/app/FreshRSS.php +++ b/app/FreshRSS.php @@ -111,10 +111,16 @@ class FreshRSS extends Minz_FrontController { } public static function preLayout() { - if (Minz_Request::controllerName() === 'stats') { - header("Content-Security-Policy: default-src 'self'; style-src 'self' 'unsafe-inline'"); - } else { - header("Content-Security-Policy: default-src 'self'; child-src *; img-src * data:; media-src *"); + switch (Minz_Request::controllerName()) { + case 'index': + header("Content-Security-Policy: default-src 'self'; child-src *; img-src * data:; media-src *"); + break; + case 'stats': + header("Content-Security-Policy: default-src 'self'; style-src 'self' 'unsafe-inline'"); + break; + default: + header("Content-Security-Policy: default-src 'self'"); + break; } } diff --git a/app/install.php b/app/install.php index 03f6e2199..a4a888af2 100644 --- a/app/install.php +++ b/app/install.php @@ -2,6 +2,7 @@ if (function_exists('opcache_reset')) { opcache_reset(); } +header("Content-Security-Policy: default-src 'self'"); define('BCRYPT_COST', 9); -- cgit v1.2.3 From 05ba5bc569060edf88c7b2e284736dcca68249aa Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Mon, 22 Feb 2016 21:10:35 +0100 Subject: Do not log article updates It seems to work well, and there are too many such updates. BTW, we should have a verbose/insane log level. --- app/Controllers/feedController.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'app') diff --git a/app/Controllers/feedController.php b/app/Controllers/feedController.php index 4ec661115..7294fe8f4 100755 --- a/app/Controllers/feedController.php +++ b/app/Controllers/feedController.php @@ -359,8 +359,8 @@ class FreshRSS_feed_Controller extends Minz_ActionController { //This entry already exists and is unchanged. TODO: Remove the test with the zero'ed hash in FreshRSS v1.3 $oldGuids[] = $entry->guid(); } else { //This entry already exists but has been updated - Minz_Log::debug('Entry with GUID `' . $entry->guid() . '` updated in feed ' . $feed->id() . - ', old hash ' . $existingHash . ', new hash ' . $entry->hash()); + //Minz_Log::debug('Entry with GUID `' . $entry->guid() . '` updated in feed ' . $feed->id() . + //', old hash ' . $existingHash . ', new hash ' . $entry->hash()); //TODO: Make an updated/is_read policy by feed, in addition to the global one. $entry->_isRead(FreshRSS_Context::$user_conf->mark_updated_article_unread ? false : null); //Change is_read according to policy. if (!$entryDAO->hasTransaction()) { -- cgit v1.2.3 From b501fd6514253d3f7e14e2f09421a614641d3e7f Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 27 Feb 2016 14:53:03 +0100 Subject: PHP7 share bug https://github.com/FreshRSS/FreshRSS/issues/1072 --- app/Models/Share.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'app') diff --git a/app/Models/Share.php b/app/Models/Share.php index 2a05f2ee9..1c8a7e767 100644 --- a/app/Models/Share.php +++ b/app/Models/Share.php @@ -119,11 +119,9 @@ class FreshRSS_Share { ); foreach ($options as $key => $value) { - if (!isset($available_options[$key])) { - continue; + if (isset($available_options[$key])) { + $this->{$available_options[$key]} = $value; } - - $this->$available_options[$key] = $value; } } -- cgit v1.2.3 From c9d3d78340e062b9e2fe19c8c55b8bdc75392e63 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 27 Feb 2016 17:51:13 +0100 Subject: CSP manually refreshing feeds https://github.com/FreshRSS/FreshRSS/issues/1075 --- app/Controllers/javascriptController.php | 2 +- app/views/javascript/actualize.phtml | 69 ++++++-------------------------- p/scripts/main.js | 44 +++++++++++++++++--- 3 files changed, 53 insertions(+), 62 deletions(-) (limited to 'app') diff --git a/app/Controllers/javascriptController.php b/app/Controllers/javascriptController.php index e3ae3669e..00a7b5c38 100755 --- a/app/Controllers/javascriptController.php +++ b/app/Controllers/javascriptController.php @@ -6,7 +6,7 @@ class FreshRSS_javascript_Controller extends Minz_ActionController { } public function actualizeAction() { - header('Content-Type: text/javascript; charset=UTF-8'); + header('Content-Type: application/json; charset=UTF-8'); $feedDAO = FreshRSS_Factory::createFeedDao(); $this->view->feeds = $feedDAO->listFeedsOrderUpdate(FreshRSS_Context::$user_conf->ttl_default); } diff --git a/app/views/javascript/actualize.phtml b/app/views/javascript/actualize.phtml index 454228909..3baabf748 100644 --- a/app/views/javascript/actualize.phtml +++ b/app/views/javascript/actualize.phtml @@ -1,56 +1,13 @@ -"use strict"; -var feeds = [feeds as $feed) { ?>{url: " 'feed', 'a' => 'actualize', 'params' => array('id' => $feed->id(), 'ajax' => '1')), 'php'); ?>",title: "name(); ?>"},], - feed_processed = 0, - feed_count = feeds.length; - -function initProgressBar(init) { - if (init) { - $("body").after("\
        \ -
        /
        \ - 0 / " + feed_count + "\ -
        "); - } else { - window.location.reload(); - } -} -function updateProgressBar(i, title_feed) { - $("#actualizeProgress .progress").html(i + " / " + feed_count); - $("#actualizeProgress .title").html(title_feed); -} - -function updateFeeds() { - if (feed_count === 0) { - openNotification("", "good"); - ajax_loading = false; - return; - } - initProgressBar(true); - - for (var i = 0; i < 10; i++) { - updateFeed(); - } -} - -function updateFeed() { - var feed = feeds.pop(); - if (feed == undefined) { - return; - } - - $.ajax({ - type: 'POST', - url: feed['url'], - }).complete(function (data) { - feed_processed++; - updateProgressBar(feed_processed, feed['title']); - - if (feed_processed === feed_count) { - initProgressBar(false); - } else { - updateFeed(); - } - }); -} +feeds as $feed) { + $feeds[] = array( + 'url' => Minz_Url::display(array('c' => 'feed', 'a' => 'actualize', 'params' => array('id' => $feed->id(), 'ajax' => '1')), 'php'), + 'title' => $feed->name(), + ); +} +echo json_encode(array( + 'feeds' => $feeds, + 'feedback_no_refresh' => _t('feedback.sub.feed.no_refresh'), + 'feedback_actualize' => _t('feedback.sub.actualize'), +)); diff --git a/p/scripts/main.js b/p/scripts/main.js index d62a6aff8..51c8f4cbf 100644 --- a/p/scripts/main.js +++ b/p/scripts/main.js @@ -767,6 +767,31 @@ function init_nav_entries() { }); } +// +var feed_processed = 0; + +function updateFeed(feeds, feeds_count) { + var feed = feeds.pop(); + if (feed == undefined) { + return; + } + + $.ajax({ + type: 'POST', + url: feed['url'], + }).complete(function (data) { + feed_processed++; + $("#actualizeProgress .progress").html(feed_processed + " / " + feeds_count); + $("#actualizeProgress .title").html(feed['title']); + + if (feed_processed === feeds_count) { + window.location.reload(); + } else { + updateFeed(feeds, feeds_count); + } + }); +} + function init_actualize() { var auto = false; @@ -777,14 +802,23 @@ function init_actualize() { ajax_loading = true; - $.getScript('./?c=javascript&a=actualize').done(function () { - if (auto && feed_count < 1) { + $.getJSON('./?c=javascript&a=actualize').done(function (data) { + if (auto && data.feeds.length < 1) { auto = false; ajax_loading = false; return false; } - - updateFeeds(); + if (data.feeds.length === 0) { + openNotification(data.feedback_no_refresh, "good"); + ajax_loading = false; + return; + } + //Progress bar + var feeds_count = data.feeds.length; + $('body').after('
        ' + data.feedback_actualize + '
        /
        0 / ' + feeds_count + '
        '); + for (var i = 10; i > 0; i--) { + updateFeed(data.feeds, feeds_count); + } }); return false; @@ -795,7 +829,7 @@ function init_actualize() { $("#actualize").click(); } } - +//
        // var notification = null, -- cgit v1.2.3 From 995cf58d249c6a2ddfd042cc5b509914295c882f Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 28 Feb 2016 00:08:57 +0100 Subject: CSP bug in install script https://github.com/FreshRSS/FreshRSS/issues/1075 --- app/install.php | 2 +- p/scripts/install.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'app') diff --git a/app/install.php b/app/install.php index a4a888af2..80e85354d 100644 --- a/app/install.php +++ b/app/install.php @@ -829,7 +829,6 @@ case 5: <?php echo _t('install.title'); ?> - @@ -877,5 +876,6 @@ case 5: ?>
    + diff --git a/p/scripts/install.js b/p/scripts/install.js index 52d8bf8e0..9a49e6031 100644 --- a/p/scripts/install.js +++ b/p/scripts/install.js @@ -42,7 +42,7 @@ function auth_type_change() { var auth_type = document.getElementById('auth_type'); if (auth_type) { auth_type_change(); - auth_type_change.addEventListener('change', auth_type_change); + auth_type.addEventListener('change', auth_type_change); } function mySqlShowHide() { -- cgit v1.2.3 From 6b19872b1a95113aa491626a64d4c3ff02e2ee00 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 28 Feb 2016 14:07:21 +0100 Subject: Install check XML / JSON https://github.com/FreshRSS/FreshRSS/issues/1094 https://github.com/FreshRSS/FreshRSS/issues/1092 --- app/i18n/cz/install.php | 10 +++++++++- app/i18n/de/install.php | 10 +++++++++- app/i18n/en/install.php | 10 +++++++++- app/i18n/fr/install.php | 10 +++++++++- app/i18n/it/install.php | 10 +++++++++- app/i18n/nl/install.php | 10 +++++++++- app/i18n/tr/install.php | 10 +++++++++- app/install.php | 18 +++++++++++++++++- 8 files changed, 80 insertions(+), 8 deletions(-) (limited to 'app') diff --git a/app/i18n/cz/install.php b/app/i18n/cz/install.php index a8bc62909..969b69271 100644 --- a/app/i18n/cz/install.php +++ b/app/i18n/cz/install.php @@ -51,7 +51,7 @@ return array( 'ok' => 'Oprávnění adresáře data jsou v pořádku.', ), 'dom' => array( - 'nok' => 'Nemáte požadovanou knihovnu pro procházení DOM (balíček php-xml).', + 'nok' => 'Nemáte požadovanou knihovnu pro procházení DOM.', 'ok' => 'Máte požadovanou knihovnu pro procházení DOM.', ), 'favicons' => array( @@ -62,6 +62,10 @@ return array( 'nok' => 'Zkontrolujte prosím že neměníte HTTP REFERER.', 'ok' => 'Váš HTTP REFERER je znám a odpovídá Vašemu serveru.', ), + 'json' => array( + 'nok' => 'You lack a recommended library to parse JSON.', + 'ok' => 'You have a recommended library to parse JSON.', + ), 'minz' => array( 'nok' => 'Nemáte framework Minz.', 'ok' => 'Máte framework Minz.', @@ -86,6 +90,10 @@ return array( 'nok' => 'Zkontrolujte oprávnění adresáře ./data/users. HTTP server musí mít do tohoto adresáře práva zápisu', 'ok' => 'Oprávnění adresáře users jsou v pořádku.', ), + 'xml' => array( + 'nok' => 'You lack the required library to parse XML.', + 'ok' => 'You have the required library to parse XML.', + ), ), 'conf' => array( '_' => 'Obecná nastavení', diff --git a/app/i18n/de/install.php b/app/i18n/de/install.php index 9bada0869..2da744cfb 100644 --- a/app/i18n/de/install.php +++ b/app/i18n/de/install.php @@ -51,7 +51,7 @@ return array( 'ok' => 'Die Berechtigungen des Verzeichnisses ./data sind in Ordnung.', ), 'dom' => array( - 'nok' => 'Ihnen fehlt eine benötigte Bibliothek um DOM zu durchstöbern (Paket php-xml).', + 'nok' => 'Ihnen fehlt eine benötigte Bibliothek um DOM zu durchstöbern.', 'ok' => 'Sie haben die benötigte Bibliothek um DOM zu durchstöbern.', ), 'favicons' => array( @@ -62,6 +62,10 @@ return array( 'nok' => 'Bitte stellen Sie sicher, dass Sie Ihren HTTP REFERER nicht abändern.', 'ok' => 'Ihr HTTP REFERER ist bekannt und entspricht Ihrem Server.', ), + 'json' => array( + 'nok' => 'You lack a recommended library to parse JSON.', + 'ok' => 'You have a recommended library to parse JSON.', + ), 'minz' => array( 'nok' => 'Ihnen fehlt das Minz-Framework.', 'ok' => 'Sie haben das Minz-Framework.', @@ -86,6 +90,10 @@ return array( 'nok' => 'Überprüfen Sie die Berechtigungen des Verzeichnisses ./data/users. Der HTTP-Server muss Schreibrechte besitzen.', 'ok' => 'Die Berechtigungen des Verzeichnisses ./data/users sind in Ordnung.', ), + 'xml' => array( + 'nok' => 'You lack the required library to parse XML.', + 'ok' => 'You have the required library to parse XML.', + ), ), 'conf' => array( '_' => 'Allgemeine Konfiguration', diff --git a/app/i18n/en/install.php b/app/i18n/en/install.php index b94fbc299..4b5bbc62e 100644 --- a/app/i18n/en/install.php +++ b/app/i18n/en/install.php @@ -51,7 +51,7 @@ return array( 'ok' => 'Permissions on data directory are good.', ), 'dom' => array( - 'nok' => 'You lack a required library to browse the DOM (php-xml package).', + 'nok' => 'You lack a required library to browse the DOM.', 'ok' => 'You have the required library to browse the DOM.', ), 'favicons' => array( @@ -62,6 +62,10 @@ return array( 'nok' => 'Please check that you are not altering your HTTP REFERER.', 'ok' => 'Your HTTP REFERER is known and corresponds to your server.', ), + 'json' => array( + 'nok' => 'You lack a recommended library to parse JSON.', + 'ok' => 'You have a recommended library to parse JSON.', + ), 'minz' => array( 'nok' => 'You lack the Minz framework.', 'ok' => 'You have the Minz framework.', @@ -86,6 +90,10 @@ return array( 'nok' => 'Check permissions on ./data/users directory. HTTP server must have rights to write into', 'ok' => 'Permissions on users directory are good.', ), + 'xml' => array( + 'nok' => 'You lack the required library to parse XML.', + 'ok' => 'You have the required library to parse XML.', + ), ), 'conf' => array( '_' => 'General configuration', diff --git a/app/i18n/fr/install.php b/app/i18n/fr/install.php index 0401e1bbd..91dfbbb09 100644 --- a/app/i18n/fr/install.php +++ b/app/i18n/fr/install.php @@ -51,7 +51,7 @@ return array( 'ok' => 'Les droits sur le répertoire de data sont bons.', ), 'dom' => array( - 'nok' => 'Il manque une librairie pour parcourir le DOM (paquet php-xml).', + 'nok' => 'Il manque une librairie pour parcourir le DOM.', 'ok' => 'Vous disposez du nécessaire pour parcourir le DOM.', ), 'favicons' => array( @@ -62,6 +62,10 @@ return array( 'nok' => 'Veuillez vérifier que vous ne modifiez pas votre HTTP REFERER.', 'ok' => 'Le HTTP REFERER est connu et semble correspondre à votre serveur.', ), + 'json' => array( + 'nok' => 'Il manque une librairie recommandée pour JSON.', + 'ok' => 'Vouz disposez de la librairie recommandée pour JSON.', + ), 'minz' => array( 'nok' => 'Vous ne disposez pas de la librairie Minz.', 'ok' => 'Vous disposez du framework Minz', @@ -86,6 +90,10 @@ return array( 'nok' => 'Veuillez vérifier les droits sur le répertoire ./data/users. Le serveur HTTP doit être capable d’écrire dedans', 'ok' => 'Les droits sur le répertoire des utilisateurs sont bons.', ), + 'xml' => array( + 'nok' => 'Il manque une librairie requise pour XML.', + 'ok' => 'Vouz disposez de la librairie requise pour XML.', + ), ), 'conf' => array( '_' => 'Configuration générale', diff --git a/app/i18n/it/install.php b/app/i18n/it/install.php index 3ad22c5e9..8f5300bd5 100644 --- a/app/i18n/it/install.php +++ b/app/i18n/it/install.php @@ -51,7 +51,7 @@ return array( 'ok' => 'I permessi sulla cartella data sono corretti.', ), 'dom' => array( - 'nok' => 'Manca una libreria richiesta per leggere DOM (pacchetto php-xml).', + 'nok' => 'Manca una libreria richiesta per leggere DOM.', 'ok' => 'Libreria richiesta per leggere DOM presente.', ), 'favicons' => array( @@ -62,6 +62,10 @@ return array( 'nok' => 'Per favore verifica che non stai alterando il tuo HTTP REFERER.', 'ok' => 'Il tuo HTTP REFERER riconosciuto corrisponde al tuo server.', ), + 'json' => array( + 'nok' => 'You lack a recommended library to parse JSON.', + 'ok' => 'You have a recommended library to parse JSON.', + ), 'minz' => array( 'nok' => 'Manca il framework Minz.', 'ok' => 'Framework Minz presente.', @@ -87,6 +91,10 @@ return array( 'nok' => 'Verifica i permessi sulla cartella ./data/users. Il server HTTP deve avere i permessi per scriverci dentro', 'ok' => 'I permessi sulla cartella users sono corretti.', ), + 'xml' => array( + 'nok' => 'You lack the required library to parse XML.', + 'ok' => 'You have the required library to parse XML.', + ), ), 'conf' => array( '_' => 'Configurazioni generali', diff --git a/app/i18n/nl/install.php b/app/i18n/nl/install.php index e788261ea..3c44f7581 100644 --- a/app/i18n/nl/install.php +++ b/app/i18n/nl/install.php @@ -51,7 +51,7 @@ return array( 'ok' => 'Permissies van de data map zijn goed.', ), 'dom' => array( - 'nok' => 'U mist een benodigde bibliotheek om te bladeren in de DOM (php-xml package).', + 'nok' => 'U mist een benodigde bibliotheek om te bladeren in de DOM.', 'ok' => 'U hebt de benodigde bibliotheek om te bladeren in de DOM.', ), 'favicons' => array( @@ -62,6 +62,10 @@ return array( 'nok' => 'Controleer a.u.b. dat u niet uw HTTP REFERER wijzigd.', 'ok' => 'Uw HTTP REFERER is bekend en komt overeen met uw server.', ), + 'json' => array( + 'nok' => 'You lack a recommended library to parse JSON.', + 'ok' => 'You have a recommended library to parse JSON.', + ), 'minz' => array( 'nok' => 'U mist het Minz framework.', 'ok' => 'U hebt het Minz framework.', @@ -86,6 +90,10 @@ return array( 'nok' => 'Controleer permissies van de ./data/users map. HTTP server moet rechten hebben om er in te kunnen schrijven', 'ok' => 'Permissies van de users map zijn goed.', ), + 'xml' => array( + 'nok' => 'You lack the required library to parse XML.', + 'ok' => 'You have the required library to parse XML.', + ), ), 'conf' => array( '_' => 'Algemene configuratie', diff --git a/app/i18n/tr/install.php b/app/i18n/tr/install.php index 96c16931a..d4c7c4cd5 100644 --- a/app/i18n/tr/install.php +++ b/app/i18n/tr/install.php @@ -51,7 +51,7 @@ return array( 'ok' => 'Veri klasörü yetkileri sorunsuz.', ), 'dom' => array( - 'nok' => 'DOM kütüpbanesi eksik (php-xml package).', + 'nok' => 'DOM kütüpbanesi eksik.', 'ok' => 'DOM kütüphanesi sorunsuz.', ), 'favicons' => array( @@ -62,6 +62,10 @@ return array( 'nok' => 'Lütfen HTTP REFERER değiştirmediğinize emin olun.', 'ok' => 'HTTP REFERER ve sunucunuz arası iletişim sorunsuz.', ), + 'json' => array( + 'nok' => 'You lack a recommended library to parse JSON.', + 'ok' => 'You have a recommended library to parse JSON.', + ), 'minz' => array( 'nok' => 'Minz framework eksik.', 'ok' => 'Minz framework sorunsuz.', @@ -86,6 +90,10 @@ return array( 'nok' => './data/users klasör yetkisini kontrol edin. HTTP yazma yetkisi olmalı', 'ok' => 'Kullanıcılar klasörü yetkileri sorunsuz.', ), + 'xml' => array( + 'nok' => 'You lack the required library to parse XML.', + 'ok' => 'You have the required library to parse XML.', + ), ), 'conf' => array( '_' => 'Genel yapılandırma', diff --git a/app/install.php b/app/install.php index 80e85354d..b47effc84 100644 --- a/app/install.php +++ b/app/install.php @@ -318,6 +318,8 @@ function checkStep1() { $pcre = extension_loaded('pcre'); $ctype = extension_loaded('ctype'); $dom = class_exists('DOMDocument'); + $xml = function_exists('xml_parser_create'); + $json = function_exists('json_encode'); $data = DATA_PATH && is_writable(DATA_PATH); $cache = CACHE_PATH && is_writable(CACHE_PATH); $users = USERS_PATH && is_writable(USERS_PATH); @@ -335,13 +337,15 @@ function checkStep1() { 'pcre' => $pcre ? 'ok' : 'ko', 'ctype' => $ctype ? 'ok' : 'ko', 'dom' => $dom ? 'ok' : 'ko', + 'xml' => $xml ? 'ok' : 'ko', + 'json' => $json ? 'ok' : 'ko', 'data' => $data ? 'ok' : 'ko', 'cache' => $cache ? 'ok' : 'ko', 'users' => $users ? 'ok' : 'ko', 'favicons' => $favicons ? 'ok' : 'ko', 'persona' => $persona ? 'ok' : 'ko', 'http_referer' => $http_referer ? 'ok' : 'ko', - 'all' => $php && $minz && $curl && $pdo && $pcre && $ctype && $dom && + 'all' => $php && $minz && $curl && $pdo && $pcre && $ctype && $dom && $xml && $data && $cache && $users && $favicons && $persona && $http_referer ? 'ok' : 'ko' ); @@ -554,6 +558,12 @@ function printStep1() {

    + +

    + +

    + +

    @@ -572,6 +582,12 @@ function printStep1() {

    + +

    + +

    + +

    -- cgit v1.2.3 From cbac2afd23daaeeb3b5d6c81fdcd5c28619f5b1d Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Tue, 1 Mar 2016 21:56:19 +0100 Subject: CSP compatibility with Firefox older than 45 https://github.com/FreshRSS/FreshRSS/pull/1075 https://github.com/FreshRSS/FreshRSS/pull/1078 https://developer.mozilla.org/en-US/Firefox/Releases/45#Security https://bugzilla.mozilla.org/show_bug.cgi?id=1045891 --- CHANGELOG.md | 2 +- app/FreshRSS.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'app') diff --git a/CHANGELOG.md b/CHANGELOG.md index 096c930d1..43823b536 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ ## 2016-03-xx FreshRSS 1.3.1-beta * Security - * Added CSP `Content-Security-Policy: default-src 'self'; child-src *; img-src * data:; media-src *` [#1075](https://github.com/FreshRSS/FreshRSS/pull/1075) + * Added CSP `Content-Security-Policy: default-src 'self'; child-src *; frame-src *; img-src * data:; media-src *` [#1075](https://github.com/FreshRSS/FreshRSS/pull/1075) * Features * New list of domains for which to force HTTPS (for images, videos, iframes…) defined in `./data/force-https.default.txt` and `./data/force-https.txt` [#1083](https://github.com/FreshRSS/FreshRSS/issues/1083) * In particular useful for privacy and to avoid mixed content errors, e.g. to see YouTube videos when FreshRSS is in HTTPS diff --git a/app/FreshRSS.php b/app/FreshRSS.php index bfbd7a6eb..d6f4f4062 100644 --- a/app/FreshRSS.php +++ b/app/FreshRSS.php @@ -113,7 +113,7 @@ class FreshRSS extends Minz_FrontController { public static function preLayout() { switch (Minz_Request::controllerName()) { case 'index': - header("Content-Security-Policy: default-src 'self'; child-src *; img-src * data:; media-src *"); + header("Content-Security-Policy: default-src 'self'; child-src *; frame-src *; img-src * data:; media-src *"); break; case 'stats': header("Content-Security-Policy: default-src 'self'; style-src 'self' 'unsafe-inline'"); -- cgit v1.2.3 From 6cd59b25f44853e7f5bbd931b33a4ecbd3e91159 Mon Sep 17 00:00:00 2001 From: ealdraed Date: Fri, 4 Mar 2016 12:38:16 +0100 Subject: Translate four strings for XML and JSON --- app/i18n/de/install.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'app') diff --git a/app/i18n/de/install.php b/app/i18n/de/install.php index 2da744cfb..d16496818 100644 --- a/app/i18n/de/install.php +++ b/app/i18n/de/install.php @@ -63,8 +63,8 @@ return array( 'ok' => 'Ihr HTTP REFERER ist bekannt und entspricht Ihrem Server.', ), 'json' => array( - 'nok' => 'You lack a recommended library to parse JSON.', - 'ok' => 'You have a recommended library to parse JSON.', + 'nok' => 'Ihnen fehlt eine empfohlene Bibliothek um JSON zu parsen.', + 'ok' => 'Sie haben eine empfohlene Bibliothek um JSON zu parsen.', ), 'minz' => array( 'nok' => 'Ihnen fehlt das Minz-Framework.', @@ -91,8 +91,8 @@ return array( 'ok' => 'Die Berechtigungen des Verzeichnisses ./data/users sind in Ordnung.', ), 'xml' => array( - 'nok' => 'You lack the required library to parse XML.', - 'ok' => 'You have the required library to parse XML.', + 'nok' => 'Ihnen fehlt die benötigte Bibliothek um XML zu parsen.', + 'ok' => 'Sie haben die benötigte Bibliothek um XML zu parsen.', ), ), 'conf' => array( -- cgit v1.2.3 From f059e4c5ce461a171b5754491b66c24ecc7490f8 Mon Sep 17 00:00:00 2001 From: Wanabo Date: Sun, 6 Mar 2016 12:01:46 +0100 Subject: Added files via upload Updated language files for v1.3.1-dev --- app/i18n/nl/admin.php | 18 +++++++++--------- app/i18n/nl/gen.php | 2 +- app/i18n/nl/install.php | 8 ++++---- 3 files changed, 14 insertions(+), 14 deletions(-) (limited to 'app') diff --git a/app/i18n/nl/admin.php b/app/i18n/nl/admin.php index c3a3062b9..bd7d63b6a 100644 --- a/app/i18n/nl/admin.php +++ b/app/i18n/nl/admin.php @@ -120,7 +120,7 @@ return array( 'category' => 'Categorie', 'entry_count' => 'Invoer aantallen', 'entry_per_category' => 'Aantallen per categorie', - 'entry_per_day' => 'Aantallen per day (laatste 30 dagen)', + 'entry_per_day' => 'Aantallen per dag (laatste 30 dagen)', 'entry_per_day_of_week' => 'Per dag of week (gemiddeld: %.2f berichten)', 'entry_per_hour' => 'Per uur (gemiddeld: %.2f berichten)', 'entry_per_month' => 'Per maand (gemiddeld: %.2f berichten)', @@ -147,14 +147,14 @@ return array( 'top_feed' => 'Top tien feeds', ), 'system' => array( - '_' => 'System configuration', // @todo translate - 'auto-update-url' => 'Auto-update server URL', // @todo translate - 'instance-name' => 'Instance name', // @todo translate - 'max-categories' => 'Categories per user limit', // @todo translate - 'max-feeds' => 'Feeds per user limit', // @todo translate + '_' => 'Systeem configuratie', + 'auto-update-url' => 'Automatische update server URL', + 'instance-name' => 'Voorbeeld naam', + 'max-categories' => 'Categoriën limiet per gebruiker', + 'max-feeds' => 'Feed limiet per gebruiker', 'registration' => array( - 'help' => '0 means that there is no account limit', // @todo translate - 'number' => 'Max number of accounts', // @todo translate + 'help' => '0 betekent geen account limiet', + 'number' => 'Maximum aantal accounts', ), ), 'update' => array( @@ -178,7 +178,7 @@ return array( 'registration' => array( 'allow' => 'Sta het maken van nieuwe accounts toe', 'help' => '0 betekent dat er geen account limiet is', - 'number' => 'Max aantal van accounts', + 'number' => 'Max aantal accounts', ), 'title' => 'Beheer gebruikers', 'user_list' => 'Lijst van gebruikers ', diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php index bc2137c22..1cafaf82a 100644 --- a/app/i18n/nl/gen.php +++ b/app/i18n/nl/gen.php @@ -140,7 +140,7 @@ return array( 'sharing' => 'Delen', 'shortcuts' => 'Snelle toegang', 'stats' => 'Statistieken', - 'system' => 'System configuration', // @todo translate + 'system' => 'Systeem configuratie', 'update' => 'Versie controle', 'user_management' => 'Beheer gebruikers', 'user_profile' => 'Profiel', diff --git a/app/i18n/nl/install.php b/app/i18n/nl/install.php index 3c44f7581..d16dda4ca 100644 --- a/app/i18n/nl/install.php +++ b/app/i18n/nl/install.php @@ -63,8 +63,8 @@ return array( 'ok' => 'Uw HTTP REFERER is bekend en komt overeen met uw server.', ), 'json' => array( - 'nok' => 'You lack a recommended library to parse JSON.', - 'ok' => 'You have a recommended library to parse JSON.', + 'nok' => 'U mist een benodigede bibliotheek om JSON te gebruiken.', + 'ok' => 'U hebt de benodigde bibliotheek om JSON te gebruiken.', ), 'minz' => array( 'nok' => 'U mist het Minz framework.', @@ -91,8 +91,8 @@ return array( 'ok' => 'Permissies van de users map zijn goed.', ), 'xml' => array( - 'nok' => 'You lack the required library to parse XML.', - 'ok' => 'You have the required library to parse XML.', + 'nok' => 'U mist de benodigde bibliotheek om XML te gebruiken.', + 'ok' => 'U hebt de benodigde bibliotheek om XML te gebruiken.', ), ), 'conf' => array( -- cgit v1.2.3 From 5f04462e554e4604c04c2c9ca2fe97df6f6f6376 Mon Sep 17 00:00:00 2001 From: Alexis Degrugillier Date: Sun, 6 Mar 2016 12:51:39 +0100 Subject: Fix redirection while deleting a feed Before, when deleting a feed from the statistics idle page, there was an error in the redirection process. Now, the redirection works properly and redirects to the idle page. --- app/views/stats/idle.phtml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'app') diff --git a/app/views/stats/idle.phtml b/app/views/stats/idle.phtml index 11b7df8c4..ba88b679f 100644 --- a/app/views/stats/idle.phtml +++ b/app/views/stats/idle.phtml @@ -6,10 +6,10 @@

    'stats', 'a' => 'idle'), 'php', true - )); + ); $nothing = true; foreach ($this->idleFeeds as $period => $feeds) { if (!empty($feeds)) { -- cgit v1.2.3 From bb0319c1c7823471a4a2474712d8301e07a5f44e Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 6 Mar 2016 14:50:43 +0100 Subject: i18n-cz JSON XML https://github.com/FreshRSS/FreshRSS/pull/1097#commitcomment-16382595 https://github.com/FreshRSS/FreshRSS/issues/1094 --- app/i18n/cz/install.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'app') diff --git a/app/i18n/cz/install.php b/app/i18n/cz/install.php index 969b69271..bc3e01992 100644 --- a/app/i18n/cz/install.php +++ b/app/i18n/cz/install.php @@ -63,8 +63,8 @@ return array( 'ok' => 'Váš HTTP REFERER je znám a odpovídá Vašemu serveru.', ), 'json' => array( - 'nok' => 'You lack a recommended library to parse JSON.', - 'ok' => 'You have a recommended library to parse JSON.', + 'nok' => 'Pro parsování JSON chybí doporučená knihovna.', + 'ok' => 'Máte doporučenou knihovnu pro parsování JSON.', ), 'minz' => array( 'nok' => 'Nemáte framework Minz.', @@ -91,8 +91,8 @@ return array( 'ok' => 'Oprávnění adresáře users jsou v pořádku.', ), 'xml' => array( - 'nok' => 'You lack the required library to parse XML.', - 'ok' => 'You have the required library to parse XML.', + 'nok' => 'Pro parsování XML chybí požadovaná knihovna.', + 'ok' => 'Máte požadovanou knihovnu pro parsování XML.', ), ), 'conf' => array( -- cgit v1.2.3 From 7f91dbf16dca9f824b7bbbd42ef34f39ac7c22a9 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 6 Mar 2016 15:32:58 +0100 Subject: SQLite: Articles from old FreshRSS are marked as unread on update Bug fixed https://github.com/FreshRSS/FreshRSS/issues/1049 --- app/Controllers/feedController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/Controllers/feedController.php b/app/Controllers/feedController.php index 7294fe8f4..b559d3c22 100755 --- a/app/Controllers/feedController.php +++ b/app/Controllers/feedController.php @@ -355,7 +355,7 @@ class FreshRSS_feed_Controller extends Minz_ActionController { $entry_date = $entry->date(true); if (isset($existingHashForGuids[$entry->guid()])) { $existingHash = $existingHashForGuids[$entry->guid()]; - if (strcasecmp($existingHash, $entry->hash()) === 0 || $existingHash === '00000000000000000000000000000000') { + if (strcasecmp($existingHash, $entry->hash()) === 0 || trim($existingHash, '0') == '') { //This entry already exists and is unchanged. TODO: Remove the test with the zero'ed hash in FreshRSS v1.3 $oldGuids[] = $entry->guid(); } else { //This entry already exists but has been updated -- cgit v1.2.3 From 44be16d4fbc78c14f8ea17160585ed1bec0c8722 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Tue, 8 Mar 2016 18:28:04 +0100 Subject: X-Content-Type-Options: nosniff https://github.com/FreshRSS/FreshRSS/issues/1114 --- app/FreshRSS.php | 1 + 1 file changed, 1 insertion(+) (limited to 'app') diff --git a/app/FreshRSS.php b/app/FreshRSS.php index d6f4f4062..bafa970da 100644 --- a/app/FreshRSS.php +++ b/app/FreshRSS.php @@ -122,6 +122,7 @@ class FreshRSS extends Minz_FrontController { header("Content-Security-Policy: default-src 'self'"); break; } + header("X-Content-Type-Options: nosniff"); } private function loadNotifications() { -- cgit v1.2.3 From 89cc2aa3d0d2d3faeaf4b7d4ada11e3cd904bea3 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Fri, 22 Apr 2016 13:55:24 +0200 Subject: MySQL compatibility only_full_group_by Fix MySQL error, which appeared in MySQL 5.7: ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'freshrss.c.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by --- app/Models/CategoryDAO.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/Models/CategoryDAO.php b/app/Models/CategoryDAO.php index b5abac519..fc431553e 100644 --- a/app/Models/CategoryDAO.php +++ b/app/Models/CategoryDAO.php @@ -103,7 +103,7 @@ class FreshRSS_CategoryDAO extends Minz_ModelPdo implements FreshRSS_Searchable . ($details ? 'f.* ' : 'f.id, f.name, f.url, f.website, f.priority, f.error, f.cache_nbEntries, f.cache_nbUnreads ') . 'FROM `' . $this->prefix . 'category` c ' . 'LEFT OUTER JOIN `' . $this->prefix . 'feed` f ON f.category=c.id ' - . 'GROUP BY f.id ' + . 'GROUP BY f.id, c_id ' . 'ORDER BY c.name, f.name'; $stm = $this->bd->prepare($sql); $stm->execute(); -- cgit v1.2.3 From b042d3a7728037db90a9306c61091be0a8ac42c4 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 23 Apr 2016 19:10:32 +0200 Subject: HTTP2 optimization Fast flush HTTP headers, push promise CSS. Requires PHP 5.3+ due to anonymous function. Do not load syles, scripts, and notifications for Ajax requests. https://github.com/FreshRSS/FreshRSS/issues/1089 --- README.fr.md | 2 +- README.md | 2 +- app/Controllers/indexController.php | 64 +++++++++++++++++++------------------ app/FreshRSS.php | 37 ++++++++++----------- app/Models/Themes.php | 4 --- app/layout/layout.phtml | 40 ++++++++++++----------- lib/Minz/Request.php | 5 ++- lib/Minz/Url.php | 12 ++++--- lib/lib_rss.php | 4 +++ 9 files changed, 89 insertions(+), 81 deletions(-) (limited to 'app') diff --git a/README.fr.md b/README.fr.md index 794b1a9e1..a173f0a75 100644 --- a/README.fr.md +++ b/README.fr.md @@ -33,7 +33,7 @@ Nous sommes une communauté amicale. * Serveur modeste, par exemple sous Linux ou Windows * Fonctionne même sur un Raspberry Pi 1 avec des temps de réponse < 1s (testé sur 150 flux, 22k articles) * Serveur Web Apache2 (recommandé), ou nginx, lighttpd (non testé sur les autres) -* PHP 5.2.1+ (PHP 5.3.7+ recommandé, et PHP 5.5+ pour les performances) (support bêta de PHP 7 avec encore meilleures performances) +* PHP 5.3+ (PHP 5.3.7+ recommandé, et PHP 5.5+ pour les performances, et PHP 7+ pour d’encore meilleures performances) * Requis : [PDO_MySQL](http://php.net/pdo-mysql) ou [PDO_SQLite](http://php.net/pdo-sqlite), [cURL](http://php.net/curl), [GMP](http://php.net/gmp) (pour accès API sur plateformes < 64 bits), [IDN](http://php.net/intl.idn) (pour les noms de domaines internationalisés) * Recommandés : [iconv](http://php.net/iconv), [JSON](http://php.net/json), [mbstring](http://php.net/mbstring), [Zip](http://php.net/zip), [zlib](http://php.net/zlib) * Inclus par défaut : [DOM](http://php.net/dom), [XML](http://php.net/xml)… diff --git a/README.md b/README.md index 728204a38..4d3bb5c4c 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ We are a friendly community. * Light server running Linux or Windows * It even works on Raspberry Pi 1 with response time under a second (tested with 150 feeds, 22k articles) * A web server: Apache2 (recommended), nginx, lighttpd (not tested on others) -* PHP 5.2.1+ (PHP 5.3.7+ recommended, and PHP 5.5+ for performance) (beta support for PHP 7 with even higher performance) +* PHP 5.3+ (PHP 5.3.7+ recommended, and PHP 5.5+ for performance, and PHP 7 for even higher performance) * Required extensions: [PDO_MySQL](http://php.net/pdo-mysql) or [PDO_SQLite](http://php.net/pdo-sqlite), [cURL](http://php.net/curl), [GMP](http://php.net/gmp) (for API access on platforms < 64 bits), [IDN](http://php.net/intl.idn) (for Internationalized Domain Names) * Recommended extensions: [iconv](http://php.net/iconv), [JSON](http://php.net/json), [mbstring](http://php.net/mbstring), [Zip](http://php.net/zip), [zlib](http://php.net/zlib) * Enabled by default: [DOM](http://php.net/dom), [XML](http://php.net/xml)… diff --git a/app/Controllers/indexController.php b/app/Controllers/indexController.php index baaf99065..7e626720e 100755 --- a/app/Controllers/indexController.php +++ b/app/Controllers/indexController.php @@ -32,42 +32,44 @@ class FreshRSS_index_Controller extends Minz_ActionController { Minz_Error::error(404); } - try { - $entries = $this->listEntriesByContext(); - - $nb_entries = count($entries); - if ($nb_entries > FreshRSS_Context::$number) { - // We have more elements for pagination - $last_entry = array_pop($entries); - FreshRSS_Context::$next_id = $last_entry->id(); - } + $this->view->callbackBeforeContent = function() { + try { + $entries = $this->listEntriesByContext(); + + $nb_entries = count($entries); + if ($nb_entries > FreshRSS_Context::$number) { + // We have more elements for pagination + $last_entry = array_pop($entries); + FreshRSS_Context::$next_id = $last_entry->id(); + } - $first_entry = $nb_entries > 0 ? $entries[0] : null; - FreshRSS_Context::$id_max = $first_entry === null ? - (time() - 1) . '000000' : - $first_entry->id(); - if (FreshRSS_Context::$order === 'ASC') { - // In this case we do not know but we guess id_max - $id_max = (time() - 1) . '000000'; - if (strcmp($id_max, FreshRSS_Context::$id_max) > 0) { - FreshRSS_Context::$id_max = $id_max; + $first_entry = $nb_entries > 0 ? $entries[0] : null; + FreshRSS_Context::$id_max = $first_entry === null ? + (time() - 1) . '000000' : + $first_entry->id(); + if (FreshRSS_Context::$order === 'ASC') { + // In this case we do not know but we guess id_max + $id_max = (time() - 1) . '000000'; + if (strcmp($id_max, FreshRSS_Context::$id_max) > 0) { + FreshRSS_Context::$id_max = $id_max; + } } - } - $this->view->entries = $entries; - } catch (FreshRSS_EntriesGetter_Exception $e) { - Minz_Log::notice($e->getMessage()); - Minz_Error::error(404); - } + $this->view->entries = $entries; + } catch (FreshRSS_EntriesGetter_Exception $e) { + Minz_Log::notice($e->getMessage()); + Minz_Error::error(404); + } - $this->view->categories = FreshRSS_Context::$categories; + $this->view->categories = FreshRSS_Context::$categories; - $this->view->rss_title = FreshRSS_Context::$name . ' | ' . Minz_View::title(); - $title = FreshRSS_Context::$name; - if (FreshRSS_Context::$get_unread > 0) { - $title = '(' . FreshRSS_Context::$get_unread . ') ' . $title; - } - Minz_View::prependTitle($title . ' · '); + $this->view->rss_title = FreshRSS_Context::$name . ' | ' . Minz_View::title(); + $title = FreshRSS_Context::$name; + if (FreshRSS_Context::$get_unread > 0) { + $title = '(' . FreshRSS_Context::$get_unread . ') ' . $title; + } + Minz_View::prependTitle($title . ' · '); + }; } /** diff --git a/app/FreshRSS.php b/app/FreshRSS.php index bafa970da..562d8e2cd 100644 --- a/app/FreshRSS.php +++ b/app/FreshRSS.php @@ -34,7 +34,7 @@ class FreshRSS extends Minz_FrontController { // Auth has to be initialized before using currentUser session parameter // because it's this part which create this parameter. - $this->initAuth(); + self::initAuth(); // Then, register the user configuration and use the configuration setter // created above. @@ -46,10 +46,7 @@ class FreshRSS extends Minz_FrontController { // Finish to initialize the other FreshRSS / Minz components. FreshRSS_Context::init(); - $this->initI18n(); - FreshRSS_Share::load(join_path(DATA_PATH, 'shares.php')); - $this->loadStylesAndScripts(); - $this->loadNotifications(); + self::initI18n(); // Enable extensions for the current (logged) user. if (FreshRSS_Auth::hasAccess()) { $ext_list = FreshRSS_Context::$user_conf->extensions_enabled; @@ -57,7 +54,7 @@ class FreshRSS extends Minz_FrontController { } } - private function initAuth() { + private static function initAuth() { FreshRSS_Auth::init(); if (Minz_Request::isPost() && !is_referer_from_same_domain()) { // Basic protection against XSRF attacks @@ -74,12 +71,12 @@ class FreshRSS extends Minz_FrontController { } } - private function initI18n() { + private static function initI18n() { Minz_Session::_param('language', FreshRSS_Context::$user_conf->language); Minz_Translate::init(FreshRSS_Context::$user_conf->language); } - private function loadStylesAndScripts() { + private static function loadStylesAndScripts() { $theme = FreshRSS_Themes::load(FreshRSS_Context::$user_conf->theme); if ($theme) { foreach($theme['files'] as $file) { @@ -91,9 +88,9 @@ class FreshRSS extends Minz_FrontController { $filename = $file; } $filetime = @filemtime(PUBLIC_PATH . '/themes/' . $theme_id . '/' . $filename); - Minz_View::appendStyle(Minz_Url::display( - '/themes/' . $theme_id . '/' . $filename . '?' . $filetime - )); + $url = '/themes/' . $theme_id . '/' . $filename . '?' . $filetime; + header('Link: <' . Minz_Url::display($url, '', 'root') . '>;rel=preload', false); //HTTP2 + Minz_View::appendStyle(Minz_Url::display($url)); } } @@ -110,6 +107,14 @@ class FreshRSS extends Minz_FrontController { } } + private static function loadNotifications() { + $notif = Minz_Session::param('notification'); + if ($notif) { + Minz_View::_param('notification', $notif); + Minz_Session::_param('notification'); + } + } + public static function preLayout() { switch (Minz_Request::controllerName()) { case 'index': @@ -123,13 +128,9 @@ class FreshRSS extends Minz_FrontController { break; } header("X-Content-Type-Options: nosniff"); - } - private function loadNotifications() { - $notif = Minz_Session::param('notification'); - if ($notif) { - Minz_View::_param('notification', $notif); - Minz_Session::_param('notification'); - } + FreshRSS_Share::load(join_path(DATA_PATH, 'shares.php')); + self::loadStylesAndScripts(); + self::loadNotifications(); } } diff --git a/app/Models/Themes.php b/app/Models/Themes.php index e3b260261..5a6ec0a05 100644 --- a/app/Models/Themes.php +++ b/app/Models/Themes.php @@ -116,7 +116,3 @@ class FreshRSS_Themes extends Minz_Model { '' . $alts[$name] . ''; } } - -function _i($icon, $url_only = false) { - return FreshRSS_Themes::icon($icon, $url_only); -} diff --git a/app/layout/layout.phtml b/app/layout/layout.phtml index 99a3717bc..6906fa05f 100644 --- a/app/layout/layout.phtml +++ b/app/layout/layout.phtml @@ -1,17 +1,32 @@ - + - + + + + + + + + + + + +callbackBeforeContent)) { + call_user_func($this->callbackBeforeContent); + } +?> + - - - rss_title)) { + } if (isset($this->rss_title)) { $url_rss = $url_base; $url_rss['a'] = 'rss'; ?> - - - - - - - - - - -allow_robots) { ?> +allow_robots) { ?> diff --git a/lib/Minz/Request.php b/lib/Minz/Request.php index 81457df9e..f80b707d6 100644 --- a/lib/Minz/Request.php +++ b/lib/Minz/Request.php @@ -137,12 +137,11 @@ class Minz_Request { /** * Return the base_url from configuration and add a suffix if given. * - * @param $base_url_suffix a string to add at base_url (default: empty string) * @return the base_url with a suffix. */ - public static function getBaseUrl($base_url_suffix = '') { + public static function getBaseUrl() { $conf = Minz_Configuration::get('system'); - $url = rtrim($conf->base_url, '/\\') . $base_url_suffix; + $url = rtrim($conf->base_url, '/\\'); return filter_var($url, FILTER_SANITIZE_URL); } diff --git a/lib/Minz/Url.php b/lib/Minz/Url.php index 382437e9a..c7c67123e 100644 --- a/lib/Minz/Url.php +++ b/lib/Minz/Url.php @@ -24,11 +24,15 @@ class Minz_Url { $url_string = ''; if ($absolute) { - $url_string = Minz_Request::getBaseUrl(PUBLIC_TO_INDEX_PATH); - if ($url_string === PUBLIC_TO_INDEX_PATH) { + $url_string = Minz_Request::getBaseUrl(); + if ($url_string == '') { $url_string = Minz_Request::guessBaseUrl(); - } else { - $url_string .= '/'; + } + if ($isArray) { + $url_string .= PUBLIC_TO_INDEX_PATH; + } + if ($absolute === 'root') { + $url_string = parse_url($url_string, PHP_URL_PATH); } } else { $url_string = $isArray ? '.' : PUBLIC_RELATIVE; diff --git a/lib/lib_rss.php b/lib/lib_rss.php index 135115ea5..f89baf9b1 100644 --- a/lib/lib_rss.php +++ b/lib/lib_rss.php @@ -548,3 +548,7 @@ function base64url_encode($data) { function base64url_decode($data) { return base64_decode(strtr($data, '-_', '+/')); } + +function _i($icon, $url_only = false) { + return FreshRSS_Themes::icon($icon, $url_only); +} -- cgit v1.2.3 From 6b787c7408ecad4271c19e7c92edbad3f8df4330 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 23 Apr 2016 23:07:12 +0200 Subject: Error message when accessing entry by GET --- app/Controllers/entryController.php | 1 + 1 file changed, 1 insertion(+) (limited to 'app') diff --git a/app/Controllers/entryController.php b/app/Controllers/entryController.php index 1d9989f40..bff1073ef 100755 --- a/app/Controllers/entryController.php +++ b/app/Controllers/entryController.php @@ -46,6 +46,7 @@ class FreshRSS_entry_Controller extends Minz_ActionController { if ($id === false) { // id is false? It MUST be a POST request! if (!Minz_Request::isPost()) { + Minz_Request::bad(_t('feedback.access.not_found'), array('c' => 'index', 'a' => 'index')); return; } -- cgit v1.2.3 From 805ec6392c660641926f6a637b3c123dae528bc4 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 23 Apr 2016 23:12:08 +0200 Subject: Revert; Notifications needed also for non-layout requests --- app/FreshRSS.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/FreshRSS.php b/app/FreshRSS.php index 562d8e2cd..dd62c1919 100644 --- a/app/FreshRSS.php +++ b/app/FreshRSS.php @@ -47,6 +47,7 @@ class FreshRSS extends Minz_FrontController { // Finish to initialize the other FreshRSS / Minz components. FreshRSS_Context::init(); self::initI18n(); + self::loadNotifications(); // Enable extensions for the current (logged) user. if (FreshRSS_Auth::hasAccess()) { $ext_list = FreshRSS_Context::$user_conf->extensions_enabled; @@ -131,6 +132,5 @@ class FreshRSS extends Minz_FrontController { FreshRSS_Share::load(join_path(DATA_PATH, 'shares.php')); self::loadStylesAndScripts(); - self::loadNotifications(); } } -- cgit v1.2.3 From 91593cecd218413960c4f05f814aaa38d4a0c4ce Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 24 Apr 2016 14:50:31 +0200 Subject: But when adding feeds with passwords https://github.com/FreshRSS/FreshRSS/issues/1131 --- app/Controllers/feedController.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'app') diff --git a/app/Controllers/feedController.php b/app/Controllers/feedController.php index b559d3c22..6a8aa01cf 100755 --- a/app/Controllers/feedController.php +++ b/app/Controllers/feedController.php @@ -114,6 +114,8 @@ class FreshRSS_feed_Controller extends Minz_ActionController { Minz_Request::bad(_t('feedback.sub.feed.invalid_url', $url), $url_redirect); } + $feed->_httpAuth($http_auth); + try { $feed->load(true); } catch (FreshRSS_Feed_Exception $e) { @@ -140,7 +142,6 @@ class FreshRSS_feed_Controller extends Minz_ActionController { } $feed->_category($cat); - $feed->_httpAuth($http_auth); // Call the extension hook $name = $feed->name(); -- cgit v1.2.3 From 6466fc87ece4c1fc6ee8ea5ea4d751d7ae266a2e Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Fri, 29 Apr 2016 18:24:46 +0200 Subject: Load styles for two JSON cases --- app/FreshRSS.php | 2 +- app/views/entry/bookmark.phtml | 1 + app/views/entry/read.phtml | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) (limited to 'app') diff --git a/app/FreshRSS.php b/app/FreshRSS.php index dd62c1919..4933892bc 100644 --- a/app/FreshRSS.php +++ b/app/FreshRSS.php @@ -77,7 +77,7 @@ class FreshRSS extends Minz_FrontController { Minz_Translate::init(FreshRSS_Context::$user_conf->language); } - private static function loadStylesAndScripts() { + public static function loadStylesAndScripts() { $theme = FreshRSS_Themes::load(FreshRSS_Context::$user_conf->theme); if ($theme) { foreach($theme['files'] as $file) { diff --git a/app/views/entry/bookmark.phtml b/app/views/entry/bookmark.phtml index c346d2c4c..6b5a4ed03 100755 --- a/app/views/entry/bookmark.phtml +++ b/app/views/entry/bookmark.phtml @@ -13,4 +13,5 @@ $url = Minz_Url::display(array( 'params' => Minz_Request::params(), )); +FreshRSS::loadStylesAndScripts(); echo json_encode(array('url' => str_ireplace('&', '&', $url), 'icon' => _i(Minz_Request::param('is_favorite') ? 'non-starred' : 'starred'))); diff --git a/app/views/entry/read.phtml b/app/views/entry/read.phtml index fabdec9e0..7d0e3de82 100755 --- a/app/views/entry/read.phtml +++ b/app/views/entry/read.phtml @@ -13,4 +13,5 @@ $url = Minz_Url::display(array( 'params' => Minz_Request::params(), )); +FreshRSS::loadStylesAndScripts(); echo json_encode(array('url' => str_ireplace('&', '&', $url), 'icon' => _i(Minz_Request::param('is_read') ? 'unread' : 'read'))); -- cgit v1.2.3 From c5524224454b6828e099e5d44383b0d2f316ceb8 Mon Sep 17 00:00:00 2001 From: Frans de Jonge Date: Sun, 1 May 2016 13:19:54 +0200 Subject: Fix validator link --- app/views/helpers/feed/update.phtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/views/helpers/feed/update.phtml b/app/views/helpers/feed/update.phtml index 12f485ec3..72084d8fa 100644 --- a/app/views/helpers/feed/update.phtml +++ b/app/views/helpers/feed/update.phtml @@ -48,7 +48,7 @@ - +
    -- cgit v1.2.3 From 138bbedac6a21b74b289c0b7f9d396f9e4f0f6b2 Mon Sep 17 00:00:00 2001 From: Amaury Carrade Date: Tue, 3 May 2016 14:42:16 +0200 Subject: Added a share for Wallabag v2 The new version of Wallabag (2) was rewrote completly, and the sharer changed. This keeps the old Wallabag v1 sharer, for people still using it, and adds a new one for Wallabag v2. The old sharer for wallabag v1 is renamed to 'wallabag v1' (instead of 'wallabag'). --- app/i18n/de/gen.php | 3 ++- app/i18n/en/gen.php | 3 ++- app/i18n/fr/gen.php | 3 ++- app/i18n/it/gen.php | 3 ++- app/i18n/nl/gen.php | 3 ++- app/i18n/tr/gen.php | 3 ++- data/shares.php | 9 +++++++++ 7 files changed, 21 insertions(+), 6 deletions(-) (limited to 'app') diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php index bd0ba08cc..9b460d08d 100644 --- a/app/i18n/de/gen.php +++ b/app/i18n/de/gen.php @@ -164,7 +164,8 @@ return array( 'print' => 'Drucken', 'shaarli' => 'Shaarli', 'twitter' => 'Twitter', - 'wallabag' => 'wallabag', + 'wallabag' => 'wallabag v1', + 'wallabagv2' => 'wallabag v2', 'jdh' => 'Journal du hacker', ), 'short' => array( diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php index 6fb33a4db..685a7d1a9 100644 --- a/app/i18n/en/gen.php +++ b/app/i18n/en/gen.php @@ -164,7 +164,8 @@ return array( 'print' => 'Print', 'shaarli' => 'Shaarli', 'twitter' => 'Twitter', - 'wallabag' => 'wallabag', + 'wallabag' => 'wallabag v1', + 'wallabagv2' => 'wallabag v2', 'jdh' => 'Journal du hacker', ), 'short' => array( diff --git a/app/i18n/fr/gen.php b/app/i18n/fr/gen.php index 6b7056f92..f6695d887 100644 --- a/app/i18n/fr/gen.php +++ b/app/i18n/fr/gen.php @@ -164,7 +164,8 @@ return array( 'print' => 'Imprimer', 'shaarli' => 'Shaarli', 'twitter' => 'Twitter', - 'wallabag' => 'wallabag', + 'wallabag' => 'wallabag v1', + 'wallabagv2' => 'wallabag v2', 'jdh' => 'Journal du hacker', ), 'short' => array( diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php index 2efbef167..b3b4bd78e 100644 --- a/app/i18n/it/gen.php +++ b/app/i18n/it/gen.php @@ -163,7 +163,8 @@ return array( 'print' => 'Stampa', 'shaarli' => 'Shaarli', 'twitter' => 'Twitter', - 'wallabag' => 'wallabag', + 'wallabag' => 'wallabag v1', + 'wallabagv2' => 'wallabag v2', 'jdh' => 'Journal du hacker', ), 'short' => array( diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php index 1cafaf82a..7bd8bbb09 100644 --- a/app/i18n/nl/gen.php +++ b/app/i18n/nl/gen.php @@ -164,7 +164,8 @@ return array( 'print' => 'Print', 'shaarli' => 'Shaarli', 'twitter' => 'Twitter', - 'wallabag' => 'wallabag', + 'wallabag' => 'wallabag v1', + 'wallabagv2' => 'wallabag v2', 'jdh' => 'Journal du hacker', ), 'short' => array( diff --git a/app/i18n/tr/gen.php b/app/i18n/tr/gen.php index f987a8e6c..092c19752 100644 --- a/app/i18n/tr/gen.php +++ b/app/i18n/tr/gen.php @@ -164,7 +164,8 @@ return array( 'print' => 'Print', 'shaarli' => 'Shaarli', 'twitter' => 'Twitter', - 'wallabag' => 'wallabag', + 'wallabag' => 'wallabag v1', + 'wallabagv2' => 'wallabag v2', 'jdh' => 'Journal du hacker', ), 'short' => array( diff --git a/data/shares.php b/data/shares.php index 264c8fed7..1295a26ac 100644 --- a/data/shares.php +++ b/data/shares.php @@ -38,6 +38,15 @@ return array( 'help' => 'http://www.wallabag.org/', 'form' => 'advanced', ), + 'wallabagv2' => array( + 'url' => '~URL~/bookmarklet?url=~LINK~', + 'transform' => array( + 'link' => array('rawurlencode'), + 'title' => array(), + ), + 'help' => 'http://www.wallabag.org/', + 'form' => 'advanced', + ), 'diaspora' => array( 'url' => '~URL~/bookmarklet?url=~LINK~&title=~TITLE~', 'transform' => array('rawurlencode'), -- cgit v1.2.3 From 6fe1422854018cf18430e7a9f42a2b7dd0f1a18c Mon Sep 17 00:00:00 2001 From: hckweb Date: Thu, 12 May 2016 10:57:24 +0300 Subject: Update install.php 'json' tr translate --- app/i18n/tr/install.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'app') diff --git a/app/i18n/tr/install.php b/app/i18n/tr/install.php index d4c7c4cd5..85134845b 100644 --- a/app/i18n/tr/install.php +++ b/app/i18n/tr/install.php @@ -63,8 +63,8 @@ return array( 'ok' => 'HTTP REFERER ve sunucunuz arası iletişim sorunsuz.', ), 'json' => array( - 'nok' => 'You lack a recommended library to parse JSON.', - 'ok' => 'You have a recommended library to parse JSON.', + 'nok' => 'Tavsiye edilen JSON çözümleme kütüphanesi eksik.', + 'ok' => 'Tavsiye edilen JSON çözümleme kütüphanesi sorunsuz.', ), 'minz' => array( 'nok' => 'Minz framework eksik.', -- cgit v1.2.3 From b5b7233f92cb1a67964f40bd53f94c45614e4e10 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 12 Jun 2016 11:52:29 +0200 Subject: i18n remove RU UTF-8 suffix https://github.com/FreshRSS/FreshRSS/pull/1085 --- app/i18n/ru_RU.utf8/admin.php | 183 --------------------------------------- app/i18n/ru_RU.utf8/conf.php | 174 ------------------------------------- app/i18n/ru_RU.utf8/feedback.php | 110 ----------------------- app/i18n/ru_RU.utf8/gen.php | 181 -------------------------------------- app/i18n/ru_RU.utf8/index.php | 61 ------------- app/i18n/ru_RU.utf8/install.php | 113 ------------------------ app/i18n/ru_RU.utf8/sub.php | 62 ------------- app/i18n/ru_RU/admin.php | 183 +++++++++++++++++++++++++++++++++++++++ app/i18n/ru_RU/conf.php | 174 +++++++++++++++++++++++++++++++++++++ app/i18n/ru_RU/feedback.php | 110 +++++++++++++++++++++++ app/i18n/ru_RU/gen.php | 181 ++++++++++++++++++++++++++++++++++++++ app/i18n/ru_RU/index.php | 61 +++++++++++++ app/i18n/ru_RU/install.php | 113 ++++++++++++++++++++++++ app/i18n/ru_RU/sub.php | 62 +++++++++++++ 14 files changed, 884 insertions(+), 884 deletions(-) delete mode 100644 app/i18n/ru_RU.utf8/admin.php delete mode 100644 app/i18n/ru_RU.utf8/conf.php delete mode 100644 app/i18n/ru_RU.utf8/feedback.php delete mode 100644 app/i18n/ru_RU.utf8/gen.php delete mode 100644 app/i18n/ru_RU.utf8/index.php delete mode 100644 app/i18n/ru_RU.utf8/install.php delete mode 100644 app/i18n/ru_RU.utf8/sub.php create mode 100644 app/i18n/ru_RU/admin.php create mode 100644 app/i18n/ru_RU/conf.php create mode 100644 app/i18n/ru_RU/feedback.php create mode 100644 app/i18n/ru_RU/gen.php create mode 100644 app/i18n/ru_RU/index.php create mode 100644 app/i18n/ru_RU/install.php create mode 100644 app/i18n/ru_RU/sub.php (limited to 'app') diff --git a/app/i18n/ru_RU.utf8/admin.php b/app/i18n/ru_RU.utf8/admin.php deleted file mode 100644 index dfea5b3cb..000000000 --- a/app/i18n/ru_RU.utf8/admin.php +++ /dev/null @@ -1,183 +0,0 @@ - array( - 'allow_anonymous' => 'Разрешить анонимное чтение статей для пользователя по умолчанию (%s)', - 'allow_anonymous_refresh' => 'Разрешить анонимное обновление статей', - 'api_enabled' => 'Включить доступ к API (необходимо для мобильных приложений)', - 'form' => 'На основе веб-формы (традиционный, необходим JavaScript)', - 'http' => 'HTTP (для продвинутых пользователей - по HTTPS)', - 'none' => 'Без аутентификации (небезопасный)', - 'persona' => 'Mozilla Persona (новый, необходим JavaScript)', - 'title' => 'Аутентификации', - 'title_reset' => 'Сброс аутентицикации', - 'token' => 'Токен аутентификации', - 'token_help' => 'Разрешает доступ к RSS ленте пользователя по умолчанию без аутентификации:', - 'type' => 'Метод аутентификации', - 'unsafe_autologin' => 'Разрешить небезопасный автоматический вход с использованием следующего формата: ', - ), - 'check_install' => array( - 'cache' => array( - 'nok' => 'Проверьте права доступа к папке ./data/cache. Сервер HTTP должен иметь права на запись в эту папку', - 'ok' => 'Права на ./data/cache в порядке.', - ), - 'categories' => array( - 'nok' => 'Таблица категорий настроена неправильно.', - 'ok' => 'Таблица категорий настроена правильно.', - ), - 'connection' => array( - 'nok' => 'Подключение к базе данных не может быть установлено.', - 'ok' => 'Подключение к базе данных в порядке.', - ), - 'ctype' => array( - 'nok' => 'У вас не установлена библиотека для проверки типов символов (php-ctype).', - 'ok' => 'У вас не установлена библиотека для проверки типов символов (ctype).', - ), - 'curl' => array( - 'nok' => 'У вас не установлено расширение cURL (пакет php5-curl).', - 'ok' => 'У вас установлено расширение cURL.', - ), - 'data' => array( - 'nok' => 'Проверьте права доступа к папке ./data . Сервер HTTP должен иметь права на запись в эту папку.', - 'ok' => 'Права на ./data/ в порядке.', - ), - 'database' => 'Установка базы данных', - 'dom' => array( - 'nok' => 'У вас не установлена библиотека для просмотра DOM (пакет php-xml).', - 'ok' => 'У вас установлена библиотека для просмотра DOM.', - ), - 'entries' => array( - 'nok' => 'Таблица статей (entry) неправильно настроена.', - 'ok' => 'Таблица статей (entry) настроена правильно.', - ), - 'favicons' => array( - 'nok' => 'Проверьте права доступа к папке ./data/favicons . Сервер HTTP должен иметь права на запись в эту папку.', - 'ok' => 'Права на папку значков в порядке.', - ), - 'feeds' => array( - 'nok' => 'Таблица подписок (feed) неправильно настроена.', - 'ok' => 'Таблица подписок (feed) настроена правильно.', - ), - 'files' => 'Установка файлов', - 'json' => array( - 'nok' => 'У вас не установлена библиотека для работы с JSON (пакет php5-json).', - 'ok' => 'У вас установлена библиотека для работы с JSON.', - ), - 'minz' => array( - 'nok' => 'У вас не установлен фрейворк Minz.', - 'ok' => 'У вас установлен фрейворк Minz.', - ), - 'pcre' => array( - 'nok' => 'У вас не установлена необходимая библиотека для работы с регулярными выражениями (php-pcre).', - 'ok' => 'У вас установлена необходимая библиотека для работы с регулярными выражениями (PCRE).', - ), - 'pdo' => array( - 'nok' => 'У вас не установлен PDO или один из необходимых драйверов (pdo_mysql, pdo_sqlite).', - 'ok' => 'У вас установлен PDO и как минимум один из поддерживаемых драйверов (pdo_mysql, pdo_sqlite).', - ), - 'persona' => array( - 'nok' => 'Проверьте права доступа к папке ./data/persona . Сервер HTTP должен иметь права на запись в эту папку.', - 'ok' => 'Права на папку Mozilla Persona в порядке.', - ), - 'php' => array( - '_' => 'PHP installation', - 'nok' => 'У вас установлен PHP версии %s, но FreshRSS необходима версия не ниже %s.', - 'ok' => 'У вас установлен PHP версии %s, который совместим с FreshRSS.', - ), - 'tables' => array( - 'nok' => 'В базе данных отсуствует одна или больше таблица.', - 'ok' => 'Все таблицы есть в базе данных.', - ), - 'title' => 'Проверка установки и настройки', - 'tokens' => array( - 'nok' => 'Проверьте права доступа к папке ./data/tokens . Сервер HTTP должен иметь права на запись в эту папку.', - 'ok' => 'Права на папку tokens в порядке.', - ), - 'users' => array( - 'nok' => 'Проверьте права доступа к папке ./data/users . Сервер HTTP должен иметь права на запись в эту папку.', - 'ok' => 'Права на папку users в порядке.', - ), - 'zip' => array( - 'nok' => 'You lack ZIP extension (php5-zip package).', - 'ok' => 'You have ZIP extension.', - ), - ), - 'extensions' => array( - 'disabled' => 'Отключены', - 'empty_list' => 'Расширения не установлены', - 'enabled' => 'Включены', - 'no_configure_view' => 'Это расширение нельзя настроить.', - 'system' => array( - '_' => 'Системные расширения', - 'no_rights' => 'Системные расширения (у вас нет к ним доступа)', - ), - 'title' => 'Расширения', - 'user' => 'Расширения пользователя', - ), - 'stats' => array( - '_' => 'Статистика', - 'all_feeds' => 'Все подписки', - 'category' => 'Категория', - 'entry_count' => 'Количество статей', - 'entry_per_category' => 'Статей в категории', - 'entry_per_day' => 'Статей за день (за последние 30 дней)', - 'entry_per_day_of_week' => 'За неделю (в среднем - %.2f сообщений)', - 'entry_per_hour' => 'За час (в среднем - %.2f сообщений)', - 'entry_per_month' => 'За месяц (в среднем - %.2f сообщений)', - 'entry_repartition' => 'Перерасределение статей', - 'feed' => 'Подписка', - 'feed_per_category' => 'Подписок в категории', - 'idle' => 'Неактивные подписки', - 'main' => 'Основная статистика', - 'main_stream' => 'Основной поток', - 'menu' => array( - 'idle' => 'Неактивные подписки', - 'main' => 'Основная статистика', - 'repartition' => 'Перерасределение статей', - ), - 'no_idle' => 'Нет неактивных подписок!', - 'number_entries' => 'статей: %d', - 'percent_of_total' => '%% от всего', - 'repartition' => 'Перераспределение статей', - 'status_favorites' => 'Избранное', - 'status_read' => 'Читать', - 'status_total' => 'Всего', - 'status_unread' => 'Не прочитано', - 'title' => 'Статистика', - 'top_feed' => '10 лучших подписок', - ), - 'system' => array( - '_' => 'Системные настройки', - 'auto-update-url' => 'Адрес сервера для автоматического обновления', - 'instance-name' => 'Название этого сервера', - 'max-categories' => 'Количество категорий на пользователя', - 'max-feeds' => 'Количество статей на пользователя', - 'registration' => array( - 'help' => '0 означает неограниченное количество пользователей', - 'number' => 'Максимальное количество пользователей', - ), - ), - 'update' => array( - '_' => 'Обновление системы', - 'apply' => 'Применить', - 'check' => 'Проверить обновления', - 'current_version' => 'Ваша текущая версия FreshRSS: %s.', - 'last' => 'Последняя проверка: %s', - 'none' => 'Нечего обновлять', - 'title' => 'Обновить систему', - ), - 'user' => array( - 'articles_and_size' => '%s статей (%s)', - 'create' => 'Создать нового пользователя', - 'email_persona' => 'Адрес электронной почты для входа
    (for Mozilla Persona)', - 'language' => 'Язык', - 'number' => 'На данный момент создан %d аккаунт', - 'numbers' => 'На данный момент аккаунтов создано: %d', - 'password_form' => 'Пароль
    (для входа через Веб-форму)', - 'password_format' => 'Минимум 7 символов', - 'title' => 'Управление пользователями', - 'user_list' => 'Список пользователей', - 'username' => 'Имя пользователя', - 'users' => 'Пользователи', - ), -); diff --git a/app/i18n/ru_RU.utf8/conf.php b/app/i18n/ru_RU.utf8/conf.php deleted file mode 100644 index e502e9a43..000000000 --- a/app/i18n/ru_RU.utf8/conf.php +++ /dev/null @@ -1,174 +0,0 @@ - array( - '_' => 'Архивация', - 'advanced' => 'Продвинутые настройки', - 'delete_after' => 'Удалять статьи после', - 'help' => 'Каждую подписку можно настроить более гибко', - 'keep_history_by_feed' => 'Minimum number of articles to keep by feed', - 'optimize' => 'Оптимизировать базу данных', - 'optimize_help' => 'To do occasionally to reduce the size of the database', - 'purge_now' => 'Очистить сейчас', - 'title' => 'Архивация', - 'ttl' => 'Не обновлять чаще чем', - ), - 'display' => array( - '_' => 'Display', - 'icon' => array( - 'bottom_line' => 'Bottom line', - 'entry' => 'Article icons', - 'publication_date' => 'Date of publication', - 'related_tags' => 'Related tags', - 'sharing' => 'Sharing', - 'top_line' => 'Top line', - ), - 'language' => 'Язык', - 'notif_html5' => array( - 'seconds' => 'seconds (0 means no timeout)', - 'timeout' => 'HTML5 notification timeout', - ), - 'theme' => 'Тема', - 'title' => 'Display', - 'width' => array( - 'content' => 'Content width', - 'large' => 'Large', - 'medium' => 'Medium', - 'no_limit' => 'No limit', - 'thin' => 'Thin', - ), - ), - 'query' => array( - '_' => 'User queries', - 'deprecated' => 'This query is no longer valid. The referenced category or feed has been deleted.', - 'filter' => 'Filter applied:', - 'get_all' => 'Display all articles', - 'get_category' => 'Display "%s" category', - 'get_favorite' => 'Display favorite articles', - 'get_feed' => 'Display "%s" feed', - 'no_filter' => 'No filter', - 'none' => 'You haven’t created any user query yet.', - 'number' => 'Query n°%d', - 'order_asc' => 'Display oldest articles first', - 'order_desc' => 'Display newest articles first', - 'search' => 'Search for "%s"', - 'state_0' => 'Display all articles', - 'state_1' => 'Display read articles', - 'state_2' => 'Display unread articles', - 'state_3' => 'Display all articles', - 'state_4' => 'Display favorite articles', - 'state_5' => 'Display read favorite articles', - 'state_6' => 'Display unread favorite articles', - 'state_7' => 'Display favorite articles', - 'state_8' => 'Display not favorite articles', - 'state_9' => 'Display read not favorite articles', - 'state_10' => 'Display unread not favorite articles', - 'state_11' => 'Display not favorite articles', - 'state_12' => 'Display all articles', - 'state_13' => 'Display read articles', - 'state_14' => 'Display unread articles', - 'state_15' => 'Display all articles', - 'title' => 'User queries', - ), - 'profile' => array( - '_' => 'Profile management', - 'delete' => array( - '_' => 'Account deletion', - 'warn' => 'Your account and all the related data will be deleted.', - ), - 'email_persona' => 'Login email address
    (for Mozilla Persona)', - 'password_api' => 'Password API
    (e.g., for mobile apps)', - 'password_form' => 'Password
    (for the Web-form login method)', - 'password_format' => 'At least 7 characters', - 'title' => 'Profile', - ), - 'reading' => array( - '_' => 'Reading', - 'after_onread' => 'After “mark all as read”,', - 'articles_per_page' => 'Number of articles per page', - 'auto_load_more' => 'Load next articles at the page bottom', - 'auto_remove_article' => 'Hide articles after reading', - 'mark_updated_article_unread' => 'Mark updated articles as unread', - 'confirm_enabled' => 'Display a confirmation dialog on “mark all as read” actions', - 'display_articles_unfolded' => 'Show articles unfolded by default', - 'display_categories_unfolded' => 'Show categories folded by default', - 'hide_read_feeds' => 'Hide categories & feeds with no unread article (does not work with “Show all articles” configuration)', - 'img_with_lazyload' => 'Use "lazy load" mode to load pictures', - 'jump_next' => 'jump to next unread sibling (feed or category)', - 'number_divided_when_reader' => 'Divided by 2 in the reading view.', - 'read' => array( - 'article_open_on_website' => 'when article is opened on its original website', - 'article_viewed' => 'when article is viewed', - 'scroll' => 'while scrolling', - 'upon_reception' => 'upon reception of the article', - 'when' => 'Mark article as read…', - ), - 'show' => array( - '_' => 'Articles to display', - 'adaptive' => 'Adjust showing', - 'all_articles' => 'Show all articles', - 'unread' => 'Show only unread', - ), - 'sort' => array( - '_' => 'Sort order', - 'newer_first' => 'Newer first', - 'older_first' => 'Oldest first', - ), - 'sticky_post' => 'Stick the article to the top when opened', - 'title' => 'Reading', - 'view' => array( - 'default' => 'Default view', - 'global' => 'Global view', - 'normal' => 'Normal view', - 'reader' => 'Reading view', - ), - ), - 'sharing' => array( - '_' => 'Sharing', - 'blogotext' => 'Blogotext', - 'diaspora' => 'Diaspora*', - 'email' => 'Email', - 'facebook' => 'Facebook', - 'g+' => 'Google+', - 'more_information' => 'More information', - 'print' => 'Print', - 'shaarli' => 'Shaarli', - 'share_name' => 'Share name to display', - 'share_url' => 'Share URL to use', - 'title' => 'Sharing', - 'twitter' => 'Twitter', - 'wallabag' => 'wallabag', - ), - 'shortcut' => array( - '_' => 'Shortcuts', - 'article_action' => 'Article actions', - 'auto_share' => 'Share', - 'auto_share_help' => 'If there is only one sharing mode, it is used. Else modes are accessible by their number.', - 'close_dropdown' => 'Close menus', - 'collapse_article' => 'Collapse', - 'first_article' => 'Skip to the first article', - 'focus_search' => 'Access search box', - 'help' => 'Display documentation', - 'javascript' => 'JavaScript must be enabled in order to use shortcuts', - 'last_article' => 'Skip to the last article', - 'load_more' => 'Load more articles', - 'mark_read' => 'Mark as read', - 'mark_favorite' => 'Mark as favourite', - 'navigation' => 'Navigation', - 'navigation_help' => 'With the "Shift" modifier, navigation shortcuts apply on feeds.
    With the "Alt" modifier, navigation shortcuts apply on categories.', - 'next_article' => 'Skip to the next article', - 'other_action' => 'Other actions', - 'previous_article' => 'Skip to the previous article', - 'see_on_website' => 'See on original website', - 'shift_for_all_read' => '+ shift to mark all articles as read', - 'title' => 'Shortcuts', - 'user_filter' => 'Access user filters', - 'user_filter_help' => 'If there is only one user filter, it is used. Else filters are accessible by their number.', - ), - 'user' => array( - 'articles_and_size' => '%s articles (%s)', - 'current' => 'Current user', - 'is_admin' => 'is administrator', - 'users' => 'Users', - ), -); diff --git a/app/i18n/ru_RU.utf8/feedback.php b/app/i18n/ru_RU.utf8/feedback.php deleted file mode 100644 index c9189c0d0..000000000 --- a/app/i18n/ru_RU.utf8/feedback.php +++ /dev/null @@ -1,110 +0,0 @@ - array( - 'optimization_complete' => 'Optimisation complete', - ), - 'access' => array( - 'denied' => 'You don’t have permission to access this page', - 'not_found' => 'You are looking for a page which doesn’t exist', - ), - 'auth' => array( - 'form' => array( - 'not_set' => 'A problem occured during authentication system configuration. Please retry later.', - 'set' => 'Form is now your default authentication system.', - ), - 'login' => array( - 'invalid' => 'Login is invalid', - 'success' => 'You are connected', - ), - 'logout' => array( - 'success' => 'You are disconnected', - ), - 'no_password_set' => 'Administrator password hasn’t been set. This feature isn’t available.', - 'not_persona' => 'Only Persona system can be reset.', - ), - 'conf' => array( - 'error' => 'An error occurred during configuration saving', - 'query_created' => 'Query "%s" has been created.', - 'shortcuts_updated' => 'Shortcuts have been updated', - 'updated' => 'Configuration has been updated', - ), - 'extensions' => array( - 'already_enabled' => '%s is already enabled', - 'disable' => array( - 'ko' => '%s cannot be disabled. Check FressRSS logs for details.', - 'ok' => '%s is now disabled', - ), - 'enable' => array( - 'ko' => '%s cannot be enabled. Check FressRSS logs for details.', - 'ok' => '%s is now enabled', - ), - 'no_access' => 'You have no access on %s', - 'not_enabled' => '%s is not enabled yet', - 'not_found' => '%s does not exist', - ), - 'import_export' => array( - 'export_no_zip_extension' => 'Zip extension is not present on your server. Please try to export files one by one.', - 'feeds_imported' => 'Your feeds have been imported and will now be updated', - 'feeds_imported_with_errors' => 'Your feeds have been imported but some errors occurred', - 'file_cannot_be_uploaded' => 'File cannot be uploaded!', - 'no_zip_extension' => 'Zip extension is not present on your server.', - 'zip_error' => 'An error occured during Zip import.', - ), - 'sub' => array( - 'actualize' => 'Actualise', - 'category' => array( - 'created' => 'Category %s has been created.', - 'deleted' => 'Category has been deleted.', - 'emptied' => 'Category has been emptied', - 'error' => 'Category cannot be updated', - 'name_exists' => 'Category name already exists.', - 'no_id' => 'You must precise the id of the category.', - 'no_name' => 'Category name cannot be empty.', - 'not_delete_default' => 'You cannot delete the default category!', - 'not_exist' => 'The category does not exist!', - 'over_max' => 'You have reached your limit of categories (%d)', - 'updated' => 'Category has been updated.', - ), - 'feed' => array( - 'actualized' => '%s has been updated', - 'actualizeds' => 'RSS feeds have been updated', - 'added' => 'RSS feed %s has been added', - 'already_subscribed' => 'You have already subscribed to %s', - 'deleted' => 'Feed has been deleted', - 'error' => 'Feed cannot be updated', - 'internal_problem' => 'The RSS feed could not be added. Check FressRSS logs for details.', - 'invalid_url' => 'URL %s is invalid', - 'marked_read' => 'Feeds have been marked as read', - 'n_actualized' => '%d feeds have been updated', - 'n_entries_deleted' => '%d articles have been deleted', - 'no_refresh' => 'There is no feed to refresh…', - 'not_added' => '%s could not be added', - 'over_max' => 'You have reached your limit of feeds (%d)', - 'updated' => 'Feed has been updated', - ), - 'purge_completed' => 'Purge completed (%d articles deleted)', - ), - 'update' => array( - 'can_apply' => 'FreshRSS will now be updated to the version %s.', - 'error' => 'The update process has encountered an error: %s', - 'file_is_nok' => 'Check permissions on %s directory. HTTP server must have rights to write into', - 'finished' => 'Update completed!', - 'none' => 'No update to apply', - 'server_not_found' => 'Update server cannot be found. [%s]', - ), - 'user' => array( - 'created' => array( - '_' => 'User %s has been created', - 'error' => 'User %s cannot be created', - ), - 'deleted' => array( - '_' => 'User %s has been deleted', - 'error' => 'User %s cannot be deleted', - ), - ), - 'profile' => array( - 'error' => 'Your profile cannot be modified', - 'updated' => 'Your profile has been modified', - ), -); diff --git a/app/i18n/ru_RU.utf8/gen.php b/app/i18n/ru_RU.utf8/gen.php deleted file mode 100644 index d23b12f95..000000000 --- a/app/i18n/ru_RU.utf8/gen.php +++ /dev/null @@ -1,181 +0,0 @@ - array( - 'actualize' => 'Actualize', - 'back_to_rss_feeds' => '← Go back to your RSS feeds', - 'cancel' => 'Cancel', - 'create' => 'Create', - 'disable' => 'Disable', - 'empty' => 'Empty', - 'enable' => 'Enable', - 'export' => 'Export', - 'filter' => 'Filter', - 'import' => 'Import', - 'manage' => 'Manage', - 'mark_read' => 'Mark as read', - 'mark_favorite' => 'Mark as favourite', - 'remove' => 'Remove', - 'see_website' => 'See website', - 'submit' => 'Submit', - 'truncate' => 'Delete all articles', - ), - 'auth' => array( - 'email' => 'Email address', - 'keep_logged_in' => 'Keep me logged in (1 month)', - 'login' => 'Login', - 'login_persona' => 'Login with Persona', - 'login_persona_problem' => 'Connection problem with Persona?', - 'logout' => 'Logout', - 'password' => array( - '_' => 'Password', - 'format' => 'At least 7 characters', - ), - 'registration' => array( - '_' => 'New account', - 'ask' => 'Create an account?', - 'title' => 'Account creation', - ), - 'reset' => 'Authentication reset', - 'username' => array( - '_' => 'Username', - 'admin' => 'Administrator username', - 'format' => 'maximum 16 alphanumeric characters', - ), - 'will_reset' => 'Authentication system will be reset: a form will be used instead of Persona.', - ), - 'date' => array( - 'Apr' => '\\A\\p\\r\\i\\l', - 'Aug' => '\\A\\u\\g\\u\\s\\t', - 'Dec' => '\\D\\e\\c\\e\\m\\b\\e\\r', - 'Feb' => '\\F\\e\\b\\r\\u\\a\\r\\y', - 'Jan' => '\\J\\a\\n\\u\\a\\r\\y', - 'Jul' => '\\J\\u\\l\\y', - 'Jun' => '\\J\\u\\n\\e', - 'Mar' => '\\M\\a\\r\\c\\h', - 'May' => '\\M\\a\\y', - 'Nov' => '\\N\\o\\v\\e\\m\\b\\e\\r', - 'Oct' => '\\O\\c\\t\\o\\b\\e\\r', - 'Sep' => '\\S\\e\\p\\t\\e\\m\\b\\e\\r', - 'apr' => 'apr', - 'april' => 'Apr', - 'aug' => 'aug', - 'august' => 'Aug', - 'before_yesterday' => 'Before yesterday', - 'dec' => 'dec', - 'december' => 'Dec', - 'feb' => 'feb', - 'february' => 'Feb', - 'format_date' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y', - 'format_date_hour' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y \\a\\t H\\:i', - 'fri' => 'Fri', - 'jan' => 'jan', - 'january' => 'Jan', - 'jul' => 'jul', - 'july' => 'Jul', - 'jun' => 'jun', - 'june' => 'Jun', - 'last_3_month' => 'Last three months', - 'last_6_month' => 'Last six months', - 'last_month' => 'Last month', - 'last_week' => 'Last week', - 'last_year' => 'Last year', - 'mar' => 'mar', - 'march' => 'Mar', - 'may' => 'May', - 'mon' => 'Mon', - 'month' => 'months', - 'nov' => 'nov', - 'november' => 'Nov', - 'oct' => 'oct', - 'october' => 'Oct', - 'sat' => 'Sat', - 'sep' => 'sep', - 'september' => 'Sep', - 'sun' => 'Sun', - 'thu' => 'Thu', - 'today' => 'Today', - 'tue' => 'Tue', - 'wed' => 'Wed', - 'yesterday' => 'Yesterday', - ), - 'freshrss' => array( - '_' => 'FreshRSS', - 'about' => 'About FreshRSS', - ), - 'js' => array( - 'category_empty' => 'Empty category', - 'confirm_action' => 'Are you sure you want to perform this action? It cannot be cancelled!', - 'confirm_action_feed_cat' => 'Are you sure you want to perform this action? You will lose related favorites and user queries. It cannot be cancelled!', - 'feedback' => array( - 'body_new_articles' => 'There are \\d new articles to read on FreshRSS.', - 'request_failed' => 'A request has failed, it may have been caused by Internet connection problems.', - 'title_new_articles' => 'FreshRSS: new articles!', - ), - 'new_article' => 'There are new available articles, click to refresh the page.', - 'should_be_activated' => 'JavaScript must be enabled', - ), - 'lang' => array( - 'cz' => 'Čeština', - 'de' => 'Deutsch', - 'en' => 'English', - 'fr' => 'Français', - 'it' => 'Italiano', - 'nl' => 'Nederlands', - ), - 'menu' => array( - 'about' => 'About', - 'admin' => 'Administration', - 'archiving' => 'Archiving', - 'authentication' => 'Authentication', - 'check_install' => 'Installation checking', - 'configuration' => 'Configuration', - 'display' => 'Display', - 'extensions' => 'Extensions', - 'logs' => 'Logs', - 'queries' => 'User queries', - 'reading' => 'Reading', - 'search' => 'Search words or #tags', - 'sharing' => 'Sharing', - 'shortcuts' => 'Shortcuts', - 'stats' => 'Statistics', - 'system' => 'System configuration', - 'update' => 'Update', - 'user_management' => 'Manage users', - 'user_profile' => 'Profile', - ), - 'pagination' => array( - 'first' => 'First', - 'last' => 'Last', - 'load_more' => 'Load more articles', - 'mark_all_read' => 'Mark all as read', - 'next' => 'Next', - 'nothing_to_load' => 'There are no more articles', - 'previous' => 'Previous', - ), - 'share' => array( - 'blogotext' => 'Blogotext', - 'diaspora' => 'Diaspora*', - 'email' => 'Email', - 'facebook' => 'Facebook', - 'g+' => 'Google+', - 'movim' => 'Movim', - 'print' => 'Print', - 'shaarli' => 'Shaarli', - 'twitter' => 'Twitter', - 'wallabag' => 'wallabag', - ), - 'short' => array( - 'attention' => 'Warning!', - 'blank_to_disable' => 'Leave blank to disable', - 'by_author' => 'By %s', - 'by_default' => 'By default', - 'damn' => 'Damn!', - 'default_category' => 'Uncategorized', - 'no' => 'No', - 'not_applicable' => 'Not available', - 'ok' => 'Ok!', - 'or' => 'or', - 'yes' => 'Yes', - ), -); diff --git a/app/i18n/ru_RU.utf8/index.php b/app/i18n/ru_RU.utf8/index.php deleted file mode 100644 index 80fa3d950..000000000 --- a/app/i18n/ru_RU.utf8/index.php +++ /dev/null @@ -1,61 +0,0 @@ - array( - '_' => 'About', - 'agpl3' => 'AGPL 3', - 'bugs_reports' => 'Bugs reports', - 'credits' => 'Credits', - 'credits_content' => 'Some design elements come from Bootstrap although FreshRSS doesn’t use this framework. Icons come from GNOME project. Open Sans font police has been created by Steve Matteson. Favicons are collected with getFavicon API. FreshRSS is based on Minz, a PHP framework.', - 'freshrss_description' => 'FreshRSS is a RSS feeds aggregator to self-host like Kriss Feed or Leed. It is light and easy to take in hand while being powerful and configurable tool.', - 'github' => 'on Github', - 'license' => 'License', - 'project_website' => 'Project website', - 'title' => 'About', - 'version' => 'Version', - 'website' => 'Website', - ), - 'feed' => array( - 'add' => 'You may add some feeds.', - 'empty' => 'There is no article to show.', - 'rss_of' => 'RSS feed of %s', - 'title' => 'Your RSS feeds', - 'title_global' => 'Global view', - 'title_fav' => 'Your favourites', - ), - 'log' => array( - '_' => 'Logs', - 'clear' => 'Clear the logs', - 'empty' => 'Log file is empty', - 'title' => 'Logs', - ), - 'menu' => array( - 'about' => 'About FreshRSS', - 'add_query' => 'Add a query', - 'before_one_day' => 'Before one day', - 'before_one_week' => 'Before one week', - 'favorites' => 'Favourites (%s)', - 'global_view' => 'Global view', - 'main_stream' => 'Main stream', - 'mark_all_read' => 'Mark all as read', - 'mark_cat_read' => 'Mark category as read', - 'mark_feed_read' => 'Mark feed as read', - 'newer_first' => 'Newer first', - 'non-starred' => 'Show all but favorites', - 'normal_view' => 'Normal view', - 'older_first' => 'Oldest first', - 'queries' => 'User queries', - 'read' => 'Show only read', - 'reader_view' => 'Reading view', - 'rss_view' => 'RSS feed', - 'search_short' => 'Search', - 'starred' => 'Show only favorites', - 'stats' => 'Statistics', - 'subscription' => 'Subscriptions management', - 'unread' => 'Show only unread', - ), - 'share' => 'Share', - 'tag' => array( - 'related' => 'Related tags', - ), -); diff --git a/app/i18n/ru_RU.utf8/install.php b/app/i18n/ru_RU.utf8/install.php deleted file mode 100644 index c838b2eba..000000000 --- a/app/i18n/ru_RU.utf8/install.php +++ /dev/null @@ -1,113 +0,0 @@ - array( - 'finish' => 'Завершить установку', - 'fix_errors_before' => 'Пожалуйста, исправьте ошибки прежде чем переходить к следующему этапу.', - 'keep_install' => 'Сохранить предыдущую установку', - 'next_step' => 'Перейти к следующему этапу', - 'reinstall' => 'Переустановить FreshRSS', - ), - 'auth' => array( - 'email_persona' => 'Почта (логин) для
    (for Mozilla Persona)', - 'form' => 'Вэб-форма (традиционный, необходим JavaScript)', - 'http' => 'HTTP (для продвинутых пользователей с HTTPS)', - 'none' => 'Никакого (опасно)', - 'password_form' => 'Пароль
    (для метода аутентификации на Вэб-формах)', - 'password_format' => 'Как минимум 7 букв', - 'persona' => 'Mozilla Persona (современный, необходим JavaScript)', - 'type' => 'Метод аутентификации', - ), - 'bdd' => array( - '_' => 'База данных', - 'conf' => array( - '_' => 'Конфигурация базы данныхDatabase configuration', - 'ko' => 'Проверьте конфигурацию базы данных.', - 'ok' => 'Конфигурация базы данных сохранена.', - ), - 'host' => 'Хост', - 'prefix' => 'Префикс таблицы', - 'password' => 'Пароль HTTP', - 'type' => 'Тип базы данных', - 'username' => 'Имя пользователя HTTP', - ), - 'check' => array( - '_' => 'Проверки', - 'already_installed' => 'Обнаружена предыдущая установка FreshRSS!', - 'cache' => array( - 'nok' => 'Проверьте права доступа к папке ./data/cache . Сервер HTTP должен иметь права на запись в эту папку.', - 'ok' => 'Права на папку кэша в порядке.', - ), - 'ctype' => array( - 'nok' => 'У вас не установлена необходимая библиотека для проверки типов символов (php-ctype).', - 'ok' => 'У вас установлена необходимая библиотека для проверки типов символов (ctype).', - ), - 'curl' => array( - 'nok' => 'У вас нет расширения cURL (пакет php5-curl).', - 'ok' => 'У вас установлено расширение cURL.', - ), - 'data' => array( - 'nok' => 'Проверьте права доступа к папке ./data . Сервер HTTP должен иметь права на запись в эту папку.', - 'ok' => 'Права на ./data/ в порядке.', - ), - 'dom' => array( - 'nok' => 'У вас не установлена необходимая библиотека для просмотра DOM (пакет php-xml).', - 'ok' => 'У вас установлена необходимая библиотека для просмотра DOM.', - ), - 'favicons' => array( - 'nok' => 'Проверьте права доступа к папке ./data/favicons . Сервер HTTP должен иметь права на запись в эту папку.', - 'ok' => 'Права на папку значков в порядке.', - ), - 'http_referer' => array( - 'nok' => 'Убедитесь, что вы не изменяете ваш HTTP REFERER.', - 'ok' => 'Ваш HTTP REFERER известен и соотвествует вашему серверу.', - ), - 'minz' => array( - 'nok' => 'У вас не установлен фрейворк Minz.', - 'ok' => 'У вас установлен фрейворк Minz.', - ), - 'pcre' => array( - 'nok' => 'У вас не установлена необходимая библиотека для работы с регулярными выражениями (php-pcre).', - 'ok' => 'У вас установлена необходимая библиотека для работы с регулярными выражениями (PCRE).', - ), - 'pdo' => array( - 'nok' => 'У вас не установлен PDO или один из необходимых драйверов (pdo_mysql, pdo_sqlite).', - 'ok' => 'У вас установлен PDO и как минимум один из поддерживаемых драйверов (pdo_mysql, pdo_sqlite).', - ), - 'persona' => array( - 'nok' => 'Проверьте права доступа к папке ./data/persona . Сервер HTTP должен иметь права на запись в эту папку.', - 'ok' => 'Права на папку Mozilla Persona в порядке.', - ), - 'php' => array( - 'nok' => 'У вас установлен PHP версии %s, но FreshRSS необходима версия не ниже %s.', - 'ok' => 'У вас установлен PHP версии %s, который совместим с FreshRSS.', - ), - 'users' => array( - 'nok' => 'Проверьте права доступа к папке ./data/users . Сервер HTTP должен иметь права на запись в эту папку.', - 'ok' => 'Права на папку users в порядке.', - ), - ), - 'conf' => array( - '_' => 'Общие настройки', - 'ok' => 'Общие настройки были сохранены.', - ), - 'congratulations' => 'Поздравляем!', - 'default_user' => 'Имя пользователя по умолчанию (максимум 16 латинских букв и/или цифр)', - 'delete_articles_after' => 'Удалять статьи после', - 'fix_errors_before' => 'Пожалуйста, исправьте ошибки прежде чем переходить к следующему этапу..', - 'javascript_is_better' => 'FreshRSS принесёт больше удовольствия, если включить JavaScript', - 'js' => array( - 'confirm_reinstall' => 'Переустанавливая FreshRSS, вы потеряете предыдущую конфигурацию. Вы хотите продолжить?', - ), - 'language' => array( - '_' => 'Язык', - 'choose' => 'Выберите язык для FreshRSS', - 'defined' => 'Язык выбран.', - ), - 'not_deleted' => 'Что-то пошло не так; удалите файл %s вручную.', - 'ok' => 'Установка успешна.', - 'step' => '%d этап', - 'steps' => 'Этапы', - 'title' => 'Установка · FreshRSS', - 'this_is_the_end' => 'Это конец', -); diff --git a/app/i18n/ru_RU.utf8/sub.php b/app/i18n/ru_RU.utf8/sub.php deleted file mode 100644 index aaaa02827..000000000 --- a/app/i18n/ru_RU.utf8/sub.php +++ /dev/null @@ -1,62 +0,0 @@ - array( - '_' => 'Category', - 'add' => 'Add a category', - 'empty' => 'Empty category', - 'new' => 'New category', - ), - 'feed' => array( - 'add' => 'Add a RSS feed', - 'advanced' => 'Advanced', - 'archiving' => 'Archivage', - 'auth' => array( - 'configuration' => 'Login', - 'help' => 'Connection allows to access HTTP protected RSS feeds', - 'http' => 'HTTP Authentication', - 'password' => 'HTTP password', - 'username' => 'HTTP username', - ), - 'css_help' => 'Retrieves truncated RSS feeds (caution, requires more time!)', - 'css_path' => 'Articles CSS path on original website', - 'description' => 'Description', - 'empty' => 'This feed is empty. Please verify that it is still maintained.', - 'error' => 'This feed has encountered a problem. Please verify that it is always reachable then actualize it.', - 'in_main_stream' => 'Show in main stream', - 'informations' => 'Information', - 'keep_history' => 'Minimum number of articles to keep', - 'moved_category_deleted' => 'When you delete a category, its feeds are automatically classified under %s.', - 'no_selected' => 'No feed selected.', - 'number_entries' => '%d articles', - 'stats' => 'Statistics', - 'think_to_add' => 'You may add some feeds.', - 'title' => 'Title', - 'title_add' => 'Add a RSS feed', - 'ttl' => 'Do not automatically refresh more often than', - 'url' => 'Feed URL', - 'validator' => 'Check the validity of the feed', - 'website' => 'Website URL', - 'pubsubhubbub' => 'Instant notification with PubSubHubbub', - ), - 'import_export' => array( - 'export' => 'Export', - 'export_opml' => 'Export list of feeds (OPML)', - 'export_starred' => 'Export your favourites', - 'feed_list' => 'List of %s articles', - 'file_to_import' => 'File to import
    (OPML, Json or Zip)', - 'file_to_import_no_zip' => 'File to import
    (OPML or Json)', - 'import' => 'Import', - 'starred_list' => 'List of favourite articles', - 'title' => 'Import / export', - ), - 'menu' => array( - 'bookmark' => 'Subscribe (FreshRSS bookmark)', - 'import_export' => 'Import / export', - 'subscription_management' => 'Subscriptions management', - ), - 'title' => array( - '_' => 'Subscriptions management', - 'feed_management' => 'RSS feeds management', - ), -); diff --git a/app/i18n/ru_RU/admin.php b/app/i18n/ru_RU/admin.php new file mode 100644 index 000000000..dfea5b3cb --- /dev/null +++ b/app/i18n/ru_RU/admin.php @@ -0,0 +1,183 @@ + array( + 'allow_anonymous' => 'Разрешить анонимное чтение статей для пользователя по умолчанию (%s)', + 'allow_anonymous_refresh' => 'Разрешить анонимное обновление статей', + 'api_enabled' => 'Включить доступ к API (необходимо для мобильных приложений)', + 'form' => 'На основе веб-формы (традиционный, необходим JavaScript)', + 'http' => 'HTTP (для продвинутых пользователей - по HTTPS)', + 'none' => 'Без аутентификации (небезопасный)', + 'persona' => 'Mozilla Persona (новый, необходим JavaScript)', + 'title' => 'Аутентификации', + 'title_reset' => 'Сброс аутентицикации', + 'token' => 'Токен аутентификации', + 'token_help' => 'Разрешает доступ к RSS ленте пользователя по умолчанию без аутентификации:', + 'type' => 'Метод аутентификации', + 'unsafe_autologin' => 'Разрешить небезопасный автоматический вход с использованием следующего формата: ', + ), + 'check_install' => array( + 'cache' => array( + 'nok' => 'Проверьте права доступа к папке ./data/cache. Сервер HTTP должен иметь права на запись в эту папку', + 'ok' => 'Права на ./data/cache в порядке.', + ), + 'categories' => array( + 'nok' => 'Таблица категорий настроена неправильно.', + 'ok' => 'Таблица категорий настроена правильно.', + ), + 'connection' => array( + 'nok' => 'Подключение к базе данных не может быть установлено.', + 'ok' => 'Подключение к базе данных в порядке.', + ), + 'ctype' => array( + 'nok' => 'У вас не установлена библиотека для проверки типов символов (php-ctype).', + 'ok' => 'У вас не установлена библиотека для проверки типов символов (ctype).', + ), + 'curl' => array( + 'nok' => 'У вас не установлено расширение cURL (пакет php5-curl).', + 'ok' => 'У вас установлено расширение cURL.', + ), + 'data' => array( + 'nok' => 'Проверьте права доступа к папке ./data . Сервер HTTP должен иметь права на запись в эту папку.', + 'ok' => 'Права на ./data/ в порядке.', + ), + 'database' => 'Установка базы данных', + 'dom' => array( + 'nok' => 'У вас не установлена библиотека для просмотра DOM (пакет php-xml).', + 'ok' => 'У вас установлена библиотека для просмотра DOM.', + ), + 'entries' => array( + 'nok' => 'Таблица статей (entry) неправильно настроена.', + 'ok' => 'Таблица статей (entry) настроена правильно.', + ), + 'favicons' => array( + 'nok' => 'Проверьте права доступа к папке ./data/favicons . Сервер HTTP должен иметь права на запись в эту папку.', + 'ok' => 'Права на папку значков в порядке.', + ), + 'feeds' => array( + 'nok' => 'Таблица подписок (feed) неправильно настроена.', + 'ok' => 'Таблица подписок (feed) настроена правильно.', + ), + 'files' => 'Установка файлов', + 'json' => array( + 'nok' => 'У вас не установлена библиотека для работы с JSON (пакет php5-json).', + 'ok' => 'У вас установлена библиотека для работы с JSON.', + ), + 'minz' => array( + 'nok' => 'У вас не установлен фрейворк Minz.', + 'ok' => 'У вас установлен фрейворк Minz.', + ), + 'pcre' => array( + 'nok' => 'У вас не установлена необходимая библиотека для работы с регулярными выражениями (php-pcre).', + 'ok' => 'У вас установлена необходимая библиотека для работы с регулярными выражениями (PCRE).', + ), + 'pdo' => array( + 'nok' => 'У вас не установлен PDO или один из необходимых драйверов (pdo_mysql, pdo_sqlite).', + 'ok' => 'У вас установлен PDO и как минимум один из поддерживаемых драйверов (pdo_mysql, pdo_sqlite).', + ), + 'persona' => array( + 'nok' => 'Проверьте права доступа к папке ./data/persona . Сервер HTTP должен иметь права на запись в эту папку.', + 'ok' => 'Права на папку Mozilla Persona в порядке.', + ), + 'php' => array( + '_' => 'PHP installation', + 'nok' => 'У вас установлен PHP версии %s, но FreshRSS необходима версия не ниже %s.', + 'ok' => 'У вас установлен PHP версии %s, который совместим с FreshRSS.', + ), + 'tables' => array( + 'nok' => 'В базе данных отсуствует одна или больше таблица.', + 'ok' => 'Все таблицы есть в базе данных.', + ), + 'title' => 'Проверка установки и настройки', + 'tokens' => array( + 'nok' => 'Проверьте права доступа к папке ./data/tokens . Сервер HTTP должен иметь права на запись в эту папку.', + 'ok' => 'Права на папку tokens в порядке.', + ), + 'users' => array( + 'nok' => 'Проверьте права доступа к папке ./data/users . Сервер HTTP должен иметь права на запись в эту папку.', + 'ok' => 'Права на папку users в порядке.', + ), + 'zip' => array( + 'nok' => 'You lack ZIP extension (php5-zip package).', + 'ok' => 'You have ZIP extension.', + ), + ), + 'extensions' => array( + 'disabled' => 'Отключены', + 'empty_list' => 'Расширения не установлены', + 'enabled' => 'Включены', + 'no_configure_view' => 'Это расширение нельзя настроить.', + 'system' => array( + '_' => 'Системные расширения', + 'no_rights' => 'Системные расширения (у вас нет к ним доступа)', + ), + 'title' => 'Расширения', + 'user' => 'Расширения пользователя', + ), + 'stats' => array( + '_' => 'Статистика', + 'all_feeds' => 'Все подписки', + 'category' => 'Категория', + 'entry_count' => 'Количество статей', + 'entry_per_category' => 'Статей в категории', + 'entry_per_day' => 'Статей за день (за последние 30 дней)', + 'entry_per_day_of_week' => 'За неделю (в среднем - %.2f сообщений)', + 'entry_per_hour' => 'За час (в среднем - %.2f сообщений)', + 'entry_per_month' => 'За месяц (в среднем - %.2f сообщений)', + 'entry_repartition' => 'Перерасределение статей', + 'feed' => 'Подписка', + 'feed_per_category' => 'Подписок в категории', + 'idle' => 'Неактивные подписки', + 'main' => 'Основная статистика', + 'main_stream' => 'Основной поток', + 'menu' => array( + 'idle' => 'Неактивные подписки', + 'main' => 'Основная статистика', + 'repartition' => 'Перерасределение статей', + ), + 'no_idle' => 'Нет неактивных подписок!', + 'number_entries' => 'статей: %d', + 'percent_of_total' => '%% от всего', + 'repartition' => 'Перераспределение статей', + 'status_favorites' => 'Избранное', + 'status_read' => 'Читать', + 'status_total' => 'Всего', + 'status_unread' => 'Не прочитано', + 'title' => 'Статистика', + 'top_feed' => '10 лучших подписок', + ), + 'system' => array( + '_' => 'Системные настройки', + 'auto-update-url' => 'Адрес сервера для автоматического обновления', + 'instance-name' => 'Название этого сервера', + 'max-categories' => 'Количество категорий на пользователя', + 'max-feeds' => 'Количество статей на пользователя', + 'registration' => array( + 'help' => '0 означает неограниченное количество пользователей', + 'number' => 'Максимальное количество пользователей', + ), + ), + 'update' => array( + '_' => 'Обновление системы', + 'apply' => 'Применить', + 'check' => 'Проверить обновления', + 'current_version' => 'Ваша текущая версия FreshRSS: %s.', + 'last' => 'Последняя проверка: %s', + 'none' => 'Нечего обновлять', + 'title' => 'Обновить систему', + ), + 'user' => array( + 'articles_and_size' => '%s статей (%s)', + 'create' => 'Создать нового пользователя', + 'email_persona' => 'Адрес электронной почты для входа
    (for Mozilla Persona)', + 'language' => 'Язык', + 'number' => 'На данный момент создан %d аккаунт', + 'numbers' => 'На данный момент аккаунтов создано: %d', + 'password_form' => 'Пароль
    (для входа через Веб-форму)', + 'password_format' => 'Минимум 7 символов', + 'title' => 'Управление пользователями', + 'user_list' => 'Список пользователей', + 'username' => 'Имя пользователя', + 'users' => 'Пользователи', + ), +); diff --git a/app/i18n/ru_RU/conf.php b/app/i18n/ru_RU/conf.php new file mode 100644 index 000000000..e502e9a43 --- /dev/null +++ b/app/i18n/ru_RU/conf.php @@ -0,0 +1,174 @@ + array( + '_' => 'Архивация', + 'advanced' => 'Продвинутые настройки', + 'delete_after' => 'Удалять статьи после', + 'help' => 'Каждую подписку можно настроить более гибко', + 'keep_history_by_feed' => 'Minimum number of articles to keep by feed', + 'optimize' => 'Оптимизировать базу данных', + 'optimize_help' => 'To do occasionally to reduce the size of the database', + 'purge_now' => 'Очистить сейчас', + 'title' => 'Архивация', + 'ttl' => 'Не обновлять чаще чем', + ), + 'display' => array( + '_' => 'Display', + 'icon' => array( + 'bottom_line' => 'Bottom line', + 'entry' => 'Article icons', + 'publication_date' => 'Date of publication', + 'related_tags' => 'Related tags', + 'sharing' => 'Sharing', + 'top_line' => 'Top line', + ), + 'language' => 'Язык', + 'notif_html5' => array( + 'seconds' => 'seconds (0 means no timeout)', + 'timeout' => 'HTML5 notification timeout', + ), + 'theme' => 'Тема', + 'title' => 'Display', + 'width' => array( + 'content' => 'Content width', + 'large' => 'Large', + 'medium' => 'Medium', + 'no_limit' => 'No limit', + 'thin' => 'Thin', + ), + ), + 'query' => array( + '_' => 'User queries', + 'deprecated' => 'This query is no longer valid. The referenced category or feed has been deleted.', + 'filter' => 'Filter applied:', + 'get_all' => 'Display all articles', + 'get_category' => 'Display "%s" category', + 'get_favorite' => 'Display favorite articles', + 'get_feed' => 'Display "%s" feed', + 'no_filter' => 'No filter', + 'none' => 'You haven’t created any user query yet.', + 'number' => 'Query n°%d', + 'order_asc' => 'Display oldest articles first', + 'order_desc' => 'Display newest articles first', + 'search' => 'Search for "%s"', + 'state_0' => 'Display all articles', + 'state_1' => 'Display read articles', + 'state_2' => 'Display unread articles', + 'state_3' => 'Display all articles', + 'state_4' => 'Display favorite articles', + 'state_5' => 'Display read favorite articles', + 'state_6' => 'Display unread favorite articles', + 'state_7' => 'Display favorite articles', + 'state_8' => 'Display not favorite articles', + 'state_9' => 'Display read not favorite articles', + 'state_10' => 'Display unread not favorite articles', + 'state_11' => 'Display not favorite articles', + 'state_12' => 'Display all articles', + 'state_13' => 'Display read articles', + 'state_14' => 'Display unread articles', + 'state_15' => 'Display all articles', + 'title' => 'User queries', + ), + 'profile' => array( + '_' => 'Profile management', + 'delete' => array( + '_' => 'Account deletion', + 'warn' => 'Your account and all the related data will be deleted.', + ), + 'email_persona' => 'Login email address
    (for Mozilla Persona)', + 'password_api' => 'Password API
    (e.g., for mobile apps)', + 'password_form' => 'Password
    (for the Web-form login method)', + 'password_format' => 'At least 7 characters', + 'title' => 'Profile', + ), + 'reading' => array( + '_' => 'Reading', + 'after_onread' => 'After “mark all as read”,', + 'articles_per_page' => 'Number of articles per page', + 'auto_load_more' => 'Load next articles at the page bottom', + 'auto_remove_article' => 'Hide articles after reading', + 'mark_updated_article_unread' => 'Mark updated articles as unread', + 'confirm_enabled' => 'Display a confirmation dialog on “mark all as read” actions', + 'display_articles_unfolded' => 'Show articles unfolded by default', + 'display_categories_unfolded' => 'Show categories folded by default', + 'hide_read_feeds' => 'Hide categories & feeds with no unread article (does not work with “Show all articles” configuration)', + 'img_with_lazyload' => 'Use "lazy load" mode to load pictures', + 'jump_next' => 'jump to next unread sibling (feed or category)', + 'number_divided_when_reader' => 'Divided by 2 in the reading view.', + 'read' => array( + 'article_open_on_website' => 'when article is opened on its original website', + 'article_viewed' => 'when article is viewed', + 'scroll' => 'while scrolling', + 'upon_reception' => 'upon reception of the article', + 'when' => 'Mark article as read…', + ), + 'show' => array( + '_' => 'Articles to display', + 'adaptive' => 'Adjust showing', + 'all_articles' => 'Show all articles', + 'unread' => 'Show only unread', + ), + 'sort' => array( + '_' => 'Sort order', + 'newer_first' => 'Newer first', + 'older_first' => 'Oldest first', + ), + 'sticky_post' => 'Stick the article to the top when opened', + 'title' => 'Reading', + 'view' => array( + 'default' => 'Default view', + 'global' => 'Global view', + 'normal' => 'Normal view', + 'reader' => 'Reading view', + ), + ), + 'sharing' => array( + '_' => 'Sharing', + 'blogotext' => 'Blogotext', + 'diaspora' => 'Diaspora*', + 'email' => 'Email', + 'facebook' => 'Facebook', + 'g+' => 'Google+', + 'more_information' => 'More information', + 'print' => 'Print', + 'shaarli' => 'Shaarli', + 'share_name' => 'Share name to display', + 'share_url' => 'Share URL to use', + 'title' => 'Sharing', + 'twitter' => 'Twitter', + 'wallabag' => 'wallabag', + ), + 'shortcut' => array( + '_' => 'Shortcuts', + 'article_action' => 'Article actions', + 'auto_share' => 'Share', + 'auto_share_help' => 'If there is only one sharing mode, it is used. Else modes are accessible by their number.', + 'close_dropdown' => 'Close menus', + 'collapse_article' => 'Collapse', + 'first_article' => 'Skip to the first article', + 'focus_search' => 'Access search box', + 'help' => 'Display documentation', + 'javascript' => 'JavaScript must be enabled in order to use shortcuts', + 'last_article' => 'Skip to the last article', + 'load_more' => 'Load more articles', + 'mark_read' => 'Mark as read', + 'mark_favorite' => 'Mark as favourite', + 'navigation' => 'Navigation', + 'navigation_help' => 'With the "Shift" modifier, navigation shortcuts apply on feeds.
    With the "Alt" modifier, navigation shortcuts apply on categories.', + 'next_article' => 'Skip to the next article', + 'other_action' => 'Other actions', + 'previous_article' => 'Skip to the previous article', + 'see_on_website' => 'See on original website', + 'shift_for_all_read' => '+ shift to mark all articles as read', + 'title' => 'Shortcuts', + 'user_filter' => 'Access user filters', + 'user_filter_help' => 'If there is only one user filter, it is used. Else filters are accessible by their number.', + ), + 'user' => array( + 'articles_and_size' => '%s articles (%s)', + 'current' => 'Current user', + 'is_admin' => 'is administrator', + 'users' => 'Users', + ), +); diff --git a/app/i18n/ru_RU/feedback.php b/app/i18n/ru_RU/feedback.php new file mode 100644 index 000000000..c9189c0d0 --- /dev/null +++ b/app/i18n/ru_RU/feedback.php @@ -0,0 +1,110 @@ + array( + 'optimization_complete' => 'Optimisation complete', + ), + 'access' => array( + 'denied' => 'You don’t have permission to access this page', + 'not_found' => 'You are looking for a page which doesn’t exist', + ), + 'auth' => array( + 'form' => array( + 'not_set' => 'A problem occured during authentication system configuration. Please retry later.', + 'set' => 'Form is now your default authentication system.', + ), + 'login' => array( + 'invalid' => 'Login is invalid', + 'success' => 'You are connected', + ), + 'logout' => array( + 'success' => 'You are disconnected', + ), + 'no_password_set' => 'Administrator password hasn’t been set. This feature isn’t available.', + 'not_persona' => 'Only Persona system can be reset.', + ), + 'conf' => array( + 'error' => 'An error occurred during configuration saving', + 'query_created' => 'Query "%s" has been created.', + 'shortcuts_updated' => 'Shortcuts have been updated', + 'updated' => 'Configuration has been updated', + ), + 'extensions' => array( + 'already_enabled' => '%s is already enabled', + 'disable' => array( + 'ko' => '%s cannot be disabled. Check FressRSS logs for details.', + 'ok' => '%s is now disabled', + ), + 'enable' => array( + 'ko' => '%s cannot be enabled. Check FressRSS logs for details.', + 'ok' => '%s is now enabled', + ), + 'no_access' => 'You have no access on %s', + 'not_enabled' => '%s is not enabled yet', + 'not_found' => '%s does not exist', + ), + 'import_export' => array( + 'export_no_zip_extension' => 'Zip extension is not present on your server. Please try to export files one by one.', + 'feeds_imported' => 'Your feeds have been imported and will now be updated', + 'feeds_imported_with_errors' => 'Your feeds have been imported but some errors occurred', + 'file_cannot_be_uploaded' => 'File cannot be uploaded!', + 'no_zip_extension' => 'Zip extension is not present on your server.', + 'zip_error' => 'An error occured during Zip import.', + ), + 'sub' => array( + 'actualize' => 'Actualise', + 'category' => array( + 'created' => 'Category %s has been created.', + 'deleted' => 'Category has been deleted.', + 'emptied' => 'Category has been emptied', + 'error' => 'Category cannot be updated', + 'name_exists' => 'Category name already exists.', + 'no_id' => 'You must precise the id of the category.', + 'no_name' => 'Category name cannot be empty.', + 'not_delete_default' => 'You cannot delete the default category!', + 'not_exist' => 'The category does not exist!', + 'over_max' => 'You have reached your limit of categories (%d)', + 'updated' => 'Category has been updated.', + ), + 'feed' => array( + 'actualized' => '%s has been updated', + 'actualizeds' => 'RSS feeds have been updated', + 'added' => 'RSS feed %s has been added', + 'already_subscribed' => 'You have already subscribed to %s', + 'deleted' => 'Feed has been deleted', + 'error' => 'Feed cannot be updated', + 'internal_problem' => 'The RSS feed could not be added. Check FressRSS logs for details.', + 'invalid_url' => 'URL %s is invalid', + 'marked_read' => 'Feeds have been marked as read', + 'n_actualized' => '%d feeds have been updated', + 'n_entries_deleted' => '%d articles have been deleted', + 'no_refresh' => 'There is no feed to refresh…', + 'not_added' => '%s could not be added', + 'over_max' => 'You have reached your limit of feeds (%d)', + 'updated' => 'Feed has been updated', + ), + 'purge_completed' => 'Purge completed (%d articles deleted)', + ), + 'update' => array( + 'can_apply' => 'FreshRSS will now be updated to the version %s.', + 'error' => 'The update process has encountered an error: %s', + 'file_is_nok' => 'Check permissions on %s directory. HTTP server must have rights to write into', + 'finished' => 'Update completed!', + 'none' => 'No update to apply', + 'server_not_found' => 'Update server cannot be found. [%s]', + ), + 'user' => array( + 'created' => array( + '_' => 'User %s has been created', + 'error' => 'User %s cannot be created', + ), + 'deleted' => array( + '_' => 'User %s has been deleted', + 'error' => 'User %s cannot be deleted', + ), + ), + 'profile' => array( + 'error' => 'Your profile cannot be modified', + 'updated' => 'Your profile has been modified', + ), +); diff --git a/app/i18n/ru_RU/gen.php b/app/i18n/ru_RU/gen.php new file mode 100644 index 000000000..d23b12f95 --- /dev/null +++ b/app/i18n/ru_RU/gen.php @@ -0,0 +1,181 @@ + array( + 'actualize' => 'Actualize', + 'back_to_rss_feeds' => '← Go back to your RSS feeds', + 'cancel' => 'Cancel', + 'create' => 'Create', + 'disable' => 'Disable', + 'empty' => 'Empty', + 'enable' => 'Enable', + 'export' => 'Export', + 'filter' => 'Filter', + 'import' => 'Import', + 'manage' => 'Manage', + 'mark_read' => 'Mark as read', + 'mark_favorite' => 'Mark as favourite', + 'remove' => 'Remove', + 'see_website' => 'See website', + 'submit' => 'Submit', + 'truncate' => 'Delete all articles', + ), + 'auth' => array( + 'email' => 'Email address', + 'keep_logged_in' => 'Keep me logged in (1 month)', + 'login' => 'Login', + 'login_persona' => 'Login with Persona', + 'login_persona_problem' => 'Connection problem with Persona?', + 'logout' => 'Logout', + 'password' => array( + '_' => 'Password', + 'format' => 'At least 7 characters', + ), + 'registration' => array( + '_' => 'New account', + 'ask' => 'Create an account?', + 'title' => 'Account creation', + ), + 'reset' => 'Authentication reset', + 'username' => array( + '_' => 'Username', + 'admin' => 'Administrator username', + 'format' => 'maximum 16 alphanumeric characters', + ), + 'will_reset' => 'Authentication system will be reset: a form will be used instead of Persona.', + ), + 'date' => array( + 'Apr' => '\\A\\p\\r\\i\\l', + 'Aug' => '\\A\\u\\g\\u\\s\\t', + 'Dec' => '\\D\\e\\c\\e\\m\\b\\e\\r', + 'Feb' => '\\F\\e\\b\\r\\u\\a\\r\\y', + 'Jan' => '\\J\\a\\n\\u\\a\\r\\y', + 'Jul' => '\\J\\u\\l\\y', + 'Jun' => '\\J\\u\\n\\e', + 'Mar' => '\\M\\a\\r\\c\\h', + 'May' => '\\M\\a\\y', + 'Nov' => '\\N\\o\\v\\e\\m\\b\\e\\r', + 'Oct' => '\\O\\c\\t\\o\\b\\e\\r', + 'Sep' => '\\S\\e\\p\\t\\e\\m\\b\\e\\r', + 'apr' => 'apr', + 'april' => 'Apr', + 'aug' => 'aug', + 'august' => 'Aug', + 'before_yesterday' => 'Before yesterday', + 'dec' => 'dec', + 'december' => 'Dec', + 'feb' => 'feb', + 'february' => 'Feb', + 'format_date' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y', + 'format_date_hour' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y \\a\\t H\\:i', + 'fri' => 'Fri', + 'jan' => 'jan', + 'january' => 'Jan', + 'jul' => 'jul', + 'july' => 'Jul', + 'jun' => 'jun', + 'june' => 'Jun', + 'last_3_month' => 'Last three months', + 'last_6_month' => 'Last six months', + 'last_month' => 'Last month', + 'last_week' => 'Last week', + 'last_year' => 'Last year', + 'mar' => 'mar', + 'march' => 'Mar', + 'may' => 'May', + 'mon' => 'Mon', + 'month' => 'months', + 'nov' => 'nov', + 'november' => 'Nov', + 'oct' => 'oct', + 'october' => 'Oct', + 'sat' => 'Sat', + 'sep' => 'sep', + 'september' => 'Sep', + 'sun' => 'Sun', + 'thu' => 'Thu', + 'today' => 'Today', + 'tue' => 'Tue', + 'wed' => 'Wed', + 'yesterday' => 'Yesterday', + ), + 'freshrss' => array( + '_' => 'FreshRSS', + 'about' => 'About FreshRSS', + ), + 'js' => array( + 'category_empty' => 'Empty category', + 'confirm_action' => 'Are you sure you want to perform this action? It cannot be cancelled!', + 'confirm_action_feed_cat' => 'Are you sure you want to perform this action? You will lose related favorites and user queries. It cannot be cancelled!', + 'feedback' => array( + 'body_new_articles' => 'There are \\d new articles to read on FreshRSS.', + 'request_failed' => 'A request has failed, it may have been caused by Internet connection problems.', + 'title_new_articles' => 'FreshRSS: new articles!', + ), + 'new_article' => 'There are new available articles, click to refresh the page.', + 'should_be_activated' => 'JavaScript must be enabled', + ), + 'lang' => array( + 'cz' => 'Čeština', + 'de' => 'Deutsch', + 'en' => 'English', + 'fr' => 'Français', + 'it' => 'Italiano', + 'nl' => 'Nederlands', + ), + 'menu' => array( + 'about' => 'About', + 'admin' => 'Administration', + 'archiving' => 'Archiving', + 'authentication' => 'Authentication', + 'check_install' => 'Installation checking', + 'configuration' => 'Configuration', + 'display' => 'Display', + 'extensions' => 'Extensions', + 'logs' => 'Logs', + 'queries' => 'User queries', + 'reading' => 'Reading', + 'search' => 'Search words or #tags', + 'sharing' => 'Sharing', + 'shortcuts' => 'Shortcuts', + 'stats' => 'Statistics', + 'system' => 'System configuration', + 'update' => 'Update', + 'user_management' => 'Manage users', + 'user_profile' => 'Profile', + ), + 'pagination' => array( + 'first' => 'First', + 'last' => 'Last', + 'load_more' => 'Load more articles', + 'mark_all_read' => 'Mark all as read', + 'next' => 'Next', + 'nothing_to_load' => 'There are no more articles', + 'previous' => 'Previous', + ), + 'share' => array( + 'blogotext' => 'Blogotext', + 'diaspora' => 'Diaspora*', + 'email' => 'Email', + 'facebook' => 'Facebook', + 'g+' => 'Google+', + 'movim' => 'Movim', + 'print' => 'Print', + 'shaarli' => 'Shaarli', + 'twitter' => 'Twitter', + 'wallabag' => 'wallabag', + ), + 'short' => array( + 'attention' => 'Warning!', + 'blank_to_disable' => 'Leave blank to disable', + 'by_author' => 'By %s', + 'by_default' => 'By default', + 'damn' => 'Damn!', + 'default_category' => 'Uncategorized', + 'no' => 'No', + 'not_applicable' => 'Not available', + 'ok' => 'Ok!', + 'or' => 'or', + 'yes' => 'Yes', + ), +); diff --git a/app/i18n/ru_RU/index.php b/app/i18n/ru_RU/index.php new file mode 100644 index 000000000..80fa3d950 --- /dev/null +++ b/app/i18n/ru_RU/index.php @@ -0,0 +1,61 @@ + array( + '_' => 'About', + 'agpl3' => 'AGPL 3', + 'bugs_reports' => 'Bugs reports', + 'credits' => 'Credits', + 'credits_content' => 'Some design elements come from Bootstrap although FreshRSS doesn’t use this framework. Icons come from GNOME project. Open Sans font police has been created by Steve Matteson. Favicons are collected with getFavicon API. FreshRSS is based on Minz, a PHP framework.', + 'freshrss_description' => 'FreshRSS is a RSS feeds aggregator to self-host like Kriss Feed or Leed. It is light and easy to take in hand while being powerful and configurable tool.', + 'github' => 'on Github', + 'license' => 'License', + 'project_website' => 'Project website', + 'title' => 'About', + 'version' => 'Version', + 'website' => 'Website', + ), + 'feed' => array( + 'add' => 'You may add some feeds.', + 'empty' => 'There is no article to show.', + 'rss_of' => 'RSS feed of %s', + 'title' => 'Your RSS feeds', + 'title_global' => 'Global view', + 'title_fav' => 'Your favourites', + ), + 'log' => array( + '_' => 'Logs', + 'clear' => 'Clear the logs', + 'empty' => 'Log file is empty', + 'title' => 'Logs', + ), + 'menu' => array( + 'about' => 'About FreshRSS', + 'add_query' => 'Add a query', + 'before_one_day' => 'Before one day', + 'before_one_week' => 'Before one week', + 'favorites' => 'Favourites (%s)', + 'global_view' => 'Global view', + 'main_stream' => 'Main stream', + 'mark_all_read' => 'Mark all as read', + 'mark_cat_read' => 'Mark category as read', + 'mark_feed_read' => 'Mark feed as read', + 'newer_first' => 'Newer first', + 'non-starred' => 'Show all but favorites', + 'normal_view' => 'Normal view', + 'older_first' => 'Oldest first', + 'queries' => 'User queries', + 'read' => 'Show only read', + 'reader_view' => 'Reading view', + 'rss_view' => 'RSS feed', + 'search_short' => 'Search', + 'starred' => 'Show only favorites', + 'stats' => 'Statistics', + 'subscription' => 'Subscriptions management', + 'unread' => 'Show only unread', + ), + 'share' => 'Share', + 'tag' => array( + 'related' => 'Related tags', + ), +); diff --git a/app/i18n/ru_RU/install.php b/app/i18n/ru_RU/install.php new file mode 100644 index 000000000..c838b2eba --- /dev/null +++ b/app/i18n/ru_RU/install.php @@ -0,0 +1,113 @@ + array( + 'finish' => 'Завершить установку', + 'fix_errors_before' => 'Пожалуйста, исправьте ошибки прежде чем переходить к следующему этапу.', + 'keep_install' => 'Сохранить предыдущую установку', + 'next_step' => 'Перейти к следующему этапу', + 'reinstall' => 'Переустановить FreshRSS', + ), + 'auth' => array( + 'email_persona' => 'Почта (логин) для
    (for Mozilla Persona)', + 'form' => 'Вэб-форма (традиционный, необходим JavaScript)', + 'http' => 'HTTP (для продвинутых пользователей с HTTPS)', + 'none' => 'Никакого (опасно)', + 'password_form' => 'Пароль
    (для метода аутентификации на Вэб-формах)', + 'password_format' => 'Как минимум 7 букв', + 'persona' => 'Mozilla Persona (современный, необходим JavaScript)', + 'type' => 'Метод аутентификации', + ), + 'bdd' => array( + '_' => 'База данных', + 'conf' => array( + '_' => 'Конфигурация базы данныхDatabase configuration', + 'ko' => 'Проверьте конфигурацию базы данных.', + 'ok' => 'Конфигурация базы данных сохранена.', + ), + 'host' => 'Хост', + 'prefix' => 'Префикс таблицы', + 'password' => 'Пароль HTTP', + 'type' => 'Тип базы данных', + 'username' => 'Имя пользователя HTTP', + ), + 'check' => array( + '_' => 'Проверки', + 'already_installed' => 'Обнаружена предыдущая установка FreshRSS!', + 'cache' => array( + 'nok' => 'Проверьте права доступа к папке ./data/cache . Сервер HTTP должен иметь права на запись в эту папку.', + 'ok' => 'Права на папку кэша в порядке.', + ), + 'ctype' => array( + 'nok' => 'У вас не установлена необходимая библиотека для проверки типов символов (php-ctype).', + 'ok' => 'У вас установлена необходимая библиотека для проверки типов символов (ctype).', + ), + 'curl' => array( + 'nok' => 'У вас нет расширения cURL (пакет php5-curl).', + 'ok' => 'У вас установлено расширение cURL.', + ), + 'data' => array( + 'nok' => 'Проверьте права доступа к папке ./data . Сервер HTTP должен иметь права на запись в эту папку.', + 'ok' => 'Права на ./data/ в порядке.', + ), + 'dom' => array( + 'nok' => 'У вас не установлена необходимая библиотека для просмотра DOM (пакет php-xml).', + 'ok' => 'У вас установлена необходимая библиотека для просмотра DOM.', + ), + 'favicons' => array( + 'nok' => 'Проверьте права доступа к папке ./data/favicons . Сервер HTTP должен иметь права на запись в эту папку.', + 'ok' => 'Права на папку значков в порядке.', + ), + 'http_referer' => array( + 'nok' => 'Убедитесь, что вы не изменяете ваш HTTP REFERER.', + 'ok' => 'Ваш HTTP REFERER известен и соотвествует вашему серверу.', + ), + 'minz' => array( + 'nok' => 'У вас не установлен фрейворк Minz.', + 'ok' => 'У вас установлен фрейворк Minz.', + ), + 'pcre' => array( + 'nok' => 'У вас не установлена необходимая библиотека для работы с регулярными выражениями (php-pcre).', + 'ok' => 'У вас установлена необходимая библиотека для работы с регулярными выражениями (PCRE).', + ), + 'pdo' => array( + 'nok' => 'У вас не установлен PDO или один из необходимых драйверов (pdo_mysql, pdo_sqlite).', + 'ok' => 'У вас установлен PDO и как минимум один из поддерживаемых драйверов (pdo_mysql, pdo_sqlite).', + ), + 'persona' => array( + 'nok' => 'Проверьте права доступа к папке ./data/persona . Сервер HTTP должен иметь права на запись в эту папку.', + 'ok' => 'Права на папку Mozilla Persona в порядке.', + ), + 'php' => array( + 'nok' => 'У вас установлен PHP версии %s, но FreshRSS необходима версия не ниже %s.', + 'ok' => 'У вас установлен PHP версии %s, который совместим с FreshRSS.', + ), + 'users' => array( + 'nok' => 'Проверьте права доступа к папке ./data/users . Сервер HTTP должен иметь права на запись в эту папку.', + 'ok' => 'Права на папку users в порядке.', + ), + ), + 'conf' => array( + '_' => 'Общие настройки', + 'ok' => 'Общие настройки были сохранены.', + ), + 'congratulations' => 'Поздравляем!', + 'default_user' => 'Имя пользователя по умолчанию (максимум 16 латинских букв и/или цифр)', + 'delete_articles_after' => 'Удалять статьи после', + 'fix_errors_before' => 'Пожалуйста, исправьте ошибки прежде чем переходить к следующему этапу..', + 'javascript_is_better' => 'FreshRSS принесёт больше удовольствия, если включить JavaScript', + 'js' => array( + 'confirm_reinstall' => 'Переустанавливая FreshRSS, вы потеряете предыдущую конфигурацию. Вы хотите продолжить?', + ), + 'language' => array( + '_' => 'Язык', + 'choose' => 'Выберите язык для FreshRSS', + 'defined' => 'Язык выбран.', + ), + 'not_deleted' => 'Что-то пошло не так; удалите файл %s вручную.', + 'ok' => 'Установка успешна.', + 'step' => '%d этап', + 'steps' => 'Этапы', + 'title' => 'Установка · FreshRSS', + 'this_is_the_end' => 'Это конец', +); diff --git a/app/i18n/ru_RU/sub.php b/app/i18n/ru_RU/sub.php new file mode 100644 index 000000000..aaaa02827 --- /dev/null +++ b/app/i18n/ru_RU/sub.php @@ -0,0 +1,62 @@ + array( + '_' => 'Category', + 'add' => 'Add a category', + 'empty' => 'Empty category', + 'new' => 'New category', + ), + 'feed' => array( + 'add' => 'Add a RSS feed', + 'advanced' => 'Advanced', + 'archiving' => 'Archivage', + 'auth' => array( + 'configuration' => 'Login', + 'help' => 'Connection allows to access HTTP protected RSS feeds', + 'http' => 'HTTP Authentication', + 'password' => 'HTTP password', + 'username' => 'HTTP username', + ), + 'css_help' => 'Retrieves truncated RSS feeds (caution, requires more time!)', + 'css_path' => 'Articles CSS path on original website', + 'description' => 'Description', + 'empty' => 'This feed is empty. Please verify that it is still maintained.', + 'error' => 'This feed has encountered a problem. Please verify that it is always reachable then actualize it.', + 'in_main_stream' => 'Show in main stream', + 'informations' => 'Information', + 'keep_history' => 'Minimum number of articles to keep', + 'moved_category_deleted' => 'When you delete a category, its feeds are automatically classified under %s.', + 'no_selected' => 'No feed selected.', + 'number_entries' => '%d articles', + 'stats' => 'Statistics', + 'think_to_add' => 'You may add some feeds.', + 'title' => 'Title', + 'title_add' => 'Add a RSS feed', + 'ttl' => 'Do not automatically refresh more often than', + 'url' => 'Feed URL', + 'validator' => 'Check the validity of the feed', + 'website' => 'Website URL', + 'pubsubhubbub' => 'Instant notification with PubSubHubbub', + ), + 'import_export' => array( + 'export' => 'Export', + 'export_opml' => 'Export list of feeds (OPML)', + 'export_starred' => 'Export your favourites', + 'feed_list' => 'List of %s articles', + 'file_to_import' => 'File to import
    (OPML, Json or Zip)', + 'file_to_import_no_zip' => 'File to import
    (OPML or Json)', + 'import' => 'Import', + 'starred_list' => 'List of favourite articles', + 'title' => 'Import / export', + ), + 'menu' => array( + 'bookmark' => 'Subscribe (FreshRSS bookmark)', + 'import_export' => 'Import / export', + 'subscription_management' => 'Subscriptions management', + ), + 'title' => array( + '_' => 'Subscriptions management', + 'feed_management' => 'RSS feeds management', + ), +); -- cgit v1.2.3 From 053ab59d3dfc62e98866e0ef429d10bb4eb2374b Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 12 Jun 2016 11:54:53 +0200 Subject: i18n RU update Wallabag https://github.com/FreshRSS/FreshRSS/pull/1085 https://github.com/FreshRSS/FreshRSS/pull/1150 --- app/i18n/ru_RU/gen.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'app') diff --git a/app/i18n/ru_RU/gen.php b/app/i18n/ru_RU/gen.php index d23b12f95..6511311a1 100644 --- a/app/i18n/ru_RU/gen.php +++ b/app/i18n/ru_RU/gen.php @@ -163,7 +163,8 @@ return array( 'print' => 'Print', 'shaarli' => 'Shaarli', 'twitter' => 'Twitter', - 'wallabag' => 'wallabag', + 'wallabag' => 'wallabag v1', + 'wallabagv2' => 'wallabag v2', ), 'short' => array( 'attention' => 'Warning!', -- cgit v1.2.3 From 6144413022f3d812528a6124072ac6606ca975ff Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 12 Jun 2016 12:16:42 +0200 Subject: i18n RU finalize draft https://github.com/FreshRSS/FreshRSS/pull/1085 --- CHANGELOG.md | 3 +- app/i18n/cz/gen.php | 1 + app/i18n/de/gen.php | 1 + app/i18n/en/gen.php | 1 + app/i18n/fr/gen.php | 1 + app/i18n/it/gen.php | 1 + app/i18n/nl/gen.php | 1 + app/i18n/ru/admin.php | 183 +++++++++++++++++++++++++++++++++++++++++++ app/i18n/ru/conf.php | 174 +++++++++++++++++++++++++++++++++++++++++ app/i18n/ru/feedback.php | 110 ++++++++++++++++++++++++++ app/i18n/ru/gen.php | 185 ++++++++++++++++++++++++++++++++++++++++++++ app/i18n/ru/index.php | 61 +++++++++++++++ app/i18n/ru/install.php | 113 +++++++++++++++++++++++++++ app/i18n/ru/sub.php | 62 +++++++++++++++ app/i18n/ru_RU/admin.php | 183 ------------------------------------------- app/i18n/ru_RU/conf.php | 174 ----------------------------------------- app/i18n/ru_RU/feedback.php | 110 -------------------------- app/i18n/ru_RU/gen.php | 182 ------------------------------------------- app/i18n/ru_RU/index.php | 61 --------------- app/i18n/ru_RU/install.php | 113 --------------------------- app/i18n/ru_RU/sub.php | 62 --------------- app/i18n/tr/gen.php | 1 + 22 files changed, 897 insertions(+), 886 deletions(-) create mode 100644 app/i18n/ru/admin.php create mode 100644 app/i18n/ru/conf.php create mode 100644 app/i18n/ru/feedback.php create mode 100644 app/i18n/ru/gen.php create mode 100644 app/i18n/ru/index.php create mode 100644 app/i18n/ru/install.php create mode 100644 app/i18n/ru/sub.php delete mode 100644 app/i18n/ru_RU/admin.php delete mode 100644 app/i18n/ru_RU/conf.php delete mode 100644 app/i18n/ru_RU/feedback.php delete mode 100644 app/i18n/ru_RU/gen.php delete mode 100644 app/i18n/ru_RU/index.php delete mode 100644 app/i18n/ru_RU/install.php delete mode 100644 app/i18n/ru_RU/sub.php (limited to 'app') diff --git a/CHANGELOG.md b/CHANGELOG.md index 112d487b8..fcd5127f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,8 @@ ## 2016-XX-YY FreshRSS 1.3.2-beta -Nothing for the moment +* I18n + * Draft of Russian [#1085](https://github.com/FreshRSS/FreshRSS/pull/1085) ## 2016-03-11 FreshRSS 1.3.1-beta diff --git a/app/i18n/cz/gen.php b/app/i18n/cz/gen.php index 78ec80f68..af10967a7 100644 --- a/app/i18n/cz/gen.php +++ b/app/i18n/cz/gen.php @@ -122,6 +122,7 @@ return array( 'fr' => 'Français', 'it' => 'Italiano', 'nl' => 'Nederlands', + 'ru' => 'Русский', 'tr' => 'Türkçe', ), 'menu' => array( diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php index 9b460d08d..4b85c722a 100644 --- a/app/i18n/de/gen.php +++ b/app/i18n/de/gen.php @@ -122,6 +122,7 @@ return array( 'fr' => 'Français', 'it' => 'Italiano', 'nl' => 'Nederlands', + 'ru' => 'Русский', 'tr' => 'Türkçe', ), 'menu' => array( diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php index 685a7d1a9..ba4e2f86c 100644 --- a/app/i18n/en/gen.php +++ b/app/i18n/en/gen.php @@ -122,6 +122,7 @@ return array( 'fr' => 'Français', 'it' => 'Italiano', 'nl' => 'Nederlands', + 'ru' => 'Русский', 'tr' => 'Türkçe', ), 'menu' => array( diff --git a/app/i18n/fr/gen.php b/app/i18n/fr/gen.php index f6695d887..031098aa2 100644 --- a/app/i18n/fr/gen.php +++ b/app/i18n/fr/gen.php @@ -122,6 +122,7 @@ return array( 'fr' => 'Français', 'it' => 'Italiano', 'nl' => 'Nederlands', + 'ru' => 'Русский', 'tr' => 'Türkçe', ), 'menu' => array( diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php index b3b4bd78e..bf817d8c2 100644 --- a/app/i18n/it/gen.php +++ b/app/i18n/it/gen.php @@ -122,6 +122,7 @@ return array( 'fr' => 'Français', 'it' => 'Italiano', 'nl' => 'Nederlands', + 'ru' => 'Русский', 'tr' => 'Türkçe', ), 'menu' => array( diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php index 7bd8bbb09..24cba574e 100644 --- a/app/i18n/nl/gen.php +++ b/app/i18n/nl/gen.php @@ -122,6 +122,7 @@ return array( 'fr' => 'Français', 'it' => 'Italiano', 'nl' => 'Nederlands', + 'ru' => 'Русский', 'tr' => 'Türkçe', ), 'menu' => array( diff --git a/app/i18n/ru/admin.php b/app/i18n/ru/admin.php new file mode 100644 index 000000000..dfea5b3cb --- /dev/null +++ b/app/i18n/ru/admin.php @@ -0,0 +1,183 @@ + array( + 'allow_anonymous' => 'Разрешить анонимное чтение статей для пользователя по умолчанию (%s)', + 'allow_anonymous_refresh' => 'Разрешить анонимное обновление статей', + 'api_enabled' => 'Включить доступ к API (необходимо для мобильных приложений)', + 'form' => 'На основе веб-формы (традиционный, необходим JavaScript)', + 'http' => 'HTTP (для продвинутых пользователей - по HTTPS)', + 'none' => 'Без аутентификации (небезопасный)', + 'persona' => 'Mozilla Persona (новый, необходим JavaScript)', + 'title' => 'Аутентификации', + 'title_reset' => 'Сброс аутентицикации', + 'token' => 'Токен аутентификации', + 'token_help' => 'Разрешает доступ к RSS ленте пользователя по умолчанию без аутентификации:', + 'type' => 'Метод аутентификации', + 'unsafe_autologin' => 'Разрешить небезопасный автоматический вход с использованием следующего формата: ', + ), + 'check_install' => array( + 'cache' => array( + 'nok' => 'Проверьте права доступа к папке ./data/cache. Сервер HTTP должен иметь права на запись в эту папку', + 'ok' => 'Права на ./data/cache в порядке.', + ), + 'categories' => array( + 'nok' => 'Таблица категорий настроена неправильно.', + 'ok' => 'Таблица категорий настроена правильно.', + ), + 'connection' => array( + 'nok' => 'Подключение к базе данных не может быть установлено.', + 'ok' => 'Подключение к базе данных в порядке.', + ), + 'ctype' => array( + 'nok' => 'У вас не установлена библиотека для проверки типов символов (php-ctype).', + 'ok' => 'У вас не установлена библиотека для проверки типов символов (ctype).', + ), + 'curl' => array( + 'nok' => 'У вас не установлено расширение cURL (пакет php5-curl).', + 'ok' => 'У вас установлено расширение cURL.', + ), + 'data' => array( + 'nok' => 'Проверьте права доступа к папке ./data . Сервер HTTP должен иметь права на запись в эту папку.', + 'ok' => 'Права на ./data/ в порядке.', + ), + 'database' => 'Установка базы данных', + 'dom' => array( + 'nok' => 'У вас не установлена библиотека для просмотра DOM (пакет php-xml).', + 'ok' => 'У вас установлена библиотека для просмотра DOM.', + ), + 'entries' => array( + 'nok' => 'Таблица статей (entry) неправильно настроена.', + 'ok' => 'Таблица статей (entry) настроена правильно.', + ), + 'favicons' => array( + 'nok' => 'Проверьте права доступа к папке ./data/favicons . Сервер HTTP должен иметь права на запись в эту папку.', + 'ok' => 'Права на папку значков в порядке.', + ), + 'feeds' => array( + 'nok' => 'Таблица подписок (feed) неправильно настроена.', + 'ok' => 'Таблица подписок (feed) настроена правильно.', + ), + 'files' => 'Установка файлов', + 'json' => array( + 'nok' => 'У вас не установлена библиотека для работы с JSON (пакет php5-json).', + 'ok' => 'У вас установлена библиотека для работы с JSON.', + ), + 'minz' => array( + 'nok' => 'У вас не установлен фрейворк Minz.', + 'ok' => 'У вас установлен фрейворк Minz.', + ), + 'pcre' => array( + 'nok' => 'У вас не установлена необходимая библиотека для работы с регулярными выражениями (php-pcre).', + 'ok' => 'У вас установлена необходимая библиотека для работы с регулярными выражениями (PCRE).', + ), + 'pdo' => array( + 'nok' => 'У вас не установлен PDO или один из необходимых драйверов (pdo_mysql, pdo_sqlite).', + 'ok' => 'У вас установлен PDO и как минимум один из поддерживаемых драйверов (pdo_mysql, pdo_sqlite).', + ), + 'persona' => array( + 'nok' => 'Проверьте права доступа к папке ./data/persona . Сервер HTTP должен иметь права на запись в эту папку.', + 'ok' => 'Права на папку Mozilla Persona в порядке.', + ), + 'php' => array( + '_' => 'PHP installation', + 'nok' => 'У вас установлен PHP версии %s, но FreshRSS необходима версия не ниже %s.', + 'ok' => 'У вас установлен PHP версии %s, который совместим с FreshRSS.', + ), + 'tables' => array( + 'nok' => 'В базе данных отсуствует одна или больше таблица.', + 'ok' => 'Все таблицы есть в базе данных.', + ), + 'title' => 'Проверка установки и настройки', + 'tokens' => array( + 'nok' => 'Проверьте права доступа к папке ./data/tokens . Сервер HTTP должен иметь права на запись в эту папку.', + 'ok' => 'Права на папку tokens в порядке.', + ), + 'users' => array( + 'nok' => 'Проверьте права доступа к папке ./data/users . Сервер HTTP должен иметь права на запись в эту папку.', + 'ok' => 'Права на папку users в порядке.', + ), + 'zip' => array( + 'nok' => 'You lack ZIP extension (php5-zip package).', + 'ok' => 'You have ZIP extension.', + ), + ), + 'extensions' => array( + 'disabled' => 'Отключены', + 'empty_list' => 'Расширения не установлены', + 'enabled' => 'Включены', + 'no_configure_view' => 'Это расширение нельзя настроить.', + 'system' => array( + '_' => 'Системные расширения', + 'no_rights' => 'Системные расширения (у вас нет к ним доступа)', + ), + 'title' => 'Расширения', + 'user' => 'Расширения пользователя', + ), + 'stats' => array( + '_' => 'Статистика', + 'all_feeds' => 'Все подписки', + 'category' => 'Категория', + 'entry_count' => 'Количество статей', + 'entry_per_category' => 'Статей в категории', + 'entry_per_day' => 'Статей за день (за последние 30 дней)', + 'entry_per_day_of_week' => 'За неделю (в среднем - %.2f сообщений)', + 'entry_per_hour' => 'За час (в среднем - %.2f сообщений)', + 'entry_per_month' => 'За месяц (в среднем - %.2f сообщений)', + 'entry_repartition' => 'Перерасределение статей', + 'feed' => 'Подписка', + 'feed_per_category' => 'Подписок в категории', + 'idle' => 'Неактивные подписки', + 'main' => 'Основная статистика', + 'main_stream' => 'Основной поток', + 'menu' => array( + 'idle' => 'Неактивные подписки', + 'main' => 'Основная статистика', + 'repartition' => 'Перерасределение статей', + ), + 'no_idle' => 'Нет неактивных подписок!', + 'number_entries' => 'статей: %d', + 'percent_of_total' => '%% от всего', + 'repartition' => 'Перераспределение статей', + 'status_favorites' => 'Избранное', + 'status_read' => 'Читать', + 'status_total' => 'Всего', + 'status_unread' => 'Не прочитано', + 'title' => 'Статистика', + 'top_feed' => '10 лучших подписок', + ), + 'system' => array( + '_' => 'Системные настройки', + 'auto-update-url' => 'Адрес сервера для автоматического обновления', + 'instance-name' => 'Название этого сервера', + 'max-categories' => 'Количество категорий на пользователя', + 'max-feeds' => 'Количество статей на пользователя', + 'registration' => array( + 'help' => '0 означает неограниченное количество пользователей', + 'number' => 'Максимальное количество пользователей', + ), + ), + 'update' => array( + '_' => 'Обновление системы', + 'apply' => 'Применить', + 'check' => 'Проверить обновления', + 'current_version' => 'Ваша текущая версия FreshRSS: %s.', + 'last' => 'Последняя проверка: %s', + 'none' => 'Нечего обновлять', + 'title' => 'Обновить систему', + ), + 'user' => array( + 'articles_and_size' => '%s статей (%s)', + 'create' => 'Создать нового пользователя', + 'email_persona' => 'Адрес электронной почты для входа
    (for Mozilla Persona)', + 'language' => 'Язык', + 'number' => 'На данный момент создан %d аккаунт', + 'numbers' => 'На данный момент аккаунтов создано: %d', + 'password_form' => 'Пароль
    (для входа через Веб-форму)', + 'password_format' => 'Минимум 7 символов', + 'title' => 'Управление пользователями', + 'user_list' => 'Список пользователей', + 'username' => 'Имя пользователя', + 'users' => 'Пользователи', + ), +); diff --git a/app/i18n/ru/conf.php b/app/i18n/ru/conf.php new file mode 100644 index 000000000..e502e9a43 --- /dev/null +++ b/app/i18n/ru/conf.php @@ -0,0 +1,174 @@ + array( + '_' => 'Архивация', + 'advanced' => 'Продвинутые настройки', + 'delete_after' => 'Удалять статьи после', + 'help' => 'Каждую подписку можно настроить более гибко', + 'keep_history_by_feed' => 'Minimum number of articles to keep by feed', + 'optimize' => 'Оптимизировать базу данных', + 'optimize_help' => 'To do occasionally to reduce the size of the database', + 'purge_now' => 'Очистить сейчас', + 'title' => 'Архивация', + 'ttl' => 'Не обновлять чаще чем', + ), + 'display' => array( + '_' => 'Display', + 'icon' => array( + 'bottom_line' => 'Bottom line', + 'entry' => 'Article icons', + 'publication_date' => 'Date of publication', + 'related_tags' => 'Related tags', + 'sharing' => 'Sharing', + 'top_line' => 'Top line', + ), + 'language' => 'Язык', + 'notif_html5' => array( + 'seconds' => 'seconds (0 means no timeout)', + 'timeout' => 'HTML5 notification timeout', + ), + 'theme' => 'Тема', + 'title' => 'Display', + 'width' => array( + 'content' => 'Content width', + 'large' => 'Large', + 'medium' => 'Medium', + 'no_limit' => 'No limit', + 'thin' => 'Thin', + ), + ), + 'query' => array( + '_' => 'User queries', + 'deprecated' => 'This query is no longer valid. The referenced category or feed has been deleted.', + 'filter' => 'Filter applied:', + 'get_all' => 'Display all articles', + 'get_category' => 'Display "%s" category', + 'get_favorite' => 'Display favorite articles', + 'get_feed' => 'Display "%s" feed', + 'no_filter' => 'No filter', + 'none' => 'You haven’t created any user query yet.', + 'number' => 'Query n°%d', + 'order_asc' => 'Display oldest articles first', + 'order_desc' => 'Display newest articles first', + 'search' => 'Search for "%s"', + 'state_0' => 'Display all articles', + 'state_1' => 'Display read articles', + 'state_2' => 'Display unread articles', + 'state_3' => 'Display all articles', + 'state_4' => 'Display favorite articles', + 'state_5' => 'Display read favorite articles', + 'state_6' => 'Display unread favorite articles', + 'state_7' => 'Display favorite articles', + 'state_8' => 'Display not favorite articles', + 'state_9' => 'Display read not favorite articles', + 'state_10' => 'Display unread not favorite articles', + 'state_11' => 'Display not favorite articles', + 'state_12' => 'Display all articles', + 'state_13' => 'Display read articles', + 'state_14' => 'Display unread articles', + 'state_15' => 'Display all articles', + 'title' => 'User queries', + ), + 'profile' => array( + '_' => 'Profile management', + 'delete' => array( + '_' => 'Account deletion', + 'warn' => 'Your account and all the related data will be deleted.', + ), + 'email_persona' => 'Login email address
    (for Mozilla Persona)', + 'password_api' => 'Password API
    (e.g., for mobile apps)', + 'password_form' => 'Password
    (for the Web-form login method)', + 'password_format' => 'At least 7 characters', + 'title' => 'Profile', + ), + 'reading' => array( + '_' => 'Reading', + 'after_onread' => 'After “mark all as read”,', + 'articles_per_page' => 'Number of articles per page', + 'auto_load_more' => 'Load next articles at the page bottom', + 'auto_remove_article' => 'Hide articles after reading', + 'mark_updated_article_unread' => 'Mark updated articles as unread', + 'confirm_enabled' => 'Display a confirmation dialog on “mark all as read” actions', + 'display_articles_unfolded' => 'Show articles unfolded by default', + 'display_categories_unfolded' => 'Show categories folded by default', + 'hide_read_feeds' => 'Hide categories & feeds with no unread article (does not work with “Show all articles” configuration)', + 'img_with_lazyload' => 'Use "lazy load" mode to load pictures', + 'jump_next' => 'jump to next unread sibling (feed or category)', + 'number_divided_when_reader' => 'Divided by 2 in the reading view.', + 'read' => array( + 'article_open_on_website' => 'when article is opened on its original website', + 'article_viewed' => 'when article is viewed', + 'scroll' => 'while scrolling', + 'upon_reception' => 'upon reception of the article', + 'when' => 'Mark article as read…', + ), + 'show' => array( + '_' => 'Articles to display', + 'adaptive' => 'Adjust showing', + 'all_articles' => 'Show all articles', + 'unread' => 'Show only unread', + ), + 'sort' => array( + '_' => 'Sort order', + 'newer_first' => 'Newer first', + 'older_first' => 'Oldest first', + ), + 'sticky_post' => 'Stick the article to the top when opened', + 'title' => 'Reading', + 'view' => array( + 'default' => 'Default view', + 'global' => 'Global view', + 'normal' => 'Normal view', + 'reader' => 'Reading view', + ), + ), + 'sharing' => array( + '_' => 'Sharing', + 'blogotext' => 'Blogotext', + 'diaspora' => 'Diaspora*', + 'email' => 'Email', + 'facebook' => 'Facebook', + 'g+' => 'Google+', + 'more_information' => 'More information', + 'print' => 'Print', + 'shaarli' => 'Shaarli', + 'share_name' => 'Share name to display', + 'share_url' => 'Share URL to use', + 'title' => 'Sharing', + 'twitter' => 'Twitter', + 'wallabag' => 'wallabag', + ), + 'shortcut' => array( + '_' => 'Shortcuts', + 'article_action' => 'Article actions', + 'auto_share' => 'Share', + 'auto_share_help' => 'If there is only one sharing mode, it is used. Else modes are accessible by their number.', + 'close_dropdown' => 'Close menus', + 'collapse_article' => 'Collapse', + 'first_article' => 'Skip to the first article', + 'focus_search' => 'Access search box', + 'help' => 'Display documentation', + 'javascript' => 'JavaScript must be enabled in order to use shortcuts', + 'last_article' => 'Skip to the last article', + 'load_more' => 'Load more articles', + 'mark_read' => 'Mark as read', + 'mark_favorite' => 'Mark as favourite', + 'navigation' => 'Navigation', + 'navigation_help' => 'With the "Shift" modifier, navigation shortcuts apply on feeds.
    With the "Alt" modifier, navigation shortcuts apply on categories.', + 'next_article' => 'Skip to the next article', + 'other_action' => 'Other actions', + 'previous_article' => 'Skip to the previous article', + 'see_on_website' => 'See on original website', + 'shift_for_all_read' => '+ shift to mark all articles as read', + 'title' => 'Shortcuts', + 'user_filter' => 'Access user filters', + 'user_filter_help' => 'If there is only one user filter, it is used. Else filters are accessible by their number.', + ), + 'user' => array( + 'articles_and_size' => '%s articles (%s)', + 'current' => 'Current user', + 'is_admin' => 'is administrator', + 'users' => 'Users', + ), +); diff --git a/app/i18n/ru/feedback.php b/app/i18n/ru/feedback.php new file mode 100644 index 000000000..c9189c0d0 --- /dev/null +++ b/app/i18n/ru/feedback.php @@ -0,0 +1,110 @@ + array( + 'optimization_complete' => 'Optimisation complete', + ), + 'access' => array( + 'denied' => 'You don’t have permission to access this page', + 'not_found' => 'You are looking for a page which doesn’t exist', + ), + 'auth' => array( + 'form' => array( + 'not_set' => 'A problem occured during authentication system configuration. Please retry later.', + 'set' => 'Form is now your default authentication system.', + ), + 'login' => array( + 'invalid' => 'Login is invalid', + 'success' => 'You are connected', + ), + 'logout' => array( + 'success' => 'You are disconnected', + ), + 'no_password_set' => 'Administrator password hasn’t been set. This feature isn’t available.', + 'not_persona' => 'Only Persona system can be reset.', + ), + 'conf' => array( + 'error' => 'An error occurred during configuration saving', + 'query_created' => 'Query "%s" has been created.', + 'shortcuts_updated' => 'Shortcuts have been updated', + 'updated' => 'Configuration has been updated', + ), + 'extensions' => array( + 'already_enabled' => '%s is already enabled', + 'disable' => array( + 'ko' => '%s cannot be disabled. Check FressRSS logs for details.', + 'ok' => '%s is now disabled', + ), + 'enable' => array( + 'ko' => '%s cannot be enabled. Check FressRSS logs for details.', + 'ok' => '%s is now enabled', + ), + 'no_access' => 'You have no access on %s', + 'not_enabled' => '%s is not enabled yet', + 'not_found' => '%s does not exist', + ), + 'import_export' => array( + 'export_no_zip_extension' => 'Zip extension is not present on your server. Please try to export files one by one.', + 'feeds_imported' => 'Your feeds have been imported and will now be updated', + 'feeds_imported_with_errors' => 'Your feeds have been imported but some errors occurred', + 'file_cannot_be_uploaded' => 'File cannot be uploaded!', + 'no_zip_extension' => 'Zip extension is not present on your server.', + 'zip_error' => 'An error occured during Zip import.', + ), + 'sub' => array( + 'actualize' => 'Actualise', + 'category' => array( + 'created' => 'Category %s has been created.', + 'deleted' => 'Category has been deleted.', + 'emptied' => 'Category has been emptied', + 'error' => 'Category cannot be updated', + 'name_exists' => 'Category name already exists.', + 'no_id' => 'You must precise the id of the category.', + 'no_name' => 'Category name cannot be empty.', + 'not_delete_default' => 'You cannot delete the default category!', + 'not_exist' => 'The category does not exist!', + 'over_max' => 'You have reached your limit of categories (%d)', + 'updated' => 'Category has been updated.', + ), + 'feed' => array( + 'actualized' => '%s has been updated', + 'actualizeds' => 'RSS feeds have been updated', + 'added' => 'RSS feed %s has been added', + 'already_subscribed' => 'You have already subscribed to %s', + 'deleted' => 'Feed has been deleted', + 'error' => 'Feed cannot be updated', + 'internal_problem' => 'The RSS feed could not be added. Check FressRSS logs for details.', + 'invalid_url' => 'URL %s is invalid', + 'marked_read' => 'Feeds have been marked as read', + 'n_actualized' => '%d feeds have been updated', + 'n_entries_deleted' => '%d articles have been deleted', + 'no_refresh' => 'There is no feed to refresh…', + 'not_added' => '%s could not be added', + 'over_max' => 'You have reached your limit of feeds (%d)', + 'updated' => 'Feed has been updated', + ), + 'purge_completed' => 'Purge completed (%d articles deleted)', + ), + 'update' => array( + 'can_apply' => 'FreshRSS will now be updated to the version %s.', + 'error' => 'The update process has encountered an error: %s', + 'file_is_nok' => 'Check permissions on %s directory. HTTP server must have rights to write into', + 'finished' => 'Update completed!', + 'none' => 'No update to apply', + 'server_not_found' => 'Update server cannot be found. [%s]', + ), + 'user' => array( + 'created' => array( + '_' => 'User %s has been created', + 'error' => 'User %s cannot be created', + ), + 'deleted' => array( + '_' => 'User %s has been deleted', + 'error' => 'User %s cannot be deleted', + ), + ), + 'profile' => array( + 'error' => 'Your profile cannot be modified', + 'updated' => 'Your profile has been modified', + ), +); diff --git a/app/i18n/ru/gen.php b/app/i18n/ru/gen.php new file mode 100644 index 000000000..b8e8511d9 --- /dev/null +++ b/app/i18n/ru/gen.php @@ -0,0 +1,185 @@ + array( + 'actualize' => 'Actualize', + 'back_to_rss_feeds' => '← Go back to your RSS feeds', + 'cancel' => 'Cancel', + 'create' => 'Create', + 'disable' => 'Disable', + 'empty' => 'Empty', + 'enable' => 'Enable', + 'export' => 'Export', + 'filter' => 'Filter', + 'import' => 'Import', + 'manage' => 'Manage', + 'mark_read' => 'Mark as read', + 'mark_favorite' => 'Mark as favourite', + 'remove' => 'Remove', + 'see_website' => 'See website', + 'submit' => 'Submit', + 'truncate' => 'Delete all articles', + ), + 'auth' => array( + 'email' => 'Email address', + 'keep_logged_in' => 'Keep me logged in (1 month)', + 'login' => 'Login', + 'login_persona' => 'Login with Persona', + 'login_persona_problem' => 'Connection problem with Persona?', + 'logout' => 'Logout', + 'password' => array( + '_' => 'Password', + 'format' => 'At least 7 characters', + ), + 'registration' => array( + '_' => 'New account', + 'ask' => 'Create an account?', + 'title' => 'Account creation', + ), + 'reset' => 'Authentication reset', + 'username' => array( + '_' => 'Username', + 'admin' => 'Administrator username', + 'format' => 'maximum 16 alphanumeric characters', + ), + 'will_reset' => 'Authentication system will be reset: a form will be used instead of Persona.', + ), + 'date' => array( + 'Apr' => '\\A\\p\\r\\i\\l', + 'Aug' => '\\A\\u\\g\\u\\s\\t', + 'Dec' => '\\D\\e\\c\\e\\m\\b\\e\\r', + 'Feb' => '\\F\\e\\b\\r\\u\\a\\r\\y', + 'Jan' => '\\J\\a\\n\\u\\a\\r\\y', + 'Jul' => '\\J\\u\\l\\y', + 'Jun' => '\\J\\u\\n\\e', + 'Mar' => '\\M\\a\\r\\c\\h', + 'May' => '\\M\\a\\y', + 'Nov' => '\\N\\o\\v\\e\\m\\b\\e\\r', + 'Oct' => '\\O\\c\\t\\o\\b\\e\\r', + 'Sep' => '\\S\\e\\p\\t\\e\\m\\b\\e\\r', + 'apr' => 'apr', + 'april' => 'Apr', + 'aug' => 'aug', + 'august' => 'Aug', + 'before_yesterday' => 'Before yesterday', + 'dec' => 'dec', + 'december' => 'Dec', + 'feb' => 'feb', + 'february' => 'Feb', + 'format_date' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y', + 'format_date_hour' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y \\a\\t H\\:i', + 'fri' => 'Fri', + 'jan' => 'jan', + 'january' => 'Jan', + 'jul' => 'jul', + 'july' => 'Jul', + 'jun' => 'jun', + 'june' => 'Jun', + 'last_3_month' => 'Last three months', + 'last_6_month' => 'Last six months', + 'last_month' => 'Last month', + 'last_week' => 'Last week', + 'last_year' => 'Last year', + 'mar' => 'mar', + 'march' => 'Mar', + 'may' => 'May', + 'mon' => 'Mon', + 'month' => 'months', + 'nov' => 'nov', + 'november' => 'Nov', + 'oct' => 'oct', + 'october' => 'Oct', + 'sat' => 'Sat', + 'sep' => 'sep', + 'september' => 'Sep', + 'sun' => 'Sun', + 'thu' => 'Thu', + 'today' => 'Today', + 'tue' => 'Tue', + 'wed' => 'Wed', + 'yesterday' => 'Yesterday', + ), + 'freshrss' => array( + '_' => 'FreshRSS', + 'about' => 'About FreshRSS', + ), + 'js' => array( + 'category_empty' => 'Empty category', + 'confirm_action' => 'Are you sure you want to perform this action? It cannot be cancelled!', + 'confirm_action_feed_cat' => 'Are you sure you want to perform this action? You will lose related favorites and user queries. It cannot be cancelled!', + 'feedback' => array( + 'body_new_articles' => 'There are %%d new articles to read on FreshRSS.', + 'request_failed' => 'A request has failed, it may have been caused by Internet connection problems.', + 'title_new_articles' => 'FreshRSS: new articles!', + ), + 'new_article' => 'There are new available articles, click to refresh the page.', + 'should_be_activated' => 'JavaScript must be enabled', + ), + 'lang' => array( + 'cz' => 'Čeština', + 'de' => 'Deutsch', + 'en' => 'English', + 'fr' => 'Français', + 'it' => 'Italiano', + 'nl' => 'Nederlands', + 'ru' => 'Русский', + 'tr' => 'Türkçe', + ), + 'menu' => array( + 'about' => 'About', + 'admin' => 'Administration', + 'archiving' => 'Archiving', + 'authentication' => 'Authentication', + 'check_install' => 'Installation checking', + 'configuration' => 'Configuration', + 'display' => 'Display', + 'extensions' => 'Extensions', + 'logs' => 'Logs', + 'queries' => 'User queries', + 'reading' => 'Reading', + 'search' => 'Search words or #tags', + 'sharing' => 'Sharing', + 'shortcuts' => 'Shortcuts', + 'stats' => 'Statistics', + 'system' => 'System configuration', + 'update' => 'Update', + 'user_management' => 'Manage users', + 'user_profile' => 'Profile', + ), + 'pagination' => array( + 'first' => 'First', + 'last' => 'Last', + 'load_more' => 'Load more articles', + 'mark_all_read' => 'Mark all as read', + 'next' => 'Next', + 'nothing_to_load' => 'There are no more articles', + 'previous' => 'Previous', + ), + 'share' => array( + 'blogotext' => 'Blogotext', + 'diaspora' => 'Diaspora*', + 'email' => 'Email', + 'facebook' => 'Facebook', + 'g+' => 'Google+', + 'jdh' => 'Journal du hacker', + 'movim' => 'Movim', + 'print' => 'Print', + 'shaarli' => 'Shaarli', + 'twitter' => 'Twitter', + 'wallabag' => 'wallabag v1', + 'wallabagv2' => 'wallabag v2', + ), + 'short' => array( + 'attention' => 'Warning!', + 'blank_to_disable' => 'Leave blank to disable', + 'by_author' => 'By %s', + 'by_default' => 'By default', + 'damn' => 'Damn!', + 'default_category' => 'Uncategorized', + 'no' => 'No', + 'not_applicable' => 'Not available', + 'ok' => 'Ok!', + 'or' => 'or', + 'yes' => 'Yes', + ), +); diff --git a/app/i18n/ru/index.php b/app/i18n/ru/index.php new file mode 100644 index 000000000..80fa3d950 --- /dev/null +++ b/app/i18n/ru/index.php @@ -0,0 +1,61 @@ + array( + '_' => 'About', + 'agpl3' => 'AGPL 3', + 'bugs_reports' => 'Bugs reports', + 'credits' => 'Credits', + 'credits_content' => 'Some design elements come from Bootstrap although FreshRSS doesn’t use this framework. Icons come from GNOME project. Open Sans font police has been created by Steve Matteson. Favicons are collected with getFavicon API. FreshRSS is based on Minz, a PHP framework.', + 'freshrss_description' => 'FreshRSS is a RSS feeds aggregator to self-host like Kriss Feed or Leed. It is light and easy to take in hand while being powerful and configurable tool.', + 'github' => 'on Github', + 'license' => 'License', + 'project_website' => 'Project website', + 'title' => 'About', + 'version' => 'Version', + 'website' => 'Website', + ), + 'feed' => array( + 'add' => 'You may add some feeds.', + 'empty' => 'There is no article to show.', + 'rss_of' => 'RSS feed of %s', + 'title' => 'Your RSS feeds', + 'title_global' => 'Global view', + 'title_fav' => 'Your favourites', + ), + 'log' => array( + '_' => 'Logs', + 'clear' => 'Clear the logs', + 'empty' => 'Log file is empty', + 'title' => 'Logs', + ), + 'menu' => array( + 'about' => 'About FreshRSS', + 'add_query' => 'Add a query', + 'before_one_day' => 'Before one day', + 'before_one_week' => 'Before one week', + 'favorites' => 'Favourites (%s)', + 'global_view' => 'Global view', + 'main_stream' => 'Main stream', + 'mark_all_read' => 'Mark all as read', + 'mark_cat_read' => 'Mark category as read', + 'mark_feed_read' => 'Mark feed as read', + 'newer_first' => 'Newer first', + 'non-starred' => 'Show all but favorites', + 'normal_view' => 'Normal view', + 'older_first' => 'Oldest first', + 'queries' => 'User queries', + 'read' => 'Show only read', + 'reader_view' => 'Reading view', + 'rss_view' => 'RSS feed', + 'search_short' => 'Search', + 'starred' => 'Show only favorites', + 'stats' => 'Statistics', + 'subscription' => 'Subscriptions management', + 'unread' => 'Show only unread', + ), + 'share' => 'Share', + 'tag' => array( + 'related' => 'Related tags', + ), +); diff --git a/app/i18n/ru/install.php b/app/i18n/ru/install.php new file mode 100644 index 000000000..c838b2eba --- /dev/null +++ b/app/i18n/ru/install.php @@ -0,0 +1,113 @@ + array( + 'finish' => 'Завершить установку', + 'fix_errors_before' => 'Пожалуйста, исправьте ошибки прежде чем переходить к следующему этапу.', + 'keep_install' => 'Сохранить предыдущую установку', + 'next_step' => 'Перейти к следующему этапу', + 'reinstall' => 'Переустановить FreshRSS', + ), + 'auth' => array( + 'email_persona' => 'Почта (логин) для
    (for Mozilla Persona)', + 'form' => 'Вэб-форма (традиционный, необходим JavaScript)', + 'http' => 'HTTP (для продвинутых пользователей с HTTPS)', + 'none' => 'Никакого (опасно)', + 'password_form' => 'Пароль
    (для метода аутентификации на Вэб-формах)', + 'password_format' => 'Как минимум 7 букв', + 'persona' => 'Mozilla Persona (современный, необходим JavaScript)', + 'type' => 'Метод аутентификации', + ), + 'bdd' => array( + '_' => 'База данных', + 'conf' => array( + '_' => 'Конфигурация базы данныхDatabase configuration', + 'ko' => 'Проверьте конфигурацию базы данных.', + 'ok' => 'Конфигурация базы данных сохранена.', + ), + 'host' => 'Хост', + 'prefix' => 'Префикс таблицы', + 'password' => 'Пароль HTTP', + 'type' => 'Тип базы данных', + 'username' => 'Имя пользователя HTTP', + ), + 'check' => array( + '_' => 'Проверки', + 'already_installed' => 'Обнаружена предыдущая установка FreshRSS!', + 'cache' => array( + 'nok' => 'Проверьте права доступа к папке ./data/cache . Сервер HTTP должен иметь права на запись в эту папку.', + 'ok' => 'Права на папку кэша в порядке.', + ), + 'ctype' => array( + 'nok' => 'У вас не установлена необходимая библиотека для проверки типов символов (php-ctype).', + 'ok' => 'У вас установлена необходимая библиотека для проверки типов символов (ctype).', + ), + 'curl' => array( + 'nok' => 'У вас нет расширения cURL (пакет php5-curl).', + 'ok' => 'У вас установлено расширение cURL.', + ), + 'data' => array( + 'nok' => 'Проверьте права доступа к папке ./data . Сервер HTTP должен иметь права на запись в эту папку.', + 'ok' => 'Права на ./data/ в порядке.', + ), + 'dom' => array( + 'nok' => 'У вас не установлена необходимая библиотека для просмотра DOM (пакет php-xml).', + 'ok' => 'У вас установлена необходимая библиотека для просмотра DOM.', + ), + 'favicons' => array( + 'nok' => 'Проверьте права доступа к папке ./data/favicons . Сервер HTTP должен иметь права на запись в эту папку.', + 'ok' => 'Права на папку значков в порядке.', + ), + 'http_referer' => array( + 'nok' => 'Убедитесь, что вы не изменяете ваш HTTP REFERER.', + 'ok' => 'Ваш HTTP REFERER известен и соотвествует вашему серверу.', + ), + 'minz' => array( + 'nok' => 'У вас не установлен фрейворк Minz.', + 'ok' => 'У вас установлен фрейворк Minz.', + ), + 'pcre' => array( + 'nok' => 'У вас не установлена необходимая библиотека для работы с регулярными выражениями (php-pcre).', + 'ok' => 'У вас установлена необходимая библиотека для работы с регулярными выражениями (PCRE).', + ), + 'pdo' => array( + 'nok' => 'У вас не установлен PDO или один из необходимых драйверов (pdo_mysql, pdo_sqlite).', + 'ok' => 'У вас установлен PDO и как минимум один из поддерживаемых драйверов (pdo_mysql, pdo_sqlite).', + ), + 'persona' => array( + 'nok' => 'Проверьте права доступа к папке ./data/persona . Сервер HTTP должен иметь права на запись в эту папку.', + 'ok' => 'Права на папку Mozilla Persona в порядке.', + ), + 'php' => array( + 'nok' => 'У вас установлен PHP версии %s, но FreshRSS необходима версия не ниже %s.', + 'ok' => 'У вас установлен PHP версии %s, который совместим с FreshRSS.', + ), + 'users' => array( + 'nok' => 'Проверьте права доступа к папке ./data/users . Сервер HTTP должен иметь права на запись в эту папку.', + 'ok' => 'Права на папку users в порядке.', + ), + ), + 'conf' => array( + '_' => 'Общие настройки', + 'ok' => 'Общие настройки были сохранены.', + ), + 'congratulations' => 'Поздравляем!', + 'default_user' => 'Имя пользователя по умолчанию (максимум 16 латинских букв и/или цифр)', + 'delete_articles_after' => 'Удалять статьи после', + 'fix_errors_before' => 'Пожалуйста, исправьте ошибки прежде чем переходить к следующему этапу..', + 'javascript_is_better' => 'FreshRSS принесёт больше удовольствия, если включить JavaScript', + 'js' => array( + 'confirm_reinstall' => 'Переустанавливая FreshRSS, вы потеряете предыдущую конфигурацию. Вы хотите продолжить?', + ), + 'language' => array( + '_' => 'Язык', + 'choose' => 'Выберите язык для FreshRSS', + 'defined' => 'Язык выбран.', + ), + 'not_deleted' => 'Что-то пошло не так; удалите файл %s вручную.', + 'ok' => 'Установка успешна.', + 'step' => '%d этап', + 'steps' => 'Этапы', + 'title' => 'Установка · FreshRSS', + 'this_is_the_end' => 'Это конец', +); diff --git a/app/i18n/ru/sub.php b/app/i18n/ru/sub.php new file mode 100644 index 000000000..aaaa02827 --- /dev/null +++ b/app/i18n/ru/sub.php @@ -0,0 +1,62 @@ + array( + '_' => 'Category', + 'add' => 'Add a category', + 'empty' => 'Empty category', + 'new' => 'New category', + ), + 'feed' => array( + 'add' => 'Add a RSS feed', + 'advanced' => 'Advanced', + 'archiving' => 'Archivage', + 'auth' => array( + 'configuration' => 'Login', + 'help' => 'Connection allows to access HTTP protected RSS feeds', + 'http' => 'HTTP Authentication', + 'password' => 'HTTP password', + 'username' => 'HTTP username', + ), + 'css_help' => 'Retrieves truncated RSS feeds (caution, requires more time!)', + 'css_path' => 'Articles CSS path on original website', + 'description' => 'Description', + 'empty' => 'This feed is empty. Please verify that it is still maintained.', + 'error' => 'This feed has encountered a problem. Please verify that it is always reachable then actualize it.', + 'in_main_stream' => 'Show in main stream', + 'informations' => 'Information', + 'keep_history' => 'Minimum number of articles to keep', + 'moved_category_deleted' => 'When you delete a category, its feeds are automatically classified under %s.', + 'no_selected' => 'No feed selected.', + 'number_entries' => '%d articles', + 'stats' => 'Statistics', + 'think_to_add' => 'You may add some feeds.', + 'title' => 'Title', + 'title_add' => 'Add a RSS feed', + 'ttl' => 'Do not automatically refresh more often than', + 'url' => 'Feed URL', + 'validator' => 'Check the validity of the feed', + 'website' => 'Website URL', + 'pubsubhubbub' => 'Instant notification with PubSubHubbub', + ), + 'import_export' => array( + 'export' => 'Export', + 'export_opml' => 'Export list of feeds (OPML)', + 'export_starred' => 'Export your favourites', + 'feed_list' => 'List of %s articles', + 'file_to_import' => 'File to import
    (OPML, Json or Zip)', + 'file_to_import_no_zip' => 'File to import
    (OPML or Json)', + 'import' => 'Import', + 'starred_list' => 'List of favourite articles', + 'title' => 'Import / export', + ), + 'menu' => array( + 'bookmark' => 'Subscribe (FreshRSS bookmark)', + 'import_export' => 'Import / export', + 'subscription_management' => 'Subscriptions management', + ), + 'title' => array( + '_' => 'Subscriptions management', + 'feed_management' => 'RSS feeds management', + ), +); diff --git a/app/i18n/ru_RU/admin.php b/app/i18n/ru_RU/admin.php deleted file mode 100644 index dfea5b3cb..000000000 --- a/app/i18n/ru_RU/admin.php +++ /dev/null @@ -1,183 +0,0 @@ - array( - 'allow_anonymous' => 'Разрешить анонимное чтение статей для пользователя по умолчанию (%s)', - 'allow_anonymous_refresh' => 'Разрешить анонимное обновление статей', - 'api_enabled' => 'Включить доступ к API (необходимо для мобильных приложений)', - 'form' => 'На основе веб-формы (традиционный, необходим JavaScript)', - 'http' => 'HTTP (для продвинутых пользователей - по HTTPS)', - 'none' => 'Без аутентификации (небезопасный)', - 'persona' => 'Mozilla Persona (новый, необходим JavaScript)', - 'title' => 'Аутентификации', - 'title_reset' => 'Сброс аутентицикации', - 'token' => 'Токен аутентификации', - 'token_help' => 'Разрешает доступ к RSS ленте пользователя по умолчанию без аутентификации:', - 'type' => 'Метод аутентификации', - 'unsafe_autologin' => 'Разрешить небезопасный автоматический вход с использованием следующего формата: ', - ), - 'check_install' => array( - 'cache' => array( - 'nok' => 'Проверьте права доступа к папке ./data/cache. Сервер HTTP должен иметь права на запись в эту папку', - 'ok' => 'Права на ./data/cache в порядке.', - ), - 'categories' => array( - 'nok' => 'Таблица категорий настроена неправильно.', - 'ok' => 'Таблица категорий настроена правильно.', - ), - 'connection' => array( - 'nok' => 'Подключение к базе данных не может быть установлено.', - 'ok' => 'Подключение к базе данных в порядке.', - ), - 'ctype' => array( - 'nok' => 'У вас не установлена библиотека для проверки типов символов (php-ctype).', - 'ok' => 'У вас не установлена библиотека для проверки типов символов (ctype).', - ), - 'curl' => array( - 'nok' => 'У вас не установлено расширение cURL (пакет php5-curl).', - 'ok' => 'У вас установлено расширение cURL.', - ), - 'data' => array( - 'nok' => 'Проверьте права доступа к папке ./data . Сервер HTTP должен иметь права на запись в эту папку.', - 'ok' => 'Права на ./data/ в порядке.', - ), - 'database' => 'Установка базы данных', - 'dom' => array( - 'nok' => 'У вас не установлена библиотека для просмотра DOM (пакет php-xml).', - 'ok' => 'У вас установлена библиотека для просмотра DOM.', - ), - 'entries' => array( - 'nok' => 'Таблица статей (entry) неправильно настроена.', - 'ok' => 'Таблица статей (entry) настроена правильно.', - ), - 'favicons' => array( - 'nok' => 'Проверьте права доступа к папке ./data/favicons . Сервер HTTP должен иметь права на запись в эту папку.', - 'ok' => 'Права на папку значков в порядке.', - ), - 'feeds' => array( - 'nok' => 'Таблица подписок (feed) неправильно настроена.', - 'ok' => 'Таблица подписок (feed) настроена правильно.', - ), - 'files' => 'Установка файлов', - 'json' => array( - 'nok' => 'У вас не установлена библиотека для работы с JSON (пакет php5-json).', - 'ok' => 'У вас установлена библиотека для работы с JSON.', - ), - 'minz' => array( - 'nok' => 'У вас не установлен фрейворк Minz.', - 'ok' => 'У вас установлен фрейворк Minz.', - ), - 'pcre' => array( - 'nok' => 'У вас не установлена необходимая библиотека для работы с регулярными выражениями (php-pcre).', - 'ok' => 'У вас установлена необходимая библиотека для работы с регулярными выражениями (PCRE).', - ), - 'pdo' => array( - 'nok' => 'У вас не установлен PDO или один из необходимых драйверов (pdo_mysql, pdo_sqlite).', - 'ok' => 'У вас установлен PDO и как минимум один из поддерживаемых драйверов (pdo_mysql, pdo_sqlite).', - ), - 'persona' => array( - 'nok' => 'Проверьте права доступа к папке ./data/persona . Сервер HTTP должен иметь права на запись в эту папку.', - 'ok' => 'Права на папку Mozilla Persona в порядке.', - ), - 'php' => array( - '_' => 'PHP installation', - 'nok' => 'У вас установлен PHP версии %s, но FreshRSS необходима версия не ниже %s.', - 'ok' => 'У вас установлен PHP версии %s, который совместим с FreshRSS.', - ), - 'tables' => array( - 'nok' => 'В базе данных отсуствует одна или больше таблица.', - 'ok' => 'Все таблицы есть в базе данных.', - ), - 'title' => 'Проверка установки и настройки', - 'tokens' => array( - 'nok' => 'Проверьте права доступа к папке ./data/tokens . Сервер HTTP должен иметь права на запись в эту папку.', - 'ok' => 'Права на папку tokens в порядке.', - ), - 'users' => array( - 'nok' => 'Проверьте права доступа к папке ./data/users . Сервер HTTP должен иметь права на запись в эту папку.', - 'ok' => 'Права на папку users в порядке.', - ), - 'zip' => array( - 'nok' => 'You lack ZIP extension (php5-zip package).', - 'ok' => 'You have ZIP extension.', - ), - ), - 'extensions' => array( - 'disabled' => 'Отключены', - 'empty_list' => 'Расширения не установлены', - 'enabled' => 'Включены', - 'no_configure_view' => 'Это расширение нельзя настроить.', - 'system' => array( - '_' => 'Системные расширения', - 'no_rights' => 'Системные расширения (у вас нет к ним доступа)', - ), - 'title' => 'Расширения', - 'user' => 'Расширения пользователя', - ), - 'stats' => array( - '_' => 'Статистика', - 'all_feeds' => 'Все подписки', - 'category' => 'Категория', - 'entry_count' => 'Количество статей', - 'entry_per_category' => 'Статей в категории', - 'entry_per_day' => 'Статей за день (за последние 30 дней)', - 'entry_per_day_of_week' => 'За неделю (в среднем - %.2f сообщений)', - 'entry_per_hour' => 'За час (в среднем - %.2f сообщений)', - 'entry_per_month' => 'За месяц (в среднем - %.2f сообщений)', - 'entry_repartition' => 'Перерасределение статей', - 'feed' => 'Подписка', - 'feed_per_category' => 'Подписок в категории', - 'idle' => 'Неактивные подписки', - 'main' => 'Основная статистика', - 'main_stream' => 'Основной поток', - 'menu' => array( - 'idle' => 'Неактивные подписки', - 'main' => 'Основная статистика', - 'repartition' => 'Перерасределение статей', - ), - 'no_idle' => 'Нет неактивных подписок!', - 'number_entries' => 'статей: %d', - 'percent_of_total' => '%% от всего', - 'repartition' => 'Перераспределение статей', - 'status_favorites' => 'Избранное', - 'status_read' => 'Читать', - 'status_total' => 'Всего', - 'status_unread' => 'Не прочитано', - 'title' => 'Статистика', - 'top_feed' => '10 лучших подписок', - ), - 'system' => array( - '_' => 'Системные настройки', - 'auto-update-url' => 'Адрес сервера для автоматического обновления', - 'instance-name' => 'Название этого сервера', - 'max-categories' => 'Количество категорий на пользователя', - 'max-feeds' => 'Количество статей на пользователя', - 'registration' => array( - 'help' => '0 означает неограниченное количество пользователей', - 'number' => 'Максимальное количество пользователей', - ), - ), - 'update' => array( - '_' => 'Обновление системы', - 'apply' => 'Применить', - 'check' => 'Проверить обновления', - 'current_version' => 'Ваша текущая версия FreshRSS: %s.', - 'last' => 'Последняя проверка: %s', - 'none' => 'Нечего обновлять', - 'title' => 'Обновить систему', - ), - 'user' => array( - 'articles_and_size' => '%s статей (%s)', - 'create' => 'Создать нового пользователя', - 'email_persona' => 'Адрес электронной почты для входа
    (for Mozilla Persona)', - 'language' => 'Язык', - 'number' => 'На данный момент создан %d аккаунт', - 'numbers' => 'На данный момент аккаунтов создано: %d', - 'password_form' => 'Пароль
    (для входа через Веб-форму)', - 'password_format' => 'Минимум 7 символов', - 'title' => 'Управление пользователями', - 'user_list' => 'Список пользователей', - 'username' => 'Имя пользователя', - 'users' => 'Пользователи', - ), -); diff --git a/app/i18n/ru_RU/conf.php b/app/i18n/ru_RU/conf.php deleted file mode 100644 index e502e9a43..000000000 --- a/app/i18n/ru_RU/conf.php +++ /dev/null @@ -1,174 +0,0 @@ - array( - '_' => 'Архивация', - 'advanced' => 'Продвинутые настройки', - 'delete_after' => 'Удалять статьи после', - 'help' => 'Каждую подписку можно настроить более гибко', - 'keep_history_by_feed' => 'Minimum number of articles to keep by feed', - 'optimize' => 'Оптимизировать базу данных', - 'optimize_help' => 'To do occasionally to reduce the size of the database', - 'purge_now' => 'Очистить сейчас', - 'title' => 'Архивация', - 'ttl' => 'Не обновлять чаще чем', - ), - 'display' => array( - '_' => 'Display', - 'icon' => array( - 'bottom_line' => 'Bottom line', - 'entry' => 'Article icons', - 'publication_date' => 'Date of publication', - 'related_tags' => 'Related tags', - 'sharing' => 'Sharing', - 'top_line' => 'Top line', - ), - 'language' => 'Язык', - 'notif_html5' => array( - 'seconds' => 'seconds (0 means no timeout)', - 'timeout' => 'HTML5 notification timeout', - ), - 'theme' => 'Тема', - 'title' => 'Display', - 'width' => array( - 'content' => 'Content width', - 'large' => 'Large', - 'medium' => 'Medium', - 'no_limit' => 'No limit', - 'thin' => 'Thin', - ), - ), - 'query' => array( - '_' => 'User queries', - 'deprecated' => 'This query is no longer valid. The referenced category or feed has been deleted.', - 'filter' => 'Filter applied:', - 'get_all' => 'Display all articles', - 'get_category' => 'Display "%s" category', - 'get_favorite' => 'Display favorite articles', - 'get_feed' => 'Display "%s" feed', - 'no_filter' => 'No filter', - 'none' => 'You haven’t created any user query yet.', - 'number' => 'Query n°%d', - 'order_asc' => 'Display oldest articles first', - 'order_desc' => 'Display newest articles first', - 'search' => 'Search for "%s"', - 'state_0' => 'Display all articles', - 'state_1' => 'Display read articles', - 'state_2' => 'Display unread articles', - 'state_3' => 'Display all articles', - 'state_4' => 'Display favorite articles', - 'state_5' => 'Display read favorite articles', - 'state_6' => 'Display unread favorite articles', - 'state_7' => 'Display favorite articles', - 'state_8' => 'Display not favorite articles', - 'state_9' => 'Display read not favorite articles', - 'state_10' => 'Display unread not favorite articles', - 'state_11' => 'Display not favorite articles', - 'state_12' => 'Display all articles', - 'state_13' => 'Display read articles', - 'state_14' => 'Display unread articles', - 'state_15' => 'Display all articles', - 'title' => 'User queries', - ), - 'profile' => array( - '_' => 'Profile management', - 'delete' => array( - '_' => 'Account deletion', - 'warn' => 'Your account and all the related data will be deleted.', - ), - 'email_persona' => 'Login email address
    (for Mozilla Persona)', - 'password_api' => 'Password API
    (e.g., for mobile apps)', - 'password_form' => 'Password
    (for the Web-form login method)', - 'password_format' => 'At least 7 characters', - 'title' => 'Profile', - ), - 'reading' => array( - '_' => 'Reading', - 'after_onread' => 'After “mark all as read”,', - 'articles_per_page' => 'Number of articles per page', - 'auto_load_more' => 'Load next articles at the page bottom', - 'auto_remove_article' => 'Hide articles after reading', - 'mark_updated_article_unread' => 'Mark updated articles as unread', - 'confirm_enabled' => 'Display a confirmation dialog on “mark all as read” actions', - 'display_articles_unfolded' => 'Show articles unfolded by default', - 'display_categories_unfolded' => 'Show categories folded by default', - 'hide_read_feeds' => 'Hide categories & feeds with no unread article (does not work with “Show all articles” configuration)', - 'img_with_lazyload' => 'Use "lazy load" mode to load pictures', - 'jump_next' => 'jump to next unread sibling (feed or category)', - 'number_divided_when_reader' => 'Divided by 2 in the reading view.', - 'read' => array( - 'article_open_on_website' => 'when article is opened on its original website', - 'article_viewed' => 'when article is viewed', - 'scroll' => 'while scrolling', - 'upon_reception' => 'upon reception of the article', - 'when' => 'Mark article as read…', - ), - 'show' => array( - '_' => 'Articles to display', - 'adaptive' => 'Adjust showing', - 'all_articles' => 'Show all articles', - 'unread' => 'Show only unread', - ), - 'sort' => array( - '_' => 'Sort order', - 'newer_first' => 'Newer first', - 'older_first' => 'Oldest first', - ), - 'sticky_post' => 'Stick the article to the top when opened', - 'title' => 'Reading', - 'view' => array( - 'default' => 'Default view', - 'global' => 'Global view', - 'normal' => 'Normal view', - 'reader' => 'Reading view', - ), - ), - 'sharing' => array( - '_' => 'Sharing', - 'blogotext' => 'Blogotext', - 'diaspora' => 'Diaspora*', - 'email' => 'Email', - 'facebook' => 'Facebook', - 'g+' => 'Google+', - 'more_information' => 'More information', - 'print' => 'Print', - 'shaarli' => 'Shaarli', - 'share_name' => 'Share name to display', - 'share_url' => 'Share URL to use', - 'title' => 'Sharing', - 'twitter' => 'Twitter', - 'wallabag' => 'wallabag', - ), - 'shortcut' => array( - '_' => 'Shortcuts', - 'article_action' => 'Article actions', - 'auto_share' => 'Share', - 'auto_share_help' => 'If there is only one sharing mode, it is used. Else modes are accessible by their number.', - 'close_dropdown' => 'Close menus', - 'collapse_article' => 'Collapse', - 'first_article' => 'Skip to the first article', - 'focus_search' => 'Access search box', - 'help' => 'Display documentation', - 'javascript' => 'JavaScript must be enabled in order to use shortcuts', - 'last_article' => 'Skip to the last article', - 'load_more' => 'Load more articles', - 'mark_read' => 'Mark as read', - 'mark_favorite' => 'Mark as favourite', - 'navigation' => 'Navigation', - 'navigation_help' => 'With the "Shift" modifier, navigation shortcuts apply on feeds.
    With the "Alt" modifier, navigation shortcuts apply on categories.', - 'next_article' => 'Skip to the next article', - 'other_action' => 'Other actions', - 'previous_article' => 'Skip to the previous article', - 'see_on_website' => 'See on original website', - 'shift_for_all_read' => '+ shift to mark all articles as read', - 'title' => 'Shortcuts', - 'user_filter' => 'Access user filters', - 'user_filter_help' => 'If there is only one user filter, it is used. Else filters are accessible by their number.', - ), - 'user' => array( - 'articles_and_size' => '%s articles (%s)', - 'current' => 'Current user', - 'is_admin' => 'is administrator', - 'users' => 'Users', - ), -); diff --git a/app/i18n/ru_RU/feedback.php b/app/i18n/ru_RU/feedback.php deleted file mode 100644 index c9189c0d0..000000000 --- a/app/i18n/ru_RU/feedback.php +++ /dev/null @@ -1,110 +0,0 @@ - array( - 'optimization_complete' => 'Optimisation complete', - ), - 'access' => array( - 'denied' => 'You don’t have permission to access this page', - 'not_found' => 'You are looking for a page which doesn’t exist', - ), - 'auth' => array( - 'form' => array( - 'not_set' => 'A problem occured during authentication system configuration. Please retry later.', - 'set' => 'Form is now your default authentication system.', - ), - 'login' => array( - 'invalid' => 'Login is invalid', - 'success' => 'You are connected', - ), - 'logout' => array( - 'success' => 'You are disconnected', - ), - 'no_password_set' => 'Administrator password hasn’t been set. This feature isn’t available.', - 'not_persona' => 'Only Persona system can be reset.', - ), - 'conf' => array( - 'error' => 'An error occurred during configuration saving', - 'query_created' => 'Query "%s" has been created.', - 'shortcuts_updated' => 'Shortcuts have been updated', - 'updated' => 'Configuration has been updated', - ), - 'extensions' => array( - 'already_enabled' => '%s is already enabled', - 'disable' => array( - 'ko' => '%s cannot be disabled. Check FressRSS logs for details.', - 'ok' => '%s is now disabled', - ), - 'enable' => array( - 'ko' => '%s cannot be enabled. Check FressRSS logs for details.', - 'ok' => '%s is now enabled', - ), - 'no_access' => 'You have no access on %s', - 'not_enabled' => '%s is not enabled yet', - 'not_found' => '%s does not exist', - ), - 'import_export' => array( - 'export_no_zip_extension' => 'Zip extension is not present on your server. Please try to export files one by one.', - 'feeds_imported' => 'Your feeds have been imported and will now be updated', - 'feeds_imported_with_errors' => 'Your feeds have been imported but some errors occurred', - 'file_cannot_be_uploaded' => 'File cannot be uploaded!', - 'no_zip_extension' => 'Zip extension is not present on your server.', - 'zip_error' => 'An error occured during Zip import.', - ), - 'sub' => array( - 'actualize' => 'Actualise', - 'category' => array( - 'created' => 'Category %s has been created.', - 'deleted' => 'Category has been deleted.', - 'emptied' => 'Category has been emptied', - 'error' => 'Category cannot be updated', - 'name_exists' => 'Category name already exists.', - 'no_id' => 'You must precise the id of the category.', - 'no_name' => 'Category name cannot be empty.', - 'not_delete_default' => 'You cannot delete the default category!', - 'not_exist' => 'The category does not exist!', - 'over_max' => 'You have reached your limit of categories (%d)', - 'updated' => 'Category has been updated.', - ), - 'feed' => array( - 'actualized' => '%s has been updated', - 'actualizeds' => 'RSS feeds have been updated', - 'added' => 'RSS feed %s has been added', - 'already_subscribed' => 'You have already subscribed to %s', - 'deleted' => 'Feed has been deleted', - 'error' => 'Feed cannot be updated', - 'internal_problem' => 'The RSS feed could not be added. Check FressRSS logs for details.', - 'invalid_url' => 'URL %s is invalid', - 'marked_read' => 'Feeds have been marked as read', - 'n_actualized' => '%d feeds have been updated', - 'n_entries_deleted' => '%d articles have been deleted', - 'no_refresh' => 'There is no feed to refresh…', - 'not_added' => '%s could not be added', - 'over_max' => 'You have reached your limit of feeds (%d)', - 'updated' => 'Feed has been updated', - ), - 'purge_completed' => 'Purge completed (%d articles deleted)', - ), - 'update' => array( - 'can_apply' => 'FreshRSS will now be updated to the version %s.', - 'error' => 'The update process has encountered an error: %s', - 'file_is_nok' => 'Check permissions on %s directory. HTTP server must have rights to write into', - 'finished' => 'Update completed!', - 'none' => 'No update to apply', - 'server_not_found' => 'Update server cannot be found. [%s]', - ), - 'user' => array( - 'created' => array( - '_' => 'User %s has been created', - 'error' => 'User %s cannot be created', - ), - 'deleted' => array( - '_' => 'User %s has been deleted', - 'error' => 'User %s cannot be deleted', - ), - ), - 'profile' => array( - 'error' => 'Your profile cannot be modified', - 'updated' => 'Your profile has been modified', - ), -); diff --git a/app/i18n/ru_RU/gen.php b/app/i18n/ru_RU/gen.php deleted file mode 100644 index 6511311a1..000000000 --- a/app/i18n/ru_RU/gen.php +++ /dev/null @@ -1,182 +0,0 @@ - array( - 'actualize' => 'Actualize', - 'back_to_rss_feeds' => '← Go back to your RSS feeds', - 'cancel' => 'Cancel', - 'create' => 'Create', - 'disable' => 'Disable', - 'empty' => 'Empty', - 'enable' => 'Enable', - 'export' => 'Export', - 'filter' => 'Filter', - 'import' => 'Import', - 'manage' => 'Manage', - 'mark_read' => 'Mark as read', - 'mark_favorite' => 'Mark as favourite', - 'remove' => 'Remove', - 'see_website' => 'See website', - 'submit' => 'Submit', - 'truncate' => 'Delete all articles', - ), - 'auth' => array( - 'email' => 'Email address', - 'keep_logged_in' => 'Keep me logged in (1 month)', - 'login' => 'Login', - 'login_persona' => 'Login with Persona', - 'login_persona_problem' => 'Connection problem with Persona?', - 'logout' => 'Logout', - 'password' => array( - '_' => 'Password', - 'format' => 'At least 7 characters', - ), - 'registration' => array( - '_' => 'New account', - 'ask' => 'Create an account?', - 'title' => 'Account creation', - ), - 'reset' => 'Authentication reset', - 'username' => array( - '_' => 'Username', - 'admin' => 'Administrator username', - 'format' => 'maximum 16 alphanumeric characters', - ), - 'will_reset' => 'Authentication system will be reset: a form will be used instead of Persona.', - ), - 'date' => array( - 'Apr' => '\\A\\p\\r\\i\\l', - 'Aug' => '\\A\\u\\g\\u\\s\\t', - 'Dec' => '\\D\\e\\c\\e\\m\\b\\e\\r', - 'Feb' => '\\F\\e\\b\\r\\u\\a\\r\\y', - 'Jan' => '\\J\\a\\n\\u\\a\\r\\y', - 'Jul' => '\\J\\u\\l\\y', - 'Jun' => '\\J\\u\\n\\e', - 'Mar' => '\\M\\a\\r\\c\\h', - 'May' => '\\M\\a\\y', - 'Nov' => '\\N\\o\\v\\e\\m\\b\\e\\r', - 'Oct' => '\\O\\c\\t\\o\\b\\e\\r', - 'Sep' => '\\S\\e\\p\\t\\e\\m\\b\\e\\r', - 'apr' => 'apr', - 'april' => 'Apr', - 'aug' => 'aug', - 'august' => 'Aug', - 'before_yesterday' => 'Before yesterday', - 'dec' => 'dec', - 'december' => 'Dec', - 'feb' => 'feb', - 'february' => 'Feb', - 'format_date' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y', - 'format_date_hour' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y \\a\\t H\\:i', - 'fri' => 'Fri', - 'jan' => 'jan', - 'january' => 'Jan', - 'jul' => 'jul', - 'july' => 'Jul', - 'jun' => 'jun', - 'june' => 'Jun', - 'last_3_month' => 'Last three months', - 'last_6_month' => 'Last six months', - 'last_month' => 'Last month', - 'last_week' => 'Last week', - 'last_year' => 'Last year', - 'mar' => 'mar', - 'march' => 'Mar', - 'may' => 'May', - 'mon' => 'Mon', - 'month' => 'months', - 'nov' => 'nov', - 'november' => 'Nov', - 'oct' => 'oct', - 'october' => 'Oct', - 'sat' => 'Sat', - 'sep' => 'sep', - 'september' => 'Sep', - 'sun' => 'Sun', - 'thu' => 'Thu', - 'today' => 'Today', - 'tue' => 'Tue', - 'wed' => 'Wed', - 'yesterday' => 'Yesterday', - ), - 'freshrss' => array( - '_' => 'FreshRSS', - 'about' => 'About FreshRSS', - ), - 'js' => array( - 'category_empty' => 'Empty category', - 'confirm_action' => 'Are you sure you want to perform this action? It cannot be cancelled!', - 'confirm_action_feed_cat' => 'Are you sure you want to perform this action? You will lose related favorites and user queries. It cannot be cancelled!', - 'feedback' => array( - 'body_new_articles' => 'There are \\d new articles to read on FreshRSS.', - 'request_failed' => 'A request has failed, it may have been caused by Internet connection problems.', - 'title_new_articles' => 'FreshRSS: new articles!', - ), - 'new_article' => 'There are new available articles, click to refresh the page.', - 'should_be_activated' => 'JavaScript must be enabled', - ), - 'lang' => array( - 'cz' => 'Čeština', - 'de' => 'Deutsch', - 'en' => 'English', - 'fr' => 'Français', - 'it' => 'Italiano', - 'nl' => 'Nederlands', - ), - 'menu' => array( - 'about' => 'About', - 'admin' => 'Administration', - 'archiving' => 'Archiving', - 'authentication' => 'Authentication', - 'check_install' => 'Installation checking', - 'configuration' => 'Configuration', - 'display' => 'Display', - 'extensions' => 'Extensions', - 'logs' => 'Logs', - 'queries' => 'User queries', - 'reading' => 'Reading', - 'search' => 'Search words or #tags', - 'sharing' => 'Sharing', - 'shortcuts' => 'Shortcuts', - 'stats' => 'Statistics', - 'system' => 'System configuration', - 'update' => 'Update', - 'user_management' => 'Manage users', - 'user_profile' => 'Profile', - ), - 'pagination' => array( - 'first' => 'First', - 'last' => 'Last', - 'load_more' => 'Load more articles', - 'mark_all_read' => 'Mark all as read', - 'next' => 'Next', - 'nothing_to_load' => 'There are no more articles', - 'previous' => 'Previous', - ), - 'share' => array( - 'blogotext' => 'Blogotext', - 'diaspora' => 'Diaspora*', - 'email' => 'Email', - 'facebook' => 'Facebook', - 'g+' => 'Google+', - 'movim' => 'Movim', - 'print' => 'Print', - 'shaarli' => 'Shaarli', - 'twitter' => 'Twitter', - 'wallabag' => 'wallabag v1', - 'wallabagv2' => 'wallabag v2', - ), - 'short' => array( - 'attention' => 'Warning!', - 'blank_to_disable' => 'Leave blank to disable', - 'by_author' => 'By %s', - 'by_default' => 'By default', - 'damn' => 'Damn!', - 'default_category' => 'Uncategorized', - 'no' => 'No', - 'not_applicable' => 'Not available', - 'ok' => 'Ok!', - 'or' => 'or', - 'yes' => 'Yes', - ), -); diff --git a/app/i18n/ru_RU/index.php b/app/i18n/ru_RU/index.php deleted file mode 100644 index 80fa3d950..000000000 --- a/app/i18n/ru_RU/index.php +++ /dev/null @@ -1,61 +0,0 @@ - array( - '_' => 'About', - 'agpl3' => 'AGPL 3', - 'bugs_reports' => 'Bugs reports', - 'credits' => 'Credits', - 'credits_content' => 'Some design elements come from Bootstrap although FreshRSS doesn’t use this framework. Icons come from GNOME project. Open Sans font police has been created by Steve Matteson. Favicons are collected with getFavicon API. FreshRSS is based on Minz, a PHP framework.', - 'freshrss_description' => 'FreshRSS is a RSS feeds aggregator to self-host like Kriss Feed or Leed. It is light and easy to take in hand while being powerful and configurable tool.', - 'github' => 'on Github', - 'license' => 'License', - 'project_website' => 'Project website', - 'title' => 'About', - 'version' => 'Version', - 'website' => 'Website', - ), - 'feed' => array( - 'add' => 'You may add some feeds.', - 'empty' => 'There is no article to show.', - 'rss_of' => 'RSS feed of %s', - 'title' => 'Your RSS feeds', - 'title_global' => 'Global view', - 'title_fav' => 'Your favourites', - ), - 'log' => array( - '_' => 'Logs', - 'clear' => 'Clear the logs', - 'empty' => 'Log file is empty', - 'title' => 'Logs', - ), - 'menu' => array( - 'about' => 'About FreshRSS', - 'add_query' => 'Add a query', - 'before_one_day' => 'Before one day', - 'before_one_week' => 'Before one week', - 'favorites' => 'Favourites (%s)', - 'global_view' => 'Global view', - 'main_stream' => 'Main stream', - 'mark_all_read' => 'Mark all as read', - 'mark_cat_read' => 'Mark category as read', - 'mark_feed_read' => 'Mark feed as read', - 'newer_first' => 'Newer first', - 'non-starred' => 'Show all but favorites', - 'normal_view' => 'Normal view', - 'older_first' => 'Oldest first', - 'queries' => 'User queries', - 'read' => 'Show only read', - 'reader_view' => 'Reading view', - 'rss_view' => 'RSS feed', - 'search_short' => 'Search', - 'starred' => 'Show only favorites', - 'stats' => 'Statistics', - 'subscription' => 'Subscriptions management', - 'unread' => 'Show only unread', - ), - 'share' => 'Share', - 'tag' => array( - 'related' => 'Related tags', - ), -); diff --git a/app/i18n/ru_RU/install.php b/app/i18n/ru_RU/install.php deleted file mode 100644 index c838b2eba..000000000 --- a/app/i18n/ru_RU/install.php +++ /dev/null @@ -1,113 +0,0 @@ - array( - 'finish' => 'Завершить установку', - 'fix_errors_before' => 'Пожалуйста, исправьте ошибки прежде чем переходить к следующему этапу.', - 'keep_install' => 'Сохранить предыдущую установку', - 'next_step' => 'Перейти к следующему этапу', - 'reinstall' => 'Переустановить FreshRSS', - ), - 'auth' => array( - 'email_persona' => 'Почта (логин) для
    (for Mozilla Persona)', - 'form' => 'Вэб-форма (традиционный, необходим JavaScript)', - 'http' => 'HTTP (для продвинутых пользователей с HTTPS)', - 'none' => 'Никакого (опасно)', - 'password_form' => 'Пароль
    (для метода аутентификации на Вэб-формах)', - 'password_format' => 'Как минимум 7 букв', - 'persona' => 'Mozilla Persona (современный, необходим JavaScript)', - 'type' => 'Метод аутентификации', - ), - 'bdd' => array( - '_' => 'База данных', - 'conf' => array( - '_' => 'Конфигурация базы данныхDatabase configuration', - 'ko' => 'Проверьте конфигурацию базы данных.', - 'ok' => 'Конфигурация базы данных сохранена.', - ), - 'host' => 'Хост', - 'prefix' => 'Префикс таблицы', - 'password' => 'Пароль HTTP', - 'type' => 'Тип базы данных', - 'username' => 'Имя пользователя HTTP', - ), - 'check' => array( - '_' => 'Проверки', - 'already_installed' => 'Обнаружена предыдущая установка FreshRSS!', - 'cache' => array( - 'nok' => 'Проверьте права доступа к папке ./data/cache . Сервер HTTP должен иметь права на запись в эту папку.', - 'ok' => 'Права на папку кэша в порядке.', - ), - 'ctype' => array( - 'nok' => 'У вас не установлена необходимая библиотека для проверки типов символов (php-ctype).', - 'ok' => 'У вас установлена необходимая библиотека для проверки типов символов (ctype).', - ), - 'curl' => array( - 'nok' => 'У вас нет расширения cURL (пакет php5-curl).', - 'ok' => 'У вас установлено расширение cURL.', - ), - 'data' => array( - 'nok' => 'Проверьте права доступа к папке ./data . Сервер HTTP должен иметь права на запись в эту папку.', - 'ok' => 'Права на ./data/ в порядке.', - ), - 'dom' => array( - 'nok' => 'У вас не установлена необходимая библиотека для просмотра DOM (пакет php-xml).', - 'ok' => 'У вас установлена необходимая библиотека для просмотра DOM.', - ), - 'favicons' => array( - 'nok' => 'Проверьте права доступа к папке ./data/favicons . Сервер HTTP должен иметь права на запись в эту папку.', - 'ok' => 'Права на папку значков в порядке.', - ), - 'http_referer' => array( - 'nok' => 'Убедитесь, что вы не изменяете ваш HTTP REFERER.', - 'ok' => 'Ваш HTTP REFERER известен и соотвествует вашему серверу.', - ), - 'minz' => array( - 'nok' => 'У вас не установлен фрейворк Minz.', - 'ok' => 'У вас установлен фрейворк Minz.', - ), - 'pcre' => array( - 'nok' => 'У вас не установлена необходимая библиотека для работы с регулярными выражениями (php-pcre).', - 'ok' => 'У вас установлена необходимая библиотека для работы с регулярными выражениями (PCRE).', - ), - 'pdo' => array( - 'nok' => 'У вас не установлен PDO или один из необходимых драйверов (pdo_mysql, pdo_sqlite).', - 'ok' => 'У вас установлен PDO и как минимум один из поддерживаемых драйверов (pdo_mysql, pdo_sqlite).', - ), - 'persona' => array( - 'nok' => 'Проверьте права доступа к папке ./data/persona . Сервер HTTP должен иметь права на запись в эту папку.', - 'ok' => 'Права на папку Mozilla Persona в порядке.', - ), - 'php' => array( - 'nok' => 'У вас установлен PHP версии %s, но FreshRSS необходима версия не ниже %s.', - 'ok' => 'У вас установлен PHP версии %s, который совместим с FreshRSS.', - ), - 'users' => array( - 'nok' => 'Проверьте права доступа к папке ./data/users . Сервер HTTP должен иметь права на запись в эту папку.', - 'ok' => 'Права на папку users в порядке.', - ), - ), - 'conf' => array( - '_' => 'Общие настройки', - 'ok' => 'Общие настройки были сохранены.', - ), - 'congratulations' => 'Поздравляем!', - 'default_user' => 'Имя пользователя по умолчанию (максимум 16 латинских букв и/или цифр)', - 'delete_articles_after' => 'Удалять статьи после', - 'fix_errors_before' => 'Пожалуйста, исправьте ошибки прежде чем переходить к следующему этапу..', - 'javascript_is_better' => 'FreshRSS принесёт больше удовольствия, если включить JavaScript', - 'js' => array( - 'confirm_reinstall' => 'Переустанавливая FreshRSS, вы потеряете предыдущую конфигурацию. Вы хотите продолжить?', - ), - 'language' => array( - '_' => 'Язык', - 'choose' => 'Выберите язык для FreshRSS', - 'defined' => 'Язык выбран.', - ), - 'not_deleted' => 'Что-то пошло не так; удалите файл %s вручную.', - 'ok' => 'Установка успешна.', - 'step' => '%d этап', - 'steps' => 'Этапы', - 'title' => 'Установка · FreshRSS', - 'this_is_the_end' => 'Это конец', -); diff --git a/app/i18n/ru_RU/sub.php b/app/i18n/ru_RU/sub.php deleted file mode 100644 index aaaa02827..000000000 --- a/app/i18n/ru_RU/sub.php +++ /dev/null @@ -1,62 +0,0 @@ - array( - '_' => 'Category', - 'add' => 'Add a category', - 'empty' => 'Empty category', - 'new' => 'New category', - ), - 'feed' => array( - 'add' => 'Add a RSS feed', - 'advanced' => 'Advanced', - 'archiving' => 'Archivage', - 'auth' => array( - 'configuration' => 'Login', - 'help' => 'Connection allows to access HTTP protected RSS feeds', - 'http' => 'HTTP Authentication', - 'password' => 'HTTP password', - 'username' => 'HTTP username', - ), - 'css_help' => 'Retrieves truncated RSS feeds (caution, requires more time!)', - 'css_path' => 'Articles CSS path on original website', - 'description' => 'Description', - 'empty' => 'This feed is empty. Please verify that it is still maintained.', - 'error' => 'This feed has encountered a problem. Please verify that it is always reachable then actualize it.', - 'in_main_stream' => 'Show in main stream', - 'informations' => 'Information', - 'keep_history' => 'Minimum number of articles to keep', - 'moved_category_deleted' => 'When you delete a category, its feeds are automatically classified under %s.', - 'no_selected' => 'No feed selected.', - 'number_entries' => '%d articles', - 'stats' => 'Statistics', - 'think_to_add' => 'You may add some feeds.', - 'title' => 'Title', - 'title_add' => 'Add a RSS feed', - 'ttl' => 'Do not automatically refresh more often than', - 'url' => 'Feed URL', - 'validator' => 'Check the validity of the feed', - 'website' => 'Website URL', - 'pubsubhubbub' => 'Instant notification with PubSubHubbub', - ), - 'import_export' => array( - 'export' => 'Export', - 'export_opml' => 'Export list of feeds (OPML)', - 'export_starred' => 'Export your favourites', - 'feed_list' => 'List of %s articles', - 'file_to_import' => 'File to import
    (OPML, Json or Zip)', - 'file_to_import_no_zip' => 'File to import
    (OPML or Json)', - 'import' => 'Import', - 'starred_list' => 'List of favourite articles', - 'title' => 'Import / export', - ), - 'menu' => array( - 'bookmark' => 'Subscribe (FreshRSS bookmark)', - 'import_export' => 'Import / export', - 'subscription_management' => 'Subscriptions management', - ), - 'title' => array( - '_' => 'Subscriptions management', - 'feed_management' => 'RSS feeds management', - ), -); diff --git a/app/i18n/tr/gen.php b/app/i18n/tr/gen.php index 092c19752..492e2cb9b 100644 --- a/app/i18n/tr/gen.php +++ b/app/i18n/tr/gen.php @@ -122,6 +122,7 @@ return array( 'fr' => 'Français', 'it' => 'Italiano', 'nl' => 'Nederlands', + 'ru' => 'Русский', 'tr' => 'Türkçe', ), 'menu' => array( -- cgit v1.2.3 From ea4deb6e0568adca6c0f1bea536fac6869f9c7ec Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 12 Jun 2016 13:18:31 +0200 Subject: Check minimum PHP 5.3.0+ https://github.com/FreshRSS/FreshRSS/pull/1133 --- app/install.php | 4 ++-- app/views/update/checkInstall.phtml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'app') diff --git a/app/install.php b/app/install.php index b47effc84..062f66814 100644 --- a/app/install.php +++ b/app/install.php @@ -309,7 +309,7 @@ function checkStep0() { } function checkStep1() { - $php = version_compare(PHP_VERSION, '5.2.1') >= 0; + $php = version_compare(PHP_VERSION, '5.3.0') >= 0; $minz = file_exists(join_path(LIB_PATH, 'Minz')); $curl = extension_loaded('curl'); $pdo_mysql = extension_loaded('pdo_mysql'); @@ -536,7 +536,7 @@ function printStep1() {

    -

    +

    diff --git a/app/views/update/checkInstall.phtml b/app/views/update/checkInstall.phtml index a92860c7e..ed3858b56 100644 --- a/app/views/update/checkInstall.phtml +++ b/app/views/update/checkInstall.phtml @@ -9,7 +9,7 @@

    Date: Sun, 12 Jun 2016 13:24:20 +0200 Subject: i18n Movim Wallabag missing https://github.com/FreshRSS/FreshRSS/pull/1165 --- app/i18n/cz/gen.php | 3 ++- app/i18n/it/gen.php | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) (limited to 'app') diff --git a/app/i18n/cz/gen.php b/app/i18n/cz/gen.php index af10967a7..5e15ae6f9 100644 --- a/app/i18n/cz/gen.php +++ b/app/i18n/cz/gen.php @@ -165,7 +165,8 @@ return array( 'print' => 'Tisk', 'shaarli' => 'Shaarli', 'twitter' => 'Twitter', - 'wallabag' => 'wallabag', + 'wallabag' => 'wallabag v1', + 'wallabagv2' => 'wallabag v2', 'jdh' => 'Journal du hacker', ), 'short' => array( diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php index bf817d8c2..d24377593 100644 --- a/app/i18n/it/gen.php +++ b/app/i18n/it/gen.php @@ -161,6 +161,7 @@ return array( 'email' => 'Email', 'facebook' => 'Facebook', 'g+' => 'Google+', + 'movim' => 'Movim', 'print' => 'Stampa', 'shaarli' => 'Shaarli', 'twitter' => 'Twitter', -- cgit v1.2.3