Просмотр исходного кода

Update the i18n system.

Follow recommendations from https://github.com/FreshRSS/FreshRSS/issues/334
Marien Fressinaud 11 лет назад
Родитель
Сommit
aa232d8fd5

+ 0 - 533
app/i18n/en.php

@@ -1,533 +0,0 @@
-<?php
- return 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',
-  'about' => 'About',
-  'about_freshrss' => 'About FreshRSS',
-  'access_denied' => 'You don’t have permission to access this page',
-  'access_protected_feeds' => 'Connection allows to access HTTP protected RSS feeds',
-  'activate_sharing' => 'Activate sharing',
-  'actualize' => 'Actualize',
-  'add_category' => 'Add a category',
-  'add_query' => 'Add a query',
-  'add_rss_feed' => 'Add a RSS feed',
-  'admin.check_install.cache.nok' => 'Check permissions on <em>./data/cache</em> directory. HTTP server must have rights to write into',
-  'admin.check_install.cache.ok' => 'Permissions on cache directory are good.',
-  'admin.check_install.categories.nok' => 'Category table is bad configured.',
-  'admin.check_install.categories.ok' => 'Category table is ok.',
-  'admin.check_install.connection.nok' => 'Connection to the database cannot being established.',
-  'admin.check_install.connection.ok' => 'Connection to the database is ok.',
-  'admin.check_install.ctype.nok' => 'You lack a required library for character type checking (php-ctype).',
-  'admin.check_install.ctype.ok' => 'You have the required library for character type checking (ctype).',
-  'admin.check_install.curl.nok' => 'You lack cURL (php5-curl package).',
-  'admin.check_install.curl.ok' => 'You have cURL extension.',
-  'admin.check_install.data.nok' => 'Check permissions on <em>./data</em> directory. HTTP server must have rights to write into',
-  'admin.check_install.data.ok' => 'Permissions on data directory are good.',
-  'admin.check_install.database' => 'Database installation',
-  'admin.check_install.dom.nok' => 'You lack a required library to browse the DOM (php-xml package).',
-  'admin.check_install.dom.ok' => 'You have the required library to browse the DOM.',
-  'admin.check_install.entries.nok' => 'Entry table is bad configured.',
-  'admin.check_install.entries.ok' => 'Entry table is ok.',
-  'admin.check_install.favicons.nok' => 'Check permissions on <em>./data/favicons</em> directory. HTTP server must have rights to write into',
-  'admin.check_install.favicons.ok' => 'Permissions on favicons directory are good.',
-  'admin.check_install.feeds.nok' => 'Feed table is bad configured.',
-  'admin.check_install.feeds.ok' => 'Feed table is ok.',
-  'admin.check_install.files' => 'File installation',
-  'admin.check_install.json.nok' => 'You lack JSON (php5-json package).',
-  'admin.check_install.json.ok' => 'You have JSON extension.',
-  'admin.check_install.logs.nok' => 'Check permissions on <em>./data/logs</em> directory. HTTP server must have rights to write into',
-  'admin.check_install.logs.ok' => 'Permissions on logs directory are good.',
-  'admin.check_install.minz.nok' => 'You lack the Minz framework.',
-  'admin.check_install.minz.ok' => 'You have the Minz framework.',
-  'admin.check_install.pcre.nok' => 'You lack a required library for regular expressions (php-pcre).',
-  'admin.check_install.pcre.ok' => 'You have the required library for regular expressions (PCRE).',
-  'admin.check_install.pdo.nok' => 'You lack PDO or one of the supported drivers (pdo_mysql, pdo_sqlite).',
-  'admin.check_install.pdo.ok' => 'You have PDO and at least one of the supported drivers (pdo_mysql, pdo_sqlite).',
-  'admin.check_install.persona.nok' => 'Check permissions on <em>./data/persona</em> directory. HTTP server must have rights to write into',
-  'admin.check_install.persona.ok' => 'Permissions on Mozilla Persona directory are good.',
-  'admin.check_install.php' => 'PHP installation',
-  'admin.check_install.php.nok' => 'Your PHP version is %s but FreshRSS requires at least version %s.',
-  'admin.check_install.php.ok' => 'Your PHP version is %s, which is compatible with FreshRSS.',
-  'admin.check_install.tables.nok' => 'There is one or more lacking tables in the database.',
-  'admin.check_install.tables.ok' => 'Tables are existing in the database.',
-  'admin.check_install.tokens.nok' => 'Check permissions on <em>./data/tokens</em> directory. HTTP server must have rights to write into',
-  'admin.check_install.tokens.ok' => 'Permissions on tokens directory are good.',
-  'admin.check_install.zip.nok' => 'You lack ZIP extension (php5-zip package).',
-  'admin.check_install.zip.ok' => 'You have ZIP extension.',
-  'admin.users.articles_and_size' => '%s articles (%s)',
-  'administration' => 'Manage',
-  'advanced' => 'Advanced',
-  'after_onread' => 'After “mark all as read”,',
-  'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',
-  'all_feeds' => 'All feeds',
-  'allow_anonymous' => 'Allow anonymous reading of the articles of the default user (%s)',
-  'allow_anonymous_refresh' => 'Allow anonymous refresh of the articles',
-  'already_subscribed' => 'You have already subscribed to <em>%s</em>',
-  'api_enabled' => 'Allow <abbr>API</abbr> access <small>(required for mobile apps)</small>',
-  'apr' => 'apr',
-  'april' => 'Apr',
-  'archiving_configuration' => 'Archiving',
-  'archiving_configuration_help' => 'More options are available in the individual stream settings',
-  'article' => 'Article',
-  'article_icons' => 'Article icons',
-  'article_open_on_website' => 'when article is opened on its original website',
-  'article_published_on' => 'This article originally appeared on <a href="%s">%s</a>',
-  'article_published_on_author' => 'This article originally appeared on <a href="%s">%s</a> by %s',
-  'article_viewed' => 'when article is viewed',
-  'articles' => 'articles',
-  'articles_per_page' => 'Number of articles per page',
-  'articles_to_display' => 'Articles to display',
-  'ask_empty' => 'Clear?',
-  'attention' => 'Attention!',
-  'aug' => 'aug',
-  'august' => 'Aug',
-  'auth_form' => 'Web form (traditional, requires JavaScript)',
-  'auth_form_not_set' => 'A problem occured during authentication system configuration. Please retry later.',
-  'auth_form_set' => 'Form is now your default authentication system.',
-  'auth_no_password_set' => 'Administrator password hasn’t been set. This feature isn’t available.',
-  'auth_none' => 'None (dangerous)',
-  'auth_not_persona' => 'Only Persona system can be reset.',
-  'auth_persona' => 'Mozilla Persona (modern, requires JavaScript)',
-  'auth_reset' => 'Authentication reset',
-  'auth_token' => 'Authentication token',
-  'auth_type' => 'Authentication method',
-  'auth_will_reset' => 'Authentication system will be reset: a form will be used instead of Persona.',
-  'author' => 'Author',
-  'auto_load_more' => 'Load next articles at the page bottom',
-  'auto_read_when' => 'Mark article as read…',
-  'auto_share' => 'Share',
-  'auto_share_help' => 'If there is only one sharing mode, it is used. Else modes are accessible by their number.',
-  'back_to_rss_feeds' => '← Go back to your RSS feeds',
-  'bad_opml_file' => 'Your OPML file is invalid',
-  'base_url' => 'Base URL',
-  'bdd' => 'Database',
-  'bdd_conf_is_ko' => 'Verify your database information.',
-  'bdd_conf_is_ok' => 'Database configuration has been saved.',
-  'bdd_configuration' => 'Database configuration',
-  'bdd_type' => 'Type of database',
-  'before_one_day' => 'Before one day',
-  'before_one_week' => 'Before one week',
-  'before_yesterday' => 'Before yesterday',
-  'blank_to_disable' => 'Leave blank to disable',
-  'blogotext' => 'Blogotext',
-  'bookmark' => 'Subscribe (FreshRSS bookmark)',
-  'bottom_line' => 'Bottom line',
-  'bugs_reports' => 'Bugs reports',
-  'by' => 'by',
-  'by_author' => 'By <em>%s</em>',
-  'by_default' => 'By default',
-  'by_email' => 'By email',
-  'by_feed' => 'by feed',
-  'cache_is_ok' => 'Permissions on cache directory are good',
-  'can_not_be_deleted' => 'Cannot be deleted',
-  'cancel' => 'Cancel',
-  'categories' => 'Categories',
-  'categories_management' => 'Categories management',
-  'categories_updated' => 'Categories have been updated',
-  'categorize' => 'Store in a category',
-  'category' => 'Category',
-  'category_created' => 'Category %s has been created.',
-  'category_deleted' => 'Category has been deleted.',
-  'category_emptied' => 'Category has been emptied',
-  'category_empty' => 'Empty category',
-  'category_name_exists' => 'Category name already exists.',
-  'category_no_id' => 'You must precise the id of the category.',
-  'category_no_name' => 'Category name cannot be empty.',
-  'category_not_delete_default' => 'You cannot delete the default category!',
-  'category_not_exist' => 'The category does not exist!',
-  'category_number' => 'Category n°%d',
-  'category_updated' => 'Category has been updated.',
-  'change_value' => 'You should change this value by any other',
-  'checks' => 'Checks',
-  'choose_language' => 'Choose a language for FreshRSS',
-  'clear_logs' => 'Clear the logs',
-  'collapse_article' => 'Collapse',
-  'conf.users.articles_and_size' => '%s articles (%s)',
-  'configuration' => 'Configuration',
-  'configuration_updated' => 'Configuration has been updated',
-  '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!',
-  'congratulations' => 'Congratulations!',
-  'content_width' => 'Content width',
-  'create' => 'Create',
-  'create_user' => 'Create new user',
-  'credits' => 'Credits',
-  'credits_content' => 'Some design elements come from <a href="http://twitter.github.io/bootstrap/">Bootstrap</a> although FreshRSS doesn’t use this framework. <a href="https://git.gnome.org/browse/gnome-icon-theme-symbolic">Icons</a> come from <a href="https://www.gnome.org/">GNOME project</a>. <em>Open Sans</em> font police has been created by <a href="https://www.google.com/webfonts/specimen/Open+Sans">Steve Matteson</a>. Favicons are collected with <a href="https://getfavicon.appspot.com/">getFavicon API</a>. FreshRSS is based on <a href="https://github.com/marienfressinaud/MINZ">Minz</a>, a PHP framework.',
-  'css_path_on_website' => 'Articles CSS path on original website',
-  'ctype_is_nok' => 'You lack a required library for character type checking (php-ctype)',
-  'ctype_is_ok' => 'You have the required library for character type checking (ctype)',
-  'curl_is_nok' => 'You lack cURL (php5-curl package)',
-  'curl_is_ok' => 'You have version %s of cURL',
-  'current_user' => 'Current user',
-  'damn' => 'Damn!',
-  'data_is_ok' => 'Permissions on data directory are good',
-  'dec' => 'dec',
-  'december' => 'Dec',
-  'default_category' => 'Uncategorized',
-  'default_user' => 'Username of the default user <small>(maximum 16 alphanumeric characters)</small>',
-  'default_view' => 'Default view',
-  'delete' => 'Delete',
-  'delete_articles_every' => 'Remove articles after',
-  'diaspora' => 'Diaspora*',
-  'display' => 'Display',
-  'display_articles_unfolded' => 'Show articles unfolded by default',
-  'display_categories_unfolded' => 'Show categories folded by default',
-  'display_configuration' => 'Display',
-  'do_not_change_if_doubt' => 'Don’t change if you doubt about it',
-  'dom_is_nok' => 'You lack a required library to browse the DOM (php-xml package)',
-  'dom_is_ok' => 'You have the required library to browse the DOM',
-  'email' => 'Email',
-  'error_occurred' => 'An error occurred',
-  'error_occurred_update' => 'Nothing was changed',
-  'explain_token' => 'Allows to access RSS output of the default user without authentication.<br /><kbd>%s?output=rss&token=%s</kbd>',
-  'export' => 'Export',
-  'export_no_zip_extension' => 'Zip extension is not present on your server. Please try to export files one by one.',
-  'export_opml' => 'Export list of feeds (OPML)',
-  'export_starred' => 'Export your favourites',
-  'facebook' => 'Facebook',
-  'favicons_is_ok' => 'Permissions on favicons directory are good',
-  'favorite_feeds' => 'Favourites (%s)',
-  'feb' => 'feb',
-  'february' => 'Feb',
-  'feed' => 'Feed',
-  'feed_actualized' => '<em>%s</em> has been updated',
-  'feed_added' => 'RSS feed <em>%s</em> has been added',
-  'feed_deleted' => 'Feed has been deleted',
-  'feed_description' => 'Description',
-  'feed_empty' => 'This feed is empty. Please verify that it is still maintained.',
-  'feed_in_error' => 'This feed has encountered a problem. Please verify that it is always reachable then actualize it.',
-  'feed_list' => 'List of %s articles',
-  'feed_not_added' => '<em>%s</em> could not be added',
-  'feed_updated' => 'Feed has been updated',
-  'feed_url' => 'Feed URL',
-  'feed_validator' => 'Check the validity of the feed',
-  'feedback.login.error' => 'Login is invalid',
-  'feedback.login.success' => 'You are connected',
-  'feedback.logout.success' => 'You are disconnected',
-  'feedback.user_profile.updated' => 'Your profile has been modified',
-  'feeds' => 'Feeds',
-  'feeds_actualized' => 'RSS feeds have been updated',
-  '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',
-  'feeds_marked_read' => 'Feeds have been marked as read',
-  'feeds_moved_category_deleted' => 'When you delete a category, their feeds are automatically classified under <em>%s</em>.',
-  'file_cannot_be_uploaded' => 'File cannot be uploaded!',
-  'file_is_nok' => 'Check permissions on <em>%s</em> directory. HTTP server must have rights to write into',
-  'file_to_import' => 'File to import<br />(OPML, Json or Zip)',
-  'file_to_import_no_zip' => 'File to import<br />(OPML or Json)',
-  'filter' => 'Filter',
-  'finish_installation' => 'Complete installation',
-  'first' => 'First',
-  'first_article' => 'Skip to the first article',
-  'fix_errors_before' => 'Fix errors before skip to the next step.',
-  'focus_search' => 'Access search box',
-  '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',
-  'freshrss' => 'FreshRSS',
-  'freshrss_description' => 'FreshRSS is a RSS feeds aggregator to self-host like <a href="http://tontof.net/kriss/feed/">Kriss Feed</a> or <a href="http://projet.idleman.fr/leed/">Leed</a>. It is light and easy to take in hand while being powerful and configurable tool.',
-  'freshrss_installation' => 'Installation · FreshRSS',
-  'fri' => 'Fri',
-  'g+' => 'Google+',
-  'gen.menu.admin' => 'Administration',
-  'gen.menu.authentication' => 'Authentication',
-  'gen.menu.check_install' => 'Installation checking',
-  'gen.menu.user_management' => 'Manage users',
-  'gen.menu.user_profile' => 'Profile',
-  'gen.title.authentication' => 'Authentication',
-  'gen.title.check_install' => 'Installation checking',
-  'gen.title.global_view' => 'Global view',
-  'gen.title.user_management' => 'Manage users',
-  'gen.title.user_profile' => 'Profile',
-  'general_conf_is_ok' => 'General configuration has been saved.',
-  'general_configuration' => 'General configuration',
-  'github_or_email' => '<a href="https://github.com/marienfressinaud/FreshRSS/issues">on Github</a> or <a href="mailto:dev@marienfressinaud.fr">by mail</a>',
-  'global_view' => 'Global view',
-  'help' => 'Display documentation',
-  'hide_read_feeds' => 'Hide categories & feeds with no unread article (does not work with “Show all articles” configuration)',
-  'host' => 'Host',
-  'html5_notif_timeout' => 'HTML5 notification timeout',
-  'http_auth' => 'HTTP (for advanced users with HTTPS)',
-  'http_authentication' => 'HTTP Authentication',
-  'http_password' => 'HTTP password',
-  'http_referer_is_nok' => 'Please check that you are not altering your HTTP REFERER.',
-  'http_referer_is_ok' => 'Your HTTP REFERER is known and corresponds to your server.',
-  'http_username' => 'HTTP username',
-  'img_with_lazyload' => 'Use "lazy load" mode to load pictures',
-  'import' => 'Import',
-  'import_export' => 'Import / export',
-  'informations' => 'Information',
-  'install_not_deleted' => 'Something went wrong; you must delete the file <em>%s</em> manually.',
-  'installation_is_ok' => 'The installation process was successful.<br />The final step will now attempt to delete any file and database backup created during the update process.<br />You may choose to skip this step by deleting <kbd>./data/do-install.txt</kbd> manually.',
-  'installation_step' => 'Installation — step %d · FreshRSS',
-  'internal_problem_feed' => 'The RSS feed could not be added. <a href="%s">Check FressRSS logs</a> for details.',
-  'invalid_login' => 'Login is invalid',
-  'invalid_url' => 'URL <em>%s</em> is invalid',
-  'is_admin' => 'is administrator',
-  'jan' => 'jan',
-  'january' => 'Jan',
-  'javascript_for_shortcuts' => 'JavaScript must be enabled in order to use shortcuts',
-  'javascript_is_better' => 'FreshRSS is more pleasant with JavaScript enabled',
-  'javascript_should_be_activated' => 'JavaScript must be enabled',
-  'jul' => 'jul',
-  'july' => 'Jul',
-  'jump_next' => 'jump to next unread sibling (feed or category)',
-  'jun' => 'jun',
-  'june' => 'Jun',
-  'keep_history' => 'Minimum number of articles to keep',
-  'keep_logged_in' => 'Keep me logged in <small>(1 month)</small>',
-  'language' => 'Language',
-  'language_defined' => 'Language has been defined.',
-  'last' => 'Last',
-  'last_3_month' => 'Last three months',
-  'last_6_month' => 'Last six months',
-  'last_article' => 'Skip to the last article',
-  'last_month' => 'Last month',
-  'last_week' => 'Last week',
-  'last_year' => 'Last year',
-  'lead_developer' => 'Lead developer',
-  'license' => 'License',
-  'load_more' => 'Load more articles',
-  'log_is_ok' => 'Permissions on logs directory are good',
-  'login' => 'Login',
-  'login_configuration' => 'Login',
-  'login_persona_problem' => 'Connection problem with Persona?',
-  'login_required' => 'Login required:',
-  'login_with_persona' => 'Login with Persona',
-  'logout' => 'Logout',
-  'logs' => 'Logs',
-  'logs_empty' => 'Log file is empty',
-  'main_stream' => 'Main stream',
-  'mar' => 'mar',
-  'march' => 'Mar',
-  'mark_all_read' => 'Mark all as read',
-  'mark_cat_read' => 'Mark category as read',
-  'mark_favorite' => 'Mark as favourite',
-  'mark_feed_read' => 'Mark feed as read',
-  'mark_read' => 'Mark as read',
-  'may' => 'May',
-  'minz_is_nok' => 'You lack the Minz framework. You should execute <em>build.sh</em> script or <a href="https://github.com/marienfressinaud/MINZ">download it on Github</a> and install in <em>%s</em> directory the content of its <em>/lib</em> directory.',
-  'minz_is_ok' => 'You have the Minz framework',
-  'mon' => 'Mon',
-  'month' => 'months',
-  'more_information' => 'More information',
-  'n_entries_deleted' => '%d articles have been deleted',
-  'n_feeds_actualized' => '%d feeds have been updated',
-  'new_article' => 'There are new available articles, click to refresh the page.',
-  'new_category' => 'New category',
-  'newer_first' => 'Newer first',
-  'next' => 'Next',
-  'next_article' => 'Skip to the next article',
-  'next_page' => 'Skip to the next page',
-  'next_step' => 'Go to the next step',
-  'no' => 'No',
-  'no_feed_actualized' => 'No RSS feed has been updated',
-  'no_feed_to_display' => 'There is no article to show.',
-  'no_feed_to_refresh' => 'There is no feed to refresh…',
-  'no_query' => 'You haven’t created any user query yet.',
-  'no_query_filter' => 'No filter',
-  'no_rss_feed' => 'No RSS feed',
-  'no_selected_feed' => 'No feed selected.',
-  'no_update' => 'No update to apply',
-  'no_zip_extension' => 'Zip extension is not present on your server.',
-  'normal_view' => 'Normal view',
-  'not_read' => '%d unread',
-  'not_reads' => '%d unread',
-  'not_yet_implemented' => 'Not yet implemented',
-  'nothing_to_load' => 'There are no more articles',
-  'notif_body_new_articles' => 'There are \\d new articles to read on FreshRSS.',
-  'notif_title_new_articles' => 'FreshRSS: new articles!',
-  'nov' => 'nov',
-  'november' => 'Nov',
-  'number_articles' => '%d articles',
-  'number_divided_when_reader' => 'Divided by 2 in the reading view.',
-  'number_feeds' => '%d feeds',
-  'oct' => 'oct',
-  'october' => 'Oct',
-  'ok' => 'Ok!',
-  'older_first' => 'Oldest first',
-  'oops' => 'Oops!',
-  'optimization_complete' => 'Optimization complete',
-  'optimize_bdd' => 'Optimize database',
-  'optimize_todo_sometimes' => 'To do occasionally to reduce the size of the database',
-  'or' => 'or',
-  'page_not_found' => 'You are looking for a page which doesn’t exist',
-  'password' => 'Password',
-  'password_api' => 'Password API<br /><small>(e.g., for mobile apps)</small>',
-  'password_form' => 'Password<br /><small>(for the Web-form login method)</small>',
-  'pcre_is_nok' => 'You lack a required library for regular expressions (php-pcre)',
-  'pcre_is_ok' => 'You have the required library for regular expressions (PCRE)',
-  'pdo_is_nok' => 'You lack PDO or one of the supported drivers (pdo_mysql, pdo_sqlite)',
-  'pdo_is_ok' => 'You have PDO and at least one of the supported drivers (pdo_mysql, pdo_sqlite)',
-  'persona_connection_email' => 'Login mail address<br /><small>(for <a href="https://persona.org/" rel="external">Mozilla Persona</a>)</small>',
-  'persona_is_ok' => 'Permissions on Mozilla Persona directory are good',
-  'php_is_nok' => 'Your PHP version is %s but FreshRSS requires at least version %s',
-  'php_is_ok' => 'Your PHP version is %s, which is compatible with FreshRSS',
-  'prefix' => 'Table prefix',
-  'previous' => 'Previous',
-  'previous_article' => 'Skip to the previous article',
-  'previous_page' => 'Skip to the previous page',
-  'print' => 'Print',
-  'project_website' => 'Project website',
-  'public' => 'Public',
-  'publication_date' => 'Date of publication',
-  'purge_completed' => 'Purge completed (%d articles deleted)',
-  'purge_now' => 'Purge now',
-  'queries' => 'User queries',
-  'query_created' => 'Query "%s" has been created.',
-  'query_deprecated' => 'This query is no longer valid. The referenced category or feed has been deleted.',
-  'query_filter' => 'Filter applied:',
-  'query_get_all' => 'Display all articles',
-  'query_get_category' => 'Display "%s" category',
-  'query_get_favorite' => 'Display favorite articles',
-  'query_get_feed' => 'Display "%s" feed',
-  'query_number' => 'Query n°%d',
-  'query_order_asc' => 'Display oldest articles first',
-  'query_order_desc' => 'Display newest articles first',
-  'query_search' => 'Search for "%s"',
-  'query_state_0' => 'Display all articles',
-  'query_state_1' => 'Display read articles',
-  'query_state_2' => 'Display unread articles',
-  'query_state_3' => 'Display all articles',
-  'query_state_4' => 'Display favorite articles',
-  'query_state_5' => 'Display read favorite articles',
-  'query_state_6' => 'Display unread favorite articles',
-  'query_state_7' => 'Display favorite articles',
-  'query_state_8' => 'Display not favorite articles',
-  'query_state_9' => 'Display read not favorite articles',
-  'query_state_10' => 'Display unread not favorite articles',
-  'query_state_11' => 'Display not favorite articles',
-  'query_state_12' => 'Display all articles',
-  'query_state_13' => 'Display read articles',
-  'query_state_14' => 'Display unread articles',
-  'query_state_15' => 'Display all articles',
-  'random_string' => 'Random string',
-  'reader_view' => 'Reading view',
-  'reading_configuration' => 'Reading',
-  'reading_confirm' => 'Display a confirmation dialog on “mark all as read” actions',
-  'refresh' => 'Refresh',
-  'related_tags' => 'Related tags',
-  'retrieve_truncated_feeds' => 'Retrieves truncated RSS feeds (attention, requires more time!)',
-  'rss_feed_management' => 'RSS feeds management',
-  'rss_feeds_of' => 'RSS feed of %s',
-  'rss_view' => 'RSS feed',
-  'sat' => 'Sat',
-  'save' => 'Save',
-  'scroll' => 'while scrolling',
-  'search' => 'Search words or #tags',
-  'search_short' => 'Search',
-  'seconds_(0_means_no_timeout)' => 'seconds (0 means no timeout)',
-  'see_on_website' => 'See on original website',
-  'see_website' => 'See website',
-  'sep' => 'sep',
-  'september' => 'Sep',
-  'shaarli' => 'Shaarli',
-  'share' => 'Share',
-  'share_name' => 'Share name to display',
-  'share_url' => 'Share URL to use',
-  'sharing' => 'Sharing',
-  'sharing_management' => 'Sharing options management',
-  'shift_for_all_read' => '+ <code>shift</code> to mark all articles as read',
-  'shortcuts' => 'Shortcuts',
-  'shortcuts_article_action' => 'Article actions',
-  'shortcuts_navigation' => 'Navigation',
-  'shortcuts_navigation_help' => 'With the "Shift" modifier, navigation shortcuts apply on feeds.<br/>With the "Alt" modifier, navigation shortcuts apply on categories.',
-  'shortcuts_other_action' => 'Other actions',
-  'shortcuts_updated' => 'Shortcuts have been updated',
-  'show_adaptive' => 'Adjust showing',
-  'show_all_articles' => 'Show all articles',
-  'show_favorite' => 'Show only favorites',
-  'show_in_all_flux' => 'Show in main stream',
-  'show_not_favorite' => 'Show all but favorites',
-  'show_not_reads' => 'Show only unread',
-  'show_read' => 'Show only read',
-  'sort_order' => 'Sort order',
-  'starred_list' => 'List of favourite articles',
-  'stats' => 'Statistics',
-  'stats_entry_count' => 'Entry count',
-  'stats_entry_per_category' => 'Entries per category',
-  'stats_entry_per_day' => 'Entries per day (last 30 days)',
-  'stats_entry_per_day_of_week' => 'Per day of week (average: %.2f messages)',
-  'stats_entry_per_hour' => 'Per hour (average: %.2f messages)',
-  'stats_entry_per_month' => 'Per month (average: %.2f messages)',
-  'stats_entry_repartition' => 'Entries repartition',
-  'stats_feed_per_category' => 'Feeds per category',
-  'stats_idle' => 'Idle feeds',
-  'stats_main' => 'Main statistics',
-  'stats_no_idle' => 'There is no idle feed!',
-  'stats_percent_of_total' => '%% of total',
-  'stats_repartition' => 'Articles repartition',
-  'stats_top_feed' => 'Top ten feeds',
-  'status_favorites' => 'Favourites',
-  'status_read' => 'Read',
-  'status_total' => 'Total',
-  'status_unread' => 'Unread',
-  'steps' => 'Steps',
-  'sticky_post' => 'Stick the article to the top when opened',
-  'sub.categories.over_max' => 'You have reached your limit of categories (%d)',
-  'sub.feeds.over_max' => 'You have reached your limit of feeds (%d)',
-  'submit' => 'Submit',
-  'subscription_management' => 'Subscriptions management',
-  'sun' => 'Sun',
-  'theme' => 'Theme',
-  'think_to_add' => 'You may add some feeds.',
-  'this_is_the_end' => 'This is the end',
-  'thu' => 'Thu',
-  'title' => 'Title',
-  'today' => 'Today',
-  'top_line' => 'Top line',
-  'truncate' => 'Delete all articles',
-  'ttl' => 'Do not automatically refresh more often than',
-  'tue' => 'Tue',
-  'twitter' => 'Twitter',
-  'unsafe_autologin' => 'Allow unsafe automatic login using the format: ',
-  'update' => 'Update',
-  'update_apply' => 'Apply',
-  'update_can_apply' => 'An update is available.',
-  'update_check' => 'Check for new updates',
-  'update_end' => 'Update process is completed, now you can go to the final step.',
-  'update_finished' => 'Update completed!',
-  'update_last' => 'Last verification: %s',
-  'update_long' => 'This can take a long time, depending on the size of your database. You may have to wait for this page to time out (~5 minutes) and then refresh this page.',
-  'update_problem' => 'The update process has encountered an error: %s',
-  'update_server_not_found' => 'Update server cannot be found. [%s]',
-  'update_start' => 'Start update process',
-  'update_system' => 'Update system',
-  'updated' => 'Modifications have been updated',
-  'upon_reception' => 'upon reception of the article',
-  'user_created' => 'User %s has been created',
-  'user_deleted' => 'User %s has been deleted',
-  '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.',
-  'username' => 'Username',
-  'username_admin' => 'Administrator username',
-  'users' => 'Users',
-  'users_list' => 'List of users',
-  'version' => 'Version',
-  'version_update' => 'Update',
-  'wallabag' => 'wallabag',
-  'website' => 'Website',
-  'website_url' => 'Website URL',
-  'wed' => 'Wed',
-  'width_large' => 'Large',
-  'width_medium' => 'Medium',
-  'width_no_limit' => 'No limit',
-  'width_thin' => 'Thin',
-  'yes' => 'Yes',
-  'yesterday' => 'Yesterday',
-  'your_diaspora_pod' => 'Your Diaspora* pod',
-  'your_favorites' => 'Your favourites',
-  'your_rss_feeds' => 'Your RSS feeds',
-  'your_shaarli' => 'Your Shaarli',
-  'your_wallabag' => 'Your wallabag',
-  'zip_error' => 'An error occured during Zip import.',
-);

