diff options
43 files changed, 1880 insertions, 5 deletions
@@ -140,6 +140,14 @@ endif @$(PHP) ./cli/manipulate.translation.php -a ignore -k $(key) -l $(lang) @echo Key ignored. +.PHONY: i18n-ignore-unmodified-keys +i18n-ignore-unmodified-keys: ## Ignore all unmodified translation keys for the selected language +ifndef lang + $(error To ignore unmodified keys, you need to provide a language in the "lang" variable) +endif + @$(PHP) ./cli/manipulate.translation.php -a ignore_unmodified -l $(lang) + @echo Unmodified keys ignored. + .PHONY: i18n-key-exists i18n-key-exists: ## Check if a translation key exists ifndef key diff --git a/app/i18n/cz/gen.php b/app/i18n/cz/gen.php index 6d96d02d1..cdebafd21 100644 --- a/app/i18n/cz/gen.php +++ b/app/i18n/cz/gen.php @@ -128,6 +128,7 @@ return array( 'cz' => 'Čeština', // TODO - Translation 'de' => 'Deutsch', // TODO - Translation 'en' => 'English', // TODO - Translation + 'en-us' => 'English (United States)', 'es' => 'Español', // TODO - Translation 'fr' => 'Français', // TODO - Translation 'he' => 'עברית', // TODO - Translation diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php index edccdea5f..4de06df8a 100644 --- a/app/i18n/de/gen.php +++ b/app/i18n/de/gen.php @@ -128,6 +128,7 @@ return array( 'cz' => 'Čeština', // TODO - Translation 'de' => 'Deutsch', // TODO - Translation 'en' => 'English', // TODO - Translation + 'en-us' => 'English (United States)', 'es' => 'Español', // TODO - Translation 'fr' => 'Français', // TODO - Translation 'he' => 'עברית', // TODO - Translation diff --git a/app/i18n/en-us/admin.php b/app/i18n/en-us/admin.php new file mode 100644 index 000000000..00dc2726a --- /dev/null +++ b/app/i18n/en-us/admin.php @@ -0,0 +1,210 @@ +<?php + +return array( + 'auth' => array( + 'allow_anonymous' => 'Allow anonymous reading of the default user\'s articles (%s)', + 'allow_anonymous_refresh' => 'Allow anonymous refresh of the articles', + 'api_enabled' => 'Allow <abbr>API</abbr> access <small>(required for mobile apps)</small>', + 'form' => 'Web form (traditional, requires JavaScript)', + 'http' => 'HTTP (for advanced users with HTTPS)', + 'none' => 'None (dangerous)', + 'title' => 'Authentication', + 'title_reset' => 'Authentication reset', + 'token' => 'Authentication token', + 'token_help' => 'Allows access to RSS output of the default user without authentication:', + 'type' => 'Authentication method', + 'unsafe_autologin' => 'Allow unsafe automatic login using the format: ', + ), + 'check_install' => array( + 'cache' => array( + 'nok' => 'Check permissions on <em>./data/cache</em> directory. HTTP server must have write permission.', + 'ok' => 'Permissions on the cache directory are good.', + ), + 'categories' => array( + 'nok' => 'Category table is improperly configured.', + 'ok' => 'Category table is okay.', + ), + 'connection' => array( + 'nok' => 'Connection to the database cannot be established.', + 'ok' => 'Connection to the database is okay.', + ), + 'ctype' => array( + 'nok' => 'Cannot find a required library for character type checking (php-ctype).', + 'ok' => 'You have the required library for character type checking (ctype).', + ), + 'curl' => array( + 'nok' => 'Cannot find the cURL library (php-curl package).', + 'ok' => 'You have the cURL library.', + ), + 'data' => array( + 'nok' => 'Check permissions on <em>./data</em> directory. HTTP server must have write permission.', + 'ok' => 'Permissions on the data directory are good.', + ), + 'database' => 'Database installation', + 'dom' => array( + 'nok' => 'Cannot find 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 improperly configured.', + 'ok' => 'Entry table is okay.', + ), + 'favicons' => array( + 'nok' => 'Check permissions on <em>./data/favicons</em> directory. HTTP server must have write permission.', + 'ok' => 'Permissions on the favicons directory are good.', + ), + 'feeds' => array( + 'nok' => 'Feed table is improperly configured.', + 'ok' => 'Feed table is okay.', + ), + 'fileinfo' => array( + 'nok' => 'Cannot find the PHP fileinfo library (fileinfo package).', + 'ok' => 'You have the fileinfo library.', + ), + 'files' => 'File installation', + 'json' => array( + 'nok' => 'Cannot find JSON (php-json package).', + 'ok' => 'You have the JSON extension.', + ), + 'mbstring' => array( + 'nok' => 'Cannot find the recommended mbstring library for Unicode.', + 'ok' => 'You have the recommended mbstring library for Unicode.', + ), + 'minz' => array( + 'nok' => 'Cannot find the Minz framework.', + 'ok' => 'You have the Minz framework.', + ), + 'pcre' => array( + 'nok' => 'Cannot find a required library for regular expressions (php-pcre).', + 'ok' => 'You have the required library for regular expressions (PCRE).', + ), + 'pdo' => array( + 'nok' => 'Cannot find PDO or one of the supported drivers (pdo_mysql, pdo_sqlite, pdo_pgsql).', + 'ok' => 'You have PDO and at least one of the supported drivers (pdo_mysql, pdo_sqlite, pdo_pgsql).', + ), + 'php' => array( + '_' => 'PHP installation', + 'nok' => 'Your PHP version is %s but FreshRSS requires at least version %s.', + 'ok' => 'Your PHP version (%s) is compatible with FreshRSS.', + ), + 'tables' => array( + 'nok' => 'There are one or more missing tables in the database.', + 'ok' => 'The appropriate tables exist in the database.', + ), + 'title' => 'Installation check', + 'tokens' => array( + 'nok' => 'Check permissions on <em>./data/tokens</em> directory. HTTP server must have write permission', + 'ok' => 'Permissions on the tokens directory are good.', + ), + 'users' => array( + 'nok' => 'Check permissions on <em>./data/users</em> directory. HTTP server must have write permission', + 'ok' => 'Permissions on the users directory are good.', + ), + 'zip' => array( + 'nok' => 'Cannot find the ZIP extension (php-zip package).', + 'ok' => 'You have the ZIP extension.', + ), + ), + 'extensions' => array( + 'author' => 'Author', + 'community' => 'Available community extensions', + 'description' => 'Description', + 'disabled' => 'Disabled', + 'empty_list' => 'There are no installed extensions', + 'enabled' => 'Enabled', + 'latest' => 'Installed', + 'name' => 'Name', + 'no_configure_view' => 'This extension cannot be configured.', + 'system' => array( + '_' => 'System extensions', + 'no_rights' => 'System extension (you do not have the required permissions)', + ), + 'title' => 'Extensions', + 'update' => 'Update available', + 'user' => 'User extensions', + 'version' => 'Version', + ), + 'stats' => array( + '_' => 'Statistics', + 'all_feeds' => 'All feeds', + 'category' => 'Category', + 'entry_count' => 'Entry count', + 'entry_per_category' => 'Entries per category', + 'entry_per_day' => 'Entries per day (last 30 days)', + 'entry_per_day_of_week' => 'Per day of week (average: %.2f messages)', + 'entry_per_hour' => 'Per hour (average: %.2f messages)', + 'entry_per_month' => 'Per month (average: %.2f messages)', + 'entry_repartition' => 'Entries repartition', + 'feed' => 'Feed', + 'feed_per_category' => 'Feeds per category', + 'idle' => 'Idle feeds', + 'main' => 'Main statistics', + 'main_stream' => 'Main stream', + 'menu' => array( + 'idle' => 'Idle feeds', + 'main' => 'Main statistics', + 'repartition' => 'Articles repartition', + ), + 'no_idle' => 'There are no idle feeds!', + 'number_entries' => '%d articles', + 'percent_of_total' => '%% of total', + 'repartition' => 'Articles repartition', + 'status_favorites' => 'Favorites', + 'status_read' => 'Read', + 'status_total' => 'Total', + 'status_unread' => 'Unread', + 'title' => 'Statistics', + 'top_feed' => 'Top ten feeds', + ), + 'system' => array( + '_' => 'System configuration', + 'auto-update-url' => 'Auto-update server URL', + 'cookie-duration' => array( + 'help' => 'in seconds', + 'number' => 'Duration to keep logged in', + ), + 'force_email_validation' => 'Force email address validation', + 'instance-name' => 'Instance name', + 'max-categories' => 'Max number of categories per user', + 'max-feeds' => 'Max number of feeds per user', + 'registration' => array( + 'help' => '0 means that there is no account limit', + 'number' => 'Max number of accounts', + ), + ), + 'update' => array( + '_' => 'Update system', + 'apply' => 'Apply', + 'check' => 'Check for new updates', + 'current_version' => 'Your current version of FreshRSS is %s.', + 'last' => 'Last verification: %s', + 'none' => 'No update to apply', + 'title' => 'Update system', + ), + 'user' => array( + 'admin' => 'Administrator', + 'article_count' => 'Articles', + 'articles_and_size' => '%s articles (%s)', + 'back_to_manage' => '← Return to user list', + 'create' => 'Create new user', + 'database_size' => 'Database size', + 'delete_users' => 'Delete user', + 'email' => 'Email address', + 'enabled' => 'Enabled', + 'feed_count' => 'Feeds', + 'is_admin' => 'Is admin', + 'language' => 'Language', + 'last_user_activity' => 'Last user activity', + 'list' => 'User list', + 'number' => 'There is %d account created', + 'numbers' => 'There are %d accounts created', + 'password_form' => 'Password<br /><small>(for the Web-form login method)</small>', + 'password_format' => 'At least 7 characters', + 'selected' => 'Selected user', + 'title' => 'Manage users', + 'update_users' => 'Update user', + 'user_list' => 'List of users', + 'username' => 'Username', + 'users' => 'Users', + ), +); diff --git a/app/i18n/en-us/conf.php b/app/i18n/en-us/conf.php new file mode 100644 index 000000000..a5a5cb2f9 --- /dev/null +++ b/app/i18n/en-us/conf.php @@ -0,0 +1,202 @@ +<?php + +return array( + 'archiving' => array( + '_' => 'Archiving', + 'delete_after' => 'Remove articles after', + 'exception' => 'Purge exception', + 'help' => 'More options are available in the individual feed\'s settings', + 'keep_favourites' => 'Never delete favorites', + 'keep_labels' => 'Never delete labels', + 'keep_max' => 'Maximum number of articles to keep', + 'keep_min_by_feed' => 'Minimum number of articles to keep per feed', + 'keep_period' => 'Maximum age of articles to keep', + 'keep_unreads' => 'Never delete unread articles', + 'maintenance' => 'Maintenance', + 'optimize' => 'Optimize database', + 'optimize_help' => 'Run occasionally to reduce the size of the database', + 'policy' => 'Purge policy', + 'policy_warning' => 'If no purge policy is selected, every article will be kept.', + 'purge_now' => 'Purge now', + 'title' => 'Archiving', + 'ttl' => 'Do not automatically refresh more often than', + ), + 'display' => array( + '_' => 'Display', + 'icon' => array( + 'bottom_line' => 'Bottom line', + 'display_authors' => 'Authors', + 'entry' => 'Article icons', + 'publication_date' => 'Date of publication', + 'related_tags' => 'Article tags', + 'sharing' => 'Sharing', + 'top_line' => 'Top line', + ), + 'language' => 'Language', + 'notif_html5' => array( + 'seconds' => 'seconds (0 means no timeout)', + 'timeout' => 'HTML5 notification timeout', + ), + 'show_nav_buttons' => 'Show the navigation buttons', + 'theme' => 'Theme', + 'title' => 'Display', + 'width' => array( + 'content' => 'Content width', + 'large' => 'Wide', + 'medium' => 'Medium', + 'no_limit' => 'Full Width', + 'thin' => 'Narrow', + ), + ), + 'profile' => array( + '_' => 'Profile management', + 'api' => 'API management', + 'delete' => array( + '_' => 'Account deletion', + 'warn' => 'Your account and all related data will be deleted.', + ), + 'email' => 'Email address', + 'password_api' => 'API password<br /><small>(e.g., for mobile apps)</small>', + 'password_form' => 'Password<br /><small>(for the Web-form login method)</small>', + 'password_format' => 'At least 7 characters', + 'title' => 'Profile', + ), + 'query' => array( + '_' => 'User queries', + 'deprecated' => 'This query is no longer valid. The referenced category or feed has been deleted.', + 'display' => 'Display user query results', + 'filter' => 'Filter applied:', + 'get_all' => 'Display all articles', + 'get_category' => 'Display "%s" category', + 'get_favorite' => 'Display favorite articles', + 'get_feed' => 'Display "%s" feed', + 'no_filter' => 'No filter', + 'none' => 'You haven’t created any user queries yet.', + 'number' => 'Query n°%d', + 'order_asc' => 'Display oldest articles first', + 'order_desc' => 'Display newest articles first', + 'remove' => 'Remove user query', + 'search' => 'Search for "%s"', + 'state_0' => 'Display all articles', + 'state_1' => 'Display read articles', + 'state_2' => 'Display unread articles', + 'state_3' => 'Display all articles', + 'state_4' => 'Display favorite articles', + 'state_5' => 'Display read favorite articles', + 'state_6' => 'Display unread favorite articles', + 'state_7' => 'Display favorite articles', + 'state_8' => 'Display not favorite articles', + 'state_9' => 'Display read not favorite articles', + 'state_10' => 'Display unread not favorite articles', + 'state_11' => 'Display not favorite articles', + 'state_12' => 'Display all articles', + 'state_13' => 'Display read articles', + 'state_14' => 'Display unread articles', + 'state_15' => 'Display all articles', + 'title' => 'User queries', + ), + 'reading' => array( + '_' => 'Reading', + 'after_onread' => 'After “mark all as read”,', + 'always_show_favorites' => 'Show all articles in favorites by default', + 'articles_per_page' => 'Number of articles per page', + 'auto_load_more' => 'Load more articles at the bottom of the page', + 'auto_remove_article' => 'Hide articles after reading', + 'confirm_enabled' => 'Display a confirmation dialog on “mark all as read” actions', + 'display_articles_unfolded' => 'Show articles unfolded by default', + 'display_categories_unfolded' => 'Categories to unfold', + 'hide_read_feeds' => 'Hide categories & feeds with no unread articles (does not work with “Show all articles” configuration)', + 'img_with_lazyload' => 'Use "lazy load" mode to load pictures', + 'jump_next' => 'jump to next unread sibling (feed or category)', + 'mark_updated_article_unread' => 'Mark updated articles as unread', + 'number_divided_when_reader' => 'Divide by 2 in the reading view.', + 'read' => array( + 'article_open_on_website' => 'when the article is opened on its original website', + 'article_viewed' => 'when the article is viewed', + 'scroll' => 'while scrolling', + 'upon_reception' => 'upon receiving the article', + 'when' => 'Mark an article as read…', + ), + 'show' => array( + '_' => 'Articles to display', + 'active_category' => 'Active category', + 'adaptive' => 'Adjust showing', + 'all_articles' => 'Show all articles', + 'all_categories' => 'All categories', + 'no_category' => 'No category', + 'unread' => 'Show only unread', + ), + 'sides_close_article' => 'Clicking outside of article text area closes the article', + 'sort' => array( + '_' => 'Sort order', + 'newer_first' => 'Newest first', + 'older_first' => 'Oldest first', + ), + 'sticky_post' => 'Stick the article to the top when opened', + 'title' => 'Reading', + 'view' => array( + 'default' => 'Default view', + 'global' => 'Global view', + 'normal' => 'Normal view', + 'reader' => 'Reading view', + ), + ), + 'sharing' => array( + '_' => 'Sharing', + 'add' => 'Add a sharing method', + 'blogotext' => 'Blogotext', + 'diaspora' => 'Diaspora*', + 'email' => 'Email', + 'facebook' => 'Facebook', + 'more_information' => 'More information', + 'print' => 'Print', + 'remove' => 'Remove sharing method', + 'shaarli' => 'Shaarli', + 'share_name' => 'Share name to display', + 'share_url' => 'Share URL to use', + 'title' => 'Sharing', + 'twitter' => 'Twitter', + 'wallabag' => 'wallabag', + ), + 'shortcut' => array( + '_' => 'Shortcuts', + 'article_action' => 'Article actions', + 'auto_share' => 'Share', + 'auto_share_help' => 'If there is only one sharing mode, it is used. Otherwise, modes are accessible by their number.', + 'close_dropdown' => 'Close menus', + 'collapse_article' => 'Collapse', + 'first_article' => 'Open the first article', + 'focus_search' => 'Access search box', + 'global_view' => 'Switch to global view', + 'help' => 'Display documentation', + 'javascript' => 'JavaScript must be enabled in order to use shortcuts', + 'last_article' => 'Open the last article', + 'load_more' => 'Load more articles', + 'mark_favorite' => 'Toggle favorite', + 'mark_read' => 'Toggle read', + 'navigation' => 'Navigation', + 'navigation_help' => 'With the <kbd>⇧ Shift</kbd> modifier, navigation shortcuts apply on feeds.<br/>With the <kbd>Alt ⎇</kbd> modifier, navigation shortcuts apply on categories.', + 'navigation_no_mod_help' => 'The following navigation shortcuts do not support modifiers.', + 'next_article' => 'Open the next article', + 'normal_view' => 'Switch to normal view', + 'other_action' => 'Other actions', + 'previous_article' => 'Open the previous article', + 'reading_view' => 'Switch to reading view', + 'rss_view' => 'Open RSS view in a new tab', + 'see_on_website' => 'See on original website', + 'shift_for_all_read' => '+ <kbd>Alt ⎇</kbd> to mark previous articles as read<br />+ <kbd>⇧ Shift</kbd> to mark all articles as read', + 'skip_next_article' => 'Focus next without opening', + 'skip_previous_article' => 'Focus previous without opening', + 'title' => 'Shortcuts', + 'toggle_media' => 'Play/pause media', + 'user_filter' => 'Access user queries', + 'user_filter_help' => 'If there is only one user query, it is used. Otherwise, queries are accessible by their number.', + 'views' => 'Views', + ), + 'user' => array( + 'articles_and_size' => '%s articles (%s)', + 'current' => 'Current user', + 'is_admin' => 'is administrator', + 'users' => 'Users', + ), +); diff --git a/app/i18n/en-us/feedback.php b/app/i18n/en-us/feedback.php new file mode 100644 index 000000000..6a0efd902 --- /dev/null +++ b/app/i18n/en-us/feedback.php @@ -0,0 +1,134 @@ +<?php + +return array( + 'access' => array( + 'denied' => 'You don’t have permission to access this page', + 'not_found' => 'You are looking for a page that doesn’t exist', + ), + 'admin' => array( + 'optimization_complete' => 'Optimization complete', + ), + 'api' => array( + 'password' => array( + 'failed' => 'Your password cannot be modified', + 'updated' => 'Your password has been modified', + ), + ), + 'auth' => array( + 'form' => array( + 'not_set' => 'A problem occurred during authentication system configuration. Please try again later.', + 'set' => 'Form is now your default authentication system.', + ), + 'login' => array( + 'invalid' => 'Login is invalid', + 'success' => 'You are connected', + ), + 'logout' => array( + 'success' => 'You are disconnected', + ), + 'no_password_set' => 'Administrator password hasn’t been set. This feature isn’t available.', + ), + 'conf' => array( + 'error' => 'An error occurred while saving configuration', + 'query_created' => 'Query "%s" has been created.', + 'shortcuts_updated' => 'Shortcuts have been updated', + 'updated' => 'Configuration has been updated', + ), + 'extensions' => array( + 'already_enabled' => '%s is already enabled', + 'cannot_remove' => '%s cannot be removed', + 'disable' => array( + 'ko' => '%s cannot be disabled. <a href="%s">Check FreshRSS logs</a> for details.', + 'ok' => '%s is now disabled', + ), + 'enable' => array( + 'ko' => '%s cannot be enabled. <a href="%s">Check FreshRSS logs</a> for details.', + 'ok' => '%s is now enabled', + ), + 'no_access' => 'You have no access on %s', + 'not_enabled' => '%s is not enabled', + 'not_found' => '%s does not exist', + 'removed' => '%s removed', + ), + 'import_export' => array( + 'export_no_zip_extension' => 'The ZIP extension is not present on your server. Please try to export files one by one.', + 'feeds_imported' => 'Your feeds have been imported and will now be updated', + 'feeds_imported_with_errors' => 'Your feeds have been imported, but some errors occurred', + 'file_cannot_be_uploaded' => 'File cannot be uploaded!', + 'no_zip_extension' => 'The ZIP extension is not present on your server.', + 'zip_error' => 'An error occurred during ZIP import.', + ), + 'profile' => array( + 'error' => 'Your profile cannot be modified', + 'updated' => 'Your profile has been modified', + ), + 'sub' => array( + 'actualize' => 'Updating', + 'articles' => array( + 'marked_read' => 'The selected articles have been marked as read.', + 'marked_unread' => 'The articles have been marked as unread.', + ), + 'category' => array( + 'created' => 'Category %s has been created.', + 'deleted' => 'Category has been deleted.', + 'emptied' => 'Category has been emptied', + 'error' => 'Category cannot be updated', + 'name_exists' => 'Category name already exists.', + 'no_id' => 'You must specify the id of the category.', + 'no_name' => 'Category name cannot be empty.', + 'not_delete_default' => 'You cannot delete the default category!', + 'not_exist' => 'The category does not exist!', + 'over_max' => 'You have reached your limit of categories (%d)', + 'updated' => 'Category has been updated.', + ), + 'feed' => array( + 'actualized' => '<em>%s</em> has been updated', + 'actualizeds' => 'RSS feeds have been updated', + 'added' => 'RSS feed <em>%s</em> has been added', + 'already_subscribed' => 'You have already subscribed to <em>%s</em>', + 'cache_cleared' => '<em>%s</em> cache has been cleared', + 'deleted' => 'Feed has been deleted', + 'error' => 'Feed cannot be updated', + 'internal_problem' => 'The newsfeed could not be added. <a href="%s">Check FreshRSS logs</a> for details. You can try force adding by appending <code>#force_feed</code> to the URL.', + 'invalid_url' => 'URL <em>%s</em> is invalid', + 'n_actualized' => '%d feeds have been updated', + 'n_entries_deleted' => '%d articles have been deleted', + 'no_refresh' => 'There are no feeds to refresh', + 'not_added' => '<em>%s</em> could not be added', + 'not_found' => 'Feed cannot be found', + 'over_max' => 'You have reached your limit of feeds (%d)', + 'reloaded' => '<em>%s</em> has been reloaded', + 'selector_preview' => array( + 'http_error' => 'Failed to load website content.', + 'no_entries' => 'There are no articles in this feed. You need at least one article to create a preview.', + 'no_feed' => 'Internal error (feed cannot be found).', + 'no_result' => 'The selector didn\'t match anything. As a fallback the original feed text will be displayed instead.', + 'selector_empty' => 'The selector is empty. You need to define one to create a preview.', + ), + 'updated' => 'Feed has been updated', + ), + 'purge_completed' => 'Purge completed (%d articles deleted)', + ), + 'update' => array( + 'can_apply' => 'FreshRSS will now be updated to the <strong>version %s</strong>.', + 'error' => 'The update process has encountered an error: %s', + 'file_is_nok' => 'New <strong>version %s</strong> available, but check permissions on <em>%s</em> directory. HTTP server must have have write permission', + 'finished' => 'Update complete!', + 'none' => 'No update to apply', + 'server_not_found' => 'Update server cannot be found. [%s]', + ), + 'user' => array( + 'created' => array( + '_' => 'User %s has been created', + 'error' => 'User %s cannot be created', + ), + 'deleted' => array( + '_' => 'User %s has been deleted', + 'error' => 'User %s cannot be deleted', + ), + 'updated' => array( + '_' => 'User %s has been updated', + 'error' => 'User %s has not been updated', + ), + ), +); diff --git a/app/i18n/en-us/gen.php b/app/i18n/en-us/gen.php new file mode 100644 index 000000000..efc920d43 --- /dev/null +++ b/app/i18n/en-us/gen.php @@ -0,0 +1,215 @@ +<?php + +return array( + 'action' => array( + 'actualize' => 'Actualize', + 'add' => 'Add', + 'back' => '← Go back', + 'back_to_rss_feeds' => '← Go back to your RSS feeds', + 'cancel' => 'Cancel', + 'create' => 'Create', + 'demote' => 'Demote', + 'disable' => 'Disable', + 'empty' => 'Empty', + 'enable' => 'Enable', + 'export' => 'Export', + 'filter' => 'Filter', + 'import' => 'Import', + 'manage' => 'Manage', + 'mark_favorite' => 'Mark as favorite', + 'mark_read' => 'Mark as read', + 'promote' => 'Promote', + 'purge' => 'Purge', + 'remove' => 'Remove', + 'see_website' => 'See website', + 'submit' => 'Submit', + 'truncate' => 'Delete all articles', + 'update' => 'Update', + ), + 'auth' => array( + 'accept_tos' => 'I accept the <a href="%s">Terms of Service</a>.', + 'email' => 'Email address', + 'keep_logged_in' => 'Keep me logged in <small>(%s days)</small>', + 'login' => 'Login', + 'logout' => 'Logout', + 'password' => array( + '_' => 'Password', + 'format' => '<small>At least 7 characters</small>', + ), + 'registration' => array( + '_' => 'New account', + 'ask' => 'Create an account?', + 'title' => 'Account creation', + ), + 'reset' => 'Authentication reset', + 'username' => array( + '_' => 'Username', + 'admin' => 'Administrator username', + 'format' => '<small>Maximum 16 alphanumeric characters</small>', + ), + ), + 'date' => array( + 'Apr' => '\\A\\p\\r\\i\\l', + 'Aug' => '\\A\\u\\g\\u\\s\\t', + 'Dec' => '\\D\\e\\c\\e\\m\\b\\e\\r', + 'Feb' => '\\F\\e\\b\\r\\u\\a\\r\\y', + 'Jan' => '\\J\\a\\n\\u\\a\\r\\y', + 'Jul' => '\\J\\u\\l\\y', + 'Jun' => '\\J\\u\\n\\e', + 'Mar' => '\\M\\a\\r\\c\\h', + 'May' => '\\M\\a\\y', + 'Nov' => '\\N\\o\\v\\e\\m\\b\\e\\r', + 'Oct' => '\\O\\c\\t\\o\\b\\e\\r', + 'Sep' => '\\S\\e\\p\\t\\e\\m\\b\\e\\r', + 'apr' => 'Apr.', + 'april' => 'April', + 'aug' => 'Aug.', + 'august' => 'August', + 'before_yesterday' => 'Before yesterday', + 'dec' => 'Dec.', + 'december' => 'December', + 'feb' => 'Feb.', + 'february' => 'February', + 'format_date' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y', + 'format_date_hour' => '%s j\\<\\s\\u\\p\\>S\\<\\/\\s\\u\\p\\> Y \\a\\t H\\:i', + 'fri' => 'Fri', + 'jan' => 'Jan.', + 'january' => 'January', + 'jul' => 'July', + 'july' => 'July', + 'jun' => 'June', + 'june' => 'June', + 'last_2_year' => 'Last two years', + 'last_3_month' => 'Last three months', + 'last_3_year' => 'Last three years', + 'last_5_year' => 'Last five years', + 'last_6_month' => 'Last six months', + 'last_month' => 'Last month', + 'last_week' => 'Last week', + 'last_year' => 'Last year', + 'mar' => 'Mar.', + 'march' => 'March', + 'may' => 'May', + 'may_' => 'May', + 'mon' => 'Mon', + 'month' => 'months', + 'nov' => 'Nov.', + 'november' => 'November', + 'oct' => 'Oct.', + 'october' => 'October', + 'sat' => 'Sat', + 'sep' => 'Sept.', + 'september' => 'September', + 'sun' => 'Sun', + 'thu' => 'Thu', + 'today' => 'Today', + 'tue' => 'Tue', + 'wed' => 'Wed', + 'yesterday' => 'Yesterday', + ), + 'dir' => 'ltr', + 'freshrss' => array( + '_' => 'FreshRSS', + 'about' => 'About FreshRSS', + ), + 'js' => array( + 'category_empty' => 'Empty category', + 'confirm_action' => 'Are you sure you want to perform this action? It cannot be canceled!', + 'confirm_action_feed_cat' => 'Are you sure you want to perform this action? You will lose related favorites and user queries. It cannot be canceled!', + 'feedback' => array( + 'body_new_articles' => 'There are %%d new articles to read on FreshRSS.', + 'request_failed' => 'A request has failed, it may have been caused by internet connection problems.', + 'title_new_articles' => 'FreshRSS: new articles!', + ), + 'new_article' => 'There are new articles available, click to refresh the page.', + 'should_be_activated' => 'JavaScript must be enabled', + ), + 'lang' => array( + 'cz' => 'Čeština', + 'de' => 'Deutsch', + 'en' => 'English', + 'en-us' => 'English (United States)', + 'es' => 'Español', + 'fr' => 'Français', + 'he' => 'עברית', + 'it' => 'Italiano', + 'kr' => '한국어', + 'nl' => 'Nederlands', + 'oc' => 'Occitan', + 'pt-br' => 'Português (Brasil)', + 'ru' => 'Русский', + 'sk' => 'Slovenčina', + 'tr' => 'Türkçe', + 'zh-cn' => '简体中文', + ), + 'menu' => array( + 'about' => 'About', + 'admin' => 'Administration', + 'archiving' => 'Archiving', + 'authentication' => 'Authentication', + 'check_install' => 'Installation check', + 'configuration' => 'Configuration', + 'display' => 'Display', + 'extensions' => 'Extensions', + 'logs' => 'Logs', + 'queries' => 'User queries', + 'reading' => 'Reading', + 'search' => 'Search words or #tags', + 'sharing' => 'Sharing', + 'shortcuts' => 'Shortcuts', + 'stats' => 'Statistics', + 'system' => 'System configuration', + 'update' => 'Update', + 'user_management' => 'Manage users', + 'user_profile' => 'Profile', + ), + 'pagination' => array( + 'first' => 'First', + 'last' => 'Last', + 'load_more' => 'Load more articles', + 'mark_all_read' => 'Mark all as read', + 'next' => 'Next', + 'nothing_to_load' => 'There are no more articles', + 'previous' => 'Previous', + ), + 'period' => array( + 'days' => 'days', + 'hours' => 'hours', + 'months' => 'months', + 'weeks' => 'weeks', + 'years' => 'years', + ), + 'share' => array( + 'Known' => 'Known based sites', + 'blogotext' => 'Blogotext', + 'diaspora' => 'Diaspora*', + 'email' => 'Email', + 'facebook' => 'Facebook', + 'gnusocial' => 'GNU social', + 'jdh' => 'Journal du hacker', + 'lemmy' => 'Lemmy', + 'linkedin' => 'LinkedIn', + 'mastodon' => 'Mastodon', + 'movim' => 'Movim', + 'pinboard' => 'Pinboard', + 'pocket' => 'Pocket', + 'print' => 'Print', + 'shaarli' => 'Shaarli', + 'twitter' => 'Twitter', + 'wallabag' => 'wallabag v1', + 'wallabagv2' => 'wallabag v2', + ), + 'short' => array( + 'attention' => 'Warning!', + 'blank_to_disable' => 'Leave blank to disable', + 'by_author' => 'By:', + 'by_default' => 'By default', + 'damn' => 'Blast!', + 'default_category' => 'Uncategorized', + 'no' => 'No', + 'not_applicable' => 'Not available', + 'ok' => 'Okay!', + 'or' => 'or', + 'yes' => 'Yes', + ), +); diff --git a/app/i18n/en-us/index.php b/app/i18n/en-us/index.php new file mode 100644 index 000000000..250e5654d --- /dev/null +++ b/app/i18n/en-us/index.php @@ -0,0 +1,66 @@ +<?php + +return array( + 'about' => array( + '_' => 'About', + 'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>', + 'bugs_reports' => 'Bug reports', + '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://fonts.google.com/specimen/Open+Sans">Steve Matteson</a>. FreshRSS is based on <a href="https://github.com/marienfressinaud/MINZ">Minz</a>, a PHP framework.', + '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="https://github.com/LeedRSS/Leed">Leed</a>. It is light and easy to take in hand while being powerful and configurable tool.', + 'github' => '<a href="https://github.com/FreshRSS/FreshRSS/issues">on Github</a>', + 'license' => 'License', + 'project_website' => 'Project website', + 'title' => 'About', + 'version' => 'Version', + 'website' => 'Website', + ), + 'feed' => array( + 'add' => 'Please add some feeds.', + 'empty' => 'There are no articles to show.', + 'rss_of' => 'RSS feed of %s', + 'title' => 'Your RSS feeds', + 'title_fav' => 'Your favorites', + 'title_global' => 'Global view', + ), + 'log' => array( + '_' => 'Logs', + 'clear' => 'Clear the logs', + 'empty' => 'Log file is empty', + 'title' => 'Logs', + ), + 'menu' => array( + 'about' => 'About FreshRSS', + 'add_query' => 'Add a query', + 'before_one_day' => 'Before one day', + 'before_one_week' => 'Before one week', + 'favorites' => 'Favorites (%s)', + 'global_view' => 'Global view', + 'main_stream' => 'Main stream', + 'mark_all_read' => 'Mark all as read', + 'mark_cat_read' => 'Mark category as read', + 'mark_feed_read' => 'Mark feed as read', + 'mark_selection_unread' => 'Mark selection as unread', + 'newer_first' => 'Newer first', + 'non-starred' => 'Show non-favorites', + 'normal_view' => 'Normal view', + 'older_first' => 'Oldest first', + 'queries' => 'User queries', + 'read' => 'Show read', + 'reader_view' => 'Reading view', + 'rss_view' => 'RSS feed', + 'search_short' => 'Search', + 'starred' => 'Show favorites', + 'stats' => 'Statistics', + 'subscription' => 'Subscription management', + 'tags' => 'My labels', + 'unread' => 'Show unread', + ), + 'share' => 'Share', + 'tag' => array( + 'related' => 'Article tags', + ), + 'tos' => array( + 'title' => 'Terms of Service', + ), +); diff --git a/app/i18n/en-us/install.php b/app/i18n/en-us/install.php new file mode 100644 index 000000000..048774a1e --- /dev/null +++ b/app/i18n/en-us/install.php @@ -0,0 +1,123 @@ +<?php + +return array( + 'action' => array( + 'finish' => 'Complete installation', + 'fix_errors_before' => 'Please all fix errors before continuing to the next step.', + 'keep_install' => 'Keep previous configuration', + 'next_step' => 'Go to the next step', + 'reinstall' => 'Reinstall FreshRSS', + ), + 'auth' => array( + 'form' => 'Web form (traditional, requires JavaScript)', + 'http' => 'HTTP (for advanced users with HTTPS)', + 'none' => 'None (dangerous)', + 'password_form' => 'Password<br /><small>(for the Web-form login method)</small>', + 'password_format' => 'At least 7 characters', + 'type' => 'Authentication method', + ), + 'bdd' => array( + '_' => 'Database', + 'conf' => array( + '_' => 'Database configuration', + 'ko' => 'Verify your database configuration.', + 'ok' => 'Database configuration has been saved.', + ), + 'host' => 'Host', + 'password' => 'Database password', + 'prefix' => 'Table prefix', + 'type' => 'Type of database', + 'username' => 'Database username', + ), + 'check' => array( + '_' => 'Checks', + 'already_installed' => 'We have detected that FreshRSS is already installed!', + 'cache' => array( + 'nok' => 'Check permissions on the <em>./data/cache</em> directory. The HTTP server must have write permission.', + 'ok' => 'Permissions on the cache directory are good.', + ), + 'ctype' => array( + 'nok' => 'Cannot find the required library for character type checking (php-ctype).', + 'ok' => 'You have the required library for character type checking (ctype).', + ), + 'curl' => array( + 'nok' => 'Cannot find the cURL library (php-curl package).', + 'ok' => 'You have the cURL library.', + ), + 'data' => array( + 'nok' => 'Check permissions on the <em>./data</em> directory. The HTTP server must have write permission.', + 'ok' => 'Permissions on the data directory are good.', + ), + 'dom' => array( + 'nok' => 'Cannot find the required library to browse the DOM.', + 'ok' => 'You have the required library to browse the DOM.', + ), + 'favicons' => array( + 'nok' => 'Check permissions on the <em>./data/favicons</em> directory. The HTTP server must have write permission.', + 'ok' => 'Permissions on the favicons directory are good.', + ), + 'fileinfo' => array( + 'nok' => 'Cannot find the PHP fileinfo library (fileinfo package).', + 'ok' => 'You have the fileinfo library.', + ), + 'http_referer' => array( + 'nok' => 'Please check that you are not altering your HTTP REFERER.', + 'ok' => 'Your HTTP REFERER is known and corresponds to your server.', + ), + 'json' => array( + 'nok' => 'Cannot find the recommended library to parse JSON.', + 'ok' => 'You have the recommended library to parse JSON.', + ), + 'mbstring' => array( + 'nok' => 'Cannot find the recommended library mbstring for Unicode.', + 'ok' => 'You have the recommended library mbstring for Unicode.', + ), + 'minz' => array( + 'nok' => 'Cannot find the Minz framework.', + 'ok' => 'You have the Minz framework.', + ), + 'pcre' => array( + 'nok' => 'Cannot find the required library for regular expressions (php-pcre).', + 'ok' => 'You have the required library for regular expressions (PCRE).', + ), + 'pdo' => array( + 'nok' => 'Cannot find PDO or one of the supported drivers (pdo_mysql, pdo_sqlite, pdo_pgsql).', + 'ok' => 'You have PDO and at least one of the supported drivers (pdo_mysql, pdo_sqlite, pdo_pgsql).', + ), + 'php' => array( + 'nok' => 'Your PHP version is %s, but FreshRSS requires at least version %s.', + 'ok' => 'Your PHP version, %s, is compatible with FreshRSS.', + ), + 'users' => array( + 'nok' => 'Check permissions on the <em>./data/users</em> directory. The HTTP server must have write permissions', + 'ok' => 'Permissions on the users directory are good.', + ), + 'xml' => array( + 'nok' => 'Cannot find the required library to parse XML.', + 'ok' => 'You have the required library to parse XML.', + ), + ), + 'conf' => array( + '_' => 'General configuration', + 'ok' => 'General configuration has been saved.', + ), + 'congratulations' => 'Congratulations!', + 'default_user' => 'Username of the default user <small>(maximum 16 alphanumeric characters)</small>', + 'delete_articles_after' => 'Remove articles after', + 'fix_errors_before' => 'Please fix errors before continuing to the next step.', + 'javascript_is_better' => 'FreshRSS is more pleasant with JavaScript enabled', + 'js' => array( + 'confirm_reinstall' => 'You will lose your previous configuration by reinstalling FreshRSS. Are you sure you want to continue?', + ), + 'language' => array( + '_' => 'Language', + 'choose' => 'Choose a language for FreshRSS', + 'defined' => 'Language has been defined.', + ), + 'not_deleted' => 'Something went wrong; you must delete the file <em>%s</em> manually.', + 'ok' => 'The installation process was successful.', + 'step' => 'step %d', + 'steps' => 'Steps', + 'this_is_the_end' => 'This is the end', + 'title' => 'Installation · FreshRSS', +); diff --git a/app/i18n/en-us/sub.php b/app/i18n/en-us/sub.php new file mode 100644 index 000000000..08ec8bbbc --- /dev/null +++ b/app/i18n/en-us/sub.php @@ -0,0 +1,120 @@ +<?php + +return array( + 'add' => 'Feed and category creation has been moved <a href=\'%s\'>here</a>. It is also accessible from the menu on the left and from the ✚ icon available on the main page.', + 'api' => array( + 'documentation' => 'Copy the following URL to use it within an external tool.', + 'title' => 'API', + ), + 'bookmarklet' => array( + 'documentation' => 'Drag this button to your bookmarks toolbar or right-click it and choose "Bookmark This Link". Then click the "Subscribe" button in any page you want to subscribe to.', + 'label' => 'Subscribe', + 'title' => 'Bookmarklet', + ), + 'category' => array( + '_' => 'Category', + 'add' => 'Add a category', + 'archiving' => 'Archiving', + 'empty' => 'Empty category', + 'information' => 'Information', + 'position' => 'Display position', + 'position_help' => 'To control category sort order', + 'title' => 'Title', + ), + 'feed' => array( + 'add' => 'Add a RSS feed', + 'advanced' => 'Advanced', + 'archiving' => 'Archiving', + 'auth' => array( + 'configuration' => 'Login', + 'help' => 'Allows access to HTTP protected RSS feeds', + 'http' => 'HTTP Authentication', + 'password' => 'HTTP password', + 'username' => 'HTTP username', + ), + 'clear_cache' => 'Always clear cache', + 'css_help' => 'Retrieves truncated RSS feeds (caution, requires more time!)', + 'css_path' => 'Article CSS selector on original website', + 'description' => 'Description', + 'empty' => 'This feed is empty. Please verify that it is still maintained.', + 'error' => 'This feed has encountered a problem. Please verify that it is always reachable then update it.', + 'filteractions' => array( + '_' => 'Filter actions', + 'help' => 'Write one search filter per line.', + ), + 'information' => 'Information', + 'keep_min' => 'Minimum number of articles to keep', + 'maintenance' => array( + 'clear_cache' => 'Clear cache', + 'clear_cache_help' => 'Clear the cache for this feed.', + 'reload_articles' => 'Reload articles', + 'reload_articles_help' => 'Reload articles and fetch complete content if a selector is defined.', + 'title' => 'Maintenance', + ), + 'moved_category_deleted' => 'When you delete a category, its feeds are automatically classified under <em>%s</em>.', + 'mute' => 'mute', + 'no_selected' => 'No feed selected.', + 'number_entries' => '%d articles', + 'priority' => array( + '_' => 'Visibility', + 'archived' => 'Do not show (archived)', + 'main_stream' => 'Show in main stream', + 'normal' => 'Show in its category', + ), + 'selector_preview' => array( + 'show_raw' => 'Show source code', + 'show_rendered' => 'Show content', + ), + 'show' => array( + 'all' => 'Show all feeds', + 'error' => 'Show only feeds with errors', + ), + 'showing' => array( + 'error' => 'Showing only feeds with errors', + ), + 'ssl_verify' => 'Verify SSL security', + 'stats' => 'Statistics', + 'think_to_add' => 'You may add some feeds.', + 'timeout' => 'Timeout in seconds', + 'title' => 'Title', + 'title_add' => 'Add an RSS feed', + 'ttl' => 'Do not automatically refresh more often than', + 'url' => 'Feed URL', + 'validator' => 'Check the validity of the feed', + 'website' => 'Website URL', + 'websub' => 'Instant notification with WebSub', + ), + 'firefox' => array( + 'documentation' => 'Follow the steps described <a href="https://developer.mozilla.org/en-US/Firefox/Releases/2/Adding_feed_readers_to_Firefox#Adding_a_new_feed_reader_manually">here</a> to add FreshRSS to Firefox feed reader list.', + 'obsolete_63' => 'From version 63 and onwards, Firefox has removed the ability to add your own subscription services that are not standalone programs.', + 'title' => 'Firefox feed reader', + ), + 'import_export' => array( + 'export' => 'Export', + 'export_labelled' => 'Export your labeled articles', + 'export_opml' => 'Export list of feeds (OPML)', + 'export_starred' => 'Export your favorites', + 'feed_list' => 'List of %s articles', + 'file_to_import' => 'File to import<br />(OPML, JSON or ZIP)', + 'file_to_import_no_zip' => 'File to import<br />(OPML or JSON)', + 'import' => 'Import', + 'starred_list' => 'List of favorite articles', + 'title' => 'Import / export', + ), + 'menu' => array( + 'add' => 'Add a feed or category', + 'add_feed' => 'Add a feed', + 'bookmark' => 'Subscribe (FreshRSS bookmark)', + 'import_export' => 'Import / export', + 'subscription_management' => 'Subscription management', + 'subscription_tools' => 'Subscription tools', + ), + 'title' => array( + '_' => 'Subscription management', + 'add' => 'Add a feed or category', + 'add_category' => 'Add a category', + 'add_feed' => 'Add a feed', + 'feed_management' => 'RSS feeds management', + 'subscription_tools' => 'Subscription tools', + ), +); diff --git a/app/i18n/en-us/user.php b/app/i18n/en-us/user.php new file mode 100644 index 000000000..1189029c7 --- /dev/null +++ b/app/i18n/en-us/user.php @@ -0,0 +1,44 @@ +<?php + +return array( + 'email' => array( + 'feedback' => array( + 'invalid' => 'This email address is invalid.', + 'required' => 'An email address is required.', + ), + 'validation' => array( + 'change_email' => 'You can change your email address <a href="%s">on the profile page</a>.', + 'email_sent_to' => 'We sent you an email at <strong>%s</strong>, please follow its instructions to validate your address.', + 'feedback' => array( + 'email_failed' => 'We couldn’t send you an email because of a server configuration error.', + 'email_sent' => 'An email has been sent to your address.', + 'error' => 'This email address validation failed.', + 'ok' => 'This email address has been validated.', + 'unneccessary' => 'This email address was already validated.', + 'wrong_token' => 'This email address failed to be validated due to a wrong token.', + ), + 'need_to' => 'You need to validate your email address before being able to use %s.', + 'resend_email' => 'Resend the email', + 'title' => 'Email address validation', + ), + ), + 'mailer' => array( + 'email_need_validation' => array( + 'body' => 'You’ve just registered on %s, but you still need to validate your email address. For that, just follow the link:', + 'title' => 'You need to validate your account', + 'welcome' => 'Welcome %s,', + ), + ), + 'password' => array( + 'invalid' => 'The password is invalid.', + ), + 'tos' => array( + 'feedback' => array( + 'invalid' => 'You must accept the Terms of Service to be able to register.', + ), + ), + 'username' => array( + 'invalid' => 'This username is invalid.', + 'taken' => 'This username, %s, is taken.', + ), +); diff --git a/app/i18n/en/feedback.php b/app/i18n/en/feedback.php index 6d6796dda..5bd5469ca 100644 --- a/app/i18n/en/feedback.php +++ b/app/i18n/en/feedback.php @@ -16,7 +16,7 @@ return array( ), 'auth' => array( 'form' => array( - 'not_set' => 'A problem occured during authentication system configuration. Please retry later.', + 'not_set' => 'A problem occurred during authentication system configuration. Please retry later.', 'set' => 'Form is now your default authentication system.', ), 'login' => array( @@ -56,7 +56,7 @@ return array( 'feeds_imported_with_errors' => 'Your feeds have been imported, but some errors occurred', 'file_cannot_be_uploaded' => 'File cannot be uploaded!', 'no_zip_extension' => 'ZIP extension is not present on your server.', - 'zip_error' => 'An error occured during ZIP import.', + 'zip_error' => 'An error occurred during ZIP import.', ), 'profile' => array( 'error' => 'Your profile cannot be modified', diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php index 6f2101506..98c94c542 100644 --- a/app/i18n/en/gen.php +++ b/app/i18n/en/gen.php @@ -128,6 +128,7 @@ return array( 'cz' => 'Čeština', 'de' => 'Deutsch', 'en' => 'English', + 'en-us' => 'English (United States)', 'es' => 'Español', 'fr' => 'Français', 'he' => 'עברית', diff --git a/app/i18n/es/gen.php b/app/i18n/es/gen.php index 760f8e246..48299c932 100755 --- a/app/i18n/es/gen.php +++ b/app/i18n/es/gen.php @@ -128,6 +128,7 @@ return array( 'cz' => 'Čeština', 'de' => 'Deutsch', 'en' => 'English', + 'en-us' => 'English (United States)', 'es' => 'Español', 'fr' => 'Français', 'he' => 'עברית', diff --git a/app/i18n/fr/gen.php b/app/i18n/fr/gen.php index cb61b1c2f..1cdc0d6ff 100644 --- a/app/i18n/fr/gen.php +++ b/app/i18n/fr/gen.php @@ -128,6 +128,7 @@ return array( 'cz' => 'Čeština', 'de' => 'Deutsch', 'en' => 'English', + 'en-us' => 'English (United States)', 'es' => 'Español', 'fr' => 'Français', 'he' => 'עברית', diff --git a/app/i18n/he/gen.php b/app/i18n/he/gen.php index 862c00f64..7ecc64509 100644 --- a/app/i18n/he/gen.php +++ b/app/i18n/he/gen.php @@ -128,6 +128,7 @@ return array( 'cz' => 'Čeština', // TODO - Translation 'de' => 'Deutsch', // TODO - Translation 'en' => 'English', // TODO - Translation + 'en-us' => 'English (United States)', 'es' => 'Español', // TODO - Translation 'fr' => 'Français', // TODO - Translation 'he' => 'עברית', // TODO - Translation diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php index d23d70b1d..4d9f126de 100644 --- a/app/i18n/it/gen.php +++ b/app/i18n/it/gen.php @@ -128,6 +128,7 @@ return array( 'cz' => 'Čeština', // TODO - Translation 'de' => 'Deutsch', // TODO - Translation 'en' => 'English', // TODO - Translation + 'en-us' => 'English (United States)', 'es' => 'Español', // TODO - Translation 'fr' => 'Français', // TODO - Translation 'he' => 'עברית', // TODO - Translation diff --git a/app/i18n/kr/gen.php b/app/i18n/kr/gen.php index 1d245aa02..394f0bbd6 100644 --- a/app/i18n/kr/gen.php +++ b/app/i18n/kr/gen.php @@ -128,6 +128,7 @@ return array( 'cz' => 'Čeština', 'de' => 'Deutsch', 'en' => 'English', + 'en-us' => 'English (United States)', 'es' => 'Español', 'fr' => 'Français', 'he' => 'עברית', diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php index a63addbbb..ca15a8ec0 100644 --- a/app/i18n/nl/gen.php +++ b/app/i18n/nl/gen.php @@ -128,6 +128,7 @@ return array( 'cz' => 'Čeština', 'de' => 'Deutsch', 'en' => 'English', + 'en-us' => 'English (United States)', 'es' => 'Español', 'fr' => 'Français', 'he' => 'עברית', diff --git a/app/i18n/oc/gen.php b/app/i18n/oc/gen.php index 2c9255545..c140e629b 100644 --- a/app/i18n/oc/gen.php +++ b/app/i18n/oc/gen.php @@ -128,6 +128,7 @@ return array( 'cz' => 'Čeština', 'de' => 'Deutsch', 'en' => 'English', + 'en-us' => 'English (United States)', 'es' => 'Español', 'fr' => 'Français', 'he' => 'עברית', diff --git a/app/i18n/pt-br/gen.php b/app/i18n/pt-br/gen.php index 4504e735d..4b81fcd24 100644 --- a/app/i18n/pt-br/gen.php +++ b/app/i18n/pt-br/gen.php @@ -128,6 +128,7 @@ return array( 'cz' => 'Čeština', 'de' => 'Deutsch', 'en' => 'English', + 'en-us' => 'English (United States)', 'es' => 'Español', 'fr' => 'Français', 'he' => 'עברית', diff --git a/app/i18n/ru/feedback.php b/app/i18n/ru/feedback.php index dbd6a7f52..d0f0cc669 100644 --- a/app/i18n/ru/feedback.php +++ b/app/i18n/ru/feedback.php @@ -16,7 +16,7 @@ return array( ), 'auth' => array( 'form' => array( - 'not_set' => 'A problem occured during authentication system configuration. Please retry later.', // TODO - Translation + 'not_set' => 'A problem occurred during authentication system configuration. Please retry later.', // TODO - Translation 'set' => 'Form is now your default authentication system.', // TODO - Translation ), 'login' => array( @@ -56,7 +56,7 @@ return array( 'feeds_imported_with_errors' => 'Your feeds have been imported but some errors occurred', 'file_cannot_be_uploaded' => 'File cannot be uploaded!', // TODO - Translation 'no_zip_extension' => 'ZIP extension is not present on your server.', // TODO - Translation - 'zip_error' => 'An error occured during ZIP import.', // TODO - Translation + 'zip_error' => 'An error occurred during ZIP import.', // TODO - Translation ), 'profile' => array( 'error' => 'Your profile cannot be modified', // TODO - Translation diff --git a/app/i18n/ru/gen.php b/app/i18n/ru/gen.php index 74bc63e2c..b23eb4237 100644 --- a/app/i18n/ru/gen.php +++ b/app/i18n/ru/gen.php @@ -128,6 +128,7 @@ return array( 'cz' => 'Čeština', // TODO - Translation 'de' => 'Deutsch', // TODO - Translation 'en' => 'English', // TODO - Translation + 'en-us' => 'English (United States)', 'es' => 'Español', // TODO - Translation 'fr' => 'Français', // TODO - Translation 'he' => 'עברית', // TODO - Translation diff --git a/app/i18n/sk/gen.php b/app/i18n/sk/gen.php index 21cb8f3b8..30c5e8d80 100644 --- a/app/i18n/sk/gen.php +++ b/app/i18n/sk/gen.php @@ -128,6 +128,7 @@ return array( 'cz' => 'Čeština', 'de' => 'Deutsch', 'en' => 'English', + 'en-us' => 'English (United States)', 'es' => 'Español', 'fr' => 'Français', 'he' => 'עברית', diff --git a/app/i18n/tr/gen.php b/app/i18n/tr/gen.php index c4f9727d8..164d3f0f7 100644 --- a/app/i18n/tr/gen.php +++ b/app/i18n/tr/gen.php @@ -128,6 +128,7 @@ return array( 'cz' => 'Čeština', // TODO - Translation 'de' => 'Deutsch', // TODO - Translation 'en' => 'English', // TODO - Translation + 'en-us' => 'English (United States)', 'es' => 'Español', // TODO - Translation 'fr' => 'Français', // TODO - Translation 'he' => 'עברית', // TODO - Translation diff --git a/app/i18n/zh-cn/gen.php b/app/i18n/zh-cn/gen.php index 923e1f5bd..4bf73ce6f 100644 --- a/app/i18n/zh-cn/gen.php +++ b/app/i18n/zh-cn/gen.php @@ -128,6 +128,7 @@ return array( 'cz' => 'Čeština', 'de' => 'Deutsch', 'en' => 'English', + 'en-us' => 'English (United States)', 'es' => 'Español', 'fr' => 'Français', 'he' => 'עברית', diff --git a/cli/i18n/I18nData.php b/cli/i18n/I18nData.php index 5071c9be9..73a731245 100644 --- a/cli/i18n/I18nData.php +++ b/cli/i18n/I18nData.php @@ -229,6 +229,25 @@ class I18nData { $this->ignore[$language][] = $key; } + /** + *Ignore all unmodified keys from a language, or reverse it. + * + * @param string $language + * @param boolean $reverse + */ + public function ignore_unmodified($language, $reverse = false) { + $my_language = $this->getLanguage($language); + foreach ($this->getReferenceLanguage() as $file => $ref_language) { + foreach ($ref_language as $key => $ref_value) { + if (array_key_exists($key, $my_language[$file])) { + if($ref_value == $my_language[$file][$key]) { + $this->ignore($key, $language, $reverse); + } + } + } + } + } + public function getLanguage($language) { return $this->data[$language]; } diff --git a/cli/i18n/ignore/cz.php b/cli/i18n/ignore/cz.php index 1c987d8b3..4ce908b82 100644 --- a/cli/i18n/ignore/cz.php +++ b/cli/i18n/ignore/cz.php @@ -2,4 +2,5 @@ return array( 'gen.dir', + 'gen.lang.en-us', ); diff --git a/cli/i18n/ignore/de.php b/cli/i18n/ignore/de.php index 1c987d8b3..4ce908b82 100644 --- a/cli/i18n/ignore/de.php +++ b/cli/i18n/ignore/de.php @@ -2,4 +2,5 @@ return array( 'gen.dir', + 'gen.lang.en-us', ); diff --git a/cli/i18n/ignore/en-us.php b/cli/i18n/ignore/en-us.php new file mode 100644 index 000000000..bba4be829 --- /dev/null +++ b/cli/i18n/ignore/en-us.php @@ -0,0 +1,686 @@ +<?php + +return array( + 'admin.auth.allow_anonymous_refresh', + 'admin.auth.api_enabled', + 'admin.auth.form', + 'admin.auth.http', + 'admin.auth.none', + 'admin.auth.title', + 'admin.auth.title_reset', + 'admin.auth.token', + 'admin.auth.token_help', + 'admin.auth.type', + 'admin.auth.unsafe_autologin', + 'admin.check_install.categories.nok', + 'admin.check_install.connection.nok', + 'admin.check_install.ctype.nok', + 'admin.check_install.ctype.ok', + 'admin.check_install.curl.nok', + 'admin.check_install.curl.ok', + 'admin.check_install.database', + 'admin.check_install.dom.nok', + 'admin.check_install.dom.ok', + 'admin.check_install.entries.nok', + 'admin.check_install.feeds.nok', + 'admin.check_install.fileinfo.nok', + 'admin.check_install.fileinfo.ok', + 'admin.check_install.files', + 'admin.check_install.json.nok', + 'admin.check_install.minz.nok', + 'admin.check_install.minz.ok', + 'admin.check_install.pcre.nok', + 'admin.check_install.pcre.ok', + 'admin.check_install.pdo.nok', + 'admin.check_install.pdo.ok', + 'admin.check_install.php._', + 'admin.check_install.php.nok', + 'admin.check_install.tables.nok', + 'admin.check_install.tables.ok', + 'admin.extensions.author', + 'admin.extensions.community', + 'admin.extensions.description', + 'admin.extensions.disabled', + 'admin.extensions.empty_list', + 'admin.extensions.enabled', + 'admin.extensions.latest', + 'admin.extensions.name', + 'admin.extensions.no_configure_view', + 'admin.extensions.system._', + 'admin.extensions.title', + 'admin.extensions.update', + 'admin.extensions.user', + 'admin.extensions.version', + 'admin.stats._', + 'admin.stats.all_feeds', + 'admin.stats.category', + 'admin.stats.entry_count', + 'admin.stats.entry_per_category', + 'admin.stats.entry_per_day', + 'admin.stats.entry_per_day_of_week', + 'admin.stats.entry_per_hour', + 'admin.stats.entry_per_month', + 'admin.stats.entry_repartition', + 'admin.stats.feed', + 'admin.stats.feed_per_category', + 'admin.stats.idle', + 'admin.stats.main', + 'admin.stats.main_stream', + 'admin.stats.menu.idle', + 'admin.stats.menu.main', + 'admin.stats.menu.repartition', + 'admin.stats.number_entries', + 'admin.stats.percent_of_total', + 'admin.stats.repartition', + 'admin.stats.status_read', + 'admin.stats.status_total', + 'admin.stats.status_unread', + 'admin.stats.title', + 'admin.stats.top_feed', + 'admin.system._', + 'admin.system.auto-update-url', + 'admin.system.cookie-duration.help', + 'admin.system.cookie-duration.number', + 'admin.system.instance-name', + 'admin.system.registration.help', + 'admin.system.registration.number', + 'admin.update._', + 'admin.update.apply', + 'admin.update.check', + 'admin.update.current_version', + 'admin.update.last', + 'admin.update.none', + 'admin.update.title', + 'admin.user.admin', + 'admin.user.article_count', + 'admin.user.articles_and_size', + 'admin.user.back_to_manage', + 'admin.user.create', + 'admin.user.database_size', + 'admin.user.delete_users', + 'admin.user.email', + 'admin.user.enabled', + 'admin.user.feed_count', + 'admin.user.is_admin', + 'admin.user.language', + 'admin.user.last_user_activity', + 'admin.user.list', + 'admin.user.number', + 'admin.user.numbers', + 'admin.user.password_form', + 'admin.user.password_format', + 'admin.user.selected', + 'admin.user.title', + 'admin.user.update_users', + 'admin.user.user_list', + 'admin.user.username', + 'admin.user.users', + 'conf.archiving._', + 'conf.archiving.delete_after', + 'conf.archiving.exception', + 'conf.archiving.keep_labels', + 'conf.archiving.keep_max', + 'conf.archiving.keep_period', + 'conf.archiving.maintenance', + 'conf.archiving.policy', + 'conf.archiving.policy_warning', + 'conf.archiving.purge_now', + 'conf.archiving.title', + 'conf.archiving.ttl', + 'conf.display._', + 'conf.display.icon.bottom_line', + 'conf.display.icon.display_authors', + 'conf.display.icon.entry', + 'conf.display.icon.publication_date', + 'conf.display.icon.related_tags', + 'conf.display.icon.sharing', + 'conf.display.icon.top_line', + 'conf.display.language', + 'conf.display.notif_html5.seconds', + 'conf.display.notif_html5.timeout', + 'conf.display.show_nav_buttons', + 'conf.display.theme', + 'conf.display.title', + 'conf.display.width.content', + 'conf.display.width.medium', + 'conf.profile._', + 'conf.profile.api', + 'conf.profile.delete._', + 'conf.profile.delete.warn', + 'conf.profile.email', + 'conf.profile.password_api', + 'conf.profile.password_form', + 'conf.profile.password_format', + 'conf.profile.title', + 'conf.query._', + 'conf.query.deprecated', + 'conf.query.display', + 'conf.query.filter', + 'conf.query.get_all', + 'conf.query.get_category', + 'conf.query.get_feed', + 'conf.query.no_filter', + 'conf.query.none', + 'conf.query.number', + 'conf.query.order_asc', + 'conf.query.order_desc', + 'conf.query.remove', + 'conf.query.search', + 'conf.query.state_0', + 'conf.query.state_1', + 'conf.query.state_12', + 'conf.query.state_13', + 'conf.query.state_14', + 'conf.query.state_15', + 'conf.query.state_2', + 'conf.query.state_3', + 'conf.query.title', + 'conf.reading._', + 'conf.reading.after_onread', + 'conf.reading.always_show_favorites', + 'conf.reading.articles_per_page', + 'conf.reading.auto_remove_article', + 'conf.reading.confirm_enabled', + 'conf.reading.display_articles_unfolded', + 'conf.reading.display_categories_unfolded', + 'conf.reading.hide_read_feeds', + 'conf.reading.img_with_lazyload', + 'conf.reading.jump_next', + 'conf.reading.mark_updated_article_unread', + 'conf.reading.read.scroll', + 'conf.reading.read.upon_reception', + 'conf.reading.show._', + 'conf.reading.show.active_category', + 'conf.reading.show.adaptive', + 'conf.reading.show.all_articles', + 'conf.reading.show.all_categories', + 'conf.reading.show.no_category', + 'conf.reading.show.unread', + 'conf.reading.sides_close_article', + 'conf.reading.sort._', + 'conf.reading.sort.newer_first', + 'conf.reading.sort.older_first', + 'conf.reading.sticky_post', + 'conf.reading.title', + 'conf.reading.view.default', + 'conf.reading.view.global', + 'conf.reading.view.normal', + 'conf.reading.view.reader', + 'conf.sharing._', + 'conf.sharing.add', + 'conf.sharing.blogotext', + 'conf.sharing.diaspora', + 'conf.sharing.email', + 'conf.sharing.facebook', + 'conf.sharing.more_information', + 'conf.sharing.print', + 'conf.sharing.remove', + 'conf.sharing.shaarli', + 'conf.sharing.share_name', + 'conf.sharing.share_url', + 'conf.sharing.title', + 'conf.sharing.twitter', + 'conf.sharing.wallabag', + 'conf.shortcut._', + 'conf.shortcut.article_action', + 'conf.shortcut.auto_share', + 'conf.shortcut.auto_share_help', + 'conf.shortcut.close_dropdown', + 'conf.shortcut.collapse_article', + 'conf.shortcut.first_article', + 'conf.shortcut.focus_search', + 'conf.shortcut.global_view', + 'conf.shortcut.help', + 'conf.shortcut.javascript', + 'conf.shortcut.last_article', + 'conf.shortcut.load_more', + 'conf.shortcut.mark_read', + 'conf.shortcut.navigation', + 'conf.shortcut.navigation_help', + 'conf.shortcut.navigation_no_mod_help', + 'conf.shortcut.next_article', + 'conf.shortcut.normal_view', + 'conf.shortcut.other_action', + 'conf.shortcut.previous_article', + 'conf.shortcut.reading_view', + 'conf.shortcut.rss_view', + 'conf.shortcut.see_on_website', + 'conf.shortcut.shift_for_all_read', + 'conf.shortcut.skip_next_article', + 'conf.shortcut.skip_previous_article', + 'conf.shortcut.title', + 'conf.shortcut.toggle_media', + 'conf.shortcut.user_filter', + 'conf.shortcut.user_filter_help', + 'conf.shortcut.views', + 'conf.user.articles_and_size', + 'conf.user.current', + 'conf.user.is_admin', + 'conf.user.users', + 'feedback.access.denied', + 'feedback.admin.optimization_complete', + 'feedback.api.password.failed', + 'feedback.api.password.updated', + 'feedback.auth.form.set', + 'feedback.auth.login.invalid', + 'feedback.auth.login.success', + 'feedback.auth.logout.success', + 'feedback.auth.no_password_set', + 'feedback.conf.query_created', + 'feedback.conf.shortcuts_updated', + 'feedback.conf.updated', + 'feedback.extensions.already_enabled', + 'feedback.extensions.cannot_remove', + 'feedback.extensions.disable.ko', + 'feedback.extensions.disable.ok', + 'feedback.extensions.enable.ko', + 'feedback.extensions.enable.ok', + 'feedback.extensions.no_access', + 'feedback.extensions.not_enabled', + 'feedback.extensions.not_found', + 'feedback.extensions.removed', + 'feedback.import_export.feeds_imported', + 'feedback.import_export.feeds_imported_with_errors', + 'feedback.import_export.file_cannot_be_uploaded', + 'feedback.import_export.zip_error', + 'feedback.profile.error', + 'feedback.profile.updated', + 'feedback.sub.actualize', + 'feedback.sub.articles.marked_read', + 'feedback.sub.articles.marked_unread', + 'feedback.sub.category.created', + 'feedback.sub.category.deleted', + 'feedback.sub.category.emptied', + 'feedback.sub.category.error', + 'feedback.sub.category.name_exists', + 'feedback.sub.category.no_id', + 'feedback.sub.category.no_name', + 'feedback.sub.category.not_delete_default', + 'feedback.sub.category.not_exist', + 'feedback.sub.category.over_max', + 'feedback.sub.category.updated', + 'feedback.sub.feed.actualized', + 'feedback.sub.feed.actualizeds', + 'feedback.sub.feed.added', + 'feedback.sub.feed.already_subscribed', + 'feedback.sub.feed.cache_cleared', + 'feedback.sub.feed.deleted', + 'feedback.sub.feed.error', + 'feedback.sub.feed.internal_problem', + 'feedback.sub.feed.invalid_url', + 'feedback.sub.feed.n_actualized', + 'feedback.sub.feed.n_entries_deleted', + 'feedback.sub.feed.not_added', + 'feedback.sub.feed.not_found', + 'feedback.sub.feed.over_max', + 'feedback.sub.feed.reloaded', + 'feedback.sub.feed.selector_preview.http_error', + 'feedback.sub.feed.selector_preview.no_entries', + 'feedback.sub.feed.selector_preview.no_result', + 'feedback.sub.feed.selector_preview.selector_empty', + 'feedback.sub.feed.updated', + 'feedback.sub.purge_completed', + 'feedback.update.can_apply', + 'feedback.update.error', + 'feedback.update.none', + 'feedback.update.server_not_found', + 'feedback.user.created._', + 'feedback.user.created.error', + 'feedback.user.deleted._', + 'feedback.user.deleted.error', + 'feedback.user.updated._', + 'feedback.user.updated.error', + 'gen.action.actualize', + 'gen.action.add', + 'gen.action.back', + 'gen.action.back_to_rss_feeds', + 'gen.action.cancel', + 'gen.action.create', + 'gen.action.demote', + 'gen.action.disable', + 'gen.action.empty', + 'gen.action.enable', + 'gen.action.export', + 'gen.action.filter', + 'gen.action.import', + 'gen.action.manage', + 'gen.action.mark_read', + 'gen.action.promote', + 'gen.action.purge', + 'gen.action.remove', + 'gen.action.see_website', + 'gen.action.submit', + 'gen.action.truncate', + 'gen.action.update', + 'gen.auth.accept_tos', + 'gen.auth.email', + 'gen.auth.keep_logged_in', + 'gen.auth.login', + 'gen.auth.logout', + 'gen.auth.password._', + 'gen.auth.password.format', + 'gen.auth.registration._', + 'gen.auth.registration.ask', + 'gen.auth.registration.title', + 'gen.auth.reset', + 'gen.auth.username._', + 'gen.auth.username.admin', + 'gen.auth.username.format', + 'gen.date.Apr', + 'gen.date.Aug', + 'gen.date.Dec', + 'gen.date.Feb', + 'gen.date.Jan', + 'gen.date.Jul', + 'gen.date.Jun', + 'gen.date.Mar', + 'gen.date.May', + 'gen.date.Nov', + 'gen.date.Oct', + 'gen.date.Sep', + 'gen.date.apr', + 'gen.date.april', + 'gen.date.aug', + 'gen.date.august', + 'gen.date.before_yesterday', + 'gen.date.dec', + 'gen.date.december', + 'gen.date.feb', + 'gen.date.february', + 'gen.date.format_date', + 'gen.date.format_date_hour', + 'gen.date.fri', + 'gen.date.jan', + 'gen.date.january', + 'gen.date.jul', + 'gen.date.july', + 'gen.date.jun', + 'gen.date.june', + 'gen.date.last_2_year', + 'gen.date.last_3_month', + 'gen.date.last_3_year', + 'gen.date.last_5_year', + 'gen.date.last_6_month', + 'gen.date.last_month', + 'gen.date.last_week', + 'gen.date.last_year', + 'gen.date.mar', + 'gen.date.march', + 'gen.date.may', + 'gen.date.may_', + 'gen.date.mon', + 'gen.date.month', + 'gen.date.nov', + 'gen.date.november', + 'gen.date.oct', + 'gen.date.october', + 'gen.date.sat', + 'gen.date.sep', + 'gen.date.september', + 'gen.date.sun', + 'gen.date.thu', + 'gen.date.today', + 'gen.date.tue', + 'gen.date.wed', + 'gen.date.yesterday', + 'gen.dir', + 'gen.freshrss._', + 'gen.freshrss.about', + 'gen.js.category_empty', + 'gen.js.feedback.body_new_articles', + 'gen.js.feedback.title_new_articles', + 'gen.js.should_be_activated', + 'gen.lang.cz', + 'gen.lang.de', + 'gen.lang.en', + 'gen.lang.en-us', + 'gen.lang.es', + 'gen.lang.fr', + 'gen.lang.he', + 'gen.lang.it', + 'gen.lang.kr', + 'gen.lang.nl', + 'gen.lang.oc', + 'gen.lang.pt-br', + 'gen.lang.ru', + 'gen.lang.sk', + 'gen.lang.tr', + 'gen.lang.zh-cn', + 'gen.menu.about', + 'gen.menu.admin', + 'gen.menu.archiving', + 'gen.menu.authentication', + 'gen.menu.configuration', + 'gen.menu.display', + 'gen.menu.extensions', + 'gen.menu.logs', + 'gen.menu.queries', + 'gen.menu.reading', + 'gen.menu.search', + 'gen.menu.sharing', + 'gen.menu.shortcuts', + 'gen.menu.stats', + 'gen.menu.system', + 'gen.menu.update', + 'gen.menu.user_management', + 'gen.menu.user_profile', + 'gen.pagination.first', + 'gen.pagination.last', + 'gen.pagination.load_more', + 'gen.pagination.mark_all_read', + 'gen.pagination.next', + 'gen.pagination.nothing_to_load', + 'gen.pagination.previous', + 'gen.period.days', + 'gen.period.hours', + 'gen.period.months', + 'gen.period.weeks', + 'gen.period.years', + 'gen.share.Known', + 'gen.share.blogotext', + 'gen.share.diaspora', + 'gen.share.email', + 'gen.share.facebook', + 'gen.share.gnusocial', + 'gen.share.jdh', + 'gen.share.lemmy', + 'gen.share.linkedin', + 'gen.share.mastodon', + 'gen.share.movim', + 'gen.share.pinboard', + 'gen.share.pocket', + 'gen.share.print', + 'gen.share.shaarli', + 'gen.share.twitter', + 'gen.share.wallabag', + 'gen.share.wallabagv2', + 'gen.short.attention', + 'gen.short.blank_to_disable', + 'gen.short.by_author', + 'gen.short.by_default', + 'gen.short.damn', + 'gen.short.default_category', + 'gen.short.no', + 'gen.short.not_applicable', + 'gen.short.or', + 'gen.short.yes', + 'index.about._', + 'index.about.agpl3', + 'index.about.credits', + 'index.about.credits_content', + 'index.about.freshrss_description', + 'index.about.github', + 'index.about.license', + 'index.about.project_website', + 'index.about.title', + 'index.about.version', + 'index.about.website', + 'index.feed.rss_of', + 'index.feed.title', + 'index.feed.title_global', + 'index.log._', + 'index.log.clear', + 'index.log.empty', + 'index.log.title', + 'index.menu.about', + 'index.menu.add_query', + 'index.menu.before_one_day', + 'index.menu.before_one_week', + 'index.menu.global_view', + 'index.menu.main_stream', + 'index.menu.mark_all_read', + 'index.menu.mark_cat_read', + 'index.menu.mark_feed_read', + 'index.menu.mark_selection_unread', + 'index.menu.newer_first', + 'index.menu.normal_view', + 'index.menu.older_first', + 'index.menu.queries', + 'index.menu.read', + 'index.menu.reader_view', + 'index.menu.rss_view', + 'index.menu.search_short', + 'index.menu.stats', + 'index.menu.tags', + 'index.menu.unread', + 'index.share', + 'index.tag.related', + 'index.tos.title', + 'install.action.finish', + 'install.action.keep_install', + 'install.action.next_step', + 'install.action.reinstall', + 'install.auth.form', + 'install.auth.http', + 'install.auth.none', + 'install.auth.password_form', + 'install.auth.password_format', + 'install.auth.type', + 'install.bdd._', + 'install.bdd.conf._', + 'install.bdd.conf.ok', + 'install.bdd.host', + 'install.bdd.password', + 'install.bdd.prefix', + 'install.bdd.type', + 'install.bdd.username', + 'install.check._', + 'install.check.already_installed', + 'install.check.ctype.ok', + 'install.check.curl.nok', + 'install.check.curl.ok', + 'install.check.dom.ok', + 'install.check.fileinfo.nok', + 'install.check.fileinfo.ok', + 'install.check.http_referer.nok', + 'install.check.http_referer.ok', + 'install.check.mbstring.nok', + 'install.check.mbstring.ok', + 'install.check.minz.nok', + 'install.check.minz.ok', + 'install.check.pcre.ok', + 'install.check.pdo.nok', + 'install.check.pdo.ok', + 'install.check.xml.nok', + 'install.check.xml.ok', + 'install.conf._', + 'install.conf.ok', + 'install.congratulations', + 'install.default_user', + 'install.delete_articles_after', + 'install.javascript_is_better', + 'install.js.confirm_reinstall', + 'install.language._', + 'install.language.choose', + 'install.language.defined', + 'install.not_deleted', + 'install.ok', + 'install.step', + 'install.steps', + 'install.this_is_the_end', + 'install.title', + 'sub.add', + 'sub.api.documentation', + 'sub.api.title', + 'sub.bookmarklet.label', + 'sub.bookmarklet.title', + 'sub.category._', + 'sub.category.add', + 'sub.category.archiving', + 'sub.category.empty', + 'sub.category.information', + 'sub.category.position', + 'sub.category.position_help', + 'sub.category.title', + 'sub.feed.add', + 'sub.feed.advanced', + 'sub.feed.archiving', + 'sub.feed.auth.configuration', + 'sub.feed.auth.help', + 'sub.feed.auth.http', + 'sub.feed.auth.password', + 'sub.feed.auth.username', + 'sub.feed.clear_cache', + 'sub.feed.css_help', + 'sub.feed.css_path', + 'sub.feed.description', + 'sub.feed.empty', + 'sub.feed.error', + 'sub.feed.filteractions._', + 'sub.feed.filteractions.help', + 'sub.feed.information', + 'sub.feed.keep_min', + 'sub.feed.maintenance.clear_cache', + 'sub.feed.maintenance.clear_cache_help', + 'sub.feed.maintenance.reload_articles', + 'sub.feed.maintenance.reload_articles_help', + 'sub.feed.maintenance.title', + 'sub.feed.moved_category_deleted', + 'sub.feed.mute', + 'sub.feed.no_selected', + 'sub.feed.number_entries', + 'sub.feed.priority._', + 'sub.feed.priority.archived', + 'sub.feed.priority.main_stream', + 'sub.feed.priority.normal', + 'sub.feed.selector_preview.show_raw', + 'sub.feed.selector_preview.show_rendered', + 'sub.feed.show.all', + 'sub.feed.ssl_verify', + 'sub.feed.stats', + 'sub.feed.think_to_add', + 'sub.feed.timeout', + 'sub.feed.title', + 'sub.feed.ttl', + 'sub.feed.url', + 'sub.feed.validator', + 'sub.feed.website', + 'sub.feed.websub', + 'sub.firefox.documentation', + 'sub.firefox.obsolete_63', + 'sub.firefox.title', + 'sub.import_export.export', + 'sub.import_export.export_opml', + 'sub.import_export.feed_list', + 'sub.import_export.file_to_import', + 'sub.import_export.file_to_import_no_zip', + 'sub.import_export.import', + 'sub.import_export.title', + 'sub.menu.add_feed', + 'sub.menu.bookmark', + 'sub.menu.import_export', + 'sub.menu.subscription_tools', + 'sub.title.add_category', + 'sub.title.add_feed', + 'sub.title.feed_management', + 'sub.title.subscription_tools', + 'user.email.validation.change_email', + 'user.email.validation.feedback.email_sent', + 'user.email.validation.need_to', + 'user.email.validation.resend_email', + 'user.email.validation.title', + 'user.mailer.email_need_validation.title', + 'user.mailer.email_need_validation.welcome', + 'user.password.invalid', + 'user.tos.feedback.invalid', +); diff --git a/cli/i18n/ignore/es.php b/cli/i18n/ignore/es.php index f6684fd81..63f2ac2c4 100644 --- a/cli/i18n/ignore/es.php +++ b/cli/i18n/ignore/es.php @@ -5,6 +5,7 @@ return array( 'gen.lang.cz', 'gen.lang.de', 'gen.lang.en', + 'gen.lang.en-us', 'gen.lang.es', 'gen.lang.fr', 'gen.lang.he', diff --git a/cli/i18n/ignore/fr.php b/cli/i18n/ignore/fr.php index a2718b625..ec792d576 100644 --- a/cli/i18n/ignore/fr.php +++ b/cli/i18n/ignore/fr.php @@ -23,6 +23,7 @@ return array( 'gen.lang.cz', 'gen.lang.de', 'gen.lang.en', + 'gen.lang.en-us', 'gen.lang.es', 'gen.lang.fr', 'gen.lang.he', diff --git a/cli/i18n/ignore/he.php b/cli/i18n/ignore/he.php new file mode 100644 index 000000000..7c0351294 --- /dev/null +++ b/cli/i18n/ignore/he.php @@ -0,0 +1,5 @@ +<?php + +return array( + 'gen.lang.en-us', +); diff --git a/cli/i18n/ignore/it.php b/cli/i18n/ignore/it.php index 1c987d8b3..4ce908b82 100644 --- a/cli/i18n/ignore/it.php +++ b/cli/i18n/ignore/it.php @@ -2,4 +2,5 @@ return array( 'gen.dir', + 'gen.lang.en-us', ); diff --git a/cli/i18n/ignore/kr.php b/cli/i18n/ignore/kr.php index 184c94b98..fd563bd59 100644 --- a/cli/i18n/ignore/kr.php +++ b/cli/i18n/ignore/kr.php @@ -24,6 +24,7 @@ return array( 'gen.lang.cz', 'gen.lang.de', 'gen.lang.en', + 'gen.lang.en-us', 'gen.lang.es', 'gen.lang.fr', 'gen.lang.he', diff --git a/cli/i18n/ignore/nl.php b/cli/i18n/ignore/nl.php index 5a14f1317..40aec065b 100644 --- a/cli/i18n/ignore/nl.php +++ b/cli/i18n/ignore/nl.php @@ -21,6 +21,7 @@ return array( 'gen.lang.cz', 'gen.lang.de', 'gen.lang.en', + 'gen.lang.en-us', 'gen.lang.es', 'gen.lang.fr', 'gen.lang.he', diff --git a/cli/i18n/ignore/oc.php b/cli/i18n/ignore/oc.php index facb78702..71e89749b 100644 --- a/cli/i18n/ignore/oc.php +++ b/cli/i18n/ignore/oc.php @@ -23,6 +23,7 @@ return array( 'gen.lang.cz', 'gen.lang.de', 'gen.lang.en', + 'gen.lang.en-us', 'gen.lang.es', 'gen.lang.fr', 'gen.lang.he', diff --git a/cli/i18n/ignore/pt-br.php b/cli/i18n/ignore/pt-br.php index 7721d23b6..228b1ad78 100644 --- a/cli/i18n/ignore/pt-br.php +++ b/cli/i18n/ignore/pt-br.php @@ -17,6 +17,7 @@ return array( 'gen.lang.cz', 'gen.lang.de', 'gen.lang.en', + 'gen.lang.en-us', 'gen.lang.es', 'gen.lang.fr', 'gen.lang.he', diff --git a/cli/i18n/ignore/ru.php b/cli/i18n/ignore/ru.php index 1c987d8b3..4ce908b82 100644 --- a/cli/i18n/ignore/ru.php +++ b/cli/i18n/ignore/ru.php @@ -2,4 +2,5 @@ return array( 'gen.dir', + 'gen.lang.en-us', ); diff --git a/cli/i18n/ignore/sk.php b/cli/i18n/ignore/sk.php index 66940c758..5769f3f01 100644 --- a/cli/i18n/ignore/sk.php +++ b/cli/i18n/ignore/sk.php @@ -32,6 +32,7 @@ return array( 'gen.lang.cz', 'gen.lang.de', 'gen.lang.en', + 'gen.lang.en-us', 'gen.lang.es', 'gen.lang.fr', 'gen.lang.he', diff --git a/cli/i18n/ignore/tr.php b/cli/i18n/ignore/tr.php index 1c987d8b3..4ce908b82 100644 --- a/cli/i18n/ignore/tr.php +++ b/cli/i18n/ignore/tr.php @@ -2,4 +2,5 @@ return array( 'gen.dir', + 'gen.lang.en-us', ); diff --git a/cli/i18n/ignore/zh-cn.php b/cli/i18n/ignore/zh-cn.php index e687a3de9..fa6071106 100644 --- a/cli/i18n/ignore/zh-cn.php +++ b/cli/i18n/ignore/zh-cn.php @@ -13,6 +13,7 @@ return array( 'gen.lang.cz', 'gen.lang.de', 'gen.lang.en', + 'gen.lang.en-us', 'gen.lang.es', 'gen.lang.fr', 'gen.lang.he', diff --git a/cli/manipulate.translation.php b/cli/manipulate.translation.php index b5c37d147..5ccbaa664 100644 --- a/cli/manipulate.translation.php +++ b/cli/manipulate.translation.php @@ -66,6 +66,14 @@ switch ($options['a']) { exit; } break; + case 'ignore_unmodified' : + if (array_key_exists('l', $options)) { + $i18nData->ignore_unmodified($options['l'], array_key_exists('r', $options)); + } else { + error('You need to specify a valid set of options.'); + exit; + } + break; default : help(); exit; @@ -133,8 +141,15 @@ Exemple 6: ignore a key. It adds the key in the ignore file to mark it as transl Exemple 7: revert ignore a key. It removes the key from the ignore file. php %1\$s -a ignore -r -k my_key -l my_lang -Exemple 8: check if a key exist. +Exemple 8: ignore all unmodified keys. It adds all modified keys in the ignore file to mark it as translated. + php %1\$s -a ignore_unmodified -l my_lang + +Exemple 9: revert ignore of all unmodified keys. It removes the unmodified keys from the ignore file. Warning, this will also revert keys added individually. + php %1\$s -a ignore_unmodified -r -l my_lang + +Exemple 10: check if a key exist. php %1\$s -a exist -k my_key\n\n + HELP; $file = str_replace(__DIR__ . '/', '', __FILE__); echo sprintf($help, $file); |