+ 92 - 0
app/i18n/en/admin.php

@@ -0,0 +1,92 @@
+<?php
+
+return array(
+	'check_install' => array(
+		'cache' => array(
+			'nok' => 'Check permissions on <em>./data/cache</em> directory. HTTP server must have rights to write into',
+			'ok' => 'Permissions on cache directory are good.',
+		),
+		'categories' => array(
+			'nok' => 'Category table is bad configured.',
+			'ok' => 'Category table is ok.',
+		),
+		'connection' => array(
+			'nok' => 'Connection to the database cannot being established.',
+			'ok' => 'Connection to the database is ok.',
+		),
+		'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 <em>./data</em> directory. HTTP server must have rights to write into',
+			'ok' => 'Permissions on data directory are good.',
+		),
+		'database' => 'Database installation',
+		'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.',
+		),
+		'entries' => array(
+			'nok' => 'Entry table is bad configured.',
+			'ok' => 'Entry table is ok.',
+		),
+		'favicons' => array(
+			'nok' => 'Check permissions on <em>./data/favicons</em> 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.',
+		),
+		'logs' => array(
+			'nok' => 'Check permissions on <em>./data/logs</em> directory. HTTP server must have rights to write into',
+			'ok' => 'Permissions on logs directory are good.',
+		),
+		'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 <em>./data/persona</em> 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.',
+		),
+		'tokens' => array(
+			'nok' => 'Check permissions on <em>./data/tokens</em> directory. HTTP server must have rights to write into',
+			'ok' => 'Permissions on tokens directory are good.',
+		),
+		'zip' => array(
+			'nok' => 'You lack ZIP extension (php5-zip package).',
+			'ok' => 'You have ZIP extension.',
+		),
+	),
+	'users' => array(
+		'articles_and_size' => '%s articles (%s)',
+	),
+);

+ 7 - 0
app/i18n/en/conf.php

@@ -0,0 +1,7 @@
+<?php
+
+return array(
+	'users' => array(
+		'articles_and_size' => '%s articles (%s)',
+	),
+);

+ 14 - 0
app/i18n/en/feedback.php

@@ -0,0 +1,14 @@
+<?php
+
+return array(
+	'login' => array(
+		'error' => 'Login is invalid',
+		'success' => 'You are connected',
+	),
+	'logout' => array(
+		'success' => 'You are disconnected',
+	),
+	'user_profile' => array(
+		'updated' => 'Your profile has been modified',
+	),
+);

+ 487 - 0
app/i18n/en/gen.php

@@ -0,0 +1,487 @@
+<?php
+
+return 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',
+	'about' => 'About',
+	'about_freshrss' => 'About FreshRSS',
+	'access_denied' => 'You don’t have permission to access this page',
+	'access_protected_feeds' => 'Connection allows to access HTTP protected RSS feeds',
+	'activate_sharing' => 'Activate sharing',
+	'actualize' => 'Actualize',
+	'add_category' => 'Add a category',
+	'add_query' => 'Add a query',
+	'add_rss_feed' => 'Add a RSS feed',
+	'administration' => 'Manage',
+	'advanced' => 'Advanced',
+	'after_onread' => 'After “mark all as read”,',
+	'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',
+	'all_feeds' => 'All feeds',
+	'allow_anonymous' => 'Allow anonymous reading of the articles of the default user (%s)',
+	'allow_anonymous_refresh' => 'Allow anonymous refresh of the articles',
+	'already_subscribed' => 'You have already subscribed to <em>%s</em>',
+	'api_enabled' => 'Allow <abbr>API</abbr> access <small>(required for mobile apps)</small>',
+	'apr' => 'apr',
+	'april' => 'Apr',
+	'archiving_configuration' => 'Archiving',
+	'archiving_configuration_help' => 'More options are available in the individual stream settings',
+	'article' => 'Article',
+	'article_icons' => 'Article icons',
+	'article_open_on_website' => 'when article is opened on its original website',
+	'article_published_on' => 'This article originally appeared on <a href="%s">%s</a>',
+	'article_published_on_author' => 'This article originally appeared on <a href="%s">%s</a> by %s',
+	'article_viewed' => 'when article is viewed',
+	'articles' => 'articles',
+	'articles_per_page' => 'Number of articles per page',
+	'articles_to_display' => 'Articles to display',
+	'ask_empty' => 'Clear?',
+	'attention' => 'Attention!',
+	'aug' => 'aug',
+	'august' => 'Aug',
+	'auth_form' => 'Web form (traditional, requires JavaScript)',
+	'auth_form_not_set' => 'A problem occured during authentication system configuration. Please retry later.',
+	'auth_form_set' => 'Form is now your default authentication system.',
+	'auth_no_password_set' => 'Administrator password hasn’t been set. This feature isn’t available.',
+	'auth_none' => 'None (dangerous)',
+	'auth_not_persona' => 'Only Persona system can be reset.',
+	'auth_persona' => 'Mozilla Persona (modern, requires JavaScript)',
+	'auth_reset' => 'Authentication reset',
+	'auth_token' => 'Authentication token',
+	'auth_type' => 'Authentication method',
+	'auth_will_reset' => 'Authentication system will be reset: a form will be used instead of Persona.',
+	'author' => 'Author',
+	'auto_load_more' => 'Load next articles at the page bottom',
+	'auto_read_when' => 'Mark article as read…',
+	'auto_share' => 'Share',
+	'auto_share_help' => 'If there is only one sharing mode, it is used. Else modes are accessible by their number.',
+	'back_to_rss_feeds' => '← Go back to your RSS feeds',
+	'bad_opml_file' => 'Your OPML file is invalid',
+	'base_url' => 'Base URL',
+	'bdd' => 'Database',
+	'bdd_conf_is_ko' => 'Verify your database information.',
+	'bdd_conf_is_ok' => 'Database configuration has been saved.',
+	'bdd_configuration' => 'Database configuration',
+	'bdd_type' => 'Type of database',
+	'before_one_day' => 'Before one day',
+	'before_one_week' => 'Before one week',
+	'before_yesterday' => 'Before yesterday',
+	'blank_to_disable' => 'Leave blank to disable',
+	'blogotext' => 'Blogotext',
+	'bookmark' => 'Subscribe (FreshRSS bookmark)',
+	'bottom_line' => 'Bottom line',
+	'bugs_reports' => 'Bugs reports',
+	'by' => 'by',
+	'by_author' => 'By <em>%s</em>',
+	'by_default' => 'By default',
+	'by_email' => 'By email',
+	'by_feed' => 'by feed',
+	'cache_is_ok' => 'Permissions on cache directory are good',
+	'can_not_be_deleted' => 'Cannot be deleted',
+	'cancel' => 'Cancel',
+	'categories' => 'Categories',
+	'categories_management' => 'Categories management',
+	'categories_updated' => 'Categories have been updated',
+	'categorize' => 'Store in a category',
+	'category' => 'Category',
+	'category_created' => 'Category %s has been created.',
+	'category_deleted' => 'Category has been deleted.',
+	'category_emptied' => 'Category has been emptied',
+	'category_empty' => 'Empty category',
+	'category_name_exists' => 'Category name already exists.',
+	'category_no_id' => 'You must precise the id of the category.',
+	'category_no_name' => 'Category name cannot be empty.',
+	'category_not_delete_default' => 'You cannot delete the default category!',
+	'category_not_exist' => 'The category does not exist!',
+	'category_number' => 'Category n°%d',
+	'category_updated' => 'Category has been updated.',
+	'change_value' => 'You should change this value by any other',
+	'checks' => 'Checks',
+	'choose_language' => 'Choose a language for FreshRSS',
+	'clear_logs' => 'Clear the logs',
+	'collapse_article' => 'Collapse',
+	'configuration' => 'Configuration',
+	'configuration_updated' => 'Configuration has been updated',
+	'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!',
+	'congratulations' => 'Congratulations!',
+	'content_width' => 'Content width',
+	'create' => 'Create',
+	'create_user' => 'Create new user',
+	'credits' => 'Credits',
+	'credits_content' => 'Some design elements come from <a href="http://twitter.github.io/bootstrap/">Bootstrap</a> although FreshRSS doesn’t use this framework. <a href="https://git.gnome.org/browse/gnome-icon-theme-symbolic">Icons</a> come from <a href="https://www.gnome.org/">GNOME project</a>. <em>Open Sans</em> font police has been created by <a href="https://www.google.com/webfonts/specimen/Open+Sans">Steve Matteson</a>. Favicons are collected with <a href="https://getfavicon.appspot.com/">getFavicon API</a>. FreshRSS is based on <a href="https://github.com/marienfressinaud/MINZ">Minz</a>, a PHP framework.',
+	'css_path_on_website' => 'Articles CSS path on original website',
+	'ctype_is_nok' => 'You lack a required library for character type checking (php-ctype)',
+	'ctype_is_ok' => 'You have the required library for character type checking (ctype)',
+	'curl_is_nok' => 'You lack cURL (php5-curl package)',
+	'curl_is_ok' => 'You have version %s of cURL',
+	'current_user' => 'Current user',
+	'damn' => 'Damn!',
+	'data_is_ok' => 'Permissions on data directory are good',
+	'dec' => 'dec',
+	'december' => 'Dec',
+	'default_category' => 'Uncategorized',
+	'default_user' => 'Username of the default user <small>(maximum 16 alphanumeric characters)</small>',
+	'default_view' => 'Default view',
+	'delete' => 'Delete',
+	'delete_articles_every' => 'Remove articles after',
+	'diaspora' => 'Diaspora*',
+	'display' => 'Display',
+	'display_articles_unfolded' => 'Show articles unfolded by default',
+	'display_categories_unfolded' => 'Show categories folded by default',
+	'display_configuration' => 'Display',
+	'do_not_change_if_doubt' => 'Don’t change if you doubt about it',
+	'dom_is_nok' => 'You lack a required library to browse the DOM (php-xml package)',
+	'dom_is_ok' => 'You have the required library to browse the DOM',
+	'email' => 'Email',
+	'error_occurred' => 'An error occurred',
+	'error_occurred_update' => 'Nothing was changed',
+	'explain_token' => 'Allows to access RSS output of the default user without authentication.<br /><kbd>%s?output=rss&token=%s</kbd>',
+	'export' => 'Export',
+	'export_no_zip_extension' => 'Zip extension is not present on your server. Please try to export files one by one.',
+	'export_opml' => 'Export list of feeds (OPML)',
+	'export_starred' => 'Export your favourites',
+	'facebook' => 'Facebook',
+	'favicons_is_ok' => 'Permissions on favicons directory are good',
+	'favorite_feeds' => 'Favourites (%s)',
+	'feb' => 'feb',
+	'february' => 'Feb',
+	'feed' => 'Feed',
+	'feed_actualized' => '<em>%s</em> has been updated',
+	'feed_added' => 'RSS feed <em>%s</em> has been added',
+	'feed_deleted' => 'Feed has been deleted',
+	'feed_description' => 'Description',
+	'feed_empty' => 'This feed is empty. Please verify that it is still maintained.',
+	'feed_in_error' => 'This feed has encountered a problem. Please verify that it is always reachable then actualize it.',
+	'feed_list' => 'List of %s articles',
+	'feed_not_added' => '<em>%s</em> could not be added',
+	'feed_updated' => 'Feed has been updated',
+	'feed_url' => 'Feed URL',
+	'feed_validator' => 'Check the validity of the feed',
+	'feeds' => 'Feeds',
+	'feeds_actualized' => 'RSS feeds have been updated',
+	'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',
+	'feeds_marked_read' => 'Feeds have been marked as read',
+	'feeds_moved_category_deleted' => 'When you delete a category, their feeds are automatically classified under <em>%s</em>.',
+	'file_cannot_be_uploaded' => 'File cannot be uploaded!',
+	'file_is_nok' => 'Check permissions on <em>%s</em> directory. HTTP server must have rights to write into',
+	'file_to_import' => 'File to import<br />(OPML, Json or Zip)',
+	'file_to_import_no_zip' => 'File to import<br />(OPML or Json)',
+	'filter' => 'Filter',
+	'finish_installation' => 'Complete installation',
+	'first' => 'First',
+	'first_article' => 'Skip to the first article',
+	'fix_errors_before' => 'Fix errors before skip to the next step.',
+	'focus_search' => 'Access search box',
+	'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',
+	'freshrss' => 'FreshRSS',
+	'freshrss_description' => 'FreshRSS is a RSS feeds aggregator to self-host like <a href="http://tontof.net/kriss/feed/">Kriss Feed</a> or <a href="http://projet.idleman.fr/leed/">Leed</a>. It is light and easy to take in hand while being powerful and configurable tool.',
+	'freshrss_installation' => 'Installation · FreshRSS',
+	'fri' => 'Fri',
+	'g+' => 'Google+',
+	'menu' => array(
+		'admin' => 'Administration',
+		'authentication' => 'Authentication',
+		'check_install' => 'Installation checking',
+		'user_management' => 'Manage users',
+		'user_profile' => 'Profile',
+	),
+	'title' => array(
+		'_' => 'Title',
+		'authentication' => 'Authentication',
+		'check_install' => 'Installation checking',
+		'global_view' => 'Global view',
+		'user_management' => 'Manage users',
+		'user_profile' => 'Profile',
+	),
+	'general_conf_is_ok' => 'General configuration has been saved.',
+	'general_configuration' => 'General configuration',
+	'github_or_email' => '<a href="https://github.com/marienfressinaud/FreshRSS/issues">on Github</a> or <a href="mailto:dev@marienfressinaud.fr">by mail</a>',
+	'global_view' => 'Global view',
+	'help' => 'Display documentation',
+	'hide_read_feeds' => 'Hide categories & feeds with no unread article (does not work with “Show all articles” configuration)',
+	'host' => 'Host',
+	'html5_notif_timeout' => 'HTML5 notification timeout',
+	'http_auth' => 'HTTP (for advanced users with HTTPS)',
+	'http_authentication' => 'HTTP Authentication',
+	'http_password' => 'HTTP password',
+	'http_referer_is_nok' => 'Please check that you are not altering your HTTP REFERER.',
+	'http_referer_is_ok' => 'Your HTTP REFERER is known and corresponds to your server.',
+	'http_username' => 'HTTP username',
+	'img_with_lazyload' => 'Use "lazy load" mode to load pictures',
+	'import' => 'Import',
+	'import_export' => 'Import / export',
+	'informations' => 'Information',
+	'install_not_deleted' => 'Something went wrong; you must delete the file <em>%s</em> manually.',
+	'installation_is_ok' => 'The installation process was successful.<br />The final step will now attempt to delete any file and database backup created during the update process.<br />You may choose to skip this step by deleting <kbd>./data/do-install.txt</kbd> manually.',
+	'installation_step' => 'Installation — step %d · FreshRSS',
+	'internal_problem_feed' => 'The RSS feed could not be added. <a href="%s">Check FressRSS logs</a> for details.',
+	'invalid_login' => 'Login is invalid',
+	'invalid_url' => 'URL <em>%s</em> is invalid',
+	'is_admin' => 'is administrator',
+	'jan' => 'jan',
+	'january' => 'Jan',
+	'javascript_for_shortcuts' => 'JavaScript must be enabled in order to use shortcuts',
+	'javascript_is_better' => 'FreshRSS is more pleasant with JavaScript enabled',
+	'javascript_should_be_activated' => 'JavaScript must be enabled',
+	'jul' => 'jul',
+	'july' => 'Jul',
+	'jump_next' => 'jump to next unread sibling (feed or category)',
+	'jun' => 'jun',
+	'june' => 'Jun',
+	'keep_history' => 'Minimum number of articles to keep',
+	'keep_logged_in' => 'Keep me logged in <small>(1 month)</small>',
+	'language' => 'Language',
+	'language_defined' => 'Language has been defined.',
+	'last' => 'Last',
+	'last_3_month' => 'Last three months',
+	'last_6_month' => 'Last six months',
+	'last_article' => 'Skip to the last article',
+	'last_month' => 'Last month',
+	'last_week' => 'Last week',
+	'last_year' => 'Last year',
+	'lead_developer' => 'Lead developer',
+	'license' => 'License',
+	'load_more' => 'Load more articles',
+	'log_is_ok' => 'Permissions on logs directory are good',
+	'login' => 'Login',
+	'login_configuration' => 'Login',
+	'login_persona_problem' => 'Connection problem with Persona?',
+	'login_required' => 'Login required:',
+	'login_with_persona' => 'Login with Persona',
+	'logout' => 'Logout',
+	'logs' => 'Logs',
+	'logs_empty' => 'Log file is empty',
+	'main_stream' => 'Main stream',
+	'mar' => 'mar',
+	'march' => 'Mar',
+	'mark_all_read' => 'Mark all as read',
+	'mark_cat_read' => 'Mark category as read',
+	'mark_favorite' => 'Mark as favourite',
+	'mark_feed_read' => 'Mark feed as read',
+	'mark_read' => 'Mark as read',
+	'may' => 'May',
+	'minz_is_nok' => 'You lack the Minz framework. You should execute <em>build.sh</em> script or <a href="https://github.com/marienfressinaud/MINZ">download it on Github</a> and install in <em>%s</em> directory the content of its <em>/lib</em> directory.',
+	'minz_is_ok' => 'You have the Minz framework',
+	'mon' => 'Mon',
+	'month' => 'months',
+	'more_information' => 'More information',
+	'n_entries_deleted' => '%d articles have been deleted',
+	'n_feeds_actualized' => '%d feeds have been updated',
+	'new_article' => 'There are new available articles, click to refresh the page.',
+	'new_category' => 'New category',
+	'newer_first' => 'Newer first',
+	'next' => 'Next',
+	'next_article' => 'Skip to the next article',
+	'next_page' => 'Skip to the next page',
+	'next_step' => 'Go to the next step',
+	'no' => 'No',
+	'no_feed_actualized' => 'No RSS feed has been updated',
+	'no_feed_to_display' => 'There is no article to show.',
+	'no_feed_to_refresh' => 'There is no feed to refresh…',
+	'no_query' => 'You haven’t created any user query yet.',
+	'no_query_filter' => 'No filter',
+	'no_rss_feed' => 'No RSS feed',
+	'no_selected_feed' => 'No feed selected.',
+	'no_update' => 'No update to apply',
+	'no_zip_extension' => 'Zip extension is not present on your server.',
+	'normal_view' => 'Normal view',
+	'not_read' => '%d unread',
+	'not_reads' => '%d unread',
+	'not_yet_implemented' => 'Not yet implemented',
+	'nothing_to_load' => 'There are no more articles',
+	'notif_body_new_articles' => 'There are \\d new articles to read on FreshRSS.',
+	'notif_title_new_articles' => 'FreshRSS: new articles!',
+	'nov' => 'nov',
+	'november' => 'Nov',
+	'number_articles' => '%d articles',
+	'number_divided_when_reader' => 'Divided by 2 in the reading view.',
+	'number_feeds' => '%d feeds',
+	'oct' => 'oct',
+	'october' => 'Oct',
+	'ok' => 'Ok!',
+	'older_first' => 'Oldest first',
+	'oops' => 'Oops!',
+	'optimization_complete' => 'Optimization complete',
+	'optimize_bdd' => 'Optimize database',
+	'optimize_todo_sometimes' => 'To do occasionally to reduce the size of the database',
+	'or' => 'or',
+	'page_not_found' => 'You are looking for a page which doesn’t exist',
+	'password' => 'Password',
+	'password_api' => 'Password API<br /><small>(e.g., for mobile apps)</small>',
+	'password_form' => 'Password<br /><small>(for the Web-form login method)</small>',
+	'pcre_is_nok' => 'You lack a required library for regular expressions (php-pcre)',
+	'pcre_is_ok' => 'You have the required library for regular expressions (PCRE)',
+	'pdo_is_nok' => 'You lack PDO or one of the supported drivers (pdo_mysql, pdo_sqlite)',
+	'pdo_is_ok' => 'You have PDO and at least one of the supported drivers (pdo_mysql, pdo_sqlite)',
+	'persona_connection_email' => 'Login mail address<br /><small>(for <a href="https://persona.org/" rel="external">Mozilla Persona</a>)</small>',
+	'persona_is_ok' => 'Permissions on Mozilla Persona directory are good',
+	'php_is_nok' => 'Your PHP version is %s but FreshRSS requires at least version %s',
+	'php_is_ok' => 'Your PHP version is %s, which is compatible with FreshRSS',
+	'prefix' => 'Table prefix',
+	'previous' => 'Previous',
+	'previous_article' => 'Skip to the previous article',
+	'previous_page' => 'Skip to the previous page',
+	'print' => 'Print',
+	'project_website' => 'Project website',
+	'public' => 'Public',
+	'publication_date' => 'Date of publication',
+	'purge_completed' => 'Purge completed (%d articles deleted)',
+	'purge_now' => 'Purge now',
+	'queries' => 'User queries',
+	'query_created' => 'Query "%s" has been created.',
+	'query_deprecated' => 'This query is no longer valid. The referenced category or feed has been deleted.',
+	'query_filter' => 'Filter applied:',
+	'query_get_all' => 'Display all articles',
+	'query_get_category' => 'Display "%s" category',
+	'query_get_favorite' => 'Display favorite articles',
+	'query_get_feed' => 'Display "%s" feed',
+	'query_number' => 'Query n°%d',
+	'query_order_asc' => 'Display oldest articles first',
+	'query_order_desc' => 'Display newest articles first',
+	'query_search' => 'Search for "%s"',
+	'query_state_0' => 'Display all articles',
+	'query_state_1' => 'Display read articles',
+	'query_state_2' => 'Display unread articles',
+	'query_state_3' => 'Display all articles',
+	'query_state_4' => 'Display favorite articles',
+	'query_state_5' => 'Display read favorite articles',
+	'query_state_6' => 'Display unread favorite articles',
+	'query_state_7' => 'Display favorite articles',
+	'query_state_8' => 'Display not favorite articles',
+	'query_state_9' => 'Display read not favorite articles',
+	'query_state_10' => 'Display unread not favorite articles',
+	'query_state_11' => 'Display not favorite articles',
+	'query_state_12' => 'Display all articles',
+	'query_state_13' => 'Display read articles',
+	'query_state_14' => 'Display unread articles',
+	'query_state_15' => 'Display all articles',
+	'random_string' => 'Random string',
+	'reader_view' => 'Reading view',
+	'reading_configuration' => 'Reading',
+	'reading_confirm' => 'Display a confirmation dialog on “mark all as read” actions',
+	'refresh' => 'Refresh',
+	'related_tags' => 'Related tags',
+	'retrieve_truncated_feeds' => 'Retrieves truncated RSS feeds (attention, requires more time!)',
+	'rss_feed_management' => 'RSS feeds management',
+	'rss_feeds_of' => 'RSS feed of %s',
+	'rss_view' => 'RSS feed',
+	'sat' => 'Sat',
+	'save' => 'Save',
+	'scroll' => 'while scrolling',
+	'search' => 'Search words or #tags',
+	'search_short' => 'Search',
+	'seconds_(0_means_no_timeout)' => 'seconds (0 means no timeout)',
+	'see_on_website' => 'See on original website',
+	'see_website' => 'See website',
+	'sep' => 'sep',
+	'september' => 'Sep',
+	'shaarli' => 'Shaarli',
+	'share' => 'Share',
+	'share_name' => 'Share name to display',
+	'share_url' => 'Share URL to use',
+	'sharing' => 'Sharing',
+	'sharing_management' => 'Sharing options management',
+	'shift_for_all_read' => '+ <code>shift</code> to mark all articles as read',
+	'shortcuts' => 'Shortcuts',
+	'shortcuts_article_action' => 'Article actions',
+	'shortcuts_navigation' => 'Navigation',
+	'shortcuts_navigation_help' => 'With the "Shift" modifier, navigation shortcuts apply on feeds.<br/>With the "Alt" modifier, navigation shortcuts apply on categories.',
+	'shortcuts_other_action' => 'Other actions',
+	'shortcuts_updated' => 'Shortcuts have been updated',
+	'show_adaptive' => 'Adjust showing',
+	'show_all_articles' => 'Show all articles',
+	'show_favorite' => 'Show only favorites',
+	'show_in_all_flux' => 'Show in main stream',
+	'show_not_favorite' => 'Show all but favorites',
+	'show_not_reads' => 'Show only unread',
+	'show_read' => 'Show only read',
+	'sort_order' => 'Sort order',
+	'starred_list' => 'List of favourite articles',
+	'stats' => 'Statistics',
+	'stats_entry_count' => 'Entry count',
+	'stats_entry_per_category' => 'Entries per category',
+	'stats_entry_per_day' => 'Entries per day (last 30 days)',
+	'stats_entry_per_day_of_week' => 'Per day of week (average: %.2f messages)',
+	'stats_entry_per_hour' => 'Per hour (average: %.2f messages)',
+	'stats_entry_per_month' => 'Per month (average: %.2f messages)',
+	'stats_entry_repartition' => 'Entries repartition',
+	'stats_feed_per_category' => 'Feeds per category',
+	'stats_idle' => 'Idle feeds',
+	'stats_main' => 'Main statistics',
+	'stats_no_idle' => 'There is no idle feed!',
+	'stats_percent_of_total' => '%% of total',
+	'stats_repartition' => 'Articles repartition',
+	'stats_top_feed' => 'Top ten feeds',
+	'status_favorites' => 'Favourites',
+	'status_read' => 'Read',
+	'status_total' => 'Total',
+	'status_unread' => 'Unread',
+	'steps' => 'Steps',
+	'sticky_post' => 'Stick the article to the top when opened',
+	'submit' => 'Submit',
+	'subscription_management' => 'Subscriptions management',
+	'sun' => 'Sun',
+	'theme' => 'Theme',
+	'think_to_add' => 'You may add some feeds.',
+	'this_is_the_end' => 'This is the end',
+	'thu' => 'Thu',
+	'today' => 'Today',
+	'top_line' => 'Top line',
+	'truncate' => 'Delete all articles',
+	'ttl' => 'Do not automatically refresh more often than',
+	'tue' => 'Tue',
+	'twitter' => 'Twitter',
+	'unsafe_autologin' => 'Allow unsafe automatic login using the format: ',
+	'update' => 'Update',
+	'update_apply' => 'Apply',
+	'update_can_apply' => 'An update is available.',
+	'update_check' => 'Check for new updates',
+	'update_end' => 'Update process is completed, now you can go to the final step.',
+	'update_finished' => 'Update completed!',
+	'update_last' => 'Last verification: %s',
+	'update_long' => 'This can take a long time, depending on the size of your database. You may have to wait for this page to time out (~5 minutes) and then refresh this page.',
+	'update_problem' => 'The update process has encountered an error: %s',
+	'update_server_not_found' => 'Update server cannot be found. [%s]',
+	'update_start' => 'Start update process',
+	'update_system' => 'Update system',
+	'updated' => 'Modifications have been updated',
+	'upon_reception' => 'upon reception of the article',
+	'user_created' => 'User %s has been created',
+	'user_deleted' => 'User %s has been deleted',
+	'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.',
+	'username' => 'Username',
+	'username_admin' => 'Administrator username',
+	'users' => 'Users',
+	'users_list' => 'List of users',
+	'version' => 'Version',
+	'version_update' => 'Update',
+	'wallabag' => 'wallabag',
+	'website' => 'Website',
+	'website_url' => 'Website URL',
+	'wed' => 'Wed',
+	'width_large' => 'Large',
+	'width_medium' => 'Medium',
+	'width_no_limit' => 'No limit',
+	'width_thin' => 'Thin',
+	'yes' => 'Yes',
+	'yesterday' => 'Yesterday',
+	'your_diaspora_pod' => 'Your Diaspora* pod',
+	'your_favorites' => 'Your favourites',
+	'your_rss_feeds' => 'Your RSS feeds',
+	'your_shaarli' => 'Your Shaarli',
+	'your_wallabag' => 'Your wallabag',
+	'zip_error' => 'An error occured during Zip import.',
+);

+ 5 - 0
app/i18n/en/index.php

@@ -0,0 +1,5 @@
+<?php
+
+return array(
+
+);

+ 5 - 0
app/i18n/en/install.php

@@ -0,0 +1,5 @@
+<?php
+
+return array(
+
+);

+ 10 - 0
app/i18n/en/sub.php

@@ -0,0 +1,10 @@
+<?php
+
+return array(
+	'categories' => array(
+		'over_max' => 'You have reached your limit of categories (%d)',
+	),
+	'feeds' => array(
+		'over_max' => 'You have reached your limit of feeds (%d)',
+	),
+);

+ 0 - 533
app/i18n/fr.php

@@ -1,533 +0,0 @@
-<?php
- return array (
-  'Apr' => '\\a\\v\\r\\i\\l',
-  'Aug' => '\\a\\o\\û\\t',
-  'Dec' => '\\d\\é\\c\\e\\m\\b\\r\\e',
-  'Feb' => '\\f\\é\\v\\r\\i\\e\\r',
-  'Jan' => '\\j\\a\\n\\v\\i\\e\\r',
-  'Jul' => '\\j\\u\\i\\l\\l\\e\\t',
-  'Jun' => '\\j\\u\\i\\n',
-  'Mar' => '\\m\\a\\r\\s',
-  'May' => '\\m\\a\\i',
-  'Nov' => '\\n\\o\\v\\e\\m\\b\\r\\e',
-  'Oct' => '\\o\\c\\t\\o\\b\\r\\e',
-  'Sep' => '\\s\\e\\p\\t\\e\\m\\b\\r\\e',
-  'about' => 'À propos',
-  'about_freshrss' => 'À propos de FreshRSS',
-  'access_denied' => 'Vous n’avez pas le droit d’accéder à cette page !',
-  'access_protected_feeds' => 'La connexion permet d’accéder aux flux protégés par une authentification HTTP.',
-  'activate_sharing' => 'Activer le partage',
-  'actualize' => 'Actualiser',
-  'add_category' => 'Ajouter une catégorie',
-  'add_query' => 'Créer un filtre',
-  'add_rss_feed' => 'Ajouter un flux RSS',
-  'admin.check_install.cache.nok' => 'Veuillez vérifier les droits sur le répertoire <em>./data/cache</em>. Le serveur HTTP doit être capable d’écrire dedans',
-  'admin.check_install.cache.ok' => 'Les droits sur le répertoire de cache sont bons.',
-  'admin.check_install.categories.nok' => 'La table category est mal configurée.',
-  'admin.check_install.categories.ok' => 'La table category est bien configurée.',
-  'admin.check_install.connection.nok' => 'La connexion à la base de données est impossible.',
-  'admin.check_install.connection.ok' => 'La connexion à la base de données est bonne.',
-  'admin.check_install.ctype.nok' => 'Il manque une librairie pour la vérification des types de caractères (php-ctype).',
-  'admin.check_install.ctype.ok' => 'Vous disposez du nécessaire pour la vérification des types de caractères (ctype).',
-  'admin.check_install.curl.nok' => 'Vous ne disposez pas de cURL (paquet php5-curl).',
-  'admin.check_install.curl.ok' => 'Vous disposez de cURL.',
-  'admin.check_install.data.nok' => 'Veuillez vérifier les droits sur le répertoire <em>./data</em>. Le serveur HTTP doit être capable d’écrire dedans',
-  'admin.check_install.data.ok' => 'Les droits sur le répertoire de data sont bons.',
-  'admin.check_install.database' => 'Installation de la base de données',
-  'admin.check_install.dom.nok' => 'Il manque une librairie pour parcourir le DOM (paquet php-xml).',
-  'admin.check_install.dom.ok' => 'Vous disposez du nécessaire pour parcourir le DOM.',
-  'admin.check_install.entries.nok' => 'La table entry est mal configurée.',
-  'admin.check_install.entries.ok' => 'La table entry est bien configurée.',
-  'admin.check_install.favicons.nok' => 'Veuillez vérifier les droits sur le répertoire <em>./data/favicons</em>. Le serveur HTTP doit être capable d’écrire dedans',
-  'admin.check_install.favicons.ok' => 'Les droits sur le répertoire des favicons sont bons.',
-  'admin.check_install.feeds.nok' => 'La table feed est mal configurée.',
-  'admin.check_install.feeds.ok' => 'La table feed est bien configurée.',
-  'admin.check_install.files' => 'Installation des fichiers',
-  'admin.check_install.json.nok' => 'Vous ne disposez pas de JSON (paquet php5-json).',
-  'admin.check_install.json.ok' => 'Vous disposez de l\'extension JSON.',
-  'admin.check_install.logs.nok' => 'Veuillez vérifier les droits sur le répertoire <em>./data/logs</em>. Le serveur HTTP doit être capable d’écrire dedans',
-  'admin.check_install.logs.ok' => 'Les droits sur le répertoire des logs sont bons.',
-  'admin.check_install.minz.nok' => 'Vous ne disposez pas de la librairie Minz.',
-  'admin.check_install.minz.ok' => 'Vous disposez du framework Minz',
-  'admin.check_install.pcre.nok' => 'Il manque une librairie pour les expressions régulières (php-pcre).',
-  'admin.check_install.pcre.ok' => 'Vous disposez du nécessaire pour les expressions régulières (PCRE).',
-  'admin.check_install.pdo.nok' => 'Vous ne disposez pas de PDO ou d’un des drivers supportés (pdo_mysql, pdo_sqlite).',
-  'admin.check_install.pdo.ok' => 'Vous disposez de PDO et d’au moins un des drivers supportés (pdo_mysql, pdo_sqlite).',
-  'admin.check_install.persona.nok' => 'Veuillez vérifier les droits sur le répertoire <em>./data/persona</em>. Le serveur HTTP doit être capable d’écrire dedans',
-  'admin.check_install.persona.ok' => 'Les droits sur le répertoire de Mozilla Persona sont bons.',
-  'admin.check_install.php' => 'Installation de PHP',
-  'admin.check_install.php.nok' => 'Votre version de PHP est la %s mais FreshRSS requiert au moins la version %s.',
-  'admin.check_install.php.ok' => 'Votre version de PHP est la %s, qui est compatible avec FreshRSS.',
-  'admin.check_install.tables.nok' => 'Il manque une ou plusieurs tables en base de données.',
-  'admin.check_install.tables.ok' => 'Les tables sont bien présentes en base de données.',
-  'admin.check_install.tokens.nok' => 'Veuillez vérifier les droits sur le répertoire <em>./data/tokens</em>. Le serveur HTTP doit être capable d’écrire dedans',
-  'admin.check_install.tokens.ok' => 'Les droits sur le répertoire des tokens sont bons.',
-  'admin.check_install.zip.nok' => 'Vous ne disposez pas de l\'extension ZIP (paquet php5-zip).',
-  'admin.check_install.zip.ok' => 'Vous disposez de l\'extension ZIP.',
-  'admin.users.articles_and_size' => '%s articles (%s)',
-  'administration' => 'Gérer',
-  'advanced' => 'Avancé',
-  'after_onread' => 'Après “marquer tout comme lu”,',
-  'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',
-  'all_feeds' => 'Tous les flux',
-  'allow_anonymous' => 'Autoriser la lecture anonyme des articles de l’utilisateur par défaut (%s)',
-  'allow_anonymous_refresh' => 'Autoriser le rafraîchissement anonyme des flux',
-  'already_subscribed' => 'Vous êtes déjà abonné à <em>%s</em>',
-  'api_enabled' => 'Autoriser l’accès par <abbr>API</abbr> <small>(nécessaire pour les applis mobiles)</small>',
-  'apr' => 'avr.',
-  'april' => 'avril',
-  'archiving_configuration' => 'Archivage',
-  'archiving_configuration_help' => 'D’autres options sont disponibles dans la configuration individuelle des flux.',
-  'article' => 'Article',
-  'article_icons' => 'Icônes d’article',
-  'article_open_on_website' => 'lorsque l’article est ouvert sur le site d’origine',
-  'article_published_on' => 'Article publié initialement sur <a href="%s">%s</a>',
-  'article_published_on_author' => 'Article publié initialement sur <a href="%s">%s</a> par %s',
-  'article_viewed' => 'lorsque l’article est affiché',
-  'articles' => 'articles',
-  'articles_per_page' => 'Nombre d’articles par page',
-  'articles_to_display' => 'Articles à afficher',
-  'ask_empty' => 'Vider ?',
-  'attention' => 'Attention !',
-  'aug' => 'août',
-  'august' => 'août',
-  'auth_form' => 'Formulaire (traditionnel, requiert JavaScript)',
-  'auth_form_not_set' => 'Un problème est survenu lors de la configuration de votre système d’authentification. Veuillez réessayer plus tard.',
-  'auth_form_set' => 'Le formulaire est désormais votre système d’authentification.',
-  'auth_no_password_set' => 'Aucun mot de passe administrateur n’a été précisé. Cette fonctionnalité n’est pas disponible.',
-  'auth_none' => 'Aucune (dangereux)',
-  'auth_not_persona' => 'Seul le système d’authentification Persona peut être réinitialisé.',
-  'auth_persona' => 'Mozilla Persona (moderne, requiert JavaScript)',
-  'auth_reset' => 'Réinitialisation de l’authentification',
-  'auth_token' => 'Jeton d’identification',
-  'auth_type' => 'Méthode d’authentification',
-  'auth_will_reset' => 'Le système d’authentification va être réinitialisé : un formulaire sera utilisé à la place de Persona.',
-  'author' => 'Auteur',
-  'auto_load_more' => 'Charger les articles suivants en bas de page',
-  'auto_read_when' => 'Marquer un article comme lu…',
-  'auto_share' => 'Partager',
-  'auto_share_help' => 'S’il n’y a qu’un mode de partage, celui-ci est utilisé automatiquement. Sinon ils sont accessibles par leur numéro.',
-  'back_to_rss_feeds' => '← Retour à vos flux RSS',
-  'bad_opml_file' => 'Votre fichier OPML n’est pas valide.',
-  'base_url' => 'Base de l’URL',
-  'bdd' => 'Base de données',
-  'bdd_conf_is_ko' => 'Vérifiez les informations d’accès à la base de données.',
-  'bdd_conf_is_ok' => 'La configuration de la base de données a été enregistrée.',
-  'bdd_configuration' => 'Base de données',
-  'bdd_type' => 'Type de base de données',
-  'before_one_day' => 'Antérieurs à 1 jour',
-  'before_one_week' => 'Antérieurs à 1 semaine',
-  'before_yesterday' => 'À partir d’avant-hier',
-  'blank_to_disable' => 'Laissez vide pour désactiver',
-  'blogotext' => 'Blogotext',
-  'bookmark' => 'S’abonner (bookmark FreshRSS)',
-  'bottom_line' => 'Ligne du bas',
-  'bugs_reports' => 'Rapports de bugs',
-  'by' => 'par',
-  'by_author' => 'Par <em>%s</em>',
-  'by_default' => 'Par défaut',
-  'by_email' => 'Par courriel',
-  'by_feed' => 'par flux',
-  'cache_is_ok' => 'Les droits sur le répertoire de cache sont bons',
-  'can_not_be_deleted' => 'Ne peut pas être supprimée.',
-  'cancel' => 'Annuler',
-  'categories' => 'Catégories',
-  'categories_management' => 'Gestion des catégories',
-  'categories_updated' => 'Les catégories ont été mises à jour.',
-  'categorize' => 'Ranger dans une catégorie',
-  'category' => 'Catégorie',
-  'category_created' => 'La catégorie %s a été créée.',
-  'category_deleted' => 'La catégorie a été supprimée.',
-  'category_emptied' => 'La catégorie a été vidée.',
-  'category_empty' => 'Catégorie vide',
-  'category_name_exists' => 'Une catégorie possède déjà ce nom.',
-  'category_no_id' => 'Vous devez préciser l’id de la catégorie.',
-  'category_no_name' => 'Vous devez préciser un nom pour la catégorie.',
-  'category_not_delete_default' => 'Vous ne pouvez pas supprimer la catégorie par défaut !',
-  'category_not_exist' => 'Cette catégorie n’existe pas !',
-  'category_number' => 'Catégorie n°%d',
-  'category_updated' => 'La catégorie a été mise à jour.',
-  'change_value' => 'Vous devriez changer cette valeur par n’importe quelle autre',
-  'checks' => 'Vérifications',
-  'choose_language' => 'Choisissez la langue pour FreshRSS',
-  'clear_logs' => 'Effacer les logs',
-  'collapse_article' => 'Refermer',
-  'conf.users.articles_and_size' => '%s articles (%s)',
-  'configuration' => 'Configuration',
-  'configuration_updated' => 'La configuration a été mise à jour.',
-  '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 !',
-  'congratulations' => 'Félicitations !',
-  'content_width' => 'Largeur du contenu',
-  'create' => 'Créer',
-  'create_user' => 'Créer un nouvel utilisateur',
-  'credits' => 'Crédits',
-  'credits_content' => 'Des éléments de design sont issus du <a href="http://twitter.github.io/bootstrap/">projet Bootstrap</a> bien que FreshRSS n’utilise pas ce framework. Les <a href="https://git.gnome.org/browse/gnome-icon-theme-symbolic">icônes</a> sont issues du <a href="https://www.gnome.org/">projet GNOME</a>. La police <em>Open Sans</em> utilisée a été créée par <a href="https://www.google.com/webfonts/specimen/Open+Sans">Steve Matteson</a>. Les favicons sont récupérés grâce au site <a href="https://getfavicon.appspot.com/">getFavicon</a>. FreshRSS repose sur <a href="https://github.com/marienfressinaud/MINZ">Minz</a>, un framework PHP.',
-  'css_path_on_website' => 'Sélecteur CSS des articles sur le site d’origine',
-  'ctype_is_nok' => 'Il manque une librairie pour la vérification des types de caractères (php-ctype)',
-  'ctype_is_ok' => 'Vous disposez du nécessaire pour la vérification des types de caractères (ctype)',
-  'curl_is_nok' => 'Vous ne disposez pas de cURL (paquet php5-curl)',
-  'curl_is_ok' => 'Vous disposez de cURL dans sa version %s',
-  'current_user' => 'Utilisateur actuel',
-  'damn' => 'Arf !',
-  'data_is_ok' => 'Les droits sur le répertoire de data sont bons',
-  'dec' => 'déc.',
-  'december' => 'décembre',
-  'default_category' => 'Sans catégorie',
-  'default_user' => 'Nom de l’utilisateur par défaut <small>(16 caractères alphanumériques maximum)</small>',
-  'default_view' => 'Vue par défaut',
-  'delete' => 'Supprimer',
-  'delete_articles_every' => 'Supprimer les articles après',
-  'diaspora' => 'Diaspora*',
-  'display' => 'Affichage',
-  'display_articles_unfolded' => 'Afficher les articles dépliés par défaut',
-  'display_categories_unfolded' => 'Afficher les catégories pliées par défaut',
-  'display_configuration' => 'Affichage',
-  'do_not_change_if_doubt' => 'Laissez tel quel dans le doute',
-  'dom_is_nok' => 'Il manque une librairie pour parcourir le DOM (paquet php-xml)',
-  'dom_is_ok' => 'Vous disposez du nécessaire pour parcourir le DOM',
-  'email' => 'Courriel',
-  'error_occurred' => 'Une erreur est survenue !',
-  'error_occurred_update' => 'Rien n’a été modifié !',
-  'explain_token' => 'Permet d’accéder à la sortie RSS de l’utilisateur par défaut sans besoin de s’authentifier.<br /><kbd>%s?output=rss&token=%s</kbd>',
-  'export' => 'Exporter',
-  'export_no_zip_extension' => 'L’extension Zip n’est pas présente sur votre serveur. Veuillez essayer d’exporter les fichiers un par un.',
-  'export_opml' => 'Exporter la liste des flux (OPML)',
-  'export_starred' => 'Exporter les favoris',
-  'facebook' => 'Facebook',
-  'favicons_is_ok' => 'Les droits sur le répertoire des favicons sont bons',
-  'favorite_feeds' => 'Favoris (%s)',
-  'feb' => 'fév.',
-  'february' => 'février',
-  'feed' => 'Flux',
-  'feed_actualized' => '<em>%s</em> a été mis à jour.',
-  'feed_added' => 'Le flux <em>%s</em> a bien été ajouté.',
-  'feed_deleted' => 'Le flux a été supprimé.',
-  'feed_description' => 'Description',
-  'feed_empty' => 'Ce flux est vide. Veuillez vérifier qu’il est toujours maintenu.',
-  'feed_in_error' => 'Ce flux a rencontré un problème. Veuillez vérifier qu’il est toujours accessible puis actualisez-le.',
-  'feed_list' => 'Liste des articles de %s',
-  'feed_not_added' => '<em>%s</em> n’a pas pu être ajouté.',
-  'feed_updated' => 'Le flux a été mis à jour.',
-  'feed_url' => 'URL du flux',
-  'feed_validator' => 'Vérifier la valididé du flux',
-  'feedback.login.error' => 'L’identifiant est invalide !',
-  'feedback.login.success' => 'Vous êtes désormais connecté',
-  'feedback.logout.success' => 'Vous avez été déconnecté',
-  'feedback.user_profile.updated' => 'Votre profil a été mis à jour',
-  'feeds' => 'Flux',
-  'feeds_actualized' => 'Les flux ont été mis à jour.',
-  'feeds_imported' => 'Vos flux ont été importés et vont maintenant être actualisés.',
-  'feeds_imported_with_errors' => 'Vos flux ont été importés mais des erreurs sont survenues.',
-  'feeds_marked_read' => 'Les flux ont été marqués comme lus.',
-  'feeds_moved_category_deleted' => 'Lors de la suppression d’une catégorie, ses flux seront automatiquement classés dans <em>%s</em>.',
-  'file_cannot_be_uploaded' => 'Le fichier ne peut pas être téléchargé !',
-  'file_is_nok' => 'Veuillez vérifier les droits sur le répertoire <em>%s</em>. Le serveur HTTP doit être capable d’écrire dedans',
-  'file_to_import' => 'Fichier à importer<br />(OPML, Json ou Zip)',
-  'file_to_import_no_zip' => 'Fichier à importer<br />(OPML ou Json)',
-  'filter' => 'Filtrer',
-  'finish_installation' => 'Terminer l’installation',
-  'first' => 'Début',
-  'first_article' => 'Passer au premier article',
-  'fix_errors_before' => 'Veuillez corriger les erreurs avant de passer à l’étape suivante.',
-  'focus_search' => 'Accéder à la recherche',
-  'format_date' => 'j %s Y',
-  'format_date_hour' => 'j %s Y \\à H\\:i',
-  'freshrss' => 'FreshRSS',
-  'freshrss_description' => 'FreshRSS est un agrégateur de flux RSS à auto-héberger à l’image de <a href="http://tontof.net/kriss/feed/">Kriss Feed</a> ou <a href="http://projet.idleman.fr/leed/">Leed</a>. Il se veut léger et facile à prendre en main tout en étant un outil puissant et paramétrable.',
-  'freshrss_installation' => 'Installation · FreshRSS',
-  'fri' => 'ven.',
-  'g+' => 'Google+',
-  'gen.menu.admin' => 'Administration',
-  'gen.menu.authentication' => 'Authentification',
-  'gen.menu.check_install' => 'Vérification de l\'installation',
-  'gen.menu.user_management' => 'Gestion des utilisateurs',
-  'gen.menu.user_profile' => 'Profil',
-  'gen.title.authentication' => 'Authentification',
-  'gen.title.check_install' => 'Vérification de l\'installation',
-  'gen.title.global_view' => 'Vue globale',
-  'gen.title.user_management' => 'Gestion des utilisateurs',
-  'gen.title.user_profile' => 'Profil',
-  'general_conf_is_ok' => 'La configuration générale a été enregistrée.',
-  'general_configuration' => 'Configuration générale',
-  'github_or_email' => '<a href="https://github.com/marienfressinaud/FreshRSS/issues">sur Github</a> ou <a href="mailto:dev@marienfressinaud.fr">par courriel</a>',
-  'global_view' => 'Vue globale',
-  'help' => 'Afficher la documentation',
-  'hide_read_feeds' => 'Cacher les catégories & flux sans article non-lu (ne fonctionne pas avec la configuration “Afficher tous les articles”)',
-  'host' => 'Hôte',
-  'html5_notif_timeout' => 'Temps d’affichage de la notification HTML5',
-  'http_auth' => 'HTTP (pour utilisateurs avancés avec HTTPS)',
-  'http_authentication' => 'Authentification HTTP',
-  'http_password' => 'Mot de passe HTTP',
-  'http_referer_is_nok' => 'Veuillez vérifier que vous ne modifiez pas votre HTTP REFERER.',
-  'http_referer_is_ok' => 'Le HTTP REFERER est connu et semble correspondre à votre serveur.',
-  'http_username' => 'Identifiant HTTP',
-  'img_with_lazyload' => 'Utiliser le mode “chargement différé” pour les images',
-  'import' => 'Importer',
-  'import_export' => 'Importer / exporter',
-  'informations' => 'Informations',
-  'install_not_deleted' => 'Quelque chose s’est mal passé, vous devez supprimer le fichier <em>%s</em> à la main.',
-  'installation_is_ok' => 'L’installation s’est bien passée.<br />La dernière étape va maintenant tenter de supprimer les fichiers ainsi que d’éventuelles copies de base de données créés durant le processus de mise à jour.<br />Vous pouvez choisir de sauter cette étape en supprimant <kbd>./data/do-install.txt</kbd> manuellement.',
-  'installation_step' => 'Installation — étape %d · FreshRSS',
-  'internal_problem_feed' => 'Le flux ne peut pas être ajouté. <a href="%s">Consulter les logs de FreshRSS</a> pour plus de détails.',
-  'invalid_login' => 'L’identifiant est invalide !',
-  'invalid_url' => 'L’url <em>%s</em> est invalide.',
-  'is_admin' => 'est administrateur',
-  'jan' => 'jan.',
-  'january' => 'janvier',
-  'javascript_for_shortcuts' => 'Le JavaScript doit être activé pour pouvoir profiter des raccourcis.',
-  'javascript_is_better' => 'FreshRSS est plus agréable à utiliser avec JavaScript activé',
-  'javascript_should_be_activated' => 'Le JavaScript doit être activé.',
-  'jul' => 'jui.',
-  'july' => 'juillet',
-  'jump_next' => 'sauter au prochain voisin non lu (flux ou catégorie)',
-  'jun' => 'juin',
-  'june' => 'juin',
-  'keep_history' => 'Nombre minimum d’articles à conserver',
-  'keep_logged_in' => 'Rester connecté <small>(1 mois)</small>',
-  'language' => 'Langue',
-  'language_defined' => 'La langue a bien été définie.',
-  'last' => 'Fin',
-  'last_3_month' => 'Depuis les trois derniers mois',
-  'last_6_month' => 'Depuis les six derniers mois',
-  'last_article' => 'Passer au dernier article',
-  'last_month' => 'Depuis le mois dernier',
-  'last_week' => 'Depuis la semaine dernière',
-  'last_year' => 'Depuis l’année dernière',
-  'lead_developer' => 'Développeur principal',
-  'license' => 'Licence',
-  'load_more' => 'Charger plus d’articles',
-  'log_is_ok' => 'Les droits sur le répertoire des logs sont bons',
-  'login' => 'Connexion',
-  'login_configuration' => 'Identification',
-  'login_persona_problem' => 'Problème de connexion à Persona ?',
-  'login_required' => 'Accès protégé par mot de passe :',
-  'login_with_persona' => 'Connexion avec Persona',
-  'logout' => 'Déconnexion',
-  'logs' => 'Logs',
-  'logs_empty' => 'Les logs sont vides.',
-  'main_stream' => 'Flux principal',
-  'mar' => 'mar.',
-  'march' => 'mars',
-  'mark_all_read' => 'Tout marquer comme lu',
-  'mark_cat_read' => 'Marquer la catégorie comme lue',
-  'mark_favorite' => 'Mettre en favori',
-  'mark_feed_read' => 'Marquer le flux comme lu',
-  'mark_read' => 'Marquer comme lu',
-  'may' => 'mai.',
-  'minz_is_nok' => 'Vous ne disposez pas de la librairie Minz. Vous devriez exécuter le script <em>build.sh</em> ou bien <a href="https://github.com/marienfressinaud/MINZ">la télécharger sur Github</a> et installer dans le répertoire <em>%s</em> le contenu de son répertoire <em>/lib</em>.',
-  'minz_is_ok' => 'Vous disposez du framework Minz',
-  'mon' => 'lun.',
-  'month' => 'mois',
-  'more_information' => 'Plus d’informations',
-  'n_entries_deleted' => '%d articles ont été supprimés.',
-  'n_feeds_actualized' => '%d flux ont été mis à jour.',
-  'new_article' => 'Il y a de nouveaux articles disponibles, cliquez pour rafraîchir la page.',
-  'new_category' => 'Nouvelle catégorie',
-  'newer_first' => 'Plus récents en premier',
-  'next' => 'Suivant',
-  'next_article' => 'Passer à l’article suivant',
-  'next_page' => 'Passer à la page suivante',
-  'next_step' => 'Passer à l’étape suivante',
-  'no' => 'Non',
-  'no_feed_actualized' => 'Aucun flux n’a pu être mis à jour.',
-  'no_feed_to_display' => 'Il n’y a aucun article à afficher.',
-  'no_feed_to_refresh' => 'Il n’y a aucun flux à actualiser…',
-  'no_query' => 'Vous n’avez pas encore créé de filtre.',
-  'no_query_filter' => 'Aucun filtre appliqué',
-  'no_rss_feed' => 'Aucun flux RSS',
-  'no_selected_feed' => 'Aucun flux sélectionné.',
-  'no_update' => 'Aucune mise à jour à appliquer',
-  'no_zip_extension' => 'L’extension Zip n’est pas présente sur votre serveur.',
-  'normal_view' => 'Vue normale',
-  'not_read' => '%d non lu',
-  'not_reads' => '%d non lus',
-  'not_yet_implemented' => 'Pas encore implémenté',
-  'nothing_to_load' => 'Fin des articles',
-  'notif_body_new_articles' => 'Il y a \\d nouveaux articles à lire sur FreshRSS.',
-  'notif_title_new_articles' => 'FreshRSS : nouveaux articles !',
-  'nov' => 'nov.',
-  'november' => 'novembre',
-  'number_articles' => '%d articles',
-  'number_divided_when_reader' => 'Divisé par 2 dans la vue de lecture.',
-  'number_feeds' => '%d flux',
-  'oct' => 'oct.',
-  'october' => 'octobre',
-  'ok' => 'Ok !',
-  'older_first' => 'Plus anciens en premier',
-  'oops' => 'Oups !',
-  'optimization_complete' => 'Optimisation terminée.',
-  'optimize_bdd' => 'Optimiser la base de données',
-  'optimize_todo_sometimes' => 'À faire de temps en temps pour réduire la taille de la BDD',
-  'or' => 'ou',
-  'page_not_found' => 'La page que vous cherchez n’existe pas !',
-  'password' => 'Mot de passe',
-  'password_api' => 'Mot de passe API<br /><small>(ex. : pour applis mobiles)</small>',
-  'password_form' => 'Mot de passe<br /><small>(pour connexion par formulaire)</small>',
-  'pcre_is_nok' => 'Il manque une librairie pour les expressions régulières (php-pcre)',
-  'pcre_is_ok' => 'Vous disposez du nécessaire pour les expressions régulières (PCRE)',
-  'pdo_is_nok' => 'Vous ne disposez pas de PDO ou d’un des drivers supportés (pdo_mysql, pdo_sqlite)',
-  'pdo_is_ok' => 'Vous disposez de PDO et d’au moins un des drivers supportés (pdo_mysql, pdo_sqlite)',
-  'persona_connection_email' => 'Adresse courriel de connexion<br /><small>(pour <a href="https://persona.org/" rel="external">Mozilla Persona</a>)</small>',
-  'persona_is_ok' => 'Les droits sur le répertoire de Mozilla Persona sont bons',
-  'php_is_nok' => 'Votre version de PHP est la %s mais FreshRSS requiert au moins la version %s',
-  'php_is_ok' => 'Votre version de PHP est la %s, qui est compatible avec FreshRSS',
-  'prefix' => 'Préfixe des tables',
-  'previous' => 'Précédent',
-  'previous_article' => 'Passer à l’article précédent',
-  'previous_page' => 'Passer à la page précédente',
-  'print' => 'Imprimer',
-  'project_website' => 'Site du projet',
-  'public' => 'Public',
-  'publication_date' => 'Date de publication',
-  'purge_completed' => 'Purge effectuée (%d articles supprimés).',
-  'purge_now' => 'Purger maintenant',
-  'queries' => 'Filtres utilisateurs',
-  'query_created' => 'Le filtre "%s" a bien été créé.',
-  'query_deprecated' => 'Ce filtre n’est plus valide. La catégorie ou le flux concerné a été supprimé.',
-  'query_filter' => 'Filtres appliqués :',
-  'query_get_all' => 'Afficher tous les articles',
-  'query_get_category' => 'Afficher la catégorie "%s"',
-  'query_get_favorite' => 'Afficher les articles favoris',
-  'query_get_feed' => 'Afficher le flux "%s"',
-  'query_number' => 'Filtre n°%d',
-  'query_order_asc' => 'Afficher les articles les plus anciens en premier',
-  'query_order_desc' => 'Afficher les articles les plus récents en premier',
-  'query_search' => 'Recherche de "%s"',
-  'query_state_0' => 'Afficher tous les articles',
-  'query_state_1' => 'Afficher les articles lus',
-  'query_state_2' => 'Afficher les articles non lus',
-  'query_state_3' => 'Afficher tous les articles',
-  'query_state_4' => 'Afficher les articles favoris',
-  'query_state_5' => 'Afficher les articles lus et favoris',
-  'query_state_6' => 'Afficher les articles non lus et favoris',
-  'query_state_7' => 'Afficher les articles favoris',
-  'query_state_8' => 'Afficher les articles non favoris',
-  'query_state_9' => 'Afficher les articles lus et non favoris',
-  'query_state_10' => 'Afficher les articles non lus et non favoris',
-  'query_state_11' => 'Afficher les articles non favoris',
-  'query_state_12' => 'Afficher tous les articles',
-  'query_state_13' => 'Afficher les articles lus',
-  'query_state_14' => 'Afficher les articles non lus',
-  'query_state_15' => 'Afficher tous les articles',
-  'random_string' => 'Chaîne aléatoire',
-  'reader_view' => 'Vue lecture',
-  'reading_configuration' => 'Lecture',
-  'reading_confirm' => 'Afficher une confirmation lors des actions “marquer tout comme lu”',
-  'refresh' => 'Actualisation',
-  'related_tags' => 'Tags associés',
-  'retrieve_truncated_feeds' => 'Permet de récupérer les flux tronqués (attention, demande plus de temps !)',
-  'rss_feed_management' => 'Gestion des flux RSS',
-  'rss_feeds_of' => 'Flux RSS de %s',
-  'rss_view' => 'Flux RSS',
-  'sat' => 'sam.',
-  'save' => 'Enregistrer',
-  'scroll' => 'au défilement de la page',
-  'search' => 'Rechercher des mots ou des #tags',
-  'search_short' => 'Rechercher',
-  'seconds_(0_means_no_timeout)' => 'secondes (0 signifie aucun timeout ) ',
-  'see_on_website' => 'Voir sur le site d’origine',
-  'see_website' => 'Voir le site',
-  'sep' => 'sep.',
-  'september' => 'septembre',
-  'shaarli' => 'Shaarli',
-  'share' => 'Partager',
-  'share_name' => 'Nom du partage à afficher',
-  'share_url' => 'URL du partage à utiliser',
-  'sharing' => 'Partage',
-  'sharing_management' => 'Gestion des options de partage',
-  'shift_for_all_read' => '+ <code>shift</code> pour marquer tous les articles comme lus',
-  'shortcuts' => 'Raccourcis',
-  'shortcuts_article_action' => 'Actions associées à l’article courant',
-  'shortcuts_navigation' => 'Navigation',
-  'shortcuts_navigation_help' => 'Avec le modificateur "Shift", les raccourcis de navigation s’appliquent aux flux.<br/>Avec le modificateur "Alt", les raccourcis de navigation s’appliquent aux catégories.',
-  'shortcuts_other_action' => 'Autres actions',
-  'shortcuts_updated' => 'Les raccourcis ont été mis à jour.',
-  'show_adaptive' => 'Adapter l’affichage',
-  'show_all_articles' => 'Afficher tous les articles',
-  'show_favorite' => 'Afficher les favoris',
-  'show_in_all_flux' => 'Afficher dans le flux principal',
-  'show_not_favorite' => 'Afficher tout sauf les favoris',
-  'show_not_reads' => 'Afficher les non lus',
-  'show_read' => 'Afficher les lus',
-  'sort_order' => 'Ordre de tri',
-  'starred_list' => 'Liste des articles favoris',
-  'stats' => 'Statistiques',
-  'stats_entry_count' => 'Nombre d’articles',
-  'stats_entry_per_category' => 'Articles par catégorie',
-  'stats_entry_per_day' => 'Nombre d’articles par jour (30 derniers jours)',
-  'stats_entry_per_day_of_week' => 'Par jour de la semaine (moyenne : %.2f messages)',
-  'stats_entry_per_hour' => 'Par heure (moyenne : %.2f messages)',
-  'stats_entry_per_month' => 'Par mois (moyenne : %.2f messages)',
-  'stats_entry_repartition' => 'Répartition des articles',
-  'stats_feed_per_category' => 'Flux par catégorie',
-  'stats_idle' => 'Flux inactifs',
-  'stats_main' => 'Statistiques principales',
-  'stats_no_idle' => 'Il n’y a aucun flux inactif !',
-  'stats_percent_of_total' => '%% du total',
-  'stats_repartition' => 'Répartition des articles',
-  'stats_top_feed' => 'Les dix plus gros flux',
-  'status_favorites' => 'favoris',
-  'status_read' => 'lus',
-  'status_total' => 'total',
-  'status_unread' => 'non lus',
-  'steps' => 'Étapes',
-  'sticky_post' => 'Aligner l’article en haut quand il est ouvert',
-  'sub.categories.over_max' => 'Vous avez atteint votre limite de catégories (%d)',
-  'sub.feeds.over_max' => 'Vous avez atteint votre limite de flux (%d)',
-  'submit' => 'Valider',
-  'subscription_management' => 'Gestion des abonnements',
-  'sun' => 'dim.',
-  'theme' => 'Thème',
-  'think_to_add' => 'Vous pouvez ajouter des flux.',
-  'this_is_the_end' => 'This is the end',
-  'thu' => 'jeu.',
-  'title' => 'Titre',
-  'today' => 'Aujourd’hui',
-  'top_line' => 'Ligne du haut',
-  'truncate' => 'Supprimer tous les articles',
-  'ttl' => 'Ne pas automatiquement rafraîchir plus souvent que',
-  'tue' => 'mar.',
-  'twitter' => 'Twitter',
-  'unsafe_autologin' => 'Autoriser les connexions automatiques non-sûres au format : ',
-  'update' => 'Mise à jour',
-  'update_apply' => 'Appliquer la mise à jour',
-  'update_can_apply' => 'Une mise à jour est disponible.',
-  'update_check' => 'Vérifier les mises à jour',
-  'update_end' => 'La mise à jour est terminée, vous pouvez maintenant passer à l’étape finale.',
-  'update_finished' => 'La mise à jour est terminée !',
-  'update_last' => 'Dernière vérification : %s',
-  'update_long' => 'Ce processus peut prendre longtemps, selon la taille de votre base de données. Vous aurez peut-être à attendre que cette page dépasse son temps maximum d’exécution (~5 minutes) puis à la recharger.',
-  'update_problem' => 'La mise à jour a rencontré un problème : %s',
-  'update_server_not_found' => 'Le serveur de mise à jour n’a pas été trouvé. [%s]',
-  'update_start' => 'Lancer la mise à jour',
-  'update_system' => 'Système de mise à jour',
-  'updated' => 'Modifications enregistrées.',
-  'upon_reception' => 'dès la réception du nouvel article',
-  'user_created' => 'L’utilisateur %s a été créé.',
-  'user_deleted' => 'L’utilisateur %s a été supprimé.',
-  'user_filter' => 'Accéder aux filtres utilisateur',
-  'user_filter_help' => 'S’il n’y a qu’un filtre utilisateur, celui-ci est utilisé automatiquement. Sinon ils sont accessibles par leur numéro.',
-  'username' => 'Nom d’utilisateur',
-  'username_admin' => 'Nom d’utilisateur administrateur',
-  'users' => 'Utilisateurs',
-  'users_list' => 'Liste des utilisateurs',
-  'version' => 'Version',
-  'version_update' => 'Mise à jour',
-  'wallabag' => 'wallabag',
-  'website' => 'Site Internet',
-  'website_url' => 'URL du site',
-  'wed' => 'mer.',
-  'width_large' => 'Large',
-  'width_medium' => 'Moyenne',
-  'width_no_limit' => 'Pas de limite',
-  'width_thin' => 'Fine',
-  'yes' => 'Oui',
-  'yesterday' => 'Hier',
-  'your_diaspora_pod' => 'Votre pod Diaspora*',
-  'your_favorites' => 'Vos favoris',
-  'your_rss_feeds' => 'Vos flux RSS',
-  'your_shaarli' => 'Votre Shaarli',
-  'your_wallabag' => 'Votre wallabag',
-  'zip_error' => 'Une erreur est survenue durant l’import du fichier Zip.',
-);

+ 92 - 0
app/i18n/fr/admin.php

@@ -0,0 +1,92 @@
+<?php
+
+return array(
+	'check_install' => array(
+		'cache' => array(
+			'nok' => 'Veuillez vérifier les droits sur le répertoire <em>./data/cache</em>. Le serveur HTTP doit être capable d’écrire dedans',
+			'ok' => 'Les droits sur le répertoire de cache sont bons.',
+		),
+		'categories' => array(
+			'nok' => 'La table category est mal configurée.',
+			'ok' => 'La table category est bien configurée.',
+		),
+		'connection' => array(
+			'nok' => 'La connexion à la base de données est impossible.',
+			'ok' => 'La connexion à la base de données est bonne.',
+		),
+		'ctype' => array(
+			'nok' => 'Il manque une librairie pour la vérification des types de caractères (php-ctype).',
+			'ok' => 'Vous disposez du nécessaire pour la vérification des types de caractères (ctype).',
+		),
+		'curl' => array(
+			'nok' => 'Vous ne disposez pas de cURL (paquet php5-curl).',
+			'ok' => 'Vous disposez de cURL.',
+		),
+		'data' => array(
+			'nok' => 'Veuillez vérifier les droits sur le répertoire <em>./data</em>. Le serveur HTTP doit être capable d’écrire dedans',
+			'ok' => 'Les droits sur le répertoire de data sont bons.',
+		),
+		'database' => 'Installation de la base de données',
+		'dom' => array(
+			'nok' => 'Il manque une librairie pour parcourir le DOM (paquet php-xml).',
+			'ok' => 'Vous disposez du nécessaire pour parcourir le DOM.',
+		),
+		'entries' => array(
+			'nok' => 'La table entry est mal configurée.',
+			'ok' => 'La table entry est bien configurée.',
+		),
+		'favicons' => array(
+			'nok' => 'Veuillez vérifier les droits sur le répertoire <em>./data/favicons</em>. Le serveur HTTP doit être capable d’écrire dedans',
+			'ok' => 'Les droits sur le répertoire des favicons sont bons.',
+		),
+		'feeds' => array(
+			'nok' => 'La table feed est mal configurée.',
+			'ok' => 'La table feed est bien configurée.',
+		),
+		'files' => 'Installation des fichiers',
+		'json' => array(
+			'nok' => 'Vous ne disposez pas de JSON (paquet php5-json).',
+			'ok' => 'Vous disposez de l\'extension JSON.',
+		),
+		'logs' => array(
+			'nok' => 'Veuillez vérifier les droits sur le répertoire <em>./data/logs</em>. Le serveur HTTP doit être capable d’écrire dedans',
+			'ok' => 'Les droits sur le répertoire des logs sont bons.',
+		),
+		'minz' => array(
+			'nok' => 'Vous ne disposez pas de la librairie Minz.',
+			'ok' => 'Vous disposez du framework Minz',
+		),
+		'pcre' => array(
+			'nok' => 'Il manque une librairie pour les expressions régulières (php-pcre).',
+			'ok' => 'Vous disposez du nécessaire pour les expressions régulières (PCRE).',
+		),
+		'pdo' => array(
+			'nok' => 'Vous ne disposez pas de PDO ou d’un des drivers supportés (pdo_mysql, pdo_sqlite).',
+			'ok' => 'Vous disposez de PDO et d’au moins un des drivers supportés (pdo_mysql, pdo_sqlite).',
+		),
+		'persona' => array(
+			'nok' => 'Veuillez vérifier les droits sur le répertoire <em>./data/persona</em>. Le serveur HTTP doit être capable d’écrire dedans',
+			'ok' => 'Les droits sur le répertoire de Mozilla Persona sont bons.',
+		),
+		'php' => array(
+			'_' => 'Installation de PHP',
+			'nok' => 'Votre version de PHP est la %s mais FreshRSS requiert au moins la version %s.',
+			'ok' => 'Votre version de PHP est la %s, qui est compatible avec FreshRSS.',
+		),
+		'tables' => array(
+			'nok' => 'Il manque une ou plusieurs tables en base de données.',
+			'ok' => 'Les tables sont bien présentes en base de données.',
+		),
+		'tokens' => array(
+			'nok' => 'Veuillez vérifier les droits sur le répertoire <em>./data/tokens</em>. Le serveur HTTP doit être capable d’écrire dedans',
+			'ok' => 'Les droits sur le répertoire des tokens sont bons.',
+		),
+		'zip' => array(
+			'nok' => 'Vous ne disposez pas de l\'extension ZIP (paquet php5-zip).',
+			'ok' => 'Vous disposez de l\'extension ZIP.',
+		),
+	),
+	'users' => array(
+		'articles_and_size' => '%s articles (%s)',
+	),
+);

+ 7 - 0
app/i18n/fr/conf.php

@@ -0,0 +1,7 @@
+<?php
+
+return array(
+	'users' => array(
+		'articles_and_size' => '%s articles (%s)',
+	),
+);

+ 14 - 0
app/i18n/fr/feedback.php

@@ -0,0 +1,14 @@
+<?php
+
+return array(
+	'login' => array(
+		'error' => 'L’identifiant est invalide !',
+		'success' => 'Vous êtes désormais connecté',
+	),
+	'logout' => array(
+		'success' => 'Vous avez été déconnecté',
+	),
+	'user_profile' => array(
+		'updated' => 'Votre profil a été mis à jour',
+	),
+);

+ 487 - 0
app/i18n/fr/gen.php

@@ -0,0 +1,487 @@
+<?php
+
+return array(
+	'Apr' => '\\a\\v\\r\\i\\l',
+	'Aug' => '\\a\\o\\û\\t',
+	'Dec' => '\\d\\é\\c\\e\\m\\b\\r\\e',
+	'Feb' => '\\f\\é\\v\\r\\i\\e\\r',
+	'Jan' => '\\j\\a\\n\\v\\i\\e\\r',
+	'Jul' => '\\j\\u\\i\\l\\l\\e\\t',
+	'Jun' => '\\j\\u\\i\\n',
+	'Mar' => '\\m\\a\\r\\s',
+	'May' => '\\m\\a\\i',
+	'Nov' => '\\n\\o\\v\\e\\m\\b\\r\\e',
+	'Oct' => '\\o\\c\\t\\o\\b\\r\\e',
+	'Sep' => '\\s\\e\\p\\t\\e\\m\\b\\r\\e',
+	'about' => 'À propos',
+	'about_freshrss' => 'À propos de FreshRSS',
+	'access_denied' => 'Vous n’avez pas le droit d’accéder à cette page !',
+	'access_protected_feeds' => 'La connexion permet d’accéder aux flux protégés par une authentification HTTP.',
+	'activate_sharing' => 'Activer le partage',
+	'actualize' => 'Actualiser',
+	'add_category' => 'Ajouter une catégorie',
+	'add_query' => 'Créer un filtre',
+	'add_rss_feed' => 'Ajouter un flux RSS',
+	'administration' => 'Gérer',
+	'advanced' => 'Avancé',
+	'after_onread' => 'Après “marquer tout comme lu”,',
+	'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',
+	'all_feeds' => 'Tous les flux',
+	'allow_anonymous' => 'Autoriser la lecture anonyme des articles de l’utilisateur par défaut (%s)',
+	'allow_anonymous_refresh' => 'Autoriser le rafraîchissement anonyme des flux',
+	'already_subscribed' => 'Vous êtes déjà abonné à <em>%s</em>',
+	'api_enabled' => 'Autoriser l’accès par <abbr>API</abbr> <small>(nécessaire pour les applis mobiles)</small>',
+	'apr' => 'avr.',
+	'april' => 'avril',
+	'archiving_configuration' => 'Archivage',
+	'archiving_configuration_help' => 'D’autres options sont disponibles dans la configuration individuelle des flux.',
+	'article' => 'Article',
+	'article_icons' => 'Icônes d’article',
+	'article_open_on_website' => 'lorsque l’article est ouvert sur le site d’origine',
+	'article_published_on' => 'Article publié initialement sur <a href="%s">%s</a>',
+	'article_published_on_author' => 'Article publié initialement sur <a href="%s">%s</a> par %s',
+	'article_viewed' => 'lorsque l’article est affiché',
+	'articles' => 'articles',
+	'articles_per_page' => 'Nombre d’articles par page',
+	'articles_to_display' => 'Articles à afficher',
+	'ask_empty' => 'Vider ?',
+	'attention' => 'Attention !',
+	'aug' => 'août',
+	'august' => 'août',
+	'auth_form' => 'Formulaire (traditionnel, requiert JavaScript)',
+	'auth_form_not_set' => 'Un problème est survenu lors de la configuration de votre système d’authentification. Veuillez réessayer plus tard.',
+	'auth_form_set' => 'Le formulaire est désormais votre système d’authentification.',
+	'auth_no_password_set' => 'Aucun mot de passe administrateur n’a été précisé. Cette fonctionnalité n’est pas disponible.',
+	'auth_none' => 'Aucune (dangereux)',
+	'auth_not_persona' => 'Seul le système d’authentification Persona peut être réinitialisé.',
+	'auth_persona' => 'Mozilla Persona (moderne, requiert JavaScript)',
+	'auth_reset' => 'Réinitialisation de l’authentification',
+	'auth_token' => 'Jeton d’identification',
+	'auth_type' => 'Méthode d’authentification',
+	'auth_will_reset' => 'Le système d’authentification va être réinitialisé : un formulaire sera utilisé à la place de Persona.',
+	'author' => 'Auteur',
+	'auto_load_more' => 'Charger les articles suivants en bas de page',
+	'auto_read_when' => 'Marquer un article comme lu…',
+	'auto_share' => 'Partager',
+	'auto_share_help' => 'S’il n’y a qu’un mode de partage, celui-ci est utilisé automatiquement. Sinon ils sont accessibles par leur numéro.',
+	'back_to_rss_feeds' => '← Retour à vos flux RSS',
+	'bad_opml_file' => 'Votre fichier OPML n’est pas valide.',
+	'base_url' => 'Base de l’URL',
+	'bdd' => 'Base de données',
+	'bdd_conf_is_ko' => 'Vérifiez les informations d’accès à la base de données.',
+	'bdd_conf_is_ok' => 'La configuration de la base de données a été enregistrée.',
+	'bdd_configuration' => 'Base de données',
+	'bdd_type' => 'Type de base de données',
+	'before_one_day' => 'Antérieurs à 1 jour',
+	'before_one_week' => 'Antérieurs à 1 semaine',
+	'before_yesterday' => 'À partir d’avant-hier',
+	'blank_to_disable' => 'Laissez vide pour désactiver',
+	'blogotext' => 'Blogotext',
+	'bookmark' => 'S’abonner (bookmark FreshRSS)',
+	'bottom_line' => 'Ligne du bas',
+	'bugs_reports' => 'Rapports de bugs',
+	'by' => 'par',
+	'by_author' => 'Par <em>%s</em>',
+	'by_default' => 'Par défaut',
+	'by_email' => 'Par courriel',
+	'by_feed' => 'par flux',
+	'cache_is_ok' => 'Les droits sur le répertoire de cache sont bons',
+	'can_not_be_deleted' => 'Ne peut pas être supprimée.',
+	'cancel' => 'Annuler',
+	'categories' => 'Catégories',
+	'categories_management' => 'Gestion des catégories',
+	'categories_updated' => 'Les catégories ont été mises à jour.',
+	'categorize' => 'Ranger dans une catégorie',
+	'category' => 'Catégorie',
+	'category_created' => 'La catégorie %s a été créée.',
+	'category_deleted' => 'La catégorie a été supprimée.',
+	'category_emptied' => 'La catégorie a été vidée.',
+	'category_empty' => 'Catégorie vide',
+	'category_name_exists' => 'Une catégorie possède déjà ce nom.',
+	'category_no_id' => 'Vous devez préciser l’id de la catégorie.',
+	'category_no_name' => 'Vous devez préciser un nom pour la catégorie.',
+	'category_not_delete_default' => 'Vous ne pouvez pas supprimer la catégorie par défaut !',
+	'category_not_exist' => 'Cette catégorie n’existe pas !',
+	'category_number' => 'Catégorie n°%d',
+	'category_updated' => 'La catégorie a été mise à jour.',
+	'change_value' => 'Vous devriez changer cette valeur par n’importe quelle autre',
+	'checks' => 'Vérifications',
+	'choose_language' => 'Choisissez la langue pour FreshRSS',
+	'clear_logs' => 'Effacer les logs',
+	'collapse_article' => 'Refermer',
+	'configuration' => 'Configuration',
+	'configuration_updated' => 'La configuration a été mise à jour.',
+	'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 !',
+	'congratulations' => 'Félicitations !',
+	'content_width' => 'Largeur du contenu',
+	'create' => 'Créer',
+	'create_user' => 'Créer un nouvel utilisateur',
+	'credits' => 'Crédits',
+	'credits_content' => 'Des éléments de design sont issus du <a href="http://twitter.github.io/bootstrap/">projet Bootstrap</a> bien que FreshRSS n’utilise pas ce framework. Les <a href="https://git.gnome.org/browse/gnome-icon-theme-symbolic">icônes</a> sont issues du <a href="https://www.gnome.org/">projet GNOME</a>. La police <em>Open Sans</em> utilisée a été créée par <a href="https://www.google.com/webfonts/specimen/Open+Sans">Steve Matteson</a>. Les favicons sont récupérés grâce au site <a href="https://getfavicon.appspot.com/">getFavicon</a>. FreshRSS repose sur <a href="https://github.com/marienfressinaud/MINZ">Minz</a>, un framework PHP.',
+	'css_path_on_website' => 'Sélecteur CSS des articles sur le site d’origine',
+	'ctype_is_nok' => 'Il manque une librairie pour la vérification des types de caractères (php-ctype)',
+	'ctype_is_ok' => 'Vous disposez du nécessaire pour la vérification des types de caractères (ctype)',
+	'curl_is_nok' => 'Vous ne disposez pas de cURL (paquet php5-curl)',
+	'curl_is_ok' => 'Vous disposez de cURL dans sa version %s',
+	'current_user' => 'Utilisateur actuel',
+	'damn' => 'Arf !',
+	'data_is_ok' => 'Les droits sur le répertoire de data sont bons',
+	'dec' => 'déc.',
+	'december' => 'décembre',
+	'default_category' => 'Sans catégorie',
+	'default_user' => 'Nom de l’utilisateur par défaut <small>(16 caractères alphanumériques maximum)</small>',
+	'default_view' => 'Vue par défaut',
+	'delete' => 'Supprimer',
+	'delete_articles_every' => 'Supprimer les articles après',
+	'diaspora' => 'Diaspora*',
+	'display' => 'Affichage',
+	'display_articles_unfolded' => 'Afficher les articles dépliés par défaut',
+	'display_categories_unfolded' => 'Afficher les catégories pliées par défaut',
+	'display_configuration' => 'Affichage',
+	'do_not_change_if_doubt' => 'Laissez tel quel dans le doute',
+	'dom_is_nok' => 'Il manque une librairie pour parcourir le DOM (paquet php-xml)',
+	'dom_is_ok' => 'Vous disposez du nécessaire pour parcourir le DOM',
+	'email' => 'Courriel',
+	'error_occurred' => 'Une erreur est survenue !',
+	'error_occurred_update' => 'Rien n’a été modifié !',
+	'explain_token' => 'Permet d’accéder à la sortie RSS de l’utilisateur par défaut sans besoin de s’authentifier.<br /><kbd>%s?output=rss&token=%s</kbd>',
+	'export' => 'Exporter',
+	'export_no_zip_extension' => 'L’extension Zip n’est pas présente sur votre serveur. Veuillez essayer d’exporter les fichiers un par un.',
+	'export_opml' => 'Exporter la liste des flux (OPML)',
+	'export_starred' => 'Exporter les favoris',
+	'facebook' => 'Facebook',
+	'favicons_is_ok' => 'Les droits sur le répertoire des favicons sont bons',
+	'favorite_feeds' => 'Favoris (%s)',
+	'feb' => 'fév.',
+	'february' => 'février',
+	'feed' => 'Flux',
+	'feed_actualized' => '<em>%s</em> a été mis à jour.',
+	'feed_added' => 'Le flux <em>%s</em> a bien été ajouté.',
+	'feed_deleted' => 'Le flux a été supprimé.',
+	'feed_description' => 'Description',
+	'feed_empty' => 'Ce flux est vide. Veuillez vérifier qu’il est toujours maintenu.',
+	'feed_in_error' => 'Ce flux a rencontré un problème. Veuillez vérifier qu’il est toujours accessible puis actualisez-le.',
+	'feed_list' => 'Liste des articles de %s',
+	'feed_not_added' => '<em>%s</em> n’a pas pu être ajouté.',
+	'feed_updated' => 'Le flux a été mis à jour.',
+	'feed_url' => 'URL du flux',
+	'feed_validator' => 'Vérifier la valididé du flux',
+	'feeds' => 'Flux',
+	'feeds_actualized' => 'Les flux ont été mis à jour.',
+	'feeds_imported' => 'Vos flux ont été importés et vont maintenant être actualisés.',
+	'feeds_imported_with_errors' => 'Vos flux ont été importés mais des erreurs sont survenues.',
+	'feeds_marked_read' => 'Les flux ont été marqués comme lus.',
+	'feeds_moved_category_deleted' => 'Lors de la suppression d’une catégorie, ses flux seront automatiquement classés dans <em>%s</em>.',
+	'file_cannot_be_uploaded' => 'Le fichier ne peut pas être téléchargé !',
+	'file_is_nok' => 'Veuillez vérifier les droits sur le répertoire <em>%s</em>. Le serveur HTTP doit être capable d’écrire dedans',
+	'file_to_import' => 'Fichier à importer<br />(OPML, Json ou Zip)',
+	'file_to_import_no_zip' => 'Fichier à importer<br />(OPML ou Json)',
+	'filter' => 'Filtrer',
+	'finish_installation' => 'Terminer l’installation',
+	'first' => 'Début',
+	'first_article' => 'Passer au premier article',
+	'fix_errors_before' => 'Veuillez corriger les erreurs avant de passer à l’étape suivante.',
+	'focus_search' => 'Accéder à la recherche',
+	'format_date' => 'j %s Y',
+	'format_date_hour' => 'j %s Y \\à H\\:i',
+	'freshrss' => 'FreshRSS',
+	'freshrss_description' => 'FreshRSS est un agrégateur de flux RSS à auto-héberger à l’image de <a href="http://tontof.net/kriss/feed/">Kriss Feed</a> ou <a href="http://projet.idleman.fr/leed/">Leed</a>. Il se veut léger et facile à prendre en main tout en étant un outil puissant et paramétrable.',
+	'freshrss_installation' => 'Installation · FreshRSS',
+	'fri' => 'ven.',
+	'g+' => 'Google+',
+	'menu' => array(
+		'admin' => 'Administration',
+		'authentication' => 'Authentification',
+		'check_install' => 'Vérification de l’installation',
+		'user_management' => 'Gestion des utilisateurs',
+		'user_profile' => 'Profil',
+	),
+	'title' => array(
+		'_' => 'Titre',
+		'authentication' => 'Authentification',
+		'check_install' => 'Vérification de l’installation',
+		'global_view' => 'Vue globale',
+		'user_management' => 'Gestion des utilisateurs',
+		'user_profile' => 'Profil',
+	),
+	'general_conf_is_ok' => 'La configuration générale a été enregistrée.',
+	'general_configuration' => 'Configuration générale',
+	'github_or_email' => '<a href="https://github.com/marienfressinaud/FreshRSS/issues">sur Github</a> ou <a href="mailto:dev@marienfressinaud.fr">par courriel</a>',
+	'global_view' => 'Vue globale',
+	'help' => 'Afficher la documentation',
+	'hide_read_feeds' => 'Cacher les catégories & flux sans article non-lu (ne fonctionne pas avec la configuration “Afficher tous les articles”)',
+	'host' => 'Hôte',
+	'html5_notif_timeout' => 'Temps d’affichage de la notification HTML5',
+	'http_auth' => 'HTTP (pour utilisateurs avancés avec HTTPS)',
+	'http_authentication' => 'Authentification HTTP',
+	'http_password' => 'Mot de passe HTTP',
+	'http_referer_is_nok' => 'Veuillez vérifier que vous ne modifiez pas votre HTTP REFERER.',
+	'http_referer_is_ok' => 'Le HTTP REFERER est connu et semble correspondre à votre serveur.',
+	'http_username' => 'Identifiant HTTP',
+	'img_with_lazyload' => 'Utiliser le mode “chargement différé” pour les images',
+	'import' => 'Importer',
+	'import_export' => 'Importer / exporter',
+	'informations' => 'Informations',
+	'install_not_deleted' => 'Quelque chose s’est mal passé, vous devez supprimer le fichier <em>%s</em> à la main.',
+	'installation_is_ok' => 'L’installation s’est bien passée.<br />La dernière étape va maintenant tenter de supprimer les fichiers ainsi que d’éventuelles copies de base de données créés durant le processus de mise à jour.<br />Vous pouvez choisir de sauter cette étape en supprimant <kbd>./data/do-install.txt</kbd> manuellement.',
+	'installation_step' => 'Installation — étape %d · FreshRSS',
+	'internal_problem_feed' => 'Le flux ne peut pas être ajouté. <a href="%s">Consulter les logs de FreshRSS</a> pour plus de détails.',
+	'invalid_login' => 'L’identifiant est invalide !',
+	'invalid_url' => 'L’url <em>%s</em> est invalide.',
+	'is_admin' => 'est administrateur',
+	'jan' => 'jan.',
+	'january' => 'janvier',
+	'javascript_for_shortcuts' => 'Le JavaScript doit être activé pour pouvoir profiter des raccourcis.',
+	'javascript_is_better' => 'FreshRSS est plus agréable à utiliser avec JavaScript activé',
+	'javascript_should_be_activated' => 'Le JavaScript doit être activé.',
+	'jul' => 'jui.',
+	'july' => 'juillet',
+	'jump_next' => 'sauter au prochain voisin non lu (flux ou catégorie)',
+	'jun' => 'juin',
+	'june' => 'juin',
+	'keep_history' => 'Nombre minimum d’articles à conserver',
+	'keep_logged_in' => 'Rester connecté <small>(1 mois)</small>',
+	'language' => 'Langue',
+	'language_defined' => 'La langue a bien été définie.',
+	'last' => 'Fin',
+	'last_3_month' => 'Depuis les trois derniers mois',
+	'last_6_month' => 'Depuis les six derniers mois',
+	'last_article' => 'Passer au dernier article',
+	'last_month' => 'Depuis le mois dernier',
+	'last_week' => 'Depuis la semaine dernière',
+	'last_year' => 'Depuis l’année dernière',
+	'lead_developer' => 'Développeur principal',
+	'license' => 'Licence',
+	'load_more' => 'Charger plus d’articles',
+	'log_is_ok' => 'Les droits sur le répertoire des logs sont bons',
+	'login' => 'Connexion',
+	'login_configuration' => 'Identification',
+	'login_persona_problem' => 'Problème de connexion à Persona ?',
+	'login_required' => 'Accès protégé par mot de passe :',
+	'login_with_persona' => 'Connexion avec Persona',
+	'logout' => 'Déconnexion',
+	'logs' => 'Logs',
+	'logs_empty' => 'Les logs sont vides.',
+	'main_stream' => 'Flux principal',
+	'mar' => 'mar.',
+	'march' => 'mars',
+	'mark_all_read' => 'Tout marquer comme lu',
+	'mark_cat_read' => 'Marquer la catégorie comme lue',
+	'mark_favorite' => 'Mettre en favori',
+	'mark_feed_read' => 'Marquer le flux comme lu',
+	'mark_read' => 'Marquer comme lu',
+	'may' => 'mai.',
+	'minz_is_nok' => 'Vous ne disposez pas de la librairie Minz. Vous devriez exécuter le script <em>build.sh</em> ou bien <a href="https://github.com/marienfressinaud/MINZ">la télécharger sur Github</a> et installer dans le répertoire <em>%s</em> le contenu de son répertoire <em>/lib</em>.',
+	'minz_is_ok' => 'Vous disposez du framework Minz',
+	'mon' => 'lun.',
+	'month' => 'mois',
+	'more_information' => 'Plus d’informations',
+	'n_entries_deleted' => '%d articles ont été supprimés.',
+	'n_feeds_actualized' => '%d flux ont été mis à jour.',
+	'new_article' => 'Il y a de nouveaux articles disponibles, cliquez pour rafraîchir la page.',
+	'new_category' => 'Nouvelle catégorie',
+	'newer_first' => 'Plus récents en premier',
+	'next' => 'Suivant',
+	'next_article' => 'Passer à l’article suivant',
+	'next_page' => 'Passer à la page suivante',
+	'next_step' => 'Passer à l’étape suivante',
+	'no' => 'Non',
+	'no_feed_actualized' => 'Aucun flux n’a pu être mis à jour.',
+	'no_feed_to_display' => 'Il n’y a aucun article à afficher.',
+	'no_feed_to_refresh' => 'Il n’y a aucun flux à actualiser…',
+	'no_query' => 'Vous n’avez pas encore créé de filtre.',
+	'no_query_filter' => 'Aucun filtre appliqué',
+	'no_rss_feed' => 'Aucun flux RSS',
+	'no_selected_feed' => 'Aucun flux sélectionné.',
+	'no_update' => 'Aucune mise à jour à appliquer',
+	'no_zip_extension' => 'L’extension Zip n’est pas présente sur votre serveur.',
+	'normal_view' => 'Vue normale',
+	'not_read' => '%d non lu',
+	'not_reads' => '%d non lus',
+	'not_yet_implemented' => 'Pas encore implémenté',
+	'nothing_to_load' => 'Fin des articles',
+	'notif_body_new_articles' => 'Il y a \\d nouveaux articles à lire sur FreshRSS.',
+	'notif_title_new_articles' => 'FreshRSS : nouveaux articles !',
+	'nov' => 'nov.',
+	'november' => 'novembre',
+	'number_articles' => '%d articles',
+	'number_divided_when_reader' => 'Divisé par 2 dans la vue de lecture.',
+	'number_feeds' => '%d flux',
+	'oct' => 'oct.',
+	'october' => 'octobre',
+	'ok' => 'Ok !',
+	'older_first' => 'Plus anciens en premier',
+	'oops' => 'Oups !',
+	'optimization_complete' => 'Optimisation terminée.',
+	'optimize_bdd' => 'Optimiser la base de données',
+	'optimize_todo_sometimes' => 'À faire de temps en temps pour réduire la taille de la BDD',
+	'or' => 'ou',
+	'page_not_found' => 'La page que vous cherchez n’existe pas !',
+	'password' => 'Mot de passe',
+	'password_api' => 'Mot de passe API<br /><small>(ex. : pour applis mobiles)</small>',
+	'password_form' => 'Mot de passe<br /><small>(pour connexion par formulaire)</small>',
+	'pcre_is_nok' => 'Il manque une librairie pour les expressions régulières (php-pcre)',
+	'pcre_is_ok' => 'Vous disposez du nécessaire pour les expressions régulières (PCRE)',
+	'pdo_is_nok' => 'Vous ne disposez pas de PDO ou d’un des drivers supportés (pdo_mysql, pdo_sqlite)',
+	'pdo_is_ok' => 'Vous disposez de PDO et d’au moins un des drivers supportés (pdo_mysql, pdo_sqlite)',
+	'persona_connection_email' => 'Adresse courriel de connexion<br /><small>(pour <a href="https://persona.org/" rel="external">Mozilla Persona</a>)</small>',
+	'persona_is_ok' => 'Les droits sur le répertoire de Mozilla Persona sont bons',
+	'php_is_nok' => 'Votre version de PHP est la %s mais FreshRSS requiert au moins la version %s',
+	'php_is_ok' => 'Votre version de PHP est la %s, qui est compatible avec FreshRSS',
+	'prefix' => 'Préfixe des tables',
+	'previous' => 'Précédent',
+	'previous_article' => 'Passer à l’article précédent',
+	'previous_page' => 'Passer à la page précédente',
+	'print' => 'Imprimer',
+	'project_website' => 'Site du projet',
+	'public' => 'Public',
+	'publication_date' => 'Date de publication',
+	'purge_completed' => 'Purge effectuée (%d articles supprimés).',
+	'purge_now' => 'Purger maintenant',
+	'queries' => 'Filtres utilisateurs',
+	'query_created' => 'Le filtre "%s" a bien été créé.',
+	'query_deprecated' => 'Ce filtre n’est plus valide. La catégorie ou le flux concerné a été supprimé.',
+	'query_filter' => 'Filtres appliqués :',
+	'query_get_all' => 'Afficher tous les articles',
+	'query_get_category' => 'Afficher la catégorie "%s"',
+	'query_get_favorite' => 'Afficher les articles favoris',
+	'query_get_feed' => 'Afficher le flux "%s"',
+	'query_number' => 'Filtre n°%d',
+	'query_order_asc' => 'Afficher les articles les plus anciens en premier',
+	'query_order_desc' => 'Afficher les articles les plus récents en premier',
+	'query_search' => 'Recherche de "%s"',
+	'query_state_0' => 'Afficher tous les articles',
+	'query_state_1' => 'Afficher les articles lus',
+	'query_state_2' => 'Afficher les articles non lus',
+	'query_state_3' => 'Afficher tous les articles',
+	'query_state_4' => 'Afficher les articles favoris',
+	'query_state_5' => 'Afficher les articles lus et favoris',
+	'query_state_6' => 'Afficher les articles non lus et favoris',
+	'query_state_7' => 'Afficher les articles favoris',
+	'query_state_8' => 'Afficher les articles non favoris',
+	'query_state_9' => 'Afficher les articles lus et non favoris',
+	'query_state_10' => 'Afficher les articles non lus et non favoris',
+	'query_state_11' => 'Afficher les articles non favoris',
+	'query_state_12' => 'Afficher tous les articles',
+	'query_state_13' => 'Afficher les articles lus',
+	'query_state_14' => 'Afficher les articles non lus',
+	'query_state_15' => 'Afficher tous les articles',
+	'random_string' => 'Chaîne aléatoire',
+	'reader_view' => 'Vue lecture',
+	'reading_configuration' => 'Lecture',
+	'reading_confirm' => 'Afficher une confirmation lors des actions “marquer tout comme lu”',
+	'refresh' => 'Actualisation',
+	'related_tags' => 'Tags associés',
+	'retrieve_truncated_feeds' => 'Permet de récupérer les flux tronqués (attention, demande plus de temps !)',
+	'rss_feed_management' => 'Gestion des flux RSS',
+	'rss_feeds_of' => 'Flux RSS de %s',
+	'rss_view' => 'Flux RSS',
+	'sat' => 'sam.',
+	'save' => 'Enregistrer',
+	'scroll' => 'au défilement de la page',
+	'search' => 'Rechercher des mots ou des #tags',
+	'search_short' => 'Rechercher',
+	'seconds_(0_means_no_timeout)' => 'secondes (0 signifie aucun timeout ) ',
+	'see_on_website' => 'Voir sur le site d’origine',
+	'see_website' => 'Voir le site',
+	'sep' => 'sep.',
+	'september' => 'septembre',
+	'shaarli' => 'Shaarli',
+	'share' => 'Partager',
+	'share_name' => 'Nom du partage à afficher',
+	'share_url' => 'URL du partage à utiliser',
+	'sharing' => 'Partage',
+	'sharing_management' => 'Gestion des options de partage',
+	'shift_for_all_read' => '+ <code>shift</code> pour marquer tous les articles comme lus',
+	'shortcuts' => 'Raccourcis',
+	'shortcuts_article_action' => 'Actions associées à l’article courant',
+	'shortcuts_navigation' => 'Navigation',
+	'shortcuts_navigation_help' => 'Avec le modificateur "Shift", les raccourcis de navigation s’appliquent aux flux.<br/>Avec le modificateur "Alt", les raccourcis de navigation s’appliquent aux catégories.',
+	'shortcuts_other_action' => 'Autres actions',
+	'shortcuts_updated' => 'Les raccourcis ont été mis à jour.',
+	'show_adaptive' => 'Adapter l’affichage',
+	'show_all_articles' => 'Afficher tous les articles',
+	'show_favorite' => 'Afficher les favoris',
+	'show_in_all_flux' => 'Afficher dans le flux principal',
+	'show_not_favorite' => 'Afficher tout sauf les favoris',
+	'show_not_reads' => 'Afficher les non lus',
+	'show_read' => 'Afficher les lus',
+	'sort_order' => 'Ordre de tri',
+	'starred_list' => 'Liste des articles favoris',
+	'stats' => 'Statistiques',
+	'stats_entry_count' => 'Nombre d’articles',
+	'stats_entry_per_category' => 'Articles par catégorie',
+	'stats_entry_per_day' => 'Nombre d’articles par jour (30 derniers jours)',
+	'stats_entry_per_day_of_week' => 'Par jour de la semaine (moyenne : %.2f messages)',
+	'stats_entry_per_hour' => 'Par heure (moyenne : %.2f messages)',
+	'stats_entry_per_month' => 'Par mois (moyenne : %.2f messages)',
+	'stats_entry_repartition' => 'Répartition des articles',
+	'stats_feed_per_category' => 'Flux par catégorie',
+	'stats_idle' => 'Flux inactifs',
+	'stats_main' => 'Statistiques principales',
+	'stats_no_idle' => 'Il n’y a aucun flux inactif !',
+	'stats_percent_of_total' => '%% du total',
+	'stats_repartition' => 'Répartition des articles',
+	'stats_top_feed' => 'Les dix plus gros flux',
+	'status_favorites' => 'favoris',
+	'status_read' => 'lus',
+	'status_total' => 'total',
+	'status_unread' => 'non lus',
+	'steps' => 'Étapes',
+	'sticky_post' => 'Aligner l’article en haut quand il est ouvert',
+	'submit' => 'Valider',
+	'subscription_management' => 'Gestion des abonnements',
+	'sun' => 'dim.',
+	'theme' => 'Thème',
+	'think_to_add' => 'Vous pouvez ajouter des flux.',
+	'this_is_the_end' => 'This is the end',
+	'thu' => 'jeu.',
+	'today' => 'Aujourd’hui',
+	'top_line' => 'Ligne du haut',
+	'truncate' => 'Supprimer tous les articles',
+	'ttl' => 'Ne pas automatiquement rafraîchir plus souvent que',
+	'tue' => 'mar.',
+	'twitter' => 'Twitter',
+	'unsafe_autologin' => 'Autoriser les connexions automatiques non-sûres au format : ',
+	'update' => 'Mise à jour',
+	'update_apply' => 'Appliquer la mise à jour',
+	'update_can_apply' => 'Une mise à jour est disponible.',
+	'update_check' => 'Vérifier les mises à jour',
+	'update_end' => 'La mise à jour est terminée, vous pouvez maintenant passer à l’étape finale.',
+	'update_finished' => 'La mise à jour est terminée !',
+	'update_last' => 'Dernière vérification : %s',
+	'update_long' => 'Ce processus peut prendre longtemps, selon la taille de votre base de données. Vous aurez peut-être à attendre que cette page dépasse son temps maximum d’exécution (~5 minutes) puis à la recharger.',
+	'update_problem' => 'La mise à jour a rencontré un problème : %s',
+	'update_server_not_found' => 'Le serveur de mise à jour n’a pas été trouvé. [%s]',
+	'update_start' => 'Lancer la mise à jour',
+	'update_system' => 'Système de mise à jour',
+	'updated' => 'Modifications enregistrées.',
+	'upon_reception' => 'dès la réception du nouvel article',
+	'user_created' => 'L’utilisateur %s a été créé.',
+	'user_deleted' => 'L’utilisateur %s a été supprimé.',
+	'user_filter' => 'Accéder aux filtres utilisateur',
+	'user_filter_help' => 'S’il n’y a qu’un filtre utilisateur, celui-ci est utilisé automatiquement. Sinon ils sont accessibles par leur numéro.',
+	'username' => 'Nom d’utilisateur',
+	'username_admin' => 'Nom d’utilisateur administrateur',
+	'users' => 'Utilisateurs',
+	'users_list' => 'Liste des utilisateurs',
+	'version' => 'Version',
+	'version_update' => 'Mise à jour',
+	'wallabag' => 'wallabag',
+	'website' => 'Site Internet',
+	'website_url' => 'URL du site',
+	'wed' => 'mer.',
+	'width_large' => 'Large',
+	'width_medium' => 'Moyenne',
+	'width_no_limit' => 'Pas de limite',
+	'width_thin' => 'Fine',
+	'yes' => 'Oui',
+	'yesterday' => 'Hier',
+	'your_diaspora_pod' => 'Votre pod Diaspora*',
+	'your_favorites' => 'Vos favoris',
+	'your_rss_feeds' => 'Vos flux RSS',
+	'your_shaarli' => 'Votre Shaarli',
+	'your_wallabag' => 'Votre wallabag',
+	'zip_error' => 'Une erreur est survenue durant l’import du fichier Zip.',
+);

+ 5 - 0
app/i18n/fr/index.php

@@ -0,0 +1,5 @@
+<?php
+
+return array(
+
+);

+ 5 - 0
app/i18n/fr/install.php

@@ -0,0 +1,5 @@
+<?php
+
+return array(
+
+);

+ 10 - 0
app/i18n/fr/sub.php

@@ -0,0 +1,10 @@
+<?php
+
+return array(
+	'categories' => array(
+		'over_max' => 'Vous avez atteint votre limite de catégories (%d)',
+	),
+	'feeds' => array(
+		'over_max' => 'Vous avez atteint votre limite de flux (%d)',
+	),
+);

+ 80 - 34
lib/Minz/Translate.php

@@ -5,71 +5,117 @@
  */
 
 /**
- * La classe Translate se charge de la traduction
- * Utilise les fichiers du répertoire /app/i18n/
+ * This class is used for the internationalization.
+ * It uses files in `./app/i18n/`
  */
 class Minz_Translate {
 	/**
-	 * $language est la langue à afficher
+	 * $lang_name is the name of the current language to use.
 	 */
-	private static $language;
-	
+	private static $lang_name;
+
+	/**
+	 * $lang_path is the pathname of i18n files (e.g. ./app/i18n/en/).
+	 */
+	private static $lang_path;
+
 	/**
-	 * $translates est le tableau de correspondance
-	 * 	$key => $traduction
+	 * $translates is a cache for i18n translation.
 	 */
 	private static $translates = array();
-	
+
 	/**
-	 * Inclus le fichier de langue qui va bien
-	 * l'enregistre dans $translates
+	 * Load $lang_name and $lang_path based on configuration and selected language.
 	 */
 	public static function init() {
 		$l = Minz_Configuration::language();
-		self::$language = Minz_Session::param('language', $l);
-		
-		$l_path = APP_PATH . '/i18n/' . self::$language . '.php';
-		
-		if (file_exists($l_path)) {
-			self::$translates = include($l_path);
-		}
+		self::$lang_name = Minz_Session::param('language', $l);
+		self::$lang_path = APP_PATH . '/i18n/' . self::$lang_name . '/';
 	}
-	
+
 	/**
-	 * Alias de init
+	 * Alias for init().
 	 */
 	public static function reset() {
 		self::init();
 	}
-	
+
 	/**
-	 * Traduit une clé en sa valeur du tableau $translates
-	 * @param $key la clé à traduire
-	 * @return la valeur correspondante à la clé
-	 *       > si non présente dans le tableau, on retourne la clé elle-même
+	 * Translate a key into its corresponding value based on selected language.
+	 * @param $key the key to translate.
+	 * @param additional parameters for variable keys.
+	 * @return the value corresponding to the key.
+	 *         If no value is found, return the key itself.
 	 */ 
 	public static function t($key) {
-		$translate = $key;
-		
-		if (isset(self::$translates[$key])) {
-			$translate = self::$translates[$key];
+		$group = explode('.', $key);
+
+		if (count($group) < 2) {
+			// Minz_Log::debug($key . ' is not in a valid format');
+			$top_level = 'gen';
+		} else {
+			$top_level = array_shift($group);
 		}
 
+		$filename = self::$lang_path . $top_level . '.php';
+
+		// Try to load the i18n file if it's not done yet.
+		if (!isset(self::$translates[$top_level])) {
+			if (!file_exists($filename)) {
+				Minz_Log::debug($top_level . ' is not a valid top level key');
+				return $key;
+			}
+
+			self::$translates[$top_level] = include($filename);
+		}
+
+		// Go through the i18n keys to get the correct translation value.
+		$translates = self::$translates[$top_level];
+		$size_group = count($group);
+		$level_processed = 0;
+		$translation_value = $key;
+		foreach ($group as $i18n_level) {
+			$level_processed++;
+			if (!isset($translates[$i18n_level])) {
+				Minz_Log::debug($key . ' is not a valid key');
+				return $key;
+			}
+
+			if ($level_processed < $size_group) {
+				$translates = $translates[$i18n_level];
+			} else {
+				$translation_value = $translates[$i18n_level];
+			}
+		}
+
+		if (is_array($translation_value)) {
+			if (isset($translation_value['_'])) {
+				$translation_value = $translation_value['_'];
+			} else {
+				Minz_Log::debug($key . ' is not a valid key');
+				return $key;
+			}
+		}
+
+		// Get the facultative arguments to replace i18n variables.
 		$args = func_get_args();
 		unset($args[0]);
-		
-		return vsprintf($translate, $args);
+
+		return vsprintf($translation_value, $args);
 	}
-	
+
 	/**
-	 * Retourne la langue utilisée actuellement
-	 * @return la langue
+	 * Return the current language.
 	 */
 	public static function language() {
-		return self::$language;
+		return self::$lang_name;
 	}
 }
 
+
+/**
+ * Alias for Minz_Translate::t()
+ */
 function _t($key) {
 	$args = func_get_args();
 	unset($args[0]);